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, 2, self) self.nodeModel.setHeaderData(0, Qt.Horizontal, QString("Testbed")) self.nodeModel.setHeaderData(1, Qt.Horizontal, QString("Hostname")) self.nodeView.setModel(self.nodeModel) label = QLabel("Refresh", self) label.setScaledContents(False) layout = QVBoxLayout() layout.addWidget(label) layout.addWidget(self.nodeView) self.setLayout(layout) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.connect(label, SIGNAL('linkActivated(QString)'), self.refresh) def rspec_get_networks(self, rspec): return rspec.rspec.xpath("./network[@name]/@name") def rspec_get_nodes_of_network(self, rspec, network): return rspec.rspec.xpath("./network[@name='%s']/site/node/hostname/text()" % network) def refresh(self, link=None): data = SfaData() # xml = data.getRSpecFromSM() import os xml = open(os.path.expanduser("~/.sfi/ple.inria.heartbeat.rspec")).read() rspec = RSpec(xml) networks = self.rspec_get_networks(rspec) networks.reverse() for network in networks: nodes = self.rspec_get_nodes_of_network(rspec, network) for node in nodes: self.addNode(network, node) def addNode(self, testbed, hostname): self.nodeModel.insertRow(0) self.nodeModel.setData(self.nodeModel.index(0,0), QString(testbed)) self.nodeModel.setData(self.nodeModel.index(0,1), QString(hostname)) class SfaMainScreen(SfaScreen): def __init__(self, parent=None): SfaScreen.__init__(self, parent) slice = SliceWidget(self) self.init(slice, "Main Window", "PlanetLab Federation GUI")