Beispiel #1
0
def set_layer_symbology(layer, symbology):
    if symbology is not None:
        doc = QDomDocument("qgis")
        doc.setContent(symbology)
        errorMsg = ''
        ctx = QgsReadWriteContext()
        layer.readSymbology(doc.firstChildElement("qgis"), errorMsg, ctx)
 def colorRampToString( self, ramp ):
     if ramp is None:
         return '';
     d=QDomDocument()
     d.appendChild(QgsSymbolLayerUtils.saveColorRamp('ramp',ramp,d))
     rampdef=d.toString()
     return rampdef
    def contentStatic(self, n):

        str_ret = FLStaticLoader.content(n, self.staticBdInfo_)
        if str_ret:
            from pineboolib.fllegacy.FLUtil import FLUtil
            util = FLUtil()
            sha = util.sha1(str_ret)
            if n in self.dictKeyFiles.keys():
                s = self.dictKeyFiles[n]

            if self.dictKeyFiles and s == sha:
                return None
            elif self.dictKeyFiles and n.find(".qs") > -1:
                self.dictKeyFiles[n] = sha

                if n.endswith(".mtd"):
                    from PyQt5.QtXml import QDomDocument
                    doc = QDomDocument(n)
                    if util.domDocumentSetContent(doc, str_ret):
                        mng = self.conn_.manager()
                        docElem = doc.documentElement()
                        mtd = mng.metadata(docElem, True)

                        if not mtd or mtd.isQuery():
                            return str_ret

                        if not mng.existTable(mtd.name()):
                            mng.createTable(mng)
                        elif (self.conn_.canRegenTables()):
                            self.conn_.regenTable(mtd.name(), mtd)

        return str_ret
def prepare_composition_from_template(layout, template_path, time):
    document = QDomDocument()
    with open(template_path) as f:
        document.setContent(f.read())
    context = QgsReadWriteContext()
    context.setPathResolver(QgsProject.instance().pathResolver())
    context.setProjectTranslator(QgsProject.instance())
    layout.readLayoutXml(document.documentElement(), document, context)
    composition_set_time(layout, time)
Beispiel #5
0
    def qgis_style(self):
        """Returns the current style, as a QDomDocument"""
        from PyQt5.QtXml import QDomDocument
        from qgis.core import QgsReadWriteContext

        doc = QDomDocument()
        elt = self.__renderer.save(doc, QgsReadWriteContext())
        doc.appendChild(elt)
        return (doc, self.__render_type)
Beispiel #6
0
def prepare_composition_from_template(layout, template_path, time):
    document = QDomDocument()
    with open(template_path) as f:
        document.setContent(f.read())
    context = QgsReadWriteContext()
    context.setPathResolver(QgsProject.instance().pathResolver())
    context.setProjectTranslator(QgsProject.instance())
    layout.readLayoutXml(document.documentElement(), document, context)
    composition_set_time(layout, time)
Beispiel #7
0
 def stringToColorRamp(self, rampdef):
     try:
         if '<' not in rampdef:
             return None
         d = QDomDocument()
         d.setContent(rampdef)
         return QgsSymbolLayerUtils.loadColorRamp(d.documentElement())
     except:
         return None
 def stringToColorRamp( self, rampdef ):
     try:
         if '<' not in rampdef:
             return None
         d=QDomDocument()
         d.setContent(rampdef)
         return QgsSymbolLayerUtils.loadColorRamp( d.documentElement() )
     except:
         return None
Beispiel #9
0
def save_project(doc: QDomDocument, file_name="./test.xml"):
    file = QFile(file_name)
    if not file.open(QIODevice.ReadWrite):
        return False
    out = QTextStream(file)
    out.setCodec("UTF-8")
    doc.save(out, 4, QDomNode.EncodingFromTextStream)
    file.close()

    return True
Beispiel #10
0
    def read_gpx_file(self):
        """
        Reads the gpx file contents and creates QDomDocument version of it.
        """
        gpx_file_path = QFile(self.gpx_path)

        self.document = QDomDocument()
        status, msg, line, col = self.document.setContent(gpx_file_path)
        if status:
            self.gpx_element = self.document.documentElement()
Beispiel #11
0
def get_layer_symbology(layer):
    doc = QDomDocument(QDomImplementation().createDocumentType("qgis",
                                                               "http://mrcc.com/qgis.dtd",
                                                               "SYSTEM"))
    rootNode = doc.createElement("qgis")
    doc.appendChild(rootNode)
    errorMsg = ''
    ctx = QgsReadWriteContext()
    layer.writeSymbology(rootNode, doc, errorMsg, ctx)
    return doc.toByteArray()
Beispiel #12
0
 def createObjectsTree(self, filePath):
     if os.path.exists(filePath):
         f = QFile(filePath)
         if f.open(QIODevice.ReadOnly):
             document = QDomDocument()
             if document.setContent(f):
                 newModel = RDFNavigatorObjectsDomModel(document, self)
                 self.objectsStructureView.setModel(newModel)
                 self.objectsStructureModel = newModel
             f.close()
    def __init__(self, session, server):
        self.session = session
        self.server = server

        self._xml = QDomDocument()

        global instance
        instance = self

        self._locked_session_paths = set()
Beispiel #14
0
 def save(self):
     name = QFileDialog.getSaveFileName(self, 'Save File')[0]
     if name:
         doc = QDomDocument()
         formatter = XmlFormat(doc)
         doc.appendChild(formatter.projectToXml(self))
         saveFile = open(name,'w')
         saveFile.write(doc.toString())
         saveFile.close()
         self.unsavedChanges = False
         self.setWindowTitle("playbook - {}".format(self.projectName))
Beispiel #15
0
def copyQptToCompositor(composition_dest, qptDict):
    project = QgsProject()
    layout = QgsLayout(project)
    with open(qptDict['caminho'], 'rt') as myTemplateFile:
        myTemplateContent = myTemplateFile.read()
    doc = QDomDocument()
    doc.setContent(myTemplateContent)

    items, sucess = layout.loadFromTemplate(doc, QgsReadWriteContext(), False)
    if sucess:
        for item in items:
            cloneItem(item, composition_dest, qptDict['x_0'], qptDict['y_0'])
Beispiel #16
0
 def load(self):
     name = QFileDialog.getOpenFileName(self, 'Load File')[0]
     if name:
         doc = QDomDocument(name)
         openFile = QFile(name)
         doc.setContent(openFile)
         formatter = XmlFormat(doc)
         formatter.xmlToProject(self)
         openFile.close()
         self.centralWidget().update()
         self.setWindowTitle("playbook - {}".format(self.projectName))
         self.overview.addFrameWidget()
 def on_pushButton_item_clicked(self):
     text = self.lineEdit_item.text()
     # 如果这个项目已经存在就不再添加
     items = self.listWidget_item.findItems(text, Qt.MatchContains)
     if len(items):
         return
     self.listWidget_item.addItem(text)
     n = QDomDocument().createElement("item")
     domtext = QDomDocument().createTextNode(text)
     n.appendChild(domtext)
     self.element.appendChild(n)
     self.itemlist.append(n)
Beispiel #18
0
    def layoutLoader(self, template_source, layout_name, title_text):
        """ Generate the layout """
        from qgis.core import (QgsProject, QgsPrintLayout, QgsReadWriteContext)
        from qgis.utils import iface
        from PyQt5.QtXml import QDomDocument

        #template_source = '/home/user/Document/Template.qpt'
        #layout_name = 'NewLayout'
        #title_text = 'New Title'

        # Create objects lm = layout manager, l = print layout
        lm = QgsProject.instance().layoutManager()
        l = QgsPrintLayout(QgsProject.instance())
        l.initializeDefaults()

        # Load template file and load it into the layout (l)
        template_file = open(template_source, 'r+', encoding='utf-8')
        template_content = template_file.read()
        template_file.close()
        document = QDomDocument()
        document.setContent(template_content)
        context = QgsReadWriteContext()
        l.loadFromTemplate(document, context)

        # Give the layout a name (must be unique)
        l.setName(layout_name)

        # Get current canvas extent and apply that to all maps (items) in layout
        # Replace any text "{{title}}" in any layout label with the dialog Title text
        canvas = iface.mapCanvas()
        for item in l.items():
            if item.type() == 65639:  # Map
                item.zoomToExtent(canvas.extent())
            if item.type() == 65641:  # Label
                item.setText(item.text().replace('{{title}}', title_text))

        # Add layout to layout manager
        l.refresh()
        lm.addLayout(l)

        # Open and show the layout in designer
        try:
            iface.openLayoutDesigner(l)
        except:
            oopsBox = QMessageBox()
            oopsBox.setIcon(QMessageBox.Warning)
            oopsBox.setText(
                self.
                tr('Ooops. Something went wrong. Trying to open the generated layout ({}) returned errors.'
                   .format(l.name())))
            oopsBox.setWindowTitle(self.tr('Layout Loader'))
            oopsBox.exec_()
