Ejemplo n.º 1
0
class PMRDialog(QtGui.QDialog):
    
    def __init__(self, use_external_git, parent=None):
        super(PMRDialog, self).__init__(parent)
        self._ui = Ui_PMRDialog()
        self._ui.setupUi(self)
        self._ui.searchWidget.setUseExternalGit(use_external_git)
        self._ui.settingsWidget.setUseExternalGit(use_external_git)
        
        pmr_info = PMR()
        self._pmr_tool = PMRTool(pmr_info, use_external_git)

        self._makeConnections()

        self._updateUi()

    def accept(self, *args, **kwargs):
        self._ui.settingsWidget.transferModel()
        return QtGui.QDialog.accept(self, *args, **kwargs)
    
    def _updateUi(self):
        pmr_info = PMR()
        self._pmr_tool.set_info(pmr_info)
        if self._pmr_tool.isActive():
            if self._pmr_tool.hasAccess():
                self._ui.loginStackedWidget.setCurrentIndex(1)
            else:
                self._ui.loginStackedWidget.setCurrentIndex(0)
        else:
            self._ui.loginStackedWidget.setCurrentIndex(2)

    def _makeConnections(self):
        self._ui.registerLabel.linkActivated.connect(self.register)
        self._ui.deregisterLabel.linkActivated.connect(self.deregister)
        self._ui.settingsWidget.hostChanged.connect(self._hostChanged)

    def _hostChanged(self, index):
        self._updateUi()
        
    def register(self, link):
        if link != 'mapclient.register':
            return

        dlg = AuthoriseApplicationDialog(self)
        dlg.setModal(True)
        dlg.exec_()

        self._updateUi()

    def deregister(self):
        pmr_info = PMR()
        self._pmr_tool.set_info(pmr_info)
        self._pmr_tool.deregister()
        self._updateUi()
class PMRRegisterDialog(QtGui.QDialog):
    def __init__(self, external_git, parent=None):
        super(PMRRegisterDialog, self).__init__(parent)
        self._ui = Ui_RegisterDialog()
        self._ui.setupUi(self)

        pmr_info = PMR()
        self._pmr_tool = PMRTool(pmr_info, external_git)

        self._makeConnections()

        self._updateUi()

    def _updateUi(self):
        pmr_info = PMR()
        self._pmr_tool.set_info(pmr_info)
        if self._pmr_tool.isActive():
            self._ui.pushButtonRegister.setEnabled(True)
            if self._pmr_tool.hasAccess():
                self._ui.stackedWidgetRegister.setCurrentIndex(1)
            else:
                self._ui.stackedWidgetRegister.setCurrentIndex(0)
        else:
            self._ui.pushButtonRegister.setEnabled(False)
            self._ui.stackedWidgetRegister.setCurrentIndex(0)

    def _makeConnections(self):
        self._ui.pushButtonRegister.clicked.connect(self._register)
        self._ui.pushButtonDeregister.clicked.connect(self._deregister)
        self._ui.settingsWidget.hostChanged.connect(self._hostChanged)

    def _register(self):
        dlg = AuthoriseApplicationDialog(self)
        dlg.setModal(True)
        dlg.exec_()

        self._updateUi()

    def _deregister(self):
        pmr_info = PMR()
        self._pmr_tool.set_info(pmr_info)
        self._pmr_tool.deregister()
        self._updateUi()

    def _hostChanged(self, index):
        self._updateUi()

    def accept(self, *args, **kwargs):
        self._ui.settingsWidget.transferModel()
        return QtGui.QDialog.accept(self, *args, **kwargs)
