Virtlab:Řídící server/ParserTopology.php.inc

Z VirtlabWiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 10:16, 22. 10. 2007
Vav166 (Diskuse | příspěvky)

← Předchozí porovnání
Verze z 11:44, 22. 10. 2007
Vav166 (Diskuse | příspěvky)

Následující porovnání →
Řádka 1: Řádka 1:
-Tato třída pomáhá extrahovat data o logické topologii z XML souboru. Ten je naparsován třídou [[Virtlab:XmlParser.php.inc|virtlabXmlParser]].+Tato třída pomáhá extrahovat data o logické topologii z XML souboru. Ten je naparsován třídou [[Virtlab:Řídící server/XmlParser.php.inc|virtlabXmlParser]].
== Proměnné == == Proměnné ==
; parsed = array() : veškerá data získaná z XML souboru parserem virtlabXmlParser ; parsed = array() : veškerá data získaná z XML souboru parserem virtlabXmlParser
Řádka 11: Řádka 11:
:; $file : obsahuje cestu k XML souboru s [[Virtlab:Topology.dtd|popisem logické topologie]], nebo jsou v této proměnné uložena přímo XML data (o variantě rozhoduje parametr <tt>$is_file</tt>) :; $file : obsahuje cestu k XML souboru s [[Virtlab:Topology.dtd|popisem logické topologie]], nebo jsou v této proměnné uložena přímo XML data (o variantě rozhoduje parametr <tt>$is_file</tt>)
:; $is_file : udává jestli je atribut <tt>$file</tt> cesta k souboru, nebo přímo XML data :; $is_file : udává jestli je atribut <tt>$file</tt> cesta k souboru, nebo přímo XML data
-:; $cache_ed : nastavuje, jestli se maji data o linkách logické topologie uložit do proměnné, ze které si při potřebě načítají, nebo se vždy čtou z původního výstupu [[Virtlab:XmlParser.php.inc|třídy virtlabXmlParser]]+:; $cache_ed : nastavuje, jestli se maji data o linkách logické topologie uložit do proměnné, ze které si při potřebě načítají, nebo se vždy čtou z původního výstupu [[Virtlab:Řídící server/XmlParser.php.inc|třídy virtlabXmlParser]]
:; $cache_ve : jako u <tt>$cache_ed</tt>, ale pro jednotlivé vrcholy logické topologie :; $cache_ve : jako u <tt>$cache_ed</tt>, ale pro jednotlivé vrcholy logické topologie
; public function getEdges(): vrátí část původního pole, která popisuje jen linky virtuální topologie ; public function getEdges(): vrátí část původního pole, která popisuje jen linky virtuální topologie
Řádka 86: Řádka 86:
== Zdrojový kód == == Zdrojový kód ==
-<pre>+Aktuální zdrojový kód se nachází [https://vl-test.cs.vsb.cz/websvn/filedetails.php?repname=virtlab&path=%2FDISTR%2Fweb%2Fclass%2FvirtlabParserTopology.php.inc&rev=0&sc=0 zde].
-<?php+
- +
-class virtlabParserTopology {+
- private $parsed = array();+
- private $edges = array();+
- private $vertexes = array();+
- private $cached_edges = 0;+
- private $cached_vertexes = 0;+
- +
- function __construct($file, $is_file=0, $cache_ed=1, $cache_ve=1) {+
- $this->virtlabParserTopology($file, $is_file, $cache_ed, $cache_ve);+
- }//konstruktor+
- +
- private function virtlabParserTopology($file, $is_file=0, $cache_ed=1, $cache_ve=1) {+
- $parser = new virtlabXmlParser(1);+
- +
- if($is_file) $parser->parse($file);+
- else $parser->parse_data($file);+
- +
- $this->parsed = $parser->output;+
- unset($parser);+
- +
- if($cache_ed) {+
- $this->edges = $this->getEdges();+
- $this->cached_edges = 1;+
- }+
- +
- if($cache_ve) {+
- $this->vertexes = $this->getVertexes();+
- $this->cached_vertexes = 1;+
- }+
- }//function+
- +
- +
- public function getEdges() {+
- if(!$this->cached_edges) {+
- $temp = $this->parsed[0]["child"];+
- do {+
- $temp2 = array_pop($temp);+
- } while($temp2[name]=="VERTEX_DETAIL");+
- array_push($temp, $temp2);+
- return $temp;+
- }+
- else return $this->edges;+
- }//function+
- +
- +
- public function getEdgesCount() {+
- if(!$this->cached_edges)+
- { +
- $temp = $this->getEdges();+
- return count($temp);+
- }+
- else return count($this->edges);+
- }//function+
- +
- +
- public function getEdge($index) {+
- $temp = $this->getEdges();+
- return $temp[$index];+
- }//function +
- +
- +
- public function getEdgeName($index) {+
- $temp = $this->getEdge($index);+
- return $temp["attribs"]["NAME"];+
- }//function+
- +
- +
- public function getEdgeByName($name, &$index) {+
- for($i = $this->getEdgesCount(); $i>=0; $i--)+
- {+
- if($this->getEdgeName($i) == $name) {+
- $index = $i;+
- return $this->getEdge($i);+
- }+
- }+
- return NULL;+
- }//function+
- +
- +
- public function getEdgeTechnology($index) {+
- $temp = $this->getEdge($index);+
- return $temp["attribs"]["TECHNOLOGY"];+
- }//function+
- +
- +
- public function getEdgeEthertype($index) {+
- $temp = $this->getEdge($index);+
- if($temp["attribs"]["ETHER_TYPE"])+
- return $temp["attribs"]["ETHER_TYPE"];+
- else return NULL;+
- }//function+
- +
- +
- public function getEdgeMinbps($index) {+
- $temp = $this->getEdge($index);+
- if($temp["child"][2]["name"]=="MIN_BPS")+
- return $temp["child"][2]["content"];+
- else return NULL;+
- }//function+
- +
- +
- public function getEdgeVertexes($index) {+
- $temp = $this->getEdge($index);+
- $vertexes = array();+
- array_push($vertexes, $temp["child"][0]["attribs"]["NAME"]);+
- array_push($vertexes, $temp["child"][1]["attribs"]["NAME"]);+
- return $vertexes;+
- }//function+
- +
- +
- public function getEdgesByVertex($name) {+
- $result = array();+
- for($i = $this->getEdgesCount(); $i>=0; $i--) {+
- $vertexes = $this->getEdgeVertexes($i);+
- foreach($vertexes as $hodnota) {+
- if($hodnota == $name) {+
- //array_push($result, $this->getEdgeName($i));+
- $result[$i] = $this->getEdgeName($i);+
- break;+
- }//if+
- }//foreach+
- }//for+
- if(!$result) return NULL;+
- else return $result;+
- }//function+
- +
- +
- public function getEdgeFeatures($index) {+
- $temp = $this->getEdge($index);+
- $result = array();+
- foreach($temp["child"] as $hodnota) {+
- if($hodnota["name"] == "EDGE_FEATURE") {+
- array_push($result, $hodnota["content"]);+
- }+
- }+
- if(!$result[0]) return NULL;+
- else return $result;+
- }//function+
- +
- +
- public function getVertexes() {+
- if(!$this->cached_vertexes) {+
- $temp3 = array();+
- $temp = $this->parsed[0]["child"];+
- $temp2 = array_pop($temp);+
- while($temp2[name]=="VERTEX_DETAIL") {+
- array_push($temp3, $temp2);+
- $temp2 = array_pop($temp);+
- }+
- return $temp3;+
- }+
- else return $this->vertexes;+
- }//function+
- +
- +
- public function getVertexesCount() {+
- return(count($this->getVertexes()));+
- }//function+
- +
- +
- public function getVertex($index) {+
- $temp = $this->getVertexes();+
- return $temp[$index];+
- }//function+
- +
- +
- public function getVertexName($index) {+
- $temp = $this->getVertex($index);+
- return $temp["attribs"]["NAME"];+
- }//function+
- +
- +
- public function getVertexByName($name) {+
- $temp = $this->getVertexes();+
- foreach($temp as $hodnota) {+
- if($hodnota["attribs"]["NAME"] == $name)+
- return $hodnota;+
- }+
- return NULL;+
- }//function+
- +
- +
- public function getVertexPlatforms($name, $variant=1) {+
- $temp = $this->getVertexByName($name);+
- if($temp["child"][0]["name"] == "POSS_PLATFORMS") {+
- if($variant) {+
- $temp2 = array();+
- foreach($temp["child"][0]["child"] as $hodnota) {+
- array_push($temp2, $hodnota["content"]);+
- }//foreach+
- return $temp2;+
- }//if-variant+
- else return $temp["child"][0]["child"];+
- }+
- else return NULL;+
- }//function+
- +
- +
- public function getVertexOS($name, $variant=1) {+
- $temp = $this->getVertexByName($name);+
- if($temp["child"]) {+
- foreach($temp["child"] as $hodnota) {+
- if($hodnota["name"] == "OS") {+
- $temp2 = $hodnota;+
- break;+
- }//if+
- }//foreach+
- if(!isset($temp2)) return NULL;+
- if($variant) {+
- //$temp3["major"] = $temp2["child"][0]["content"];+
- //if($temp2["child"][1]) $temp3["minor"] = $temp2["child"][1]["content"];+
- //if($temp2["child"][2]) $temp3["other"] = $temp2["child"][2]["content"];+
- //return $temp3;+
- return $temp2["content"];+
- }+
- else return $temp2;+
- }//if+
- else return NULL;+
- }//function+
- +
- +
- public function getVertexOSRelation($name) {+
- $temp = $this->getVertexOS($name,0);+
- if(!is_null($temp)) {+
- return $temp["attribs"]["RELATION"];+
- }+
- else return NULL;+
- }//function+
- +
- +
- public function getVertexType($name) {+
- $temp = $this->getVertexByName($name);+
- if(!is_null($temp)) {+
- return $temp["attribs"]["TYPE"];+
- }+
- else return NULL;+
- }//function+
- +
- +
- public function getVertexesByType($type) {+
- $temp = $this->getVertexes();+
- $temp2 = array();+
- foreach($temp as $hodnota) {+
- if($hodnota["attribs"]["TYPE"] == $type)+
- array_push($temp2, $hodnota["attribs"]["NAME"]);+
- }+
- if(!$temp2[0]) return NULL;+
- return Unique($temp2);+
- }//function+
- +
- +
- public function getVertexesTypes() {+
- $temp = $this->getVertexes();+
- $temp2 = array();+
- foreach($temp as $hodnota) {+
- array_push($temp2, $hodnota["attribs"]["TYPE"]);+
- }+
- if(!$temp2[0]) return NULL;+
- return Unique($temp2);+
- }//function+
- +
- +
- public function getVertexFeatures($name) {+
- $temp = $this->getVertexByName($name);+
- if(!is_null($temp) && isset($temp["child"])) {+
- $temp2 = array();+
- foreach($temp["child"] as $hodnota) {+
- if($hodnota["name"]=="VERTEX_FEATURE")+
- array_push($temp2, $hodnota["content"]);+
- }//foreach+
- if(!$temp2[0]) return NULL;+
- return $temp2;+
- }//if+
- else return NULL;+
- }//function+
- +
- +
- public function getVertexesFeatures() {+
- $feat = array();+
- for($i = $this->getVertexesCount() - 1; $i >= 0; $i--) {+
- $jmeno = $this->getVertexName($i);+
- $temp = $this->getVertexFeatures($jmeno);+
- if(is_array($temp))+
- foreach($temp as $value)+
- array_push($feat, $value);+
- }//for+
- return $feat;+
- }//function+
- +
- +
- public function getEdgesFeatures() {+
- $feat = array();+
- for($i = $this->getEdgesCount() - 1; $i >= 0; $i--) {+
- $temp = $this->getEdgeFeatures($i);+
- if(is_array($temp))+
- foreach($temp as $value)+
- array_push($feat, $value);+
- }//for+
- return $feat;+
- }//function+
- +
- public function getEdgesList($variant=1) {+
- $temp = array();+
- for($i = $this->getEdgesCount() - 1; $i >= 0; $i--) {+
- if($variant) $temp[$i] = $this->getEdgeName($i);+
- else $temp[$this->getEdgeName($i)] = $i;+
- }//for+
- return $temp;+
- +
- }//function+
- +
- public function getVertexesList($variant=1) {+
- $temp = array();+
- for($i = $this->getVertexesCount() - 1; $i >= 0; $i--) {+
- if($variant) $temp[$i] = $this->getVertexName($i);+
- else $temp[$this->getVertexName($i)] = $i;+
- }//for+
- return $temp;+
- }//function+
-}//class+
-?>+
-</pre>+
- +
 +[[Kategorie:Komponenty virtlabu]]
 +[[Kategorie:Server]]
 +[[Kategorie:Řídící server]]
[[Kategorie:PHP]] [[Kategorie:PHP]]
[[Kategorie:Třída]] [[Kategorie:Třída]]
 +[[Kategorie:UNCOMPLETE]]

Verze z 11:44, 22. 10. 2007

Tato třída pomáhá extrahovat data o logické topologii z XML souboru. Ten je naparsován třídou virtlabXmlParser.

Obsah

Proměnné

parsed = array() 
veškerá data získaná z XML souboru parserem virtlabXmlParser
cached_edges = 0 
určuje, jestli se mají data o spojích cacheovat v proměnné $this->edges
cached_vertexes = 0 
určuje, jestli se mají data o vrcholech logické topologie cacheovat v proměnné $this->vertexes
edges = array() 
cache dat o linkách logické topologie
vertexes = array() 
cache dat o vrcholech logické topologie

Metody

function __construct($file, $is_file=0, $cache_ed=1, $cache_ve=1) 
konstruktor třídy v PHP5. Jednotlivé parametry mají tento význam:
$file 
obsahuje cestu k XML souboru s popisem logické topologie, nebo jsou v této proměnné uložena přímo XML data (o variantě rozhoduje parametr $is_file)
$is_file 
udává jestli je atribut $file cesta k souboru, nebo přímo XML data
$cache_ed 
nastavuje, jestli se maji data o linkách logické topologie uložit do proměnné, ze které si při potřebě načítají, nebo se vždy čtou z původního výstupu třídy virtlabXmlParser
$cache_ve 
jako u $cache_ed, ale pro jednotlivé vrcholy logické topologie
public function getEdges()
vrátí část původního pole, která popisuje jen linky virtuální topologie
public function getEdgesCount()
vrátí počet linek v topologii
public function getEdge($index)
vrátí určenou linku (podle parametru $index, který odpovídá jejímu indexu v celkovém poli včech linek)
public function getEdgeName($index)
vrátí název zadané linky
public function getEdgeByName($name, &$index)
vrátí požadovanou linku (určenou jejím názvem). Do parametru $index se uloží její index
public function getEdgeTechnology($index)
vrátí technologii linky - množina návratových hodnot odpovídá definici atributu technology značky edge v XML souboru s popisem topologie.
public function getEdgeEthertype($index)
vrátí typ ethernetu linky. Pokud je technologie serial vrací NULL.
public function getEdgeMinbps($index)
vrátí požadovanou minimální rychlost linky. Pokud je technologie ethernet vrací NULL.
public function getEdgeVertexes($index)
vrátí zařízení určené linky
public function getEdgesByVertex($name)
vrátí linky, na kterých leží zadané zařízení. Pokud na žádné vrací NULL.
public function getEdgeFeatures($index)
vrátí speciální vlastnosti linky. Pokud nejsou zadány, vrací NULL.
public function getEdgesFeatures() 
vrátí všechny speciální vlastnosti všech linek v topologii
public function getEdgesList($variant=1) 
vrátí seznam linek v topologii
public function getVertexes()
vrátí část původního pole, která popisuje jen zařízení virtuální topologie
public function getVertexesCount()
vrátí počet zařízení v topologii
public function getVertex($index)
vrátí určené zařízení
public function getVertexName($index)
vrátí název zařízení
public function getVertexByName($name) 
vrátí požadované zařízení (určené jménem)
public function getVertexPlatforms($name, $variant=1) 
vrácí zadané platformy zařízení. Parametr $variant určuje jestli výstup je část původního pole, nebo jde o jednoduche pole hodnot (viz příklady)
public function getVertexOS($name, $variant=1) 
vrátí zadanou verzi OS
public function getVertexType($name) 
vrátí typ zařízení
public function getVertexesByType($type) 
vrátí zařízení určeného typu
public function getVertexesTypes() 
vrátí všechny typy zařízení v topologii
public function getVertexFeatures($name) 
vrátí speciální vlastnosti zařízení
public function getVertexesFeatures() 
vrátí všechny speciální vlastnosti všech zařízení v topologii
public function getVertexesList($variant=1) 
vrátí seznam zařízení v topologii

Příklady

$hrany = $parser->getEdgeName(2);
Kacena
$hrany = $parser->getEdgeVertexes(2);
Array
(
   [0] => ra
   [1] => rd
)
$hrany = $parser->getEdgesList(0);
Array
(
   [Kacena] => 2
   [Krokodyl] => 1
   [Kocour] => 0
)
$hrany = $parser->getEdgesList();
Array
(
   [2] => Kacena
   [1] => Krokodyl
   [0] => Kocour
)
$hrany = $parser->getVertexesList(0);
Array
(
   [ra] => 3
   [rb] => 2
   [rc] => 1
   [rd] => 0
)
$hrany = $parser->getVertexesList();
Array
(
   [3] => ra
   [2] => rb
   [1] => rc
   [0] => rd
)

Zdrojový kód

Aktuální zdrojový kód se nachází zde.

Osobní nástroje