Beispiel #19
0
    def __init__(self,
                 parent=None,
                 xmlelement='QDomElement:None',
                 index=0,
                 edit=False):
        super().__init__(parent)
        self.element = xmlelement
        self.index = index
        self.edit = edit
        self.namelist = []
        self.setStyleSheet("background-color: rgb(255, 0, 0);border:none;")
        width = int(self.element.attribute(
            "width")) * 7 if self.element.attribute("width") else 13
        height = int(self.element.attribute(
            "height")) * 22 if self.element.attribute("height") else 22
        self.resize(width, height)
        font = QFont()
        if self.element.hasAttribute("size"):
            try:
                font.setPointSize(float(self.element.attribute("size")))
            except:
                pass
        self.setFont(font)

        self.clicked.connect(self.on_Clicked)
        self.qdom = QDomDocument()
        self.many = self.element.attribute("many")
        self.direction = self.element.attribute("direction")
        if self.many == '2':
            self.set_namelist()

        else:
            self.uid = self.element.firstChildElement("UserID")
            self.uname = self.element.firstChildElement("UserName")
            if self.uid.isNull():
                self.uid = self.qdom.createElement('UserID')
                self.uid = self.element.appendChild(self.uid)
            if self.uname.isNull():
                self.uname = self.qdom.createElement('UserName')
                self.uname = self.element.appendChild(self.uname)
            self.namelist.append(
                (self.uid.toElement(), self.uname.toElement()))
            # self.setText(self.uid.nodeValue() + ' ' + self.uname.nodeValue())
        text = ''
        for item in self.namelist:
            text += item[0].text() + ' ' + item[1].text()
            if self.direction == '1' and self.many == '2':
                text += '\n'
            elif self.direction == '1' and self.many == '2':
                text += '  '
        self.setText(text)
    def init_(self, aclXml=None):
        """
        Lee el fichero "acl.xml" y establece una nueva lista de control de acceso.

        Si el fichero "acl.xml" no se puede leer, la lista de control de acceso queda vacía y
        no se procesará ningún control de acceso sobre ningún objeto.

        @param  aclXml  Contenido XML con la definición de la lista de control de acceso.
        """

        util = FLUtil()
        if aclXml is None:
            aclXml = self._prj.conn.managerModules().content("acl.xml")

        doc = QDomDocument("ACL")
        if self.accessControlList_:
            self.accessControlList_.clear()
            del self.accessControlList_
            self.accessControlList_ = {}

        if aclXml and not util.domDocumentSetContent(doc, aclXml):
            logger.error("Lista de control de acceso errónea")
            return

        self.accessControlList_ = {}
        # self.accessControlList_.setAutoDelete(True)

        docElem = doc.documentElement()
        no = docElem.firstChild()

        while not no.isNull():
            e = no.toElement()
            if e:
                if e.tagName() == "name":
                    self.name_ = e.text()
                    no = no.nextSibling()
                    continue

                ac = FLAccessControlFactory().create(e.tagName())
                if ac:
                    ac.set(e)
                    logger.debug("****************** %s %s %s", ac.type(),
                                 ac.name(), ac.user(), ac)
                    self.accessControlList_["%s::%s::%s" %
                                            (ac.type(), ac.name(),
                                             ac.user())] = ac
                    no = no.nextSibling()
                    continue

            no = no.nextSibling()
    def init_(self, aclXml=None):
        """
        Lee el fichero "acl.xml" y establece una nueva lista de control de acceso.

        Si el fichero "acl.xml" no se puede leer, la lista de control de acceso queda vacía y
        no se procesará ningún control de acceso sobre ningún objeto.

        @param  aclXml  Contenido XML con la definición de la lista de control de acceso.
        """

        util = FLUtil()
        if aclXml is None:
            from pineboolib.pncontrolsfactory import aqApp
            aclXml = aqApp.db().managerModules().content("acl.xml")

        doc = QDomDocument("ACL")
        if self.accessControlList_:
            self.accessControlList_.clear()
            del self.accessControlList_
            self.accessControlList_ = []

        if aclXml and not util.domDocumentSetContent(doc, aclXml):
            qWarning("FLAccessControlList : " + FLUtil().tr("Lista de control de acceso errónea"))
            return

        self.accessControlList_ = {}
        # self.accessControlList_.setAutoDelete(True)

        docElem = doc.documentElement()
        no = docElem.firstChild()

        while not no.isNull():
            e = no.toElement()
            if e:
                if e.tagName() == "name":
                    self.name_ = e.text()
                    no = no.nextSibling()
                    continue

                ac = FLAccessControlFactory().create(e.tagName())
                if ac:
                    ac.set(e)
                    self.accessControlList_["%s::%s::%s" %
                                            (ac.type(), ac.name(), ac.user())] = ac
                    no = no.nextSibling()
                    continue

            no = no.nextSibling()
def parseTextChildren(document = QDomDocument(), elRead = QDomElement(), elWrite = QDomElement(), emphasisStyle = {}, strongStyle = {}):
    for n in range(0, elRead.childNodes().size()):
        childNode = elRead.childNodes().item(n)
        if childNode.isText():
            if elWrite.hasChildNodes() and str(childNode.nodeValue()).startswith(" ") is False:
                elWrite.appendChild(document.createTextNode(" "))
            elWrite.appendChild(document.createTextNode(str(childNode.nodeValue())))
        elif childNode.hasChildNodes():
            childNode = childNode.toElement()
            fontFamily = str(childNode.attribute("font-family"))
            fontWeight = str(childNode.attribute("font-weight", "400"))
            fontItalic = str(childNode.attribute("font-style"))
            fontStrikeThrough = str(childNode.attribute("text-decoration"))
            fontBaseLine = str(childNode.attribute("baseline-shift"))
            newElementMade = False

            emphasis = False
            strong = False
            if len(emphasisStyle.keys()) > 0:
                emphasis = compare_styles(emphasisStyle, fontFamily, fontWeight, fontItalic)
            else:
                if fontItalic == "italic":
                    emphasis = True
            if len(strongStyle.keys()) > 0:
                strong = compare_styles(strongStyle, fontFamily, fontWeight, fontItalic)
            else:
                if fontWeight == "bold" or int(fontWeight) > 400:
                    strong = True

            if strong:
                    newElement = document.createElement("strong")
                    newElementMade = True
            elif emphasis:
                    newElement = document.createElement("emphasis")
                    newElementMade = True
            elif fontStrikeThrough == "line-through":
                    newElement = document.createElement("strikethrough")
                    newElementMade = True
            elif fontBaseLine.isalnum():
                if (fontBaseLine == "super"):
                    newElement = document.createElement("sup")
                    newElementMade = True
                elif (fontBaseLine == "sub"):
                    newElement = document.createElement("sub")
                    newElementMade = True

            if newElementMade is True:
                parseTextChildren(document, childNode, newElement, emphasisStyle, strongStyle)
                elWrite.appendChild(newElement)
            else:
                parseTextChildren(document, childNode, elWrite, emphasisStyle, strongStyle)

        # If it is not a text node, nor does it have children(which could be textnodes),
        # we should assume it's empty and ignore it.
    elWrite.normalize()
    for e in range(0, elWrite.childNodes().size()):
        el = elWrite.childNodes().item(e)
        if el.isText():
            eb = el.nodeValue()
            el.setNodeValue(eb.replace("  ", " "))
