public function testSort() { $graph = new Structures_Graph(); $name1 = 'node1'; $node1 = new Structures_Graph_Node(); $node1->setData($name1); $graph->addNode($node1); $name11 = 'node11'; $node11 = new Structures_Graph_Node(); $node11->setData($name11); $graph->addNode($node11); $node1->connectTo($node11); $name12 = 'node12'; $node12 = new Structures_Graph_Node(); $node12->setData($name12); $graph->addNode($node12); $node1->connectTo($node12); $name121 = 'node121'; $node121 = new Structures_Graph_Node(); $node121->setData($name121); $graph->addNode($node121); $node12->connectTo($node121); $name2 = 'node2'; $node2 = new Structures_Graph_Node(); $node2->setData($name2); $graph->addNode($node2); $name21 = 'node21'; $node21 = new Structures_Graph_Node(); $node21->setData($name21); $graph->addNode($node21); $node2->connectTo($node21); $nodes = Structures_Graph_Manipulator_TopologicalSorter::sort($graph); $this->assertCount(2, $nodes[0]); $this->assertEquals('node1', $nodes[0][0]->getData()); $this->assertEquals('node2', $nodes[0][1]->getData()); $this->assertCount(3, $nodes[1]); $this->assertEquals('node11', $nodes[1][0]->getData()); $this->assertEquals('node12', $nodes[1][1]->getData()); $this->assertEquals('node21', $nodes[1][2]->getData()); $this->assertCount(1, $nodes[2]); $this->assertEquals('node121', $nodes[2][0]->getData()); }
function test_metadata_key_exists() { $this->_graph = new Structures_Graph(); $data = 1; $node = new Structures_Graph_Node(); $node->setMetadata('5', $data); $this->assertTrue($node->metadataKeyExists('5')); $this->assertFalse($node->metadataKeyExists('1')); }
/** * Retorna un grafo representando un conjunto de tablas y sus relaciones * @return Structures_Graph */ static function grafo_relaciones($tablas, $relaciones) { $grafo = new Structures_Graph(true); // Se construyen los nodos $obj = array(); $nodo = null; foreach ($tablas as $tabla) { unset($nodo); $nodo = new Structures_Graph_Node(); $proveedor = isset($tabla['objeto_proveedor']) ? $tabla['objeto_proveedor'] : $tabla['objeto']; $obj[$proveedor] = $nodo; $nodo->setData($tabla); $grafo->addNode($obj[$proveedor]); } //Se agregan los arcos foreach ($relaciones as $asoc) { $padre = $asoc['padre_objeto']; $hijo = $asoc['hijo_objeto']; $obj[$padre]->connectTo($obj[$hijo]); } return $grafo; }
function get_grafo() { $grafo = new Structures_Graph(true); $perfiles = toba_info_permisos::get_perfiles_funcionales($this->s__filtro['proyecto']); //Nodos $miembros = array(); foreach ($perfiles as $perfil) { $nodo = new Structures_Graph_Node(); $nodo->setData($perfil); $nodos[$perfil['usuario_grupo_acc']] =& $nodo; $grafo->addNode($nodo); unset($nodo); //Anulo el nodo, de otra manera sobre escribe todos con los valores del ultimo setData (weird) } //Relaciones foreach ($perfiles as $perfil) { //Necesita pasarle la conexion porque aun no termino la transacción $miembros = toba_info_permisos::get_perfiles_funcionales_miembros($perfil['proyecto'], $perfil['usuario_grupo_acc'], toba::db()); foreach ($miembros as $miembro) { $nodos[$perfil['usuario_grupo_acc']]->connectTo($nodos[$miembro['usuario_grupo_acc_pertenece']]); } } return $grafo; }