Ejemplo n.º 3
0
class PMRSearchDialog(QtGui.QDialog):
    """
    Dialog for managing interaction with PMR.
    """
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self._ui = Ui_PMRSearchDialog()
        self._ui.setupUi(self)

        pmr_info = PMR()
        self._pmrTool = PMRTool(pmr_info)
        self._annotationTool = AnnotationTool()

        self._makeConnections()

        self._updateUi()

    def _updateUi(self):
        if self._pmrTool.hasAccess():
            self._ui.loginStackedWidget.setCurrentIndex(1)
        else:
            self._ui.loginStackedWidget.setCurrentIndex(0)

    def _makeConnections(self):
        self._ui.searchButton.clicked.connect(self._searchClicked)
        self._ui.registerLabel.linkActivated.connect(self.register)
        self._ui.deregisterLabel.linkActivated.connect(self.deregister)

    @handle_runtime_error
    @set_wait_cursor
    def _searchClicked(self):
        # Set pmrlib to go
        self._ui.searchResultsListWidget.clear()

        # fix up known terms to be full blown uri
        search_text = self._ui.searchLineEdit.text()
        search_terms = search_text.split()
        for term in search_terms:
            rdfterm = self._annotationTool.rdfFormOfTerm(term)
            if rdfterm:
                search_text = search_text + ' ' + rdfterm[1:-1]

        try:
            results = self._pmrTool.search(search_text)

            for r in results:
                if 'title' in r and r['title']:
                    item = QtGui.QListWidgetItem(
                        r['title'], self._ui.searchResultsListWidget)
                else:
                    item = QtGui.QListWidgetItem(
                        r['target'], self._ui.searchResultsListWidget)
                item.setData(QtCore.Qt.UserRole, r)
        except PMRToolError as e:
            message = convertExceptionToMessage(e)
            logger.warn('PMR Tool exception raised')
            logger.warn('Reason: {0}'.format(message))

    def getSelectedWorkspace(self):
        items = self._ui.searchResultsListWidget.selectedItems()
        for item in items:
            return item.data(QtCore.Qt.UserRole)

    def register(self, link):
        if link != 'mapclient.register':
            return

        dlg = AuthoriseApplicationDialog(self)
        dlg.setModal(True)
        dlg.exec_()

        self._updateUi()

    def deregister(self):
        self._pmrTool.deregister()
        self._updateUi()
class PMRWorkflowWidget(QtGui.QWidget):
    '''
    A Widget for importing and exporting to and from PMR.
    '''

    def __init__(self, parent=None):
        '''
        Constructor
        '''
        super(PMRWorkflowWidget, self).__init__(parent)
        self._ui = Ui_PMRWorkflowWidget()
        self._ui.setupUi(self)

        self._pmrTool = PMRTool()

        self._termLookUpLimit = 32

        self._timer = QtCore.QTimer()
        self._timer.setInterval(500)

        self._busy_waiting = False
        self._ontological_search = False

        word_list = ['pending ...']
        self._list_model = OWLTermsListModel(word_list)

