--- /dev/null
+from pyjamas.ui.VerticalPanel import VerticalPanel
+from pyjamas.ui.HTML import HTML
+from pyjamas.ui import HasAlignment
+
+class HelpPanel(VerticalPanel):
+ def __init__(self):
+ VerticalPanel.__init__(self)
+
+ def refresh(self):
+ pass
+
+class PlanetLabHelpPanel(HelpPanel):
+ def __init__(self):
+ HelpPanel.__init__(self)
+ self.add(HTML("This is the PlanetLab help panel"))
+
+class VINIHelpPanel(HelpPanel):
+ def __init__(self):
+ HelpPanel.__init__(self)
+ self.add(HTML("This is the VINI help panel"))
+
+
self.setWidth("100%")
def onClick(self, sender):
- self.top.rspec.remove_vlink(self.handle)
+ rspec = self.top.sfadata.getRSpec()
+ rspec.remove_vlink(self.handle)
self.top.refresh()
class LinkPanel(VerticalPanel):
- def __init__(self, sfadata, rspec):
+ def __init__(self, sfadata):
VerticalPanel.__init__(self)
- self.data = sfadata
- self.rspec = rspec
+ self.sfadata = sfadata
self.defaultbw = 1000
self.refresh()
def refresh(self):
self.clear()
- vlinks = self.rspec.get_vlink_list()
+ rspec = self.sfadata.getRSpec()
+ vlinks = rspec.get_vlink_list()
self.toppanel = TopPanel(self, self.defaultbw, (len(vlinks) > 0))
self.add(self.toppanel)
self.add(cp)
def clear_vlinks(self):
- vlinks = self.rspec.get_vlink_list()
+ rspec = self.sfadata.getRSpec()
+ vlinks = rspec.get_vlink_list()
for (handle, desc, bw) in vlinks:
- self.rspec.remove_vlink(handle)
+ rspec.remove_vlink(handle)
def build_topology(self):
- nodes = self.rspec.get_sliver_list()
- links = self.rspec.get_link_list()
+ rspec = self.sfadata.getRSpec()
+ nodes = rspec.get_sliver_list()
+ links = rspec.get_link_list()
self.defaultbw = self.toppanel.getDefaultBW()
for (name, end1nodes, end2nodes) in links:
for node1 in end1nodes:
for node2 in end2nodes:
if (node1 in nodes) and (node2 in nodes):
- self.rspec.add_vlink(node1, node2, self.defaultbw)
+ rspec.add_vlink(node1, node2, self.defaultbw)
from pyjamas.ui.TextBox import TextBox
from pyjamas.ui.HTML import HTML
from pyjamas.ui import HasAlignment
+from SfaData import ViniData
import re
def faster_clear(self):
ListBox.clear = faster_clear
class NodePanel(DockPanel):
- def __init__(self, sfadata, rspec):
+ def __init__(self, sfadata):
DockPanel.__init__(self)
- self.data = sfadata
- self.rspec = rspec
+ self.sfadata = sfadata
self.setSize("100%", "100%")
self.setHorizontalAlignment(HasAlignment.ALIGN_CENTER)
self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
- self.regex = None
+ self.availableRegex = None
+ self.selectedRegex = None
leftpanel = VerticalPanel()
leftcap = CaptionPanel("Available nodes")
leftpanel.add(leftcap)
hp1 = HorizontalPanel()
- filterButton = Button("Filter", self.filter)
- self.regExBox = TextBox()
+ filterButton = Button("Filter", self.filterLeft)
+ self.leftRegExBox = TextBox()
hp1.add(filterButton)
- hp1.add(self.regExBox)
+ hp1.add(self.leftRegExBox)
leftpanel.add(hp1)
rightpanel = VerticalPanel()
rightpanel.add(rightcap)
hp2 = HorizontalPanel()
- applyButton = Button("Apply", self.apply)
- resetButton = Button("Reset", self.reset)
- hp2.add(applyButton)
- hp2.add(resetButton)
+ filterButton = Button("Filter", self.filterRight)
+ self.rightRegExBox = TextBox()
+ hp2.add(filterButton)
+ hp2.add(self.rightRegExBox)
rightpanel.add(hp2)
addButton = Button(">>", self.addNodes)
self.refresh()
def refresh(self):
- slivers = self.sortNodes(self.rspec.get_sliver_list())
- all = self.rspec.get_node_list()
+ rspec = self.sfadata.getRSpec()
+
+ slivers = self.sortNodes(rspec.get_sliver_list())
+ all = rspec.get_node_list()
available = self.sortNodes(filter(lambda x:x not in slivers,all))
- if self.regex:
- pattern = re.compile(self.regex)
+
+ if self.availableRegex:
+ pattern = re.compile(self.availableRegex)
available = filter(pattern.search, available)
+
+ if self.selectedRegex:
+ pattern = re.compile(self.selectedRegex)
+ slivers = filter(pattern.search, slivers)
+
self.leftlist.clear()
for i in available:
self.leftlist.addItem(i)
return got
def addNodes(self, sender):
+ rspec = self.sfadata.getRSpec()
nodes = self.getSelected(self.leftlist)
for node in nodes:
- self.rspec.add_sliver(node)
+ rspec.add_sliver(node)
self.refresh()
def removeNodes(self, sender):
+ rspec = self.sfadata.getRSpec()
nodes = self.getSelected(self.rightlist)
for node in nodes:
- self.rspec.remove_sliver(node)
+ rspec.remove_sliver(node)
self.refresh()
- def apply(self, sender):
- self.data.applyRSpec(self.rspec)
-
- def reset(self, sender):
- self.rspec = self.data.getRSpec()
+ def filterLeft(self, sender):
+ self.availableRegex = self.leftRegExBox.getText()
self.refresh()
- def filter(self, sender):
- self.regex = self.regExBox.getText()
+ def filterRight(self, sender):
+ self.selectedRegex = self.rightRegExBox.getText()
self.refresh()
from NodePanel import NodePanel
from LinkPanel import LinkPanel
from SliverPanel import SliverPanel
+from SubmitPanel import SubmitPanel
+from HelpPanel import PlanetLabHelpPanel
class PlTabs(TabPanel):
def __init__(self):
TabPanel.__init__(self)
self.data = PlanetLabData()
- self.rspec = self.data.getRSpec()
+ self.data.refreshRSpec()
+
+ nodetab = NodePanel(self.data)
+ slivertab = SliverPanel(self.data)
+ submittab = SubmitPanel(self.data)
+ helptab = PlanetLabHelpPanel()
- nodetab = NodePanel(self.data, self.rspec)
- slivertab = SliverPanel(self.data, self.rspec)
-
self.add(nodetab, "Nodes")
self.add(slivertab, "Slivers")
+ self.add(submittab, "Submit")
+ self.add(HTML("force tabs to right"), None)
+ self.add(helptab, "Help")
self.selectTab(0)
def onTabSelected(self, sender, index):
SfaData.__init__(self)
self.registry = "http://www.planet-lab.org:12345"
self.slicemgr = "http://www.vini-veritas.net:12346"
+ self.rspec = None
- def getRSpec(self):
+ def refreshRSpec(self):
xml = SfaData.getRSpec(self)
- return RSpec(xml)
+ self.rspec = RSpec(xml)
- def applyRSpec(self, rspec):
- xml = rspec.toxml()
+ def getRSpec(self):
+ if self.rspec is None:
+ self.refreshRSpec()
+ return self.rspec
+
+ def applyRSpec(self):
+ xml = self.rspec.toxml()
SfaData.applyRSpec(self, xml)
class PlanetLabData(SfaData):
SfaData.__init__(self)
self.registry = "http://www.planet-lab.org:12345"
self.slicemgr = "http://www.planet-lab.org:12346"
+ self.rspec = None
- def getRSpec(self):
+ def refreshRSpec(self):
xml = SfaData.getRSpec(self)
- return RSpec(xml)
+ self.rspec = RSpec(xml)
- def applyRSpec(self, rspec):
- xml = rspec.toxml()
+ def getRSpec(self):
+ if self.rspec is None:
+ self.refreshRSpec()
+ return self.rspec
+
+ def applyRSpec(self):
+ xml = self.rspec.toxml()
SfaData.applyRSpec(self, xml)
class OpenCirrusData(SfaData):
from SinkList import SinkList
from Configure import TopPanel
from pyjamas import History
-import Info
+import Welcome
import Slices
import Identities
import PlanetLab
self.curSink.onShow()
def loadSinks(self):
- self.sink_list.addSink(Info.init())
+ self.sink_list.addSink(Welcome.init())
self.sink_list.addSink(Identities.init())
- self.sink_list.addSink(Slices.init())
+ # self.sink_list.addSink(Slices.init())
self.sink_list.addSink(PlanetLab.init())
self.sink_list.addSink(VINI.init())
self.sink_list.addSink(OpenCirrus.init())
self.sink_list.addSink(Configure.init())
def showInfo(self):
- self.show(self.sink_list.find("Info"), False)
+ self.show(self.sink_list.find("Welcome"), False)
hp = HorizontalPanel()
self.nodes = ListBox()
self.nodes.addItem("All nodes")
- for sliver in self.top.rspec.get_sliver_list():
+ rspec = self.top.sfadata.getRSpec()
+ for sliver in rspec.get_sliver_list():
self.nodes.addItem(sliver)
self.attrs = ListBox()
name = self.attrs.getItemText(self.attrs.getSelectedIndex())
value = self.value.getText()
nodeindex = self.nodes.getSelectedIndex()
+ rspec = self.top.sfadata.getRSpec()
if nodeindex == 0:
- self.top.rspec.add_default_sliver_attribute(name, value)
+ rspec.add_default_sliver_attribute(name, value)
else:
node = self.nodes.getItemText(nodeindex)
- self.top.rspec.add_sliver_attribute(node, name, value)
+ rspec.add_sliver_attribute(node, name, value)
self.top.refresh()
self.add(HTML("%s: %s" % (self.name, self.value)))
def onClick(self, sender):
+ rspec = self.top.sfadata.getRSpec()
if self.node:
- self.top.rspec.remove_sliver_attribute(self.node, self.name,
- self.value)
+ rspec.remove_sliver_attribute(self.node, self.name, self.value)
else:
- self.top.rspec.remove_default_sliver_attribute(self.name,
- self.value)
+ rspec.remove_default_sliver_attribute(self.name, self.value)
self.top.refresh()
class SliverPanel(VerticalPanel):
- def __init__(self, sfadata, rspec):
+ def __init__(self, sfadata):
VerticalPanel.__init__(self)
- self.data = sfadata
- self.rspec = rspec
+ self.sfadata = sfadata
self.refresh()
def refresh(self):
self.clear()
self.add(AddPanel(self))
- allattrs = self.rspec.get_default_sliver_attributes()
+ rspec = self.sfadata.getRSpec()
+ allattrs = rspec.get_default_sliver_attributes()
attrdict = {}
- slivers = self.rspec.get_sliver_list()
+ slivers = rspec.get_sliver_list()
for sliver in slivers:
- attrs = self.rspec.get_sliver_attributes(sliver)
+ attrs = rspec.get_sliver_attributes(sliver)
attrdict[sliver] = attrs
if allattrs:
--- /dev/null
+from pyjamas.ui.VerticalPanel import VerticalPanel
+from pyjamas.ui.HorizontalPanel import HorizontalPanel
+from pyjamas.ui.Button import Button
+from pyjamas.ui.HTML import HTML
+from pyjamas.ui import HasAlignment
+
+class SubmitPanel(VerticalPanel):
+ def __init__(self, sfadata):
+ VerticalPanel.__init__(self)
+ self.sfadata = sfadata
+ self.setSpacing(10)
+
+ hp1 = HorizontalPanel()
+ hp1.setSpacing(10)
+ hp1.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
+ b1 = Button("Apply", self.apply)
+ hp1.add(b1)
+ hp1.add(HTML("Apply the configured changes to the slice"))
+
+ hp2 = HorizontalPanel()
+ hp2.setSpacing(10)
+ hp2.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
+ b2 = Button("Reset", self.reset)
+ hp2.add(b2)
+ hp2.add(HTML("Reset the local slice configuration"))
+
+ self.add(hp1)
+ self.add(hp2)
+
+ def refresh(self):
+ pass
+
+ def apply(self, sender):
+ self.sfadata.applyRSpec()
+
+ def reset(self):
+ self.sfadata.refreshRSpec()
+
+
+
from Sink import Sink, SinkInfo
from pyjamas.ui.TabPanel import TabPanel
from pyjamas.ui.VerticalPanel import VerticalPanel
+from pyjamas.ui.HTML import HTML
from SfaData import ViniData
from NodePanel import NodePanel
from LinkPanel import LinkPanel
from SliverPanel import SliverPanel
+from SubmitPanel import SubmitPanel
+from HelpPanel import VINIHelpPanel
class VINITabs(TabPanel):
def __init__(self):
TabPanel.__init__(self)
self.data = ViniData()
- self.rspec = self.data.getRSpec()
+ self.data.refreshRSpec()
+
+ nodetab = NodePanel(self.data)
+ linktab = LinkPanel(self.data)
+ slivertab = SliverPanel(self.data)
+ submittab = SubmitPanel(self.data)
+ helptab = VINIHelpPanel()
- nodetab = NodePanel(self.data, self.rspec)
- linktab = LinkPanel(self.data, self.rspec)
- slivertab = SliverPanel(self.data, self.rspec)
-
self.add(nodetab, "Nodes")
self.add(linktab, "Links")
self.add(slivertab, "Slivers")
+ self.add(submittab, "Submit")
+ self.add(HTML("force tabs to right"), None)
+ self.add(helptab, "Help")
+
self.selectTab(0)
def onTabSelected(self, sender, index):
self.initWidget(self.tabs)
def init():
- return SinkInfo("VINI", "Specify VINI Resources", VINI)
+ return SinkInfo("VINI", "<b>Specify VINI Resources</b>", VINI)
from Sink import Sink, SinkInfo
from pyjamas.ui.HTML import HTML
-class Info(Sink):
+class Welcome(Sink):
def __init__(self):
Sink.__init__(self)
def init():
- return SinkInfo("Info", "Introduction to the SFA Federation GUI", Info)
+ return SinkInfo("Welcome", "Welcome to the SFA Federation GUI", Welcome)
.gwt-TabBar {
background-color: #C3D9FF;
- font-size: smaller;
+/* font-size: smaller; */
}
.gwt-TabBar .gwt-TabBarFirst {
.ks-Info {
background-color: #C3D9FF;
padding: 10px 10px 2px 10px;
- font-size: smaller;
+ font-weight: bold
}
.ks-List {
margin-top: 8px;
margin-bottom: 8px;
- font-size: smaller;
+ font-size: smaller;
}
.ks-List .ks-SinkItem {