8 from PyQt4.QtCore import *
9 from PyQt4.QtGui import *
10 from sface.config import config
11 from sface.sfiprocess import SfiProcess
13 class CreateWindow(QDialog):
14 def __init__(self, parent=None):
15 super(CreateWindow, self).__init__(parent)
16 self.setWindowTitle("Create new Slice")
18 self.renewProcess = None
20 self.sliceWasCreated = False
22 hrnLabel = QLabel("Slice HRN:")
23 self.hrnEdit = QLineEdit()
24 urlLabel = QLabel("Project URL:")
25 self.urlEdit = QLineEdit()
26 descLabel = QLabel("Description")
27 self.descEdit = QTextEdit()
29 self.status = QLabel("")
31 self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
32 self.buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
34 layout = QVBoxLayout()
35 layout.addWidget(hrnLabel)
36 layout.addWidget(self.hrnEdit)
37 layout.addWidget(urlLabel)
38 layout.addWidget(self.urlEdit)
39 layout.addWidget(descLabel)
40 layout.addWidget(self.descEdit)
41 layout.addWidget(self.status)
42 layout.addWidget(self.buttonBox)
43 self.setLayout(layout)
45 self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
46 self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
49 auth = config.getAuthority()
50 desc = str(self.descEdit.toPlainText())
51 hrn = str(self.hrnEdit.text())
53 url = str(self.urlEdit.text())
55 if not hrn.startswith(auth):
56 QMessageBox.warning(self, "Invalid HRN", "HRN must be within your current authority (%s)" % auth)
59 if not (url.startswith("http://") or url.startswith("https://")):
60 QMessageBox.warning(self, "Invalid URL", "URL must start with http:// or https://")
64 QMessageBox.warning(self, "Invalid Description", "Description is too short")
67 self.setStatus("Registering Slice...")
69 self.createProcess = SfiProcess(self)
70 self.connect(self.createProcess, SIGNAL('finished()'), self.createFinished)
72 self.buttonBox.setEnabled(False)
74 newSliceRecord = os.path.expanduser("~/.sfi/newslice.record")
75 file(newSliceRecord, "w").write('<record authority="%s" description="%s" hrn="%s" type="%s" url="%s"></record>' % (auth, desc, hrn, type, url))
76 self.createProcess.addRecord(newSliceRecord)
78 def setStatus(self, x):
79 self.status.setText(x)
81 def createFinished(self):
82 if self.createProcess.faults==[]:
83 # need to check for success/failure
84 self.setStatus("<font color='green'>Slice created.</font>")
85 self.sliceWasCreated = True
86 self.buttonBox.setEnabled(True)
87 self.buttonBox.clear()
88 self.buttonBox.addButton(QDialogButtonBox.Close)
90 faultString = self.createProcess.faults[0].get("faultString","")
91 self.setStatus("<font color='red'>Slice creation failed: %s</font>" % (faultString))
92 self.sliceWasCreated = False
93 self.buttonBox.setEnabled(True)
95 self.disconnect(self.createProcess, SIGNAL('finished()'), self.createFinished)
96 self.createProcess = None
99 return self.hrnEdit.text()