Beispiel #23
0
    def openFile(self):
        filePath, _ = QFileDialog.getOpenFileName(self, "Open File",
                self.xmlPath, "XML files (*.xml);;HTML files (*.html);;"
                "SVG files (*.svg);;User Interface files (*.ui)")

        if filePath:
            f = QFile(filePath)
            if f.open(QIODevice.ReadOnly):
                document = QDomDocument()
                if document.setContent(f):
                    newModel = DomModel(document, self)
                    self.view.setModel(newModel)
                    self.model = newModel
                    self.xmlPath = filePath

                f.close()
Beispiel #24
0
    def get_symbology(self):
        """Returns the associated QGIS symbology

        Return
        ------
        A tuple (QDomDocument, int)
          The QDomDocument can be loaded by QgsFeatureRenderer.load()
          The int gives the renderer type
        or None, None
        """
        symbology = self.__config.get("symbology")
        if symbology is None:
            return None, None
        doc = QDomDocument()
        doc.setContent(symbology)
        return (doc, self.__config.get("symbology_type"))
 def on_plainTextEdit_text_textChanged(self):
     p_str = self.plainTextEdit_text.toPlainText()
     if self.element.firstChild().isNull():
         text = QDomDocument().createTextNode(p_str)
         self.element.appendChild(text)
     else:
         self.element.firstChild().setNodeValue(p_str)
     self.edited.emit()
Beispiel #26
0
    def openFile(self):
        filePath, _ = QFileDialog.getOpenFileName(
            self, "Open File", self.xmlPath,
            "XML files (*.xml);;HTML files (*.html);;"
            "SVG files (*.svg);;User Interface files (*.ui)")

        if filePath:
            f = QFile(filePath)
            if f.open(QIODevice.ReadOnly):
                document = QDomDocument()
                if document.setContent(f):
                    newModel = DomModel(document, self)
                    self.view.setModel(newModel)
                    self.model = newModel
                    self.xmlPath = filePath

                f.close()
Beispiel #27
0
    def contentStatic(self,
                      file_name: str,
                      only_path: bool = False) -> Optional[str]:
        """
        Return the contents of a file by static loading from the local disk.

        @param file_name File name.
        @return String with the contents of the file or None in case of error.
        """

        str_ret = pnmodulesstaticloader.PNStaticLoader.content(
            file_name, self.static_db_info_, only_path)
        if str_ret is not None:

            s = ""
            util = flutil.FLUtil()
            sha = util.sha1(str_ret)
            if file_name in self.dict_key_files_.keys():
                s = self.dict_key_files_[file_name]

            if s == sha:
                return None

            elif self.dict_key_files_ and file_name.find(".qs") > -1:
                self.dict_key_files_[file_name] = sha

            if file_name.endswith(".mtd"):
                from PyQt5.QtXml import QDomDocument  # type: ignore

                doc = QDomDocument(file_name)
                if util.domDocumentSetContent(doc, str_ret):
                    mng = self.conn_.connManager().manager()
                    docElem = doc.documentElement()
                    mtd = mng.metadata(docElem, True)

                    if not mtd or mtd.isQuery():
                        return str_ret

                    if not mng.existsTable(mtd.name()):
                        mng.createTable(mng)
                    elif self.conn_.canRegenTables():
                        self.conn_.regenTable(mtd.name(), mtd)

        return str_ret
Beispiel #28
0
def openFile(project_path, session_name, full_client_id):
    saved_connections.clear()

    global file_path
    file_path = "%s.xml" % project_path

    if os.path.isfile(file_path):
        try:
            file = open(file_path, 'r')
        except:
            sys.stderr.write('unable to read file %s\n' % file_path)
            app.quit()
            return

        xml = QDomDocument()
        xml.setContent(file.read())

        content = xml.documentElement()

        if content.tagName() != "RAY-JACKPATCH":
            file.close()
            NSMServer.openReply()
            return

        cte = content.toElement()
        node = cte.firstChild()

        while not node.isNull():
            el = node.toElement()
            if el.tagName() != "connection":
                continue

            port_from = el.attribute('from')
            port_to = el.attribute('to')

            saved_connections.append((port_from, port_to))

            node = node.nextSibling()

        makeMayConnections()

    NSMServer.openReply()
    setDirtyClean()
    dirty_checker.start()
Beispiel #29
0
    def getPrintLayoutFromQptPath(self, path, newValue):
        '''
        Returns a QgsPrintLayout from a template indicated by path.
        Also sets the composition variable 'variableNames' to newvalue
        '''
        # Load template from file
        layout = QgsPrintLayout(QgsProject.instance())
        # self.updateQptVariables(layout, newValue)
        # layout.initializeDefaults()
        with open(path) as template:
            templateContent = template.read()
        doc = QDomDocument()
        doc.setContent(templateContent)

        # adding to existing items
        #items, ok = layout.loadFromTemplate(doc, QgsReadWriteContext(), False)
        layout.loadFromTemplate(doc, QgsReadWriteContext())
        self.updateQptVariables(layout, str(newValue))
        return layout
Beispiel #30
0
    def _get_history_xml_document_element(self):
        if not self._is_init():
            return None

        file_path = self._get_history_full_path()

        xml = QDomDocument()

        try:
            history_file = open(file_path, 'r')
            xml.setContent(history_file.read())
            history_file.close()
        except BaseException:
            return None

        SNS_xml = xml.documentElement()
        if SNS_xml.tagName() != 'SNAPSHOTS':
            return None

        return SNS_xml
Beispiel #31
0
    def getHistoryXmlDocumentElement(self):
        if not self.isInit():
            return None

        file_path = self.getHistoryFullPath()

        xml = QDomDocument()

        try:
            history_file = open(file_path, 'r')
            xml.setContent(history_file.read())
            history_file.close()
        except BaseException:
            return None

        SNS_xml = xml.documentElement()
        if SNS_xml.tagName() != 'SNAPSHOTS':
            return None

        return SNS_xml
Beispiel #32
0
    def createSystemTable(self, n):
        """
        Crea una tabla del sistema.

        Este método lee directamente de disco el fichero con la descripción de una tabla
        del sistema y la crea en la base de datos. Su uso normal es para inicializar
        el sistema con tablas iniciales.

        @param n Nombre de la tabla.
        @return Un objeto FLTableMetaData con los metadatos de la tabla que se ha creado, o
          False si no se pudo crear la tabla o ya existía
        """
        util = FLUtil()
        if not self.existsTable(n):
            doc = QDomDocument()
            _path = filedir("..", "share", "pineboo", "tables")
            dir = qsatype.Dir_Class(_path)
            _tables = dir.entryList("%s.mtd" % n)

            for f in _tables:
                path = "%s/%s" % (_path, f)
                _file = QtCore.QFile(path)
                _file.open(QtCore.QIODevice.ReadOnly)
                _in = QtCore.QTextStream(_file)
                _data = _in.readAll()
                if not util.domDocumentSetContent(doc, _data):
                    logger.warn(
                        "FLManager::createSystemTable: %s",
                        util.tr(
                            "Error al cargar los metadatos para la tabla %1").
                        arg(n))
                    return False
                else:
                    docElem = doc.documentElement()

                    mtd = self.createTable(self.metadata(docElem, True))
                    return mtd

                f.close()

        return False
