X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sfamainscreen.py;fp=sfamainscreen.py;h=0000000000000000000000000000000000000000;hp=1ded23164c4004c745406a46c01e6c7141447269;hb=e095c7423002644d129cef273f3a63646903b788;hpb=e8b04dd7ddc2ffb22d72098400cdbf676453a094 diff --git a/sfamainscreen.py b/sfamainscreen.py deleted file mode 100644 index 1ded231..0000000 --- a/sfamainscreen.py +++ /dev/null @@ -1,107 +0,0 @@ - -from PyQt4.QtCore import Qt, QString, SIGNAL -from PyQt4.QtGui import QWidget, QLabel, QTreeView, QStandardItemModel, QVBoxLayout, QSizePolicy - -from sfa.util.rspecHelper import RSpec - -from sfadata import SfaData -from sfascreen import SfaScreen - - -class SliceWidget(QWidget): - def __init__(self, parent=None): - QWidget.__init__(self, parent) - - self.nodeView = QTreeView(self) - self.nodeView.setRootIsDecorated(False) - self.nodeView.setAlternatingRowColors(True) - self.nodeView.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - - self.nodeModel = QStandardItemModel(0, 3, self) - self.nodeModel.setHeaderData(0, Qt.Horizontal, QString("Testbed")) - self.nodeModel.setHeaderData(1, Qt.Horizontal, QString("Hostname")) - self.nodeModel.setHeaderData(2, Qt.Horizontal, QString("IsIn")) - - self.nodeView.setModel(self.nodeModel) - - label = QLabel("Refresh", self) - label.setScaledContents(False) - self.connect(label, SIGNAL('linkActivated(QString)'), self.refresh) - - # mmhh. - data=SfaData() - slicename = QLabel ("Slice : %s"%(data.getSlice() or "None"),self) - - layout = QVBoxLayout() - layout.addWidget(label) - layout.addWidget(slicename) - layout.addWidget(self.nodeView) - self.setLayout(layout) - self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - - - - # TODO: use the methods from sfa-trunk - def rspec_get_networks(self, rspec_string): - rspec = RSpec (rspec_string) - return rspec.rspec.xpath("./network[@name]/@name") - def rspec_get_xml_nodes_from_network(self, rspec_string, network): - rspec = RSpec (rspec_string) - return rspec.rspec.xpath("./network[@name='%s']/site/node" % network) - def rspec_get_sliver_nodes_from_network(self, rspec_string, network): - rspec = RSpec (rspec_string) - return rspec.rspec.xpath("./network[@name='%s']/site/node[sliver]/hostname/text()" % network) - def rspec_get_other_nodes_from_network(self, rspec_string, network): - rspec = RSpec (rspec_string) - # xxx todo - could not find the xpath syntax for 'does not have the sliver attribute' - return rspec.rspec.xpath("./network[@name='%s']/site/node[~sliver]/hostname/text()" % network) - - def refresh(self, link=None): - data = SfaData() - if not data.getSlice(): - print 'slice not set yet' - return - if not data.SFACE_DEBUG: - rspec_string = data.getRSpecFromSM() - else: - print 'SFACE_DEBUG : using local file' - import os - rspec_string = open(os.path.expanduser("~/.sfi/%s.rspec"%data.getSlice())).read() - - networks = self.rspec_get_networks(rspec_string) - networks.reverse() - - for network in networks: -# nodes = self.rspec_get_sliver_nodes_from_network(rspec_string, network) -# for node in nodes: self.addNode(network, node, True) -# nodes = self.rspec_get_other_nodes_from_network(rspec_string, network) -# for node in nodes: self.addNode(network, node, False) - # hacky - i'm just gettin used to this xml navigation stuff - xml_nodes = self.rspec_get_xml_nodes_from_network(rspec_string, network) - from lxml import etree - # addNode inserts before, so let's start with the ones that are not in - for xml_node in xml_nodes: - if not xml_node.xpath('sliver'): - self.addNode(network,xml_node.xpath('hostname/text()')[0],False) - for xml_node in xml_nodes: - if xml_node.xpath('sliver'): - self.addNode(network,xml_node.xpath('hostname/text()')[0],True) - - - def addNode(self, testbed, hostname, mark): - self.nodeModel.insertRow(0) - self.nodeModel.setData(self.nodeModel.index(0,0), QString(testbed)) - self.nodeModel.setData(self.nodeModel.index(0,1), QString(hostname)) - if mark:msg="x" - else: msg="-" - self.nodeModel.setData(self.nodeModel.index(0,2), QString(msg)) - - - -class SfaMainScreen(SfaScreen): - def __init__(self, parent=None): - SfaScreen.__init__(self, parent) - - slice = SliceWidget(self) - self.init(slice, "Main Window", "PlanetLab Federation GUI") - slice.refresh()