#         self._client = Client(site=pmr_target, use_default_headers=True)

        self._makeConnections()

        self._ui.comboBoxSearch.clear()
        self._ui.comboBoxSearch.addItems(search_domains)

        self._updateUi()

    def _updateUi(self):
        if self._pmrTool.hasAccess():
            self._ui.labelLink.setText('<a href="mapclient.deregister">deregister</a>')
        else:
            self._ui.labelLink.setText('<a href="mapclient.register">register</a>')

    def _makeConnections(self):
        self._ui.pushButtonSearch.clicked.connect(self._searchClicked)
        self._ui.pushButtonImport.clicked.connect(self._importClicked)
        self._ui.pushButtonExport.clicked.connect(self._exportClicked)
        self._ui.labelLink.linkActivated.connect(self._linkActivated)
        self._ui.listWidgetResults.itemClicked.connect(self._searchResultClicked)
        self._ui.lineEditSearch.textEdited.connect(self._searchTextEdited)
        self._timer.timeout.connect(self._queryRepository)
        self._ui.comboBoxSearch.currentIndexChanged.connect(self._searchTypeChanged)

    def _initialiseCompleter(self):
        completer = QtGui.QCompleter(self._ui.lineEditSearch)
        completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)
        completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        completer.setModel(self._list_model)
        completer.setCompletionColumn(0)
        completer.setCompletionRole(QtCore.Qt.DisplayRole)

        return completer

    def _searchTypeChanged(self, index):
        text = self._ui.comboBoxSearch.currentText()
        if text == ontological_search_string:
            self._ontological_search = True
            completer = self._initialiseCompleter()
            self._ui.lineEditSearch.setCompleter(completer)
        else:
            self._ontological_search = False
            self._ui.lineEditSearch.setCompleter(None)

    def _searchTextEdited(self, new_text):
        if self._ontological_search and len(new_text) and not self._busy_waiting:
            if self._timer.isActive():
                QtGui.QApplication.restoreOverrideCursor()
            QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
            self._timer.start()

    def _queryRepository(self):
        self._timer.stop()
        self._busy_waiting = True
        search_text = self._ui.lineEditSearch.text()
        pmr_target = info.PMRInfo().ipaddress
        target = pmr_target + '/pmr2_ricordo/owlterms' + '/%s/%d' % (search_text, self._termLookUpLimit)
        client = Client(site=pmr_target, use_default_headers=True)
        state = client(target=target)  # , data=json.dumps({'actions': {'search': 1}, 'fields': {'simple_query': 'femur'}}))  # , endpoint='ricordo', data='femur')
        response = state.value()
        descriptions = ['%s [%s]' % (line[0], line[1].split('#')[-1]) for line in response['results']]
        self._list_model.removeRows(0, self._list_model.rowCount())
        self._list_model.insertRows(0, len(descriptions), descriptions)
        self._busy_waiting = False
        QtGui.QApplication.restoreOverrideCursor()

    def _searchResultClicked(self, item):
        r = item.data(QtCore.Qt.UserRole)
        if 'source' in r:
            self._ui.lineEditWorkspace.setText(r['source'])
        elif 'href' in r:
            self._ui.lineEditWorkspace.setText(r['href'])

    def _linkActivated(self, link):
        if link == 'mapclient.register':
            dlg = AuthoriseApplicationDialog(self)
            dlg.setModal(True)
            dlg.exec_()
            self._updateUi()
        elif link == 'mapclient.deregister':
            self._pmrTool.deregister()
            self._updateUi()

    def _searchClicked(self):
        self._doSearch(self._ui.comboBoxSearch.currentText())

    def _importClicked(self):
        pass

    def _exportClicked(self):
        pass

    def setSearchDomain(self, domain=['all', ]):
        self._domain = []
        if type(domain) is not list:
            domain = [domain]

        if len(domain) and domain[0] == 'all':
            domain = search_domains

        for subdomain in domain:
            if subdomain in search_domains:
                self._domain.append(subdomain)

        if len(self._domain):
            self._ui.comboBoxSearch.clear()
            for subdomain in self._domain:
                self._ui.comboBoxSearch.addItem(subdomain)

    def setExport(self, visible=True):
        if visible:
            self._ui.pushButtonExport.show()
        else:
            self._ui.pushButtonExport.hide()

    def setImport(self, visible=True):
        if visible:
            self._ui.pushButtonImport.show()
        else:
            self._ui.pushButtonImport.hide()

    def workspaceUrl(self):
        return self._ui.lineEditWorkspace.text()

    def setWorkspaceUrl(self, url):
        self._ui.lineEditWorkspace.setText(url)

    @handle_runtime_error
    @set_wait_cursor
    def _doSearch(self, search_type):
        # Set pmrlib to go
        self._ui.listWidgetResults.clear()

        # fix up known terms to be full blown uri
        search_text = self._ui.lineEditSearch.text()
        if True:
            search_text = self._ui.lineEditSearch.text()
            label_re = re.compile('\[([\w_\d]+)\]')
            re_result = label_re.search(search_text)
            if re_result:
                search_text = re_result.group(1)
#         search_terms = search_text.split()
#         for term in search_terms:
#             rdfterm = self._annotationTool.rdfFormOfTerm(term)
#             if rdfterm:
#                 search_text = search_text + ' ' + rdfterm[1:-1]
        results = self._pmrTool.search(search_text, search_type)

        if search_type == workflow_search_string:
            results_list = results['results']
            for r in results_list:
                item = QtGui.QListWidgetItem(r['obj']['title'], self._ui.listWidgetResults)
                item.setData(QtCore.Qt.UserRole, r)
        elif search_type == ontological_search_string:
            if type(results) is dict:
                return

            for r in results:
                label = r['label']
                for sr in r['items']:
                    item = QtGui.QListWidgetItem(sr['title'] + ' [%s, %s]' % (sr['value'], label), self._ui.listWidgetResults)
                    tool_tip = 'Workspace title: %s, Ontological term: %s, Target: %s' % (sr['title'], label, sr['href'])
                    item.setToolTip(tool_tip)
                    item.setData(QtCore.Qt.UserRole, sr)

        else:
            for r in results:
                if 'title' in r and r['title']:
                    item = QtGui.QListWidgetItem(r['title'], self._ui.listWidgetResults)
                else:
                    item = QtGui.QListWidgetItem(r['target'], self._ui.listWidgetResults)
                item.setData(QtCore.Qt.UserRole, r)
class PMRWorkflowWidget(QtGui.QWidget):
    """
    A Widget for importing and exporting to and from PMR.
    """

    def __init__(self, use_external_git, parent=None):
        super(PMRWorkflowWidget, self).__init__(parent)
        self._ui = Ui_PMRWorkflowWidget()
        self._ui.setupUi(self)

        pmr_info = PMR()
        self._pmrTool = PMRTool(pmr_info, use_external_git)

        self._termLookUpLimit = 32

        self._timer = QtCore.QTimer()
        self._timer.setInterval(500)

        self._busy_waiting = False
        self._ontological_search = False

        word_list = ['pending ...']
        self._list_model = OWLTermsListModel(word_list)