Beispiel #33
0
def cloneItem(item, composition_dest, x_0, y_0):
    ref_point = item.referencePoint()
    item.setReferencePoint(QgsLayoutItem.UpperLeft)
    original_x = item.pagePos().x()
    original_y = item.pagePos().y()
    final_x = original_x + x_0
    final_y = original_y + y_0

    # Create doc xml
    doc = QDomDocument('Clipboard')
    element = doc.createElement('Copied items')
    context = QgsReadWriteContext()
    item.writeXml(element, doc, context)

    # Add doc xml
    composition_dest.addItemsFromXml(element, doc, context,
                                     QPointF(final_x, final_y))
    composition_dest.itemById(item.id()).attemptMove(
        QgsLayoutPoint(final_x, final_y))
    composition_dest.itemById(item.id()).refresh()
    item.setReferencePoint(ref_point)
    def updateRasterToken(self, layer, uri):
        """ http://gis.stackexchange.com/questions/62610/changing-data-source-of-layer-in-qgis """
        XMLDocument = QDomDocument("style")
        XMLMapLayers = QDomElement()
        XMLMapLayers = XMLDocument.createElement("maplayers")
        XMLMapLayer = QDomElement()
        XMLMapLayer = XMLDocument.createElement("maplayer")
        layer.writeLayerXML(XMLMapLayer,XMLDocument)

        # modify DOM element with new layer reference
        XMLMapLayer.firstChildElement("datasource").firstChild().setNodeValue( uri )
        XMLMapLayers.appendChild(XMLMapLayer)
        XMLDocument.appendChild(XMLMapLayers)

        # reload layer definition
        layer.readLayerXML(XMLMapLayer)
        layer.reload()

        # apply to canvas and legend
        self.iface.actionDraw().trigger()
        self.iface.legendInterface().refreshLayerSymbology(layer)
Beispiel #35
0
 def __init__(
     self,
     parent=None,
 ):
     super(RDFNavigatorProjectStructure, self).__init__(parent)
     self.setupUi(self)
     self.basicStructureWidget.itemDoubleClicked.connect(
         self.createOpenFileRequest)
     self.childType = None
     self.objectsStructureModel = RDFNavigatorObjectsDomModel(
         QDomDocument(), self)
     self.objectsStructureView.setModel(self.objectsStructureModel)
Beispiel #36
0
    def saveFile(self, executable, config_file, arguments_line, save_signal,
                 no_save_level, stop_signal, wait_window):
        try:
            file = open(self.path, 'w')
        except BaseException:
            return

        if not save_signal:
            save_signal = 0

        xml = QDomDocument()
        p = xml.createElement('RAY-PROXY')
        p.setAttribute('VERSION', ray.VERSION)
        p.setAttribute('executable', executable)
        p.setAttribute('arguments', arguments_line)
        p.setAttribute('config_file', config_file)
        p.setAttribute('save_signal', str(int(save_signal)))
        p.setAttribute('no_save_level', str(no_save_level))
        p.setAttribute('stop_signal', str(int(stop_signal)))
        p.setAttribute('wait_window', wait_window)

        xml.appendChild(p)

        contents = "<?xml version='1.0' encoding='UTF-8'?>\n"
        contents += "<!DOCTYPE RAY-PROXY>\n"
        contents += xml.toString()

        file.write(contents)
        file.close()

        self.readFile()
Beispiel #37
0
    def remove_bookmark(self, spath):
        if not self.written:
            return

        contents = self._get_contents()
        if not contents:
            self.written = False
            return

        url = pathlib.Path(spath).as_uri()

        xml = QDomDocument()
        xml.setContent(contents)
        content = xml.documentElement()
        if content.tagName() != 'xbel':
            self.written = False
            return

        node = content.firstChild()
        while not node.isNull():
            el = node.toElement()
            if el.tagName() == 'bookmark':
                if el.attribute('href') == url:
                    content.removeChild(node)
                    break

            node = node.nextSibling()
        else:
            self.written = False
            return

        self._print_contents(xml.toString())
        self.written = False
Beispiel #38
0
    def __init__(self, parent, icon, size=None, padding=None, color=None):
        QWidget.__init__(self, parent)
        padding = padding or 0
        self._theme_manager = ThemeManager.get(self)

        self._color = format_color(
            color or self._theme_manager.get_color('button_foreground'),
            ColorFormat.rgb_string_256)

        self._svgdoc = QDomDocument()
        self._icon_widget = QSvgWidget(self)

        self.loadIcon(icon)

        if size:
            self._icon_widget.setFixedSize(
                QSize(size.width() - 2 * padding,
                      size.height() - 2 * padding))

        self._layout = QHBoxLayout(self)
        self._layout.setContentsMargins(padding, padding, padding, padding)
        self._layout.addWidget(self._icon_widget, Qt.AlignCenter)
Beispiel #39
0
    def __init__(self):
        super(MainWindow, self).__init__()

        self.fileMenu = self.menuBar().addMenu("&File")
        self.fileMenu.addAction("&Open...", self.openFile, "Ctrl+O")
        self.fileMenu.addAction("E&xit", self.close, "Ctrl+Q")

        self.xmlPath = ""
        self.model = DomModel(QDomDocument(), self)
        self.view = QTreeView(self)
        self.view.setModel(self.model)

        self.setCentralWidget(self.view)
        self.setWindowTitle("Simple DOM Model")
Beispiel #40
0
    def toXml(self, obj_, includeChildren=True, includeComplexTypes=False):
        xml_ = QDomDocument()

        if not obj_:
            return xml_

        e = xml_.createElement(type(obj_).__name__)
        e.setAttribute("class", type(obj_).__name__)
        xml_.appendChild(e)

        _meta = obj_.metaObject()

        num = _meta.propertyCount()
        i = 0
        _p_properties = []
        while i < num:
            mp = _meta.property(i)
            if mp.name() in _p_properties:
                i += 1
                continue

            _p_properties.append(mp.name())

            val = getattr(obj_, mp.name(), None)
            try:
                val = val()
            except:
                pass

            if val is None:
                i += 1
                continue

            val = str(val)

            if not val and not includeComplexTypes:
                i += 1
                continue
            e.setAttribute(mp.name(), val)

            i += 1

        if includeChildren == True:

            for child in obj_.children():

                itd = self.toXml(child, includeChildren, includeComplexTypes)
                xml_.firstChild().appendChild(itd.firstChild())
        return xml_
    def installACL(self, idacl):
        """
        Crea un nuevo fichero "acl.xml" y lo almacena sustituyendo el anterior, en el caso de que exista.

        @param idacl Identificador del registro de la tabla "flacls" a utilizar para crear "acl.xml".
        """

        util = FLUtil()

        doc = QDomDocument("ACL")

        root = doc.createElement("ACL")
        doc.appendChild(root)

        name = doc.createElement("name")
        root.appendChild(name)
        n = doc.createTextNode(idacl)
        name.appendChild(n)

        q = FLSqlQuery()

        q.setTablesList("flacs")
        q.setSelect("idac,tipo,nombre,iduser,idgroup,degroup,permiso")
        q.setFrom("flacs")
        q.setWhere("idacl='%s'" % idacl)
        q.setOrderBy("prioridad DESC, tipo")
        q.setForwarOnly(True)

        if q.exec_():
            step = 0
            progress = util.ProgressDialog(
                util.tr("Instalando control de acceso..."), None, q.size(), None, None, True)
            progress.setCaption(util.tr("Instalando ACL"))
            progress.setMinimumDuration(0)
            progress.setProgress(++step)
            while q.next():
                self.makeRule(q, doc)
                progress.setProgress(++step)
            
            from pineboolib.pnconrolsfactory import aqApp
            aqApp.db().managerModules().setContent("acl.xml", "sys", doc.toString())
