def getPublishTask(self, parent):
        self.storeMetadata()
        self.storeFieldsToPublish()

        toPublish = self._toPublish()

        if self.tabOnOffline.currentIndex() == 0:
            if self.comboGeodataServer.currentIndex() != 0:
                geodataServer = geodataServers()[
                    self.comboGeodataServer.currentText()]
            else:
                geodataServer = None

            if self.comboMetadataServer.currentIndex() != 0:
                metadataServer = metadataServers()[
                    self.comboMetadataServer.currentText()]
            else:
                metadataServer = None

            onlySymbology = self.chkOnlySymbology.checkState() == Qt.Checked

            return PublishTask(toPublish, self.fieldsToPublish, onlySymbology,
                               geodataServer, metadataServer, parent)
        else:
            return ExportTask(self.txtExportFolder.text(), toPublish,
                              self.fieldsToPublish,
                              self.chkExportData.isChecked(),
                              self.chkExportMetadata.isChecked(),
                              self.chkExportSymbology.isChecked())
Exemplo n.º 2
0
    def validateBeforePublication(self, to_publish):
        names = []
        errors = set()
        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            if widget.checked():
                name = widget.name()
                for c in "?&=#":
                    if c in name:
                        errors.add("Unsupported character in layer name: " + c)
                if name in names:
                    errors.add("Several layers with the same name")
                names.append(name)
        if self.comboGeodataServer.currentIndex() != 0:
            geodata_server = geodataServers()[
                self.comboGeodataServer.currentText()]
            geodata_server.validateGeodataBeforePublication(
                errors, to_publish,
                self.chkOnlySymbology.checkState() == Qt.Checked)

        if self.comboMetadataServer.currentIndex() != 0:
            metadata_server = metadataServers()[
                self.comboMetadataServer.currentText()]
            metadata_server.validateMetadataBeforePublication(errors)

        if errors:
            html = f"<p><b>Cannot publish data.</b></p>"
            issues = "".join(f"<li>{e}</li>" for e in errors)
            if issues:
                html += f"<p>The following issues were found:<ul>{issues}</ul></p>"
            self.showHtmlMessage("Publish", html)
            return False
        else:
            return True
Exemplo n.º 3
0
    def validateBeforePublication(self, toPublish):
        names = []
        errors = set()
        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            if widget.checked():
                name = widget.name()
                for c in "?&=#":
                    if c in name:
                        errors.add("Unsupported character in layer name: " + c)
                if name in names:
                    errors.add("Several layers with the same name")
                names.append(name)
        if self.comboGeodataServer.currentIndex() != 0:
            geodataServer = geodataServers()[
                self.comboGeodataServer.currentText()]
            geodataServer.validateGeodataBeforePublication(errors, toPublish)

        if self.comboMetadataServer.currentIndex() != 0:
            metadataServer = metadataServers()[
                self.comboMetadataServer.currentText()]
            metadataServer.validateMetadataBeforePublication(errors)

        if errors:
            txt = '''<p><b>Cannot publish data.</b></p>
                    <p>The following issues were found:<p><ul><li>%s</li></ul>
                    ''' % "</li><li>".join(errors)
            dlg = QgsMessageOutput.createMessageOutput()
            dlg.setTitle("Publish")
            dlg.setMessage(txt, QgsMessageOutput.MessageHtml)
            dlg.showMessage()
            return False
        else:
            return True
    def getPublishTask(self, parent):
        if self.comboGeodataServer.currentIndex() != 0:
            geodataServer = geodataServers()[
                self.comboGeodataServer.currentText()]
        else:
            geodataServer = None

        if self.comboMetadataServer.currentIndex() != 0:
            metadataServer = metadataServers()[
                self.comboMetadataServer.currentText()]
        else:
            metadataServer = None

        self.storeMetadata()
        self.storeFieldsToPublish()

        toPublish = []
        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            if widget.checked():
                name = widget.name()
                toPublish.append(name)

        onlySymbology = self.chkOnlySymbology.checkState() == Qt.Checked

        return PublishTask(toPublish, self.fieldsToPublish, onlySymbology,
                           geodataServer, metadataServer, parent)
 def isDataOnServer(self, layer):
     try:
         server = geodataServers()[self.comboGeodataServer.currentText()]
         return server.layerExists(layer)
     except KeyError:
         return False
     except Exception as e:
         return False
 def updateLayerIsDataPublished(self, name, value):
     self.isDataPublished[name] = value
     for i in range(self.listLayers.count()):
         item = self.listLayers.item(i)
         widget = self.listLayers.itemWidget(item)
         if widget.name() == name:
             server = geodataServers()[
                 self.comboGeodataServer.currentText()] if value else None
             widget.setDataPublished(server)
    def updateLayersPublicationStatus(self, data=True, metadata=True):
        canPublish = True
        if data:
            try:
                dataServer = geodataServers()[
                    self.comboGeodataServer.currentText()]
                if dataServer.testConnection():
                    self.comboGeodataServer.setStyleSheet("QComboBox { }")
                else:
                    self.comboGeodataServer.setStyleSheet(
                        "QComboBox { border: 2px solid red; }")
                    dataServer = None
                    canPublish = False
            except KeyError:
                self.comboGeodataServer.setStyleSheet("QComboBox { }")
                dataServer = None

        if metadata:
            try:
                metadataServer = metadataServers()[
                    self.comboMetadataServer.currentText()]
                if metadataServer.testConnection():
                    self.comboMetadataServer.setStyleSheet("QComboBox { }")
                else:
                    self.comboMetadataServer.setStyleSheet(
                        "QComboBox { border: 2px solid red; }")
                    metadataServer = None
                    canPublish = False
            except KeyError:
                self.comboMetadataServer.setStyleSheet("QComboBox { }")
                metadataServer = None

        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            name = widget.name()
            if data:
                server = None
                if dataServer:
                    self.isDataPublished[name] = self.isDataOnServer(name)
                    server = dataServer if self.isDataPublished[name] else None
                widget.setDataPublished(server)
            if metadata:
                server = None
                if metadataServer:
                    self.isMetadataPublished[name] = self.isMetadataOnServer(
                        name)
                    server = metadataServer if self.isMetadataPublished[
                        name] else None
                widget.setMetadataPublished(server)

        canPublish = canPublish and self.listLayers.count()
        self.btnPublish.setEnabled(canPublish)
        self.btnPublishOnBackground.setEnabled(canPublish)
 def isDataOnServer(self, layer):
     try:
         server = geodataServers()[self.comboGeodataServer.currentText()]
         self.comboGeodataServer.setStyleSheet("QComboBox {}")
         return server.layerExists(layer)
     except KeyError:
         self.comboGeodataServer.setStyleSheet("QComboBox {}")
         return False
     except Exception as e:
         self.comboGeodataServer.setStyleSheet(
             "QComboBox { border: 2px solid red; }")
    def __init__(self, parent):
        super(PublishWidget, self).__init__()
        self.isMetadataPublished = {}
        self.isDataPublished = {}
        self.currentRow = None
        self.currentLayer = None
        self.parent = parent

        self.fieldsToPublish = {}
        self.metadata = {}
        execute(self._setupUi)

        for s in geodataServers().values():
            s.setupForProject()
