b4db34ad9f3aba9b955b0609f24ca1be52bc6105
[sface.git] / sface / sficreate.py
1 import calendar
2 import datetime
3 import os
4 import re
5 import sys
6 import time
7
8 from PyQt4.QtCore import *
9 from PyQt4.QtGui import *
10 from sface.config import config
11 from sface.sfiprocess import SfiProcess
12
13 class CreateWindow(QDialog):
14     def __init__(self, parent=None):
15         super(CreateWindow, self).__init__(parent)
16         self.setWindowTitle("Create new Slice")
17
18         self.renewProcess = None
19
20         self.sliceWasCreated = False
21
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()
28
29         self.status = QLabel("")
30
31         self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
32         self.buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
33
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)
44
45         self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
46         self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
47
48     def accept(self):
49         auth = config.getAuthority()
50         desc = str(self.descEdit.toPlainText())
51         hrn = str(self.hrnEdit.text())
52         type = "slice"
53         url = str(self.urlEdit.text())
54
55         if not hrn.startswith(auth):
56             QMessageBox.warning(self, "Invalid HRN", "HRN must be within your current authority (%s)" % auth)
57             return
58
59         if not (url.startswith("http://") or url.startswith("https://")):
60             QMessageBox.warning(self, "Invalid URL", "URL must start with http:// or https://")
61             return
62
63         if not desc:
64             QMessageBox.warning(self, "Invalid Description", "Description is too short")
65             return
66
67         self.setStatus("Registering Slice...")
68
69         self.createProcess = SfiProcess(self)
70         self.connect(self.createProcess, SIGNAL('finished()'), self.createFinished)
71
72         self.buttonBox.setEnabled(False)
73
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)
77
78     def setStatus(self, x):
79         self.status.setText(x)
80
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)
89         else:
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)
94
95         self.disconnect(self.createProcess, SIGNAL('finished()'), self.createFinished)
96         self.createProcess = None
97
98     def getHrn(self):
99         return self.hrnEdit.text()
100