Beispiel #42
0
    def run(self):
        """
        Perform ontology import from .graphml file format.
        """
        file = QFile(self.filepath)

        try:

            if not file.open(QIODevice.ReadOnly):
                raise IOError('File not found: {}'.format(self.filepath))

            document = QDomDocument()
            if not document.setContent(file):
                raise ParseError('could not initialize DOM document')

            # 1) INITIALIZE XML ROOT ELEMENT
            root = document.documentElement()

            # 2) READ KEYS FROM THE DOCUMENT
            key = root.firstChildElement('key')
            while not key.isNull():
                if key.attribute('yfiles.type', '') == 'nodegraphics':
                    self.keys['node_key'] = key.attribute('id')
                if key.attribute('yfiles.type', '') == 'edgegraphics':
                    self.keys['edge_key'] = key.attribute('id')
                key = key.nextSiblingElement('key')

            # 3) GENERATE ARBITRARY DIAGRAM SCENE
            self.scene = self.mainwindow.createScene(DiagramScene.MaxSize, DiagramScene.MaxSize)

            # 4) INITIALIZE GRAPH ELEMENT
            graph = root.firstChildElement('graph')

            # 5) GENERATE NODES
            element = graph.firstChildElement('node')
            while not element.isNull():

                # noinspection PyArgumentList
                QApplication.processEvents()

                node = None
                item = self.itemFromGraphmlNode(element)

                try:

                    if item is Item.AttributeNode:
                        node = self.buildAttributeNode(element)
                    elif item is Item.ComplementNode:
                        node = self.buildComplementNode(element)
                    elif item is Item.ConceptNode:
                        node = self.buildConceptNode(element)
                    elif item is Item.DatatypeRestrictionNode:
                        node = self.buildDatatypeRestrictionNode(element)
                    elif item is Item.DisjointUnionNode:
                        node = self.buildDisjointUnionNode(element)
                    elif item is Item.DomainRestrictionNode:
                        node = self.buildDomainRestrictionNode(element)
                    elif item is Item.EnumerationNode:
                        node = self.buildEnumerationNode(element)
                    elif item is Item.IndividualNode:
                        node = self.buildIndividualNode(element)
                    elif item is Item.IntersectionNode:
                        node = self.buildIntersectionNode(element)
                    elif item is Item.RangeRestrictionNode:
                        node = self.buildRangeRestrictionNode(element)
                    elif item is Item.RoleNode:
                        node = self.buildRoleNode(element)
                    elif item is Item.RoleChainNode:
                        node = self.buildRoleChainNode(element)
                    elif item is Item.RoleInverseNode:
                        node = self.buildRoleInverseNode(element)
                    elif item is Item.UnionNode:
                        node = self.buildUnionNode(element)
                    elif item is Item.ValueDomainNode:
                        node = self.buildValueDomainNode(element)
                    elif item is Item.ValueRestrictionNode:
                        node = self.buildValueRestrictionNode(element)

                    if not node:
                        raise ValueError('unknown node with id {}'.format(element.attribute('id')))

                except Exception as e:
                    self.errors.append(e)
                else:
                    self.scene.addItem(node)
                    self.scene.sgnItemAdded.emit(node)
                    self.scene.guid.update(node.id)
                finally:
                    element = element.nextSiblingElement('node')

            # 6) GENERATE EDGES
            element = graph.firstChildElement('edge')
            while not element.isNull():

                # noinspection PyArgumentList
                QApplication.processEvents()

                edge = None
                item = self.itemFromGraphmlNode(element)

                try:

                    if item is Item.InclusionEdge:
                        edge = self.buildInclusionEdge(element)
                    elif item is Item.InputEdge:
                        edge = self.buildInputEdge(element)
                    elif item is Item.InstanceOfEdge:
                        edge = self.buildInstanceOfEdge(element)

                    if not edge:
                        raise ValueError('unknown edge with id {}'.format(element.attribute('id')))

                except Exception as e:
                    self.errors.append(e)
                else:
                    self.scene.addItem(edge)
                    self.scene.sgnItemAdded.emit(edge)
                    self.scene.guid.update(edge.id)
                    edge.updateEdge()
                finally:
                    element = element.nextSiblingElement('edge')

            # 7) CENTER DIAGRAM
            R1 = self.scene.sceneRect()
            R2 = self.scene.visibleRect(margin=0)
            moveX = snapF(((R1.right() - R2.right()) - (R2.left() - R1.left())) / 2, DiagramScene.GridSize)
            moveY = snapF(((R1.bottom() - R2.bottom()) - (R2.top() - R1.top())) / 2, DiagramScene.GridSize)
            if moveX or moveY:
                collection = [x for x in self.scene.items() if x.node or x.edge]
                for item in collection:
                    # noinspection PyArgumentList
                    QApplication.processEvents()
                    item.moveBy(moveX, moveY)
                for item in collection:
                    # noinspection PyArgumentList
                    QApplication.processEvents()
                    if item.edge:
                        item.updateEdge()

            # 8) RESIZE DIAGRAM SCENE
            R3 = self.scene.visibleRect(margin=20)
            size = max(R3.width(), R3.height(), DiagramScene.MinSize)
            self.scene.setSceneRect(QRectF(-size / 2, -size / 2, size, size))

        finally:

            file.close()
Beispiel #43
0
    def qml2Sld(self):
        try:
            layer = self.allMapLayers[self.dlg.comboBox.currentIndex()]
        except:
            return

        qmlDocument = QDomDocument()
        root = qmlDocument.createElement('SLD4raster')
        qmlDocument.appendChild(root)
        qgisNode = qmlDocument.createElement('qgis')
        root.appendChild(qgisNode)

        errorMessage = None
        context = QgsReadWriteContext()
        layer.writeSymbology(qgisNode, qmlDocument, errorMessage, context)

        qmlString = minidom.parseString(qmlDocument.toString().encode('utf-8'))  # for non ASCII labels.

        sldRoot = Element('sld:StyledLayerDescriptor')
        sldRoot.attrib['xmlns'] = 'http://www.opengis.net/sld'
        sldRoot.attrib['xmlns:sld'] = 'http://www.opengis.net/sld'
        sldRoot.attrib['xmlns:ogc'] = 'http://www.opengis.net/ogc'
        sldRoot.attrib['xmlns:gml'] = 'http://www.opengis.net/gml'
        sldRoot.attrib['version'] = '1.0.0'

        userLayer = SubElement(sldRoot, 'sld:UserLayer')
        layerFeatureConstraints = SubElement(userLayer, 'sld:LayerFeatureConstraints')
        featureTypeConstraint = SubElement(layerFeatureConstraints, 'sld:FeatureTypeConstraint')
        userStyle = SubElement(userLayer, 'sld:UserStyle')

        styleName = SubElement(userStyle, 'sld:Name')
        styleName.text = self.dlg.comboBox.currentText()

        styleDescription = SubElement(userStyle, 'sld:Description')
        styleDescription.text = 'Generated by SLD4raster - https://cbsuygulama.wordpress.com/sld4raster'

        styleTitle = SubElement(userStyle, 'sld:Title')
        featureTypeStyle = SubElement(userStyle, 'sld:FeatureTypeStyle')
        featureName = SubElement(featureTypeStyle, 'sld:Name')
        featureRule = SubElement(featureTypeStyle, 'sld:Rule')
        rasterSymbolizer = SubElement(featureRule, 'sld:RasterSymbolizer')
        geometry = SubElement(rasterSymbolizer, 'sld:Geometry')
        ogcPropertyName = SubElement(geometry, 'ogc:PropertyName')
        ogcPropertyName.text = 'grid'
        opacity = SubElement(rasterSymbolizer, 'sld:Opacity')

        ###Getting raster type parameters
        rasterType = str(qmlString.getElementsByTagName('rasterrenderer')[0].attributes['type'].value)
        isGradient = 'gradient' in qmlString.getElementsByTagName('rasterrenderer')[0].attributes.keys()

        ###SLD for multiband raster
        if rasterType == 'multibandcolor':
            ###Getting RGB band order.
            redBand = str(qmlString.getElementsByTagName('rasterrenderer')[0].attributes['redBand'].value)
            greenBand = str(qmlString.getElementsByTagName('rasterrenderer')[0].attributes['greenBand'].value)
            blueBand = str(qmlString.getElementsByTagName('rasterrenderer')[0].attributes['blueBand'].value)

            channelSelection = SubElement(rasterSymbolizer, 'sld:ChannelSelection')

            redChannel = SubElement(channelSelection, 'sld:RedChannel')
            redSourceChannel = SubElement(redChannel, 'sld:SourceChannelName')
            redSourceChannel.text = redBand

            greenChannel = SubElement(channelSelection, 'sld:GreenChannel')
            greenSourceChannel = SubElement(greenChannel, 'sld:SourceChannelName')
            greenSourceChannel.text = greenBand

            blueChannel = SubElement(channelSelection, 'sld:BlueChannel')
            blueSourceChannel = SubElement(blueChannel, 'sld:SourceChannelName')
            blueSourceChannel.text = blueBand

        ###SLD for gradiented (black to white) raster
        elif isGradient:
            blackWhiteColor = ['#000000', '#FFFFFF']
            colorMap = SubElement(rasterSymbolizer, 'sld:ColorMap')
            gradientType = qmlString.getElementsByTagName('rasterrenderer')[0].attributes['gradient'].value
            blackWhiteValue = [qmlString.getElementsByTagName('minValue')[0].firstChild.nodeValue,
                               qmlString.getElementsByTagName('maxValue')[0].firstChild.nodeValue]

            ###Getting gradient color type
            if gradientType == 'WhiteToBlack':
                blackWhiteColor.reverse()

            for i in range(len(blackWhiteColor)):
                colorMapEntry = SubElement(colorMap, 'sld:ColorMapEntry')
                colorMapEntry.attrib['color'] = blackWhiteColor[i]
                colorMapEntry.attrib['opacity'] = '1.0'
                colorMapEntry.attrib['quantity'] = blackWhiteValue[i]

        ###SLD for singleband raster
        else:
            colorMap = SubElement(rasterSymbolizer, 'sld:ColorMap')

            ###Getting color ramp type
            colorType = str(qmlString.getElementsByTagName('colorrampshader')[0].attributes['colorRampType'].value)
            if colorType == 'DISCRETE':
                colorMap.attrib['type'] = "intervals"

            ###Getting color values
            colorValue = list()
            itemlist = qmlString.getElementsByTagName('item')
            for n in itemlist:
                colorValue.append(
                    [n.attributes['color'].value, n.attributes['value'].value, n.attributes['label'].value])

            ###Color values posting to SLD document
            for i in range(len(colorValue)):
                colorMapEntry = SubElement(colorMap, 'sld:ColorMapEntry')
                colorMapEntry.attrib['color'] = colorValue[i][0]
                colorMapEntry.attrib['quantity'] = colorValue[i][1]
                colorMapEntry.attrib['label'] = colorValue[i][2]
                colorMapEntry.attrib['opacity'] = '1.0'

        rasterOpacity = str(qmlString.getElementsByTagName('rasterrenderer')[0].attributes['opacity'].value)
        opacity.text = rasterOpacity
        textSLD = minidom.parseString(tostring(sldRoot))
        self.dlg.sldText1.setText(textSLD.toprettyxml(indent="    "))
Beispiel #44
0
    def run(self):
        """
        Perform ontology import from .graphol file format.
        """
        file = QFile(self.filepath)

        try:

            if not file.open(QIODevice.ReadOnly):
                raise IOError('File not found: {}'.format(self.filepath))

            document = QDomDocument()
            if not document.setContent(file):
                raise ParseError('could not initialize DOM document')

            # 1) INITIALIZE XML ROOT ELEMENT
            root = document.documentElement()

            # 2) READ GRAPH INITIALIZATION DATA
            graph = root.firstChildElement('graph')
            w = int(graph.attribute('width', str(self.mainwindow.diagramSize)))
            h = int(graph.attribute('height', str(self.mainwindow.diagramSize)))

            # 3) GENERATE DIAGRAM SCENE
            self.scene = self.mainwindow.createScene(width=w, height=h)
            self.scene.document.path = self.filepath

            # 4) GENERATE NODES
            element = graph.firstChildElement('node')
            while not element.isNull():

                # noinspection PyArgumentList
                QApplication.processEvents()

                node = None
                item = self.itemFromGrapholNode(element)

                try:

                    if item is Item.AttributeNode:
                        node = self.buildAttributeNode(element)
                    elif item is Item.ComplementNode:
                        node = self.buildComplementNode(element)
                    elif item is Item.ConceptNode:
                        node = self.buildConceptNode(element)
                    elif item is Item.DatatypeRestrictionNode:
                        node = self.buildDatatypeRestrictionNode(element)
                    elif item is Item.DisjointUnionNode:
                        node = self.buildDisjointUnionNode(element)
                    elif item is Item.DomainRestrictionNode:
                        node = self.buildDomainRestrictionNode(element)
                    elif item is Item.EnumerationNode:
                        node = self.buildEnumerationNode(element)
                    elif item is Item.IndividualNode:
                        node = self.buildIndividualNode(element)
                    elif item is Item.IntersectionNode:
                        node = self.buildIntersectionNode(element)
                    elif item is Item.PropertyAssertionNode:
                        node = self.buildPropertyAssertionNode(element)
                    elif item is Item.RangeRestrictionNode:
                        node = self.buildRangeRestrictionNode(element)
                    elif item is Item.RoleNode:
                        node = self.buildRoleNode(element)
                    elif item is Item.RoleChainNode:
                        node = self.buildRoleChainNode(element)
                    elif item is Item.RoleInverseNode:
                        node = self.buildRoleInverseNode(element)
                    elif item is Item.UnionNode:
                        node = self.buildUnionNode(element)
                    elif item is Item.ValueDomainNode:
                        node = self.buildValueDomainNode(element)
                    elif item is Item.ValueRestrictionNode:
                        node = self.buildValueRestrictionNode(element)

                    if not node:
                        raise ValueError('unknown node: {}'.format(element.attribute('type')))

                    self.scene.addItem(node)
                    self.scene.sgnItemAdded.emit(node)
                    self.scene.guid.update(node.id)
                finally:
                    element = element.nextSiblingElement('node')

            # 5) GENERATE EDGES
            element = graph.firstChildElement('edge')
            while not element.isNull():

                # noinspection PyArgumentList
                QApplication.processEvents()

                edge = None
                item = self.itemFromGrapholNode(element)

                try:

                    if item is Item.InclusionEdge:
                        edge = self.buildInclusionEdge(element)
                    elif item is Item.InputEdge:
                        edge = self.buildInputEdge(element)
                    elif item is Item.InstanceOfEdge:
                        edge = self.buildInstanceOfEdge(element)

                    if not edge:
                        raise ValueError('unknown edge: {}'.format(element.attribute('type')))

                    self.scene.addItem(edge)
                    self.scene.sgnItemAdded.emit(edge)
                    self.scene.guid.update(edge.id)
                    edge.updateEdge()
                finally:
                    element = element.nextSiblingElement('edge')

            # 6) GENERATE PREDICATE METADATA
            metadata = root.firstChildElement('metadata')
            if not metadata.isNull():

                element = metadata.firstChildElement('meta')
                while not element.isNull():

                    # noinspection PyArgumentList
                    QApplication.processEvents()

                    item = self.itemFromGrapholNode(element)

                    try:

                        if item is Item.AttributeNode:
                            meta = self.buildAttributeMetadata(element)
                        elif item is Item.RoleNode:
                            meta = self.buildRoleMetadata(element)
                        else:
                            meta = self.buildPredicateMetadata(element)

                        if meta:
                            self.scene.meta.add(meta.item, meta.predicate, meta)

                    finally:
                        element = element.nextSiblingElement('meta')

        finally:

            file.close()
