from Sink import Sink, SinkInfo from pyjamas.ui.Tree import Tree, TreeItem from pyjamas.ui.PopupPanel import PopupPanel from pyjamas.ui.HTML import HTML from SfaData import PlanetLabData class PopupRecord(PopupPanel): def __init__(self, record): PopupPanel.__init__(self, True) contents = HTML("
" + record + "
") self.setWidget(contents) self.setStyleName("ks-popups-Popup") class SfaItem(TreeItem): def __init__(self, hrn, kind): self.kind = kind self.hrn = hrn last = hrn.split('.')[-1] if self.kind == "(authority)": self.label = "%s" % last elif self.kind == "(slice)": self.label = "%s" % last elif self.kind == "(user)": self.label = "%s" % last else: self.label = "%s" % last TreeItem.__init__(self, self.label) if self.kind == "(authority)": self.addItem(PendingItem()) class PendingItem(TreeItem): def __init__(self): TreeItem.__init__(self, "Please wait...") def isPendingItem(self): return True class SfaBrowser(Sink): def __init__(self): Sink.__init__(self) self.data = PlanetLabData() self.tree = Tree() item = SfaItem("plc", "(authority)") self.tree.addItem(item) item = SfaItem("ple", "(authority)") self.tree.addItem(item) self.tree.addTreeListener(self) self.initWidget(self.tree) def onTreeItemSelected(self, item): record = self.data.getRecord(item.hrn) p = PopupRecord(record) left = item.getAbsoluteLeft() + 10 top = item.getAbsoluteTop() + 10 p.setPopupPosition(left, top) p.show() def onTreeItemStateChanged(self, item): self.tree.moveFocus(item) child = item.getChild(0) if hasattr(child, "isPendingItem"): item.removeItem(child) hrns = sorted(self.data.listChildren(item.hrn), key=lambda hrn: hrn[0]) for (hrn, kind) in hrns: item.addItem(SfaItem(hrn, kind)) def onShow(self): pass def init(): return SinkInfo("Browse SFA", "SFA Hierarchy Browser", SfaBrowser)