Rework of the relation diagrams: added min_up data to the redundancy nodes

SVN:trunk[3546]
This commit is contained in:
Romain Quetiez
2015-04-15 14:00:05 +00:00
parent 26eb4c7083
commit 59ebc262a3

View File

@@ -96,9 +96,10 @@ class RelationObjectNode extends GraphNode
*/ */
class RelationRedundancyNode extends GraphNode class RelationRedundancyNode extends GraphNode
{ {
public function __construct($oGraph, $sId, $fThreshold) public function __construct($oGraph, $sId, $iMinUp, $fThreshold)
{ {
parent::__construct($oGraph, $sId); parent::__construct($oGraph, $sId);
$this->SetProperty('min_up', $iMinUp);
$this->SetProperty('threshold', $fThreshold); $this->SetProperty('threshold', $fThreshold);
$this->SetProperty('reach_count', 0); $this->SetProperty('reach_count', 0);
} }
@@ -355,8 +356,9 @@ class RelationGraph extends SimpleGraph
throw new Exception("Wrong query (upstream) for the relation $sRelCode/{$aQueryInfo['sDefinedInClass']}/{$aQueryInfo['sNeighbour']}: ".$e->getMessage()); throw new Exception("Wrong query (upstream) for the relation $sRelCode/{$aQueryInfo['sDefinedInClass']}/{$aQueryInfo['sNeighbour']}: ".$e->getMessage());
} }
$fThreshold = $this->GetRedundancyThreshold($sRelCode, $aQueryInfo, $oToNode, $iCount); $iMinUp = $this->GetRedundancyMinUp($sRelCode, $aQueryInfo, $oToNode, $iCount);
$oRedundancyNode = new RelationRedundancyNode($this, $sId, $fThreshold); $fThreshold = max(0, $iCount - $iMinUp);
$oRedundancyNode = new RelationRedundancyNode($this, $sId, $iMinUp, $fThreshold);
new RelationEdge($this, $oRedundancyNode, $oToNode); new RelationEdge($this, $oRedundancyNode, $oToNode);
while ($oUpperObj = $oObjSet->Fetch()) while ($oUpperObj = $oObjSet->Fetch())
@@ -398,20 +400,20 @@ class RelationGraph extends SimpleGraph
/** /**
* Helper to determine the redundancy threshold, given the count of objects upstream * Helper to determine the redundancy threshold, given the count of objects upstream
*/ */
protected function GetRedundancyThreshold($sRelCode, $aQueryInfo, $oToNode, $iUpstreamObjects) protected function GetRedundancyMinUp($sRelCode, $aQueryInfo, $oToNode, $iUpstreamObjects)
{ {
$fThreshold = $iUpstreamObjects; $iMinUp = 0;
if (isset($aQueryInfo['sRedundancyMinUpMode'])) if (isset($aQueryInfo['sRedundancyMinUpMode']))
{ {
if ($aQueryInfo['sRedundancyMinUpMode'] == 'fixed') if ($aQueryInfo['sRedundancyMinUpMode'] == 'fixed')
{ {
if ($aQueryInfo['sRedundancyMinUpType'] == 'count') if ($aQueryInfo['sRedundancyMinUpType'] == 'count')
{ {
$fThreshold = $iUpstreamObjects - $aQueryInfo['iRedundancyMinUpValue']; $iMinUp = $aQueryInfo['iRedundancyMinUpValue'];
} }
else // 'percent' assumed else // 'percent' assumed
{ {
$fThreshold = $iUpstreamObjects - ($iUpstreamObjects * $aQueryInfo['iRedundancyMinUpValue'] / 100); $iMinUp = $iUpstreamObjects * $aQueryInfo['iRedundancyMinUpValue'] / 100;
} }
} }
elseif ($aQueryInfo['sRedundancyMinUpMode'] == 'user') elseif ($aQueryInfo['sRedundancyMinUpMode'] == 'user')
@@ -419,15 +421,15 @@ class RelationGraph extends SimpleGraph
$oUserSettings = $this->FindRedundancyUserSettings($sRelCode, $aQueryInfo, $oToNode); $oUserSettings = $this->FindRedundancyUserSettings($sRelCode, $aQueryInfo, $oToNode);
if ($oUserSettings->Get('min_up_type') == 'count') if ($oUserSettings->Get('min_up_type') == 'count')
{ {
$fThreshold = $iUpstreamObjects - $oUserSettings->Get('min_up_count'); $iMinUp = $oUserSettings->Get('min_up_count');
} }
else else
{ {
$fThreshold = $iUpstreamObjects - ($iUpstreamObjects * $oUserSettings->Get('min_up_percent') / 100); $iMinUp = $iUpstreamObjects * $oUserSettings->Get('min_up_percent') / 100;
} }
} }
} }
return max(0, $fThreshold); return $iMinUp;
} }
/** /**