from pyjamas.ui.VerticalPanel import VerticalPanel from pyjamas.ui.HorizontalPanel import HorizontalPanel from pyjamas.ui.CaptionPanel import CaptionPanel from pyjamas.ui.ListBox import ListBox from pyjamas.ui.TextBox import TextBox from pyjamas.ui.Button import Button from pyjamas.ui.HTML import HTML from pyjamas.ui.Image import Image from pyjamas.ui import HasAlignment class AddPanel(CaptionPanel): def __init__(self, top): CaptionPanel.__init__(self, "Add attribute") self.top = top hp = HorizontalPanel() self.nodes = ListBox() self.nodes.addItem("All nodes") rspec = self.top.sfadata.getRSpec() for sliver in rspec.get_sliver_list(): self.nodes.addItem(sliver) self.attrs = ListBox() # Hardcoded for now... names = ['capabilities', 'codemux', 'cpu_pct', 'cpu_share', 'delegations', 'disk_max', 'initscript', 'ip_addresses', 'net_i2_max_kbyte', 'net_i2_max_rate', 'net_i2_min_rate', 'net_i2_share', 'net_i2_thresh_kbyte', 'net_max_kbyte', 'net_max_rate', 'net_min_rate', 'net_share', 'net_thresh_kbyte', 'vsys', 'vsys_vnet'] for name in names: self.attrs.addItem(name) self.value = TextBox() hp.add(self.attrs) hp.add(self.value) hp.add(self.nodes) hp.add(Button("Add", self.go)) self.add(hp) def go(self, sender): name = self.attrs.getItemText(self.attrs.getSelectedIndex()) value = self.value.getText() nodeindex = self.nodes.getSelectedIndex() rspec = self.top.sfadata.getRSpec() if nodeindex == 0: rspec.add_default_sliver_attribute(name, value) else: node = self.nodes.getItemText(nodeindex) rspec.add_sliver_attribute(node, name, value) self.top.refresh() class AttributePanel(HorizontalPanel): def __init__(self, top, name, value, node=None): HorizontalPanel.__init__(self) self.name = name self.value = value self.node = node self.top = top self.setSpacing(5) self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE) delete = Image("./images/cancel.png") delete.addClickListener(self) self.add(delete) self.add(HTML("%s: %s" % (self.name, self.value))) def onClick(self, sender): rspec = self.top.sfadata.getRSpec() if self.node: rspec.remove_sliver_attribute(self.node, self.name, self.value) else: rspec.remove_default_sliver_attribute(self.name, self.value) self.top.refresh() class SliverPanel(VerticalPanel): def __init__(self, sfadata): VerticalPanel.__init__(self) self.sfadata = sfadata self.refresh() def refresh(self): self.clear() self.add(AddPanel(self)) rspec = self.sfadata.getRSpec() allattrs = rspec.get_default_sliver_attributes() attrdict = {} slivers = rspec.get_sliver_list() for sliver in slivers: attrs = rspec.get_sliver_attributes(sliver) attrdict[sliver] = attrs if allattrs: cp = CaptionPanel("All nodes") vp = VerticalPanel() for (name, value) in allattrs: ap = AttributePanel(self, name, value) vp.add(ap) cp.add(vp) self.add(cp) for sliver in slivers: if attrdict[sliver]: cp = CaptionPanel(sliver) for (name, value) in attrdict[sliver]: ap = AttributePanel(self, name, value, sliver) cp.add(ap) self.add(cp)