X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sface%2Fsficreate.py;h=adfba5506ac278b9fc7ca884de73f814ca6f48a9;hb=HEAD;hp=b4db34ad9f3aba9b955b0609f24ca1be52bc6105;hpb=8b3735748e2e19ffab1c814d0cea4b34369f621c;p=sface.git
diff --git a/sface/sficreate.py b/sface/sficreate.py
index b4db34a..adfba55 100644
--- a/sface/sficreate.py
+++ b/sface/sficreate.py
@@ -9,6 +9,7 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import *
from sface.config import config
from sface.sfiprocess import SfiProcess
+from sface.screens.userscreen import UserView, UserModel
class CreateWindow(QDialog):
def __init__(self, parent=None):
@@ -23,12 +24,19 @@ class CreateWindow(QDialog):
self.hrnEdit = QLineEdit()
urlLabel = QLabel("Project URL:")
self.urlEdit = QLineEdit()
- descLabel = QLabel("Description")
+ descLabel = QLabel("Description:")
self.descEdit = QTextEdit()
+ self.descEdit.setMinimumWidth(400)
+ self.descEdit.setMaximumHeight(100)
+
+ self.userLabel = QLabel("Researchers:")
+ self.userView = UserView()
self.status = QLabel("")
+ self.status.setMaximumWidth(640)
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+ self.buttonBox.addButton("refresh", QDialogButtonBox.ActionRole)
self.buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
layout = QVBoxLayout()
@@ -38,12 +46,33 @@ class CreateWindow(QDialog):
layout.addWidget(self.urlEdit)
layout.addWidget(descLabel)
layout.addWidget(self.descEdit)
+ layout.addWidget(self.userLabel)
+ layout.addWidget(self.userView)
layout.addWidget(self.status)
layout.addWidget(self.buttonBox)
self.setLayout(layout)
+ self.userModel = UserModel(parent=self)
+
self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
+ self.connect(self.buttonBox, SIGNAL("clicked(QAbstractButton *)"), self.clicked)
+
+ self.updateView()
+
+ if (self.userModel.rowCount() == 0):
+ self.refreshAuthority()
+
+ def clicked(self, button):
+ if button.text() == "refresh":
+ self.refreshAuthority()
+
+ def refreshAuthority(self):
+ self.refreshProcess = SfiProcess(self)
+ self.connect(self.refreshProcess, SIGNAL('finished()'), self.getAuthorityRecordFinished)
+
+ self.refreshProcess.listRecords(config.getAuthority(), "user", config.getAuthorityListFile())
+ self.setStatus("Refreshing user list...")
def accept(self):
auth = config.getAuthority()
@@ -52,6 +81,8 @@ class CreateWindow(QDialog):
type = "slice"
url = str(self.urlEdit.text())
+ researchers = self.userModel.getResearchers()
+
if not hrn.startswith(auth):
QMessageBox.warning(self, "Invalid HRN", "HRN must be within your current authority (%s)" % auth)
return
@@ -64,6 +95,10 @@ class CreateWindow(QDialog):
QMessageBox.warning(self, "Invalid Description", "Description is too short")
return
+ if not researchers:
+ QMessageBox.warning(self, "Invalid Researchers", "Please add at least one researcher by double-clicking on a researcher name")
+ return
+
self.setStatus("Registering Slice...")
self.createProcess = SfiProcess(self)
@@ -71,23 +106,28 @@ class CreateWindow(QDialog):
self.buttonBox.setEnabled(False)
+ researcherXml = "" + "".join(researchers) + ""
+
newSliceRecord = os.path.expanduser("~/.sfi/newslice.record")
- file(newSliceRecord, "w").write('' % (auth, desc, hrn, type, url))
+ file(newSliceRecord, "w").write('%s' % (auth, desc, hrn, type, url, researcherXml))
self.createProcess.addRecord(newSliceRecord)
+ def getAuthorityRecordFinished(self):
+ self.setStatus("User list refreshed.")
+ self.updateView()
+
def setStatus(self, x):
self.status.setText(x)
def createFinished(self):
- if self.createProcess.faults==[]:
- # need to check for success/failure
+ faultString = self.createProcess.getFaultString()
+ if not faultString:
self.setStatus("Slice created.")
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("Slice creation failed: %s" % (faultString))
self.sliceWasCreated = False
self.buttonBox.setEnabled(True)
@@ -98,3 +138,76 @@ class CreateWindow(QDialog):
def getHrn(self):
return self.hrnEdit.text()
+ def updateView(self):
+ self.userModel.updateModel(None)
+
+ self.userView.setModel(self.userModel)
+ self.userView.hideUnusableColumns()
+ self.userView.resizeColumnToContents(0)
+
+class RemoveWindow(QDialog):
+ def __init__(self, hrn, parent=None):
+ super(RemoveWindow, self).__init__(parent)
+ self.setWindowTitle("Remove Slice")
+
+ hrnLabel = QLabel("Slice HRN:")
+ self.hrnEdit = QLineEdit()
+ self.status = QLabel("")
+ self.status.setMaximumWidth(640)
+
+ if hrn:
+ self.hrnEdit.setText(hrn)
+
+ 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(self.status)
+ layout.addWidget(self.buttonBox)
+ self.setLayout(layout)
+
+ self.userModel = UserModel(parent=self)
+
+ self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
+ self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
+
+ def accept(self):
+ hrn = self.hrnEdit.text()
+
+ box = QMessageBox(parent=self)
+ box.setText("Confirm deletion of slice %s ?" % hrn)
+ box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
+ ret = box.exec_()
+ if (ret != QMessageBox.Yes):
+ return
+
+ self.setStatus("Removing Slice...")
+
+ self.removeProcess = SfiProcess(self)
+ self.connect(self.removeProcess, SIGNAL('finished()'), self.removeFinished)
+
+ self.buttonBox.setEnabled(False)
+
+ self.removeProcess.removeRecord(hrn)
+
+ def setStatus(self, x):
+ self.status.setText(x)
+
+ def removeFinished(self):
+ faultString = self.removeProcess.getFaultString()
+ if not faultString:
+ self.setStatus("Slice removed.")
+ self.sliceWasCreated = True
+ self.buttonBox.setEnabled(True)
+ self.buttonBox.clear()
+ self.buttonBox.addButton(QDialogButtonBox.Close)
+ else:
+ self.setStatus("Slice removal failed: %s" % (faultString))
+ self.buttonBox.setEnabled(True)
+
+ self.disconnect(self.removeProcess, SIGNAL('finished()'), self.removeFinished)
+ self.removeProcess = None
+
+