1 from pyjamas.ui.VerticalPanel import VerticalPanel
2 from pyjamas.ui.HorizontalPanel import HorizontalPanel
3 from pyjamas.ui.CaptionPanel import CaptionPanel
4 from pyjamas.ui.ListBox import ListBox
5 from pyjamas.ui.TextBox import TextBox
6 from pyjamas.ui.Button import Button
7 from pyjamas.ui.HTML import HTML
8 from pyjamas.ui.Image import Image
9 from pyjamas.ui import HasAlignment
11 class AddPanel(CaptionPanel):
12 def __init__(self, top):
13 CaptionPanel.__init__(self, "Add attribute")
16 hp = HorizontalPanel()
17 self.nodes = ListBox()
18 self.nodes.addItem("All nodes")
19 rspec = self.top.sfadata.getRSpec()
20 for sliver in rspec.get_sliver_list():
21 self.nodes.addItem(sliver)
23 self.attrs = ListBox()
24 # Hardcoded for now...
25 names = ['capabilities', 'codemux', 'cpu_pct', 'cpu_share',
26 'delegations', 'disk_max', 'initscript', 'ip_addresses',
27 'net_i2_max_kbyte', 'net_i2_max_rate', 'net_i2_min_rate',
28 'net_i2_share', 'net_i2_thresh_kbyte',
29 'net_max_kbyte', 'net_max_rate', 'net_min_rate',
30 'net_share', 'net_thresh_kbyte',
33 self.attrs.addItem(name)
35 self.value = TextBox()
40 hp.add(Button("Add", self.go))
45 name = self.attrs.getItemText(self.attrs.getSelectedIndex())
46 value = self.value.getText()
47 nodeindex = self.nodes.getSelectedIndex()
48 rspec = self.top.sfadata.getRSpec()
50 rspec.add_default_sliver_attribute(name, value)
52 node = self.nodes.getItemText(nodeindex)
53 rspec.add_sliver_attribute(node, name, value)
57 class AttributePanel(HorizontalPanel):
58 def __init__(self, top, name, value, node=None):
59 HorizontalPanel.__init__(self)
66 self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
67 delete = Image("./images/cancel.png")
68 delete.addClickListener(self)
70 self.add(HTML("%s: %s" % (self.name, self.value)))
72 def onClick(self, sender):
73 rspec = self.top.sfadata.getRSpec()
75 rspec.remove_sliver_attribute(self.node, self.name, self.value)
77 rspec.remove_default_sliver_attribute(self.name, self.value)
81 class SliverPanel(VerticalPanel):
82 def __init__(self, sfadata):
83 VerticalPanel.__init__(self)
84 self.sfadata = sfadata
85 self.setStyleName("ks-layouts")
90 self.add(AddPanel(self))
92 rspec = self.sfadata.getRSpec()
93 allattrs = rspec.get_default_sliver_attributes()
95 slivers = rspec.get_sliver_list()
96 for sliver in slivers:
97 attrs = rspec.get_sliver_attributes(sliver)
98 attrdict[sliver] = attrs
101 cp = CaptionPanel("All nodes")
103 for (name, value) in allattrs:
104 ap = AttributePanel(self, name, value)
109 for sliver in slivers:
111 cp = CaptionPanel(sliver)
112 for (name, value) in attrdict[sliver]:
113 ap = AttributePanel(self, name, value, sliver)