#         self._client = Client(site=pmr_target, use_default_headers=True)

        self._makeConnections()

        self._ui.comboBoxSearch.clear()
        self._ui.comboBoxSearch.addItems(search_domains)

        self._updateUi()

    def _updateUi(self):
        if self._pmrTool.hasAccess():
            self._ui.labelLink.setText('<a href="mapclient.deregister">deregister</a>')
        else:
            self._ui.labelLink.setText('<a href="mapclient.register">register</a>')

    def _makeConnections(self):
        self._ui.pushButtonSearch.clicked.connect(self._searchClicked)
        self._ui.pushButtonImport.clicked.connect(self._importClicked)
        self._ui.pushButtonExport.clicked.connect(self._exportClicked)
        self._ui.labelLink.linkActivated.connect(self._linkActivated)
        self._ui.listWidgetResults.itemClicked.connect(self._searchResultClicked)
        self._ui.lineEditSearch.textEdited.connect(self._searchTextEdited)
        self._timer.timeout.connect(self._queryRepository)
        self._ui.comboBoxSearch.currentIndexChanged.connect(self._searchTypeChanged)

    def _initialiseCompleter(self):
        completer = QtGui.QCompleter(self._ui.lineEditSearch)
        completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)
        completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        completer.setModel(self._list_model)
        completer.setCompletionColumn(0)
        completer.setCompletionRole(QtCore.Qt.DisplayRole)

        return completer

    def _searchTypeChanged(self, index):
        text = self._ui.comboBoxSearch.currentText()
        if text == ontological_search_string:
            self._ontological_search = True
            completer = self._initialiseCompleter()
            self._ui.lineEditSearch.setCompleter(completer)
        else:
            self._ontological_search = False
            self._ui.lineEditSearch.setCompleter(None)

    def _searchTextEdited(self, new_text):
        if self._ontological_search and len(new_text) and not self._busy_waiting:
            if self._timer.isActive():
                QtGui.QApplication.restoreOverrideCursor()
            QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
            self._timer.start()

    def _queryRepository(self):
        self._timer.stop()
        self._busy_waiting = True
        search_text = self._ui.lineEditSearch.text()
        pmr_target = general.PMR().host()
        target = pmr_target + '/pmr2_ricordo/owlterms' + '/%s/%d' % (search_text, self._termLookUpLimit)
        client = Client(site=pmr_target, use_default_headers=True)
        state = client(target=target)  # , data=json.dumps({'actions': {'search': 1}, 'fields': {'simple_query': 'femur'}}))  # , endpoint='ricordo', data='femur')
        response = state.value()
        descriptions = ['%s [%s]' % (line[0], line[1].split('#')[-1]) for line in response['results']]
        self._list_model.removeRows(0, self._list_model.rowCount())
        self._list_model.insertRows(0, len(descriptions), descriptions)
        self._busy_waiting = False

    def _searchResultClicked(self, item):
        r = item.data(QtCore.Qt.UserRole)
        if 'source' in r:
            self._ui.lineEditWorkspace.setText(r['source'])
        elif 'href' in r:
            self._ui.lineEditWorkspace.setText(r['href'])

    def _linkActivated(self, link):
        if link == 'mapclient.register':
            dlg = AuthoriseApplicationDialog(self)
            dlg.setModal(True)
            dlg.exec_()
            self._updateUi()
        elif link == 'mapclient.deregister':
            self._pmrTool.deregister()
            self._updateUi()

    def _searchClicked(self):
        self._doSearch(self._ui.comboBoxSearch.currentText())

    def _importClicked(self):
        pass

    def _exportClicked(self):
        pass

    def setSearchDomain(self, domain=['all', ]):
        self._domain = []
        if type(domain) is not list:
            domain = [domain]

        if len(domain) and domain[0] == 'all':
            domain = search_domains

        for subdomain in domain:
            if subdomain in search_domains:
                self._domain.append(subdomain)

        if len(self._domain):
            self._ui.comboBoxSearch.clear()
            for subdomain in self._domain:
                self._ui.comboBoxSearch.addItem(subdomain)

    def setExport(self, visible=True):
        if visible:
            self._ui.pushButtonExport.show()
        else:
            self._ui.pushButtonExport.hide()

    def setImport(self, visible=True):
        if visible:
            self._ui.pushButtonImport.show()
        else:
            self._ui.pushButtonImport.hide()

    def workspaceUrl(self):
        return self._ui.lineEditWorkspace.text()

    def setWorkspaceUrl(self, url):
        self._ui.lineEditWorkspace.setText(url)

    @handle_runtime_error
    @set_wait_cursor
    def _doSearch(self, search_type):
        # Set pmrlib to go
        self._ui.listWidgetResults.clear()

        # fix up known terms to be full blown uri
        search_text = self._ui.lineEditSearch.text()
        if True:
            search_text = self._ui.lineEditSearch.text()
            label_re = re.compile('\[([\w_\d]+)\]')
            re_result = label_re.search(search_text)
            if re_result:
                search_text = re_result.group(1)
