#1159 Cannot add edge (impact analysis not working)

SVN:trunk[3799]
This commit is contained in:
Romain Quetiez
2015-10-09 15:25:18 +00:00
parent 6dc190d369
commit bc4737ac23
2 changed files with 23 additions and 10 deletions

View File

@@ -145,10 +145,10 @@ class RelationRedundancyNode extends GraphNode
*/
class RelationEdge extends GraphEdge
{
public function __construct(SimpleGraph $oGraph, GraphNode $oSourceNode, GraphNode $oSinkNode)
public function __construct(SimpleGraph $oGraph, GraphNode $oSourceNode, GraphNode $oSinkNode, $bMustBeUnique = false)
{
$sId = $oSourceNode->GetId().'-to-'.$oSinkNode->GetId();
parent::__construct($oGraph, $sId, $oSourceNode, $oSinkNode);
parent::__construct($oGraph, $sId, $oSourceNode, $oSinkNode, $bMustBeUnique);
}
}
@@ -426,7 +426,7 @@ class RelationGraph extends SimpleGraph
if (!$oRedundancyNode)
{
// Direct link (otherwise handled by ComputeRedundancy)
$oEdge = new RelationEdge($this, $oSourceNode, $oSinkNode);
new RelationEdge($this, $oSourceNode, $oSinkNode);
}
// Recurse
$this->AddRelatedObjects($sRelCode, $bDown, $oRelatedNode, $iMaxDepth - 1, $bEnableRedundancy);

View File

@@ -234,22 +234,24 @@ class GraphEdge extends GraphElement
{
protected $oSourceNode;
protected $oSinkNode;
/**
* Create a new directed edge inside the given graph
* @param SimpleGraph $oGraph
* @param string $sId The unique identifier of this edge in the graph
* @param GraphNode $oSourceNode
* @param GraphNode $oSinkNode
* @param bool $bMustBeUnique
* @throws SimpleGraphException
*/
public function __construct(SimpleGraph $oGraph, $sId, GraphNode $oSourceNode, GraphNode $oSinkNode)
public function __construct(SimpleGraph $oGraph, $sId, GraphNode $oSourceNode, GraphNode $oSinkNode, $bMustBeUnique = false)
{
parent::__construct($sId);
$this->oSourceNode = $oSourceNode;
$this->oSinkNode = $oSinkNode;
$oGraph->_AddEdge($this);
$oGraph->_AddEdge($this, $bMustBeUnique);
}
/**
* Get the "source" node for this edge
* @return GraphNode
@@ -403,11 +405,22 @@ class SimpleGraph
/**
* INTERNAL USE ONLY
* @param GraphEdge $oEdge
* @param bool $bMustBeUnique
* @throws SimpleGraphException
*/
public function _AddEdge(GraphEdge $oEdge)
public function _AddEdge(GraphEdge $oEdge, $bMustBeUnique = false)
{
if (array_key_exists($oEdge->GetId(), $this->aEdges)) throw new SimpleGraphException('Cannot add edge (id='.$oEdge->GetId().') to the graph. An edge with the same id already exists in the graph.');
if (array_key_exists($oEdge->GetId(), $this->aEdges))
{
if ($bMustBeUnique)
{
throw new SimpleGraphException('Cannot add edge (id=' . $oEdge->GetId() . ') to the graph. An edge with the same id already exists in the graph.');
}
else
{
return;
}
}
$this->aEdges[$oEdge->GetId()] = $oEdge;
$oEdge->GetSourceNode()->_AddOutgoingEdge($oEdge);
@@ -692,7 +705,7 @@ EOF
}
/**
* Merge back to subgraphs into one
* Merge back two subgraphs into one
* @param SimpleGraph $oGraph
*/
public function Merge(SimpleGraph $oGraph)