Exemplo n.º 10
0
 def viewWms(self, name):
     layer = self.layerFromName(name)
     names = [layer.name()]
     bbox = layer.extent()
     if bbox.isEmpty():
         bbox.grow(1)
     sbbox = ",".join([
         str(v) for v in [
             bbox.xMinimum(),
             bbox.yMinimum(),
             bbox.xMaximum(),
             bbox.yMaximum()
         ]
     ])
     server = geodataServers()[self.comboGeodataServer.currentText()]
     server.openPreview(names, sbbox, layer.crs().authid())
 def updateLayersPublicationStatus(self, data=True, metadata=True):
     for i in range(self.listLayers.count()):
         item = self.listLayers.item(i)
         widget = self.listLayers.itemWidget(item)
         name = widget.name()
         if data:
             self.isDataPublished[name] = self.isDataOnServer(name)
             server = geodataServers()[self.comboGeodataServer.currentText(
             )] if self.isDataPublished[name] else None
             widget.setDataPublished(server)
         if metadata:
             self.isMetadataPublished[name] = self.isMetadataOnServer(name)
             server = metadataServers()[
                 self.comboMetadataServer.currentText(
                 )] if self.isMetadataPublished[name] else None
             widget.setMetadataPublished(server)
Exemplo n.º 12
0
 def updateServers(self):
     #TODO: do not call updateLayersPublicationStatus if not really needed
     self.comboGeodataServer.currentIndexChanged.disconnect(
         self.geodataServerChanged)
     self.comboMetadataServer.currentIndexChanged.disconnect(
         self.metadataServerChanged)
     self.populatecomboMetadataServer()
     current = self.comboGeodataServer.currentText()
     self.populatecomboGeodataServer()
     if current in geodataServers().keys():
         self.comboGeodataServer.setCurrentText(current)
     current = self.comboMetadataServer.currentText()
     self.populatecomboMetadataServer()
     if current in metadataServers().keys():
         self.comboMetadataServer.setCurrentText(current)
     self.updateLayersPublicationStatus()
     self.comboGeodataServer.currentIndexChanged.connect(
         self.geodataServerChanged)
     self.comboMetadataServer.currentIndexChanged.connect(
         self.metadataServerChanged)
Exemplo n.º 13
0
 def viewAllWms(self):
     server = geodataServers()[self.comboGeodataServer.currentText()]
     layers = self.publishableLayers()
     bbox = QgsRectangle()
     canvasCrs = iface.mapCanvas().mapSettings().destinationCrs()
     names = []
     for layer in layers:
         if self.isDataPublished[layer.name()]:
             names.append(layer.name())
             xform = QgsCoordinateTransform(layer.crs(), canvasCrs,
                                            QgsProject.instance())
             extent = xform.transform(layer.extent())
             bbox.combineExtentWith(extent)
     sbbox = ",".join([
         str(v) for v in [
             bbox.xMinimum(),
             bbox.yMinimum(),
             bbox.xMaximum(),
             bbox.yMaximum()
         ]
     ])
     server.openPreview(names, sbbox, canvasCrs.authid())
Exemplo n.º 14
0
 def unpublishData(self, name):
     server = geodataServers()[self.comboGeodataServer.currentText()]
     server.deleteLayer(name)
     server.deleteStyle(name)
     self.updateLayerIsDataPublished(name, False)
Exemplo n.º 15
0
 def populatecomboGeodataServer(self):
     self.comboGeodataServer.clear()
     self.comboGeodataServer.addItem(self.tr("Do not publish data"))
     self.comboGeodataServer.addItems(geodataServers().keys())
 def viewMetadata(self, name):
     server = geodataServers()[self.comboMetadataServer.currentText()]
     layer = self.layerFromName(name)
     uuid = uuidForLayer(layer)
     server.openMetadata(uuid)