mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
bitkeeper revision 1.1108.19.1 (41052eba3ZVcoufgBgwBIOi8WV_BbQ)
Started to implement the Create Domain Wizzard. Doesn't work yet (along way off). Slight refactoring of other code to make it more extensible
This commit is contained in:
1 parent
a33793ae44
commit
589aaab18f
12 files changed
+161
-57
No files matched your search
@@ -0,0 +1,43 @@
|
||||
from xen.sv.Wizzard import Wizzard, Sheet
|
||||
|
||||
class CreateDomain( Wizzard ):
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
sheets = { 0: CreatePage0,
|
||||
1: CreatePage1,
|
||||
2: CreatePage2,
|
||||
3: CreatePage3 }
|
||||
|
||||
Wizzard.__init__( self, urlWriter, "Create Domain Wizzard", sheets )
|
||||
|
||||
class CreatePage0( Sheet ):
|
||||
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
feilds = [( 'name', 'Name')]
|
||||
|
||||
Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 1" )
|
||||
|
||||
class CreatePage1( Sheet ):
|
||||
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
feilds = [( 'name', 'Name')]
|
||||
|
||||
Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 2" )
|
||||
|
||||
class CreatePage2( Sheet ):
|
||||
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
feilds = [( 'name', 'Name')]
|
||||
|
||||
Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 3" )
|
||||
|
||||
class CreatePage3( Sheet ):
|
||||
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
feilds = [( 'name', 'Name')]
|
||||
|
||||
Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 4" )
|
||||
@@ -12,7 +12,7 @@ class DomInfo( GenTabbed ):
|
||||
self.dom = 0;
|
||||
|
||||
def tabUrlWriter( tab ):
|
||||
return urlWriter( "mod=info&dom=%s%s" % ( self.dom, tab ) )
|
||||
return urlWriter( "&dom=%s%s" % ( self.dom, tab ) )
|
||||
|
||||
GenTabbed.__init__( self, "Domain Info", tabUrlWriter, [ 'General', 'SXP', 'Devices' ], [ DomGeneralTab, DomSXPTab, NullTab ] )
|
||||
|
||||
@@ -52,13 +52,11 @@ class DomGenTab( GeneralTab ):
|
||||
|
||||
def write_BODY( self, request ):
|
||||
|
||||
dom = request.args.get('dom')
|
||||
self.dom = getVar('dom', request)
|
||||
|
||||
if dom is None or len(dom) != 1:
|
||||
if self.dom is None:
|
||||
request.write( "<p>Please Select a Domain</p>" )
|
||||
return None
|
||||
else:
|
||||
self.dom = dom[0]
|
||||
|
||||
self.dict = getDomInfoHash( self.dom )
|
||||
|
||||
@@ -72,17 +70,15 @@ class DomSXPTab( PreTab ):
|
||||
|
||||
|
||||
def write_BODY( self, request ):
|
||||
dom = request.args.get('dom')
|
||||
self.dom = getVar('dom', request)
|
||||
|
||||
if dom is None or len(dom) != 1:
|
||||
if self.dom is None:
|
||||
request.write( "<p>Please Select a Domain</p>" )
|
||||
return None
|
||||
else:
|
||||
self.dom = dom[0]
|
||||
|
||||
|
||||
domInfo = server.xend_domain( self.dom )
|
||||
|
||||
self.source = sxp2string( domInfo )
|
||||
self.source = sxp2prettystring( domInfo )
|
||||
|
||||
PreTab.write_BODY( self, request )
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class DomList( HTMLBase ):
|
||||
def write_DOMAIN( self, request, domInfoHash, long=True ):
|
||||
request.write( "<td class='domainInfo' align='center'>%(dom)-4d</td>\n" % domInfoHash )
|
||||
|
||||
url = self.urlWriter( "mod=info&dom=%(dom)-4d" % domInfoHash )
|
||||
url = self.urlWriter( "&mod=info&dom=%(dom)-4d" % domInfoHash )
|
||||
|
||||
request.write( "<td class='domainInfo' align='center'><a href='%s'>%s</a></td>\n" % ( url, domInfoHash['name'] ) )
|
||||
if long:
|
||||
|
||||
@@ -2,35 +2,31 @@ import types
|
||||
|
||||
from xen.sv.HTMLBase import HTMLBase
|
||||
from xen.sv.TabView import TabView
|
||||
from xen.sv.util import getVar
|
||||
|
||||
class GenTabbed( HTMLBase ):
|
||||
|
||||
def __init__( self, title, urlWriter, tabStrings, tabObjects ):
|
||||
HTMLBase.__init__(self)
|
||||
self.tab = 0;
|
||||
self.tabStrings = tabStrings
|
||||
self.tabObjects = tabObjects
|
||||
self.urlWriter = urlWriter
|
||||
self.title = title
|
||||
|
||||
def write_BODY( self, request, urlWriter = None ):
|
||||
tab = request.args.get('tab')
|
||||
|
||||
if tab is None or len( tab) != 1:
|
||||
self.tab = 0
|
||||
else:
|
||||
self.tab = int( tab[0] )
|
||||
|
||||
tab = int( getVar( 'tab', request, 0 ) )
|
||||
|
||||
request.write( "<table style='' width='100%' border='0' cellspacing='0' cellpadding='0'>" )
|
||||
request.write( "<tr><td>" )
|
||||
|
||||
request.write( "<p align='center'><u>%s</u></p>" % self.title )
|
||||
|
||||
TabView( self.tab, self.tabStrings, self.urlWriter ).write_BODY( request )
|
||||
TabView( tab, self.tabStrings, self.urlWriter ).write_BODY( request )
|
||||
|
||||
request.write( "</td></tr><tr><td>" )
|
||||
|
||||
render_tab = self.tabObjects[ self.tab ]
|
||||
render_tab = self.tabObjects[ tab ]
|
||||
|
||||
if render_tab is None:
|
||||
request.write( "<p>Bad Tab</p>" )
|
||||
@@ -41,14 +37,9 @@ class GenTabbed( HTMLBase ):
|
||||
request.write( "</td></tr></table>" )
|
||||
|
||||
def perform( self, request ):
|
||||
tab = request.args.get('tab')
|
||||
|
||||
if tab is None or len( tab) != 1:
|
||||
self.tab = 0
|
||||
else:
|
||||
self.tab = int( tab[0] )
|
||||
tab = int( getVar( 'tab', request, 0 ) )
|
||||
|
||||
op_tab = self.tabObjects[ self.tab ]
|
||||
op_tab = self.tabObjects[ tab ]
|
||||
|
||||
if op_tab:
|
||||
op_tab().perform( request )
|
||||
|
||||
+23
-19
@@ -2,35 +2,40 @@ from xen.sv.HTMLBase import HTMLBase
|
||||
from xen.sv.DomList import DomList
|
||||
from xen.sv.NodeInfo import NodeInfo
|
||||
from xen.sv.DomInfo import DomInfo
|
||||
from xen.sv.CreateDomain import CreateDomain
|
||||
|
||||
from xen.sv.util import getVar
|
||||
|
||||
class Main( HTMLBase ):
|
||||
|
||||
isLeaf = True
|
||||
|
||||
def __init__( self, urlWriter = None ):
|
||||
self.modules = { "node": ( "Node details", NodeInfo ),
|
||||
"list": ( "Domain summary", DomList ),
|
||||
"info": ( "Domain info", DomInfo ) }
|
||||
self.modules = { "node": NodeInfo,
|
||||
"list": DomList,
|
||||
"info": DomInfo,
|
||||
"create": CreateDomain }
|
||||
HTMLBase.__init__(self)
|
||||
|
||||
def render_POST( self, request ):
|
||||
|
||||
#decide what module post'd the action
|
||||
|
||||
mod = request.args.get('mod')
|
||||
mod = getVar( 'mod', request )
|
||||
|
||||
if not mod is None and len(mod) == 1:
|
||||
modTup = self.modules[ mod[0] ]
|
||||
if not mod is None:
|
||||
module = self.modules[ mod ]
|
||||
#check module exists
|
||||
if modTup:
|
||||
(modName, module) = modTup
|
||||
if module:
|
||||
module( self.mainUrlWriter ).perform( request )
|
||||
|
||||
return self.render_GET( request )
|
||||
|
||||
def mainUrlWriter( self, s ):
|
||||
return "Main.rpy?%s" % s
|
||||
|
||||
def mainUrlWriter( self, module ):
|
||||
def fun( f ):
|
||||
return "Main.rpy?mod=%s%s" % ( module, f )
|
||||
return fun
|
||||
|
||||
def write_BODY( self, request ):
|
||||
|
||||
request.write( "\n<table style='border:0px solid black; background: url(images/orb_01.jpg) no-repeat' cellspacing='0' cellpadding='0' border='0' width='780px' height='536px'>\n" )
|
||||
@@ -43,8 +48,8 @@ class Main( HTMLBase ):
|
||||
request.write( " <tr><td height='60px' align='center'><p class='small'>SV Web Interface<br/>(C) <a href='mailto:tw275@cam.ac.uk'>Tom Wilkie</a> 2004</p></td></tr>")
|
||||
request.write( " <tr><td align='center' valign='top'>" )
|
||||
|
||||
for (modName, (modTitle, module)) in self.modules.items():
|
||||
module( self.mainUrlWriter ).write_MENU( request )
|
||||
for (modName, module) in self.modules.items():
|
||||
module( self.mainUrlWriter( modName ) ).write_MENU( request )
|
||||
|
||||
request.write( " </td></tr>" )
|
||||
request.write( " </table>" )
|
||||
@@ -56,15 +61,14 @@ class Main( HTMLBase ):
|
||||
request.write( " <tr><td height='20px'></td></tr>" )
|
||||
request.write( " <tr><td align='center' valign='top'>" )
|
||||
|
||||
mod = request.args.get('mod')
|
||||
modName = getVar('mod', request)
|
||||
|
||||
if mod is None or len(mod) != 1:
|
||||
if modName is None:
|
||||
request.write( '<p>Please select a module</p>' )
|
||||
else:
|
||||
modTup = self.modules[ mod[0] ]
|
||||
if modTup:
|
||||
(modName, module) = modTup
|
||||
module( self.mainUrlWriter ).write_BODY( request )
|
||||
module = self.modules[ modName ]
|
||||
if module:
|
||||
module( self.mainUrlWriter( modName ) ).write_BODY( request )
|
||||
else:
|
||||
request.write( '<p>Invalid module. Please select another</p>' )
|
||||
|
||||
|
||||
@@ -7,10 +7,7 @@ class NodeInfo( GenTabbed ):
|
||||
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
def newUrlWriter( url ):
|
||||
return urlWriter( "mod=node%s" % url )
|
||||
|
||||
GenTabbed.__init__( self, "Node Details", newUrlWriter, [ 'General', 'Dmesg', ], [ NodeGeneralTab, NodeDmesgTab ] )
|
||||
GenTabbed.__init__( self, "Node Details", urlWriter, [ 'General', 'Dmesg', ], [ NodeGeneralTab, NodeDmesgTab ] )
|
||||
|
||||
def write_MENU( self, request ):
|
||||
request.write( "<p class='small'><a href='%s'>Node details</a></p>" % self.urlWriter( '' ) )
|
||||
|
||||
Executable
+66
@@ -0,0 +1,66 @@
|
||||
from xen.sv.util import *
|
||||
from xen.sv.HTMLBase import HTMLBase
|
||||
from xen.xend import sxp
|
||||
|
||||
class Wizzard( HTMLBase ):
|
||||
|
||||
def __init__( self, urlWriter, title, sheets ):
|
||||
HTMLBase.__init__( self )
|
||||
self.title = title
|
||||
self.sheets = sheets
|
||||
self.currSheet = 0
|
||||
self.urlWriter = urlWriter
|
||||
|
||||
def write_MENU( self, request ):
|
||||
request.write( "<p class='small'><a href='%s'>%s</a></p>" % (self.urlWriter( '' ), self.title) )
|
||||
|
||||
def write_BODY( self, request ):
|
||||
|
||||
request.write( "<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td>" )
|
||||
request.write( "<p align='center'><u>%s</u></p></td></tr><tr><td>" % self.title )
|
||||
|
||||
currSheet = getVar( 'sheet', request )
|
||||
|
||||
if not currSheet is None:
|
||||
|
||||
self.currSheet = int( currSheet )
|
||||
|
||||
self.sheets[ self.currSheet ]( self.urlWriter ).write_BODY( request )
|
||||
|
||||
request.write( "</td></tr><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr>" )
|
||||
request.write( "<td width='80%'></td><td width='20%' align='center'>" )
|
||||
request.write( "<p align='center'><img src='images/previous.png' onclick='doOp( \"prev\" )' onmouseover='update( \"wizText\", \"Previous\" )' onmouseout='update( \"wizText\", \" \" )'> " )
|
||||
request.write( "<img src='images/next.png' onclick='doOp( \"next\" )' onmouseover='update( \"wizText\", \"Next\" )' onmouseout='update( \"wizText\", \" \" )'></p>" )
|
||||
request.write( "<p align='center'><span id='wizText'></span></p></td></tr></table>" )
|
||||
request.write( "</td></tr></table>" )
|
||||
|
||||
class Sheet( HTMLBase ):
|
||||
|
||||
def __init__( self, urlWriter, feilds, title ):
|
||||
HTMLBase.__init__( self )
|
||||
self.urlWriter = urlWriter
|
||||
self.feilds = feilds
|
||||
self.title = title
|
||||
|
||||
def parseForm( self, request ):
|
||||
return sxp.toString( request.args )
|
||||
|
||||
def write_BODY( self, request ):
|
||||
request.write( "<p>%s</p>" % self.title )
|
||||
|
||||
previous_values = request.args
|
||||
|
||||
for (feild, name) in self.feilds:
|
||||
value = sxp.child_value( previous_values, feild )
|
||||
if value is None:
|
||||
value = ''
|
||||
request.write( "<p>%s<input type='text' name='%s' value='%s'></p>" % (name, feild, value) )
|
||||
|
||||
def op_next( self, request ):
|
||||
pass
|
||||
|
||||
def op_prev( self, request ):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ def sxp2hash( s ):
|
||||
else:
|
||||
sxphash[ child[0] ] = child[1]
|
||||
|
||||
return sxphash
|
||||
return sxphash
|
||||
|
||||
def sxp2string( sxp ):
|
||||
def sxp2prettystring( sxp ):
|
||||
class tmp:
|
||||
def __init__( self ):
|
||||
self.str = ""
|
||||
@@ -30,14 +30,14 @@ def sxp2string( sxp ):
|
||||
PrettyPrint.prettyprint( sxp, out=temp )
|
||||
return temp.str
|
||||
|
||||
def getVar( var, request ):
|
||||
def getVar( var, request, default=None ):
|
||||
|
||||
arg = request.args.get( var )
|
||||
|
||||
if arg is None or len(arg) != 1:
|
||||
return None
|
||||
if arg is None:
|
||||
return default
|
||||
else:
|
||||
return arg[0]
|
||||
return arg[ len( arg )-1 ]
|
||||
|
||||
def bigTimeFormatter( time ):
|
||||
time = float( time )
|
||||
|
||||