#         search_terms = search_text.split()
#         for term in search_terms:
#             rdfterm = self._annotationTool.rdfFormOfTerm(term)
#             if rdfterm:
#                 search_text = search_text + ' ' + rdfterm[1:-1]
        results = self._pmrTool.search(search_text, search_type)

        if search_type == workflow_search_string:
            results_list = results['results']
            for r in results_list:
                item = QtGui.QListWidgetItem(r['obj']['title'], self._ui.listWidgetResults)
                item.setData(QtCore.Qt.UserRole, r)
        elif search_type == ontological_search_string:
            if type(results) is dict:
                return

            for r in results:
                label = r['label']
                for sr in r['items']:
                    item = QtGui.QListWidgetItem(sr['title'] + ' [%s, %s]' % (sr['value'], label), self._ui.listWidgetResults)
                    tool_tip = 'Workspace title: %s, Ontological term: %s, Target: %s' % (sr['title'], label, sr['href'])
                    item.setToolTip(tool_tip)
                    item.setData(QtCore.Qt.UserRole, sr)

        else:
            for r in results:
                if 'title' in r and r['title']:
                    item = QtGui.QListWidgetItem(r['title'], self._ui.listWidgetResults)
                else:
                    item = QtGui.QListWidgetItem(r['target'], self._ui.listWidgetResults)
                item.setData(QtCore.Qt.UserRole, r)
Ejemplo n.º 6
0
class PMRSearchDialog(QtGui.QDialog):
    """
    Dialog for managing interaction with PMR.
    """

    def __init__(self, parent=None):
        """
        Constructor
        """
        QtGui.QDialog.__init__(self, parent)
        self._ui = Ui_PMRSearchDialog()
        self._ui.setupUi(self)

        self._pmrTool = PMRTool()
        self._annotationTool = AnnotationTool()

        self._makeConnections()

        self._updateUi()

    def _updateUi(self):
        if self._pmrTool.hasAccess():
            self._ui.loginStackedWidget.setCurrentIndex(1)
        else:
            self._ui.loginStackedWidget.setCurrentIndex(0)

    def _makeConnections(self):
        self._ui.searchButton.clicked.connect(self._searchClicked)
        self._ui.registerLabel.linkActivated.connect(self.register)
        self._ui.deregisterLabel.linkActivated.connect(self.deregister)

    @handle_runtime_error
    @set_wait_cursor
    def _searchClicked(self):
        # Set pmrlib to go
        self._ui.searchResultsListWidget.clear()

        # fix up known terms to be full blown uri
        search_text = self._ui.searchLineEdit.text()
        search_terms = search_text.split()
        for term in search_terms:
            rdfterm = self._annotationTool.rdfFormOfTerm(term)
            if rdfterm:
                search_text = search_text + " " + rdfterm[1:-1]

        results = self._pmrTool.search(search_text)

        for r in results:
            if "title" in r and r["title"]:
                item = QtGui.QListWidgetItem(r["title"], self._ui.searchResultsListWidget)
            else:
                item = QtGui.QListWidgetItem(r["target"], self._ui.searchResultsListWidget)
            item.setData(QtCore.Qt.UserRole, r)

    def getSelectedWorkspace(self):
        items = self._ui.searchResultsListWidget.selectedItems()
        for item in items:
            return item.data(QtCore.Qt.UserRole)

    def register(self, link):
        if link != "mapclient.register":
            return

        dlg = AuthoriseApplicationDialog(self)
        dlg.setModal(True)
        dlg.exec_()

        self._updateUi()

    def deregister(self):
        self._pmrTool.deregister()
        self._updateUi()