chg: [ClusterRelationsGraphTool] Refacto and simplified code

pull/6120/head
mokaddem 2020-07-07 15:56:29 +02:00
parent 1c4b3b97e9
commit d348221792
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
3 changed files with 15 additions and 35 deletions

View File

@ -4830,13 +4830,12 @@ class EventsController extends AppController
} }
} }
} }
$rootNodeIds = $clusterIds;
$this->loadModel('GalaxyCluster'); $this->loadModel('GalaxyCluster');
$clusters = $this->GalaxyCluster->fetchGalaxyClusters($this->Auth->user(), array('conditions' => array('GalaxyCluster.id' => $clusterIds)), $full=true); $clusters = $this->GalaxyCluster->fetchGalaxyClusters($this->Auth->user(), array('conditions' => array('GalaxyCluster.id' => $clusterIds)), $full=true);
App::uses('ClusterRelationsGraphTool', 'Tools'); App::uses('ClusterRelationsGraphTool', 'Tools');
$grapher = new ClusterRelationsGraphTool(); $grapher = new ClusterRelationsGraphTool();
$grapher->construct($this->Auth->user(), $this->GalaxyCluster); $grapher->construct($this->Auth->user(), $this->GalaxyCluster);
$relations = $grapher->getNetwork($clusters, $rootNodeIds=$rootNodeIds, $keepNotLinkedClusters=true, $includeReferencingRelation=true); $relations = $grapher->getNetwork($clusters, $keepNotLinkedClusters=true, $includeReferencingRelation=true);
if ($this->_isRest()) { if ($this->_isRest()) {
return $this->RestResponse->viewData($relations, $this->response->type()); return $this->RestResponse->viewData($relations, $this->response->type());
} }

View File

@ -575,11 +575,10 @@ class GalaxiesController extends AppController
'recursive' => -1, 'recursive' => -1,
'conditions' => array('Galaxy.id' => $galaxyId) 'conditions' => array('Galaxy.id' => $galaxyId)
)); ));
$rootNodeIds = Hash::combine($clusters, '{n}.GalaxyCluster.id', '{n}.GalaxyCluster.id');
App::uses('ClusterRelationsGraphTool', 'Tools'); App::uses('ClusterRelationsGraphTool', 'Tools');
$grapher = new ClusterRelationsGraphTool(); $grapher = new ClusterRelationsGraphTool();
$grapher->construct($this->Auth->user(), $this->Galaxy->GalaxyCluster); $grapher->construct($this->Auth->user(), $this->Galaxy->GalaxyCluster);
$relations = $grapher->getNetwork($clusters, $rootNodeIds=$rootNodeIds); $relations = $grapher->getNetwork($clusters);
if ($this->_isRest()) { if ($this->_isRest()) {
return $this->RestResponse->viewData($relations, $this->response->type()); return $this->RestResponse->viewData($relations, $this->response->type());
} }

View File

