X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=SliverPanel.py;fp=SliverPanel.py;h=2ca4bbf5e1b0a1121135f565934afd17234ddf42;hb=7ce5cc20aaa8c2504abff63921268c0f6fa8a676;hp=0000000000000000000000000000000000000000;hpb=070773be5d006ef8764f81c075fcc3f37a5ba4e7;p=sfa-gui.git diff --git a/SliverPanel.py b/SliverPanel.py new file mode 100644 index 0000000..2ca4bbf --- /dev/null +++ b/SliverPanel.py @@ -0,0 +1,114 @@ +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 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") + for sliver in self.top.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() + if nodeindex == 0: + self.top.rspec.add_default_sliver_attribute(name, value) + else: + node = self.nodes.getItemText(nodeindex) + self.top.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) + if not node: + b = Button("X", self.delete_all) + else: + b = Button("X", self.delete) + self.add(b) + self.add(HTML("%s: %s" % (self.name, self.value))) + + def delete_all(self, sender): + self.top.rspec.remove_default_sliver_attribute(self.name, self.value) + self.top.refresh() + + def delete(self, sender): + self.top.rspec.remove_sliver_attribute(self.node, self.name, self.value) + self.top.refresh() + + +class SliverPanel(VerticalPanel): + def __init__(self, sfadata, rspec): + VerticalPanel.__init__(self) + self.data = sfadata + self.rspec = rspec + self.refresh() + + def refresh(self): + self.clear() + self.add(AddPanel(self)) + + allattrs = self.rspec.get_default_sliver_attributes() + attrdict = {} + slivers = self.rspec.get_sliver_list() + for sliver in slivers: + attrs = self.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) +