X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sface%2Fsficreate.py;h=70dd900c4f196bf99a18dfbe1674499ed2d5c3d6;hp=b4db34ad9f3aba9b955b0609f24ca1be52bc6105;hb=bb62e92aac67d6a2a3e057e62a52490d0da40ae8;hpb=8b3735748e2e19ffab1c814d0cea4b34369f621c diff --git a/sface/sficreate.py b/sface/sficreate.py index b4db34a..70dd900 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,10 @@ 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) +