@ -11,16 +11,24 @@
$this->user = $user; $this->user = $user;
return true; return true;
} }
public function getNetwork($clusters, $rootNodeIds=array(), $keepNotLinkedClusters=false, $includeReferencingRelation=false) /**
* getNetwork Returns the network for the provided clusters
*
* @param mixed $clusters
* @param bool $keepNotLinkedClusters If true, includes nodes not linked to others
* @param bool $includeReferencingRelation If true, fetch and includes nodes referencing the $clusters passed
* @return array The constructed network with nodes and links as keys
*/
public function getNetwork(array $clusters, $keepNotLinkedClusters=false, $includeReferencingRelation=false)
{ {
$rootNodeIds = Hash::extract($clusters, '{n}.GalaxyCluster.id');
$nodes = array(); $nodes = array();
$links = array(); $links = array();
foreach ($clusters as $cluster) { foreach ($clusters as $cluster) {
$this->lookup[$cluster['GalaxyCluster']['uuid']] = $cluster; $this->lookup[$cluster['GalaxyCluster']['uuid']] = $cluster;
} }
foreach ($clusters as $cluster) { foreach ($clusters as $cluster) {
$cluster = $this->attachOwnerInsideCluster($cluster);
if (!empty($cluster['GalaxyCluster']['GalaxyClusterRelation'])) { if (!empty($cluster['GalaxyCluster']['GalaxyClusterRelation'])) {
foreach ($cluster['GalaxyCluster']['GalaxyClusterRelation'] as $relation) { foreach ($cluster['GalaxyCluster']['GalaxyClusterRelation'] as $relation) {
$referencedClusterUuid = $relation['referenced_galaxy_cluster_uuid']; $referencedClusterUuid = $relation['referenced_galaxy_cluster_uuid'];
@ -30,14 +38,12 @@
'contain' => array('Org', 'Orgc', 'SharingGroup'), 'contain' => array('Org', 'Orgc', 'SharingGroup'),
)); ));
if (!empty($referencedCluster)) { if (!empty($referencedCluster)) {
$referencedCluster[0] = $this->attachOwnerInsideCluster($referencedCluster[0]);
$this->lookup[$referencedClusterUuid] = $referencedCluster[0]; $this->lookup[$referencedClusterUuid] = $referencedCluster[0];
} else { } else {
$this->lookup[$referencedClusterUuid] = array(); $this->lookup[$referencedClusterUuid] = array();
} }
} }
$referencedCluster = $this->lookup[$referencedClusterUuid]; $referencedCluster = $this->lookup[$referencedClusterUuid];
$referencedCluster = $this->attachOwnerInsideCluster($referencedCluster);
if (!empty($referencedCluster)) { if (!empty($referencedCluster)) {
$nodes[$referencedClusterUuid] = $referencedCluster['GalaxyCluster']; $nodes[$referencedClusterUuid] = $referencedCluster['GalaxyCluster'];
$nodes[$referencedClusterUuid]['group'] = $referencedCluster['GalaxyCluster']['type']; $nodes[$referencedClusterUuid]['group'] = $referencedCluster['GalaxyCluster']['type'];
@ -68,7 +74,8 @@
$referencingRelations = $this->GalaxyCluster->GalaxyClusterRelation->fetchRelations($this->user, array( $referencingRelations = $this->GalaxyCluster->GalaxyClusterRelation->fetchRelations($this->user, array(
'conditions' => array( 'conditions' => array(
'referenced_galaxy_cluster_uuid' => $cluster['GalaxyCluster']['uuid'] 'referenced_galaxy_cluster_uuid' => $cluster['GalaxyCluster']['uuid']
) ),
'contain' => array('Org', 'Orgc', 'SharingGroup'),
)); ));
if (!empty($referencingRelations)) { if (!empty($referencingRelations)) {
foreach ($referencingRelations as $relation) { foreach ($referencingRelations as $relation) {
@ -82,7 +89,6 @@
} }
$referencingCluster = $this->lookup[$referencingClusterUuid]; $referencingCluster = $this->lookup[$referencingClusterUuid];
if (!empty($referencingCluster)) { if (!empty($referencingCluster)) {
$referencingCluster = $this->attachOwnerInsideCluster($referencingCluster);
$nodes[$referencingClusterUuid] = $referencingCluster['GalaxyCluster']; $nodes[$referencingClusterUuid] = $referencingCluster['GalaxyCluster'];
$nodes[$referencingClusterUuid]['group'] = $referencingCluster['GalaxyCluster']['type']; $nodes[$referencingClusterUuid]['group'] = $referencingCluster['GalaxyCluster']['type'];
$links[] = array( $links[] = array(
@ -98,28 +104,4 @@
} }
return array('nodes' => array_values($nodes), 'links' => $links); return array('nodes' => array_values($nodes), 'links' => $links);
} }
private function attachOwnerInsideCluster($cluster)
{
if (!empty($cluster['GalaxyCluster']['Org']) && !isset($cluster['GalaxyCluster']['Org'])) {
$cluster['GalaxyCluster']['Org'] = array(
'id' => $cluster['Org']['id'],
'name' => $cluster['Org']['name'],
);
}
if (!empty($cluster['GalaxyCluster']['Orgc']) && !isset($cluster['GalaxyCluster']['Orgc'])) {
$cluster['GalaxyCluster']['Orgc'] = array(
'id' => $cluster['Orgc']['id'],
'name' => $cluster['Orgc']['name'],
);
}
if (!empty($cluster['GalaxyCluster']['SharingGroup']) && !isset($cluster['GalaxyCluster']['SharingGroup'])) {
$cluster['GalaxyCluster']['SharingGroup'] = array(
'id' => $cluster['SharingGroup']['id'],
'name' => $cluster['SharingGroup']['name'],
'description' => $cluster['SharingGroup']['description'],
);
}
return $cluster;
}
} }