+import calendar
+import datetime
+import os
+import re
+import sys
+import time
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from sface.config import config
+from sface.sfiprocess import SfiProcess
+
+class CreateWindow(QDialog):
+ def __init__(self, parent=None):
+ super(CreateWindow, self).__init__(parent)
+ self.setWindowTitle("Create new Slice")
+
+ self.renewProcess = None
+
+ self.sliceWasCreated = False
+
+ hrnLabel = QLabel("Slice HRN:")
+ self.hrnEdit = QLineEdit()
+ urlLabel = QLabel("Project URL:")
+ self.urlEdit = QLineEdit()
+ descLabel = QLabel("Description")
+ self.descEdit = QTextEdit()
+
+ self.status = QLabel("")
+
+ self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+ self.buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
+
+ layout = QVBoxLayout()
+ layout.addWidget(hrnLabel)
+ layout.addWidget(self.hrnEdit)
+ layout.addWidget(urlLabel)
+ layout.addWidget(self.urlEdit)
+ layout.addWidget(descLabel)
+ layout.addWidget(self.descEdit)
+ layout.addWidget(self.status)
+ layout.addWidget(self.buttonBox)
+ self.setLayout(layout)
+
+ self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
+ self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
+
+ def accept(self):
+ auth = config.getAuthority()
+ desc = str(self.descEdit.toPlainText())
+ hrn = str(self.hrnEdit.text())
+ type = "slice"
+ url = str(self.urlEdit.text())
+
+ if not hrn.startswith(auth):
+ QMessageBox.warning(self, "Invalid HRN", "HRN must be within your current authority (%s)" % auth)
+ return
+
+ if not (url.startswith("http://") or url.startswith("https://")):
+ QMessageBox.warning(self, "Invalid URL", "URL must start with http:// or https://")
+ return
+
+ if not desc:
+ QMessageBox.warning(self, "Invalid Description", "Description is too short")
+ return
+
+ self.setStatus("Registering Slice...")
+
+ self.createProcess = SfiProcess(self)
+ self.connect(self.createProcess, SIGNAL('finished()'), self.createFinished)
+
+ self.buttonBox.setEnabled(False)
+
+ newSliceRecord = os.path.expanduser("~/.sfi/newslice.record")
+ file(newSliceRecord, "w").write('<record authority="%s" description="%s" hrn="%s" type="%s" url="%s"></record>' % (auth, desc, hrn, type, url))
+ self.createProcess.addRecord(newSliceRecord)
+
+ def setStatus(self, x):
+ self.status.setText(x)
+
+ def createFinished(self):
+ if self.createProcess.faults==[]:
+ # need to check for success/failure
+ self.setStatus("<font color='green'>Slice created.</font>")
+ self.sliceWasCreated = True
+ self.buttonBox.setEnabled(True)
+ self.buttonBox.clear()
+ self.buttonBox.addButton(QDialogButtonBox.Close)
+ else:
+ faultString = self.createProcess.faults[0].get("faultString","")
+ self.setStatus("<font color='red'>Slice creation failed: %s</font>" % (faultString))
+ self.sliceWasCreated = False
+ self.buttonBox.setEnabled(True)
+
+ self.disconnect(self.createProcess, SIGNAL('finished()'), self.createFinished)
+ self.createProcess = None
+
+ def getHrn(self):
+ return self.hrnEdit.text()
+