Beispiel #45
0
class GrapholExporter(AbstractExporter):
    """
    This class can be used to export Graphol diagrams to file.
    """
    def __init__(self, scene):
        """
        Initialize the Graphol exporter.
        :type scene: DiagramScene
        """
        super().__init__(scene)
        self.document = None
        self.itemToXml = {
            Item.AttributeNode: 'attribute',
            Item.ComplementNode: 'complement',
            Item.ConceptNode: 'concept',
            Item.DatatypeRestrictionNode: 'datatype-restriction',
            Item.DisjointUnionNode: 'disjoint-union',
            Item.DomainRestrictionNode: 'domain-restriction',
            Item.EnumerationNode: 'enumeration',
            Item.IndividualNode: 'individual',
            Item.IntersectionNode: 'intersection',
            Item.PropertyAssertionNode: 'property-assertion',
            Item.RangeRestrictionNode: 'range-restriction',
            Item.RoleNode: 'role',
            Item.RoleChainNode: 'role-chain',
            Item.RoleInverseNode: 'role-inverse',
            Item.UnionNode: 'union',
            Item.ValueDomainNode: 'value-domain',
            Item.ValueRestrictionNode: 'value-restriction',
            Item.InclusionEdge: 'inclusion',
            Item.InputEdge: 'input',
            Item.InstanceOfEdge: 'instance-of',
        }

    ####################################################################################################################
    #                                                                                                                  #
    #   NODES                                                                                                          #
    #                                                                                                                  #
    ####################################################################################################################

    def exportAttributeNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: AttributeNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportComplementNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: ComplementNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportConceptNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: ConceptNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportDatatypeRestrictionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: DatatypeRestrictionNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportDisjointUnionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: DisjointUnionNode
        :rtype: QDomElement
        """
        return self.exportGenericNode(node)

    def exportDomainRestrictionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: DomainRestrictionNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportEnumerationNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: EnumerationNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportIndividualNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: IndividualNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportIntersectionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: IntersectionNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportPropertyAssertionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: PropertyAssertionNode
        :rtype: QDomElement
        """
        element = self.exportGenericNode(node)
        element.setAttribute('inputs', ','.join(node.inputs))
        return element

    def exportRangeRestrictionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: RangeRestrictionNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportRoleNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: RoleNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportRoleChainNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: RoleChainNode
        :rtype: QDomElement
        """
        element = self.exportLabelNode(node)
        element.setAttribute('inputs', ','.join(node.inputs))
        return element

    def exportRoleInverseNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: RoleInverseNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportValueDomainNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: ValueDomainNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportUnionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: UnionNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    def exportValueRestrictionNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: ValueRestrictionNode
        :rtype: QDomElement
        """
        return self.exportLabelNode(node)

    ####################################################################################################################
    #                                                                                                                  #
    #   EDGES                                                                                                          #
    #                                                                                                                  #
    ####################################################################################################################

    def exportInclusionEdge(self, edge):
        """
        Export the given edge into a QDomElement.
        :type edge: InclusionEdge
        :rtype: QDomElement
        """
        element = self.exportGenericEdge(edge)
        element.setAttribute('complete', int(edge.complete))
        return element

    def exportInputEdge(self, edge):
        """
        Export the given edge into a QDomElement.
        :type edge: InputEdge
        :rtype: QDomElement
        """
        return self.exportGenericEdge(edge)

    def exportInstanceOfEdge(self, edge):
        """
        Export the given edge into a QDomElement.
        :type edge: InstanceOf
        :rtype: QDomElement
        """
        return self.exportGenericEdge(edge)

    ####################################################################################################################
    #                                                                                                                  #
    #   METADATA                                                                                                       #
    #                                                                                                                  #
    ####################################################################################################################

    def exportPredicateMetadata(self, item, predicate):
        """
        Export given predicate metadata.
        :type item: Item
        :type predicate: str
        :rtype: QDomElement
        """
        meta = self.scene.meta.metaFor(item, predicate)
        if meta:
            element = self.document.createElement('meta')
            element.setAttribute('type', self.itemToXml[item])
            element.setAttribute('predicate', predicate)
            url = self.document.createElement('data:url')
            url.appendChild(self.document.createTextNode(meta.url))
            description = self.document.createElement('data:description')
            description.appendChild(self.document.createTextNode(meta.description))
            element.appendChild(url)
            element.appendChild(description)
            return element
        return None

    def exportAttributeMetadata(self, item, predicate):
        """
        Export given attribute metadata.
        :type item: Item
        :type predicate: str
        :rtype: QDomElement
        """
        element = self.exportPredicateMetadata(item, predicate)
        if element:
            meta = self.scene.meta.metaFor(item, predicate)
            if meta:
                functionality = self.document.createElement('data:functionality')
                functionality.appendChild(self.document.createTextNode(str(int(meta.functionality))))
                element.appendChild(functionality)
                return element
        return None

    def exportRoleMetadata(self, item, predicate):
        """
        Export given role metadata
        :type item: Item
        :type predicate: str
        :rtype: QDomElement
        """
        element = self.exportPredicateMetadata(item, predicate)
        if element:
            meta = self.scene.meta.metaFor(item, predicate)
            if meta:
                functionality = self.document.createElement('data:functionality')
                functionality.appendChild(self.document.createTextNode(str(int(meta.functionality))))
                inverseFunctionality = self.document.createElement('data:inverseFunctionality')
                inverseFunctionality.appendChild(self.document.createTextNode(str(int(meta.inverseFunctionality))))
                asymmetry = self.document.createElement('data:asymmetry')
                asymmetry.appendChild(self.document.createTextNode(str(int(meta.asymmetry))))
                irreflexivity = self.document.createElement('data:irreflexivity')
                irreflexivity.appendChild(self.document.createTextNode(str(int(meta.irreflexivity))))
                reflexivity = self.document.createElement('data:reflexivity')
                reflexivity.appendChild(self.document.createTextNode(str(int(meta.reflexivity))))
                symmetry = self.document.createElement('data:symmetry')
                symmetry.appendChild(self.document.createTextNode(str(int(meta.symmetry))))
                transitivity = self.document.createElement('data:transitivity')
                transitivity.appendChild(self.document.createTextNode(str(int(meta.transitivity))))
                element.appendChild(functionality)
                element.appendChild(inverseFunctionality)
                element.appendChild(asymmetry)
                element.appendChild(irreflexivity)
                element.appendChild(reflexivity)
                element.appendChild(symmetry)
                element.appendChild(transitivity)
                return element
        return None

    ####################################################################################################################
    #                                                                                                                  #
    #   AUXILIARY METHODS                                                                                              #
    #                                                                                                                  #
    ####################################################################################################################

    def exportLabelNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: AbstractNode
        :rtype: QDomElement
        """
        position = node.mapToScene(node.textPos())
        label = self.document.createElement('shape:label')
        label.setAttribute('height', node.label.height())
        label.setAttribute('width', node.label.width())
        label.setAttribute('x', position.x())
        label.setAttribute('y', position.y())
        label.appendChild(self.document.createTextNode(node.text()))
        element = self.exportGenericNode(node)
        element.appendChild(label)
        return element

    def exportGenericEdge(self, edge):
        """
        Export the given node into a QDomElement.
        :type edge: AbstractEdge
        :rtype: QDomElement
        """
        element = self.document.createElement('edge')
        element.setAttribute('source', edge.source.id)
        element.setAttribute('target', edge.target.id)
        element.setAttribute('id', edge.id)
        element.setAttribute('type', self.itemToXml[edge.item])

        for p in [edge.source.anchor(edge)] + edge.breakpoints + [edge.target.anchor(edge)]:
            point = self.document.createElement('line:point')
            point.setAttribute('x', p.x())
            point.setAttribute('y', p.y())
            element.appendChild(point)

        return element

    def exportGenericNode(self, node):
        """
        Export the given node into a QDomElement.
        :type node: AbstractNode
        :rtype: QDomElement
        """
        element = self.document.createElement('node')
        element.setAttribute('id', node.id)
        element.setAttribute('type', self.itemToXml[node.item])
        element.setAttribute('color', node.brush.color().name())
        geometry = self.document.createElement('shape:geometry')
        geometry.setAttribute('height', node.height())
        geometry.setAttribute('width', node.width())
        geometry.setAttribute('x', node.pos().x())
        geometry.setAttribute('y', node.pos().y())
        element.appendChild(geometry)
        return element

    ####################################################################################################################
    #                                                                                                                  #
    #   DOCUMENT EXPORT                                                                                                #
    #                                                                                                                  #
    ####################################################################################################################

    def export(self, indent=4):
        """
        Export the coverted ontology.
        :type indent: int
        :rtype: str
        """
        return self.document.toString(indent)

    ####################################################################################################################
    #                                                                                                                  #
    #   DOCUMENT GENERATION                                                                                            #
    #                                                                                                                  #
    ####################################################################################################################

    def run(self):
        """
        Perform Graphol ontology generation.
        """
        # 1) CREATE THE DOCUMENT
        self.document = QDomDocument()
        self.document.appendChild(self.document.createProcessingInstruction('xml', 'version="1.0" '
                                                                                   'encoding="UTF-8" '
                                                                                   'standalone="no"'))
        
        # 2) CREATE ROOT ELEMENT
        root = self.document.createElement('graphol')
        root.setAttribute('xmlns', 'http://www.dis.uniroma1.it/~graphol/schema')
        root.setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
        root.setAttribute('xmlns:data', 'http://www.dis.uniroma1.it/~graphol/schema/data')
        root.setAttribute('xmlns:line', 'http://www.dis.uniroma1.it/~graphol/schema/line')
        root.setAttribute('xmlns:shape', 'http://www.dis.uniroma1.it/~graphol/schema/shape')
        root.setAttribute('xsi:schemaLocation', 'http://www.dis.uniroma1.it/~graphol/schema '
                                                'http://www.dis.uniroma1.it/~graphol/schema/graphol.xsd')
        
        self.document.appendChild(root)
        
        # 3) CREATE THE GRAPH NODE
        graph = self.document.createElement('graph')
        graph.setAttribute('width', self.scene.sceneRect().width())
        graph.setAttribute('height', self.scene.sceneRect().height())
        
        # 4) GENERATE NODES
        for node in self.scene.nodes():
        
            element = None

            if node.item is Item.AttributeNode:
                element = self.exportAttributeNode(node)
            elif node.item is Item.ComplementNode:
                element = self.exportComplementNode(node)
            elif node.item is Item.ConceptNode:
                element = self.exportConceptNode(node)
            elif node.item is Item.DatatypeRestrictionNode:
                element = self.exportDatatypeRestrictionNode(node)
            elif node.item is Item.DisjointUnionNode:
                element = self.exportDisjointUnionNode(node)
            elif node.item is Item.DomainRestrictionNode:
                element = self.exportDomainRestrictionNode(node)
            elif node.item is Item.EnumerationNode:
                element = self.exportEnumerationNode(node)
            elif node.item is Item.IndividualNode:
                element = self.exportIndividualNode(node)
            elif node.item is Item.IntersectionNode:
                element = self.exportIntersectionNode(node)
            elif node.item is Item.PropertyAssertionNode:
                element = self.exportPropertyAssertionNode(node)
            elif node.item is Item.RangeRestrictionNode:
                element = self.exportRangeRestrictionNode(node)
            elif node.item is Item.RoleNode:
                element = self.exportRoleNode(node)
            elif node.item is Item.RoleChainNode:
                element = self.exportRoleChainNode(node)
            elif node.item is Item.RoleInverseNode:
                element = self.exportRoleInverseNode(node)
            elif node.item is Item.UnionNode:
                element = self.exportUnionNode(node)
            elif node.item is Item.ValueDomainNode:
                element = self.exportValueDomainNode(node)
            elif node.item is Item.ValueRestrictionNode:
                element = self.exportValueRestrictionNode(node)

            if not element:
                raise ValueError('unknown node: {}'.format(node))

            graph.appendChild(element)

        # 5) GENERATE EDGES
        for edge in self.scene.edges():

            element = None

            if edge.item is Item.InclusionEdge:
                element = self.exportInclusionEdge(edge)
            elif edge.item is Item.InputEdge:
                element = self.exportInputEdge(edge)
            elif edge.item is Item.InstanceOfEdge:
                element = self.exportInstanceOfEdge(edge)

            if not element:
                raise ValueError('unknown edge: {}'.format(edge))

            graph.appendChild(element)

        # 6) APPEND THE GRAPH TO THE DOCUMENT
        root.appendChild(graph)

        # 7) GENERATE NODES META DATA
        collection = []
        for item, predicate in self.scene.meta.entries():

            if item is Item.RoleNode:
                element = self.exportRoleMetadata(item, predicate)
            elif item is Item.AttributeNode:
                element = self.exportAttributeMetadata(item, predicate)
            else:
                element = self.exportPredicateMetadata(item, predicate)

            if element:
                collection.append(element)

        if collection:
            metadata = self.document.createElement('metadata')
            for element in collection:
                metadata.appendChild(element)
            root.appendChild(metadata)
Beispiel #46
0
    def run(self):
        """
        Perform Graphol ontology generation.
        """
        # 1) CREATE THE DOCUMENT
        self.document = QDomDocument()
        self.document.appendChild(self.document.createProcessingInstruction('xml', 'version="1.0" '
                                                                                   'encoding="UTF-8" '
                                                                                   'standalone="no"'))
        
        # 2) CREATE ROOT ELEMENT
        root = self.document.createElement('graphol')
        root.setAttribute('xmlns', 'http://www.dis.uniroma1.it/~graphol/schema')
        root.setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
        root.setAttribute('xmlns:data', 'http://www.dis.uniroma1.it/~graphol/schema/data')
        root.setAttribute('xmlns:line', 'http://www.dis.uniroma1.it/~graphol/schema/line')
        root.setAttribute('xmlns:shape', 'http://www.dis.uniroma1.it/~graphol/schema/shape')
        root.setAttribute('xsi:schemaLocation', 'http://www.dis.uniroma1.it/~graphol/schema '
                                                'http://www.dis.uniroma1.it/~graphol/schema/graphol.xsd')
        
        self.document.appendChild(root)
        
        # 3) CREATE THE GRAPH NODE
        graph = self.document.createElement('graph')
        graph.setAttribute('width', self.scene.sceneRect().width())
        graph.setAttribute('height', self.scene.sceneRect().height())
        
        # 4) GENERATE NODES
        for node in self.scene.nodes():
        
            element = None

            if node.item is Item.AttributeNode:
                element = self.exportAttributeNode(node)
            elif node.item is Item.ComplementNode:
                element = self.exportComplementNode(node)
            elif node.item is Item.ConceptNode:
                element = self.exportConceptNode(node)
            elif node.item is Item.DatatypeRestrictionNode:
                element = self.exportDatatypeRestrictionNode(node)
            elif node.item is Item.DisjointUnionNode:
                element = self.exportDisjointUnionNode(node)
            elif node.item is Item.DomainRestrictionNode:
                element = self.exportDomainRestrictionNode(node)
            elif node.item is Item.EnumerationNode:
                element = self.exportEnumerationNode(node)
            elif node.item is Item.IndividualNode:
                element = self.exportIndividualNode(node)
            elif node.item is Item.IntersectionNode:
                element = self.exportIntersectionNode(node)
            elif node.item is Item.PropertyAssertionNode:
                element = self.exportPropertyAssertionNode(node)
            elif node.item is Item.RangeRestrictionNode:
                element = self.exportRangeRestrictionNode(node)
            elif node.item is Item.RoleNode:
                element = self.exportRoleNode(node)
            elif node.item is Item.RoleChainNode:
                element = self.exportRoleChainNode(node)
            elif node.item is Item.RoleInverseNode:
                element = self.exportRoleInverseNode(node)
            elif node.item is Item.UnionNode:
                element = self.exportUnionNode(node)
            elif node.item is Item.ValueDomainNode:
                element = self.exportValueDomainNode(node)
            elif node.item is Item.ValueRestrictionNode:
                element = self.exportValueRestrictionNode(node)

            if not element:
                raise ValueError('unknown node: {}'.format(node))

            graph.appendChild(element)

        # 5) GENERATE EDGES
        for edge in self.scene.edges():

            element = None

            if edge.item is Item.InclusionEdge:
                element = self.exportInclusionEdge(edge)
            elif edge.item is Item.InputEdge:
                element = self.exportInputEdge(edge)
            elif edge.item is Item.InstanceOfEdge:
                element = self.exportInstanceOfEdge(edge)

            if not element:
                raise ValueError('unknown edge: {}'.format(edge))

            graph.appendChild(element)

        # 6) APPEND THE GRAPH TO THE DOCUMENT
        root.appendChild(graph)

        # 7) GENERATE NODES META DATA
        collection = []
        for item, predicate in self.scene.meta.entries():

            if item is Item.RoleNode:
                element = self.exportRoleMetadata(item, predicate)
            elif item is Item.AttributeNode:
                element = self.exportAttributeMetadata(item, predicate)
            else:
                element = self.exportPredicateMetadata(item, predicate)

            if element:
                collection.append(element)

        if collection:
            metadata = self.document.createElement('metadata')
            for element in collection:
                metadata.appendChild(element)
            root.appendChild(metadata)