def populate(self): icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/layer.png") layersItem = TreeItem(None, icon, "QGIS Layers") layersItem.setIcon(0, icon) layers = qgislayers.getAllLayers() for layer in layers: layerItem = QgsLayerItem(layer) layersItem.addChild(layerItem) self.addChild(layersItem) icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/group.gif") groupsItem = TreeItem(None, icon, "QGIS Groups") groups = qgislayers.getGroups() for group in groups: groupItem = QgsGroupItem(group) groupsItem.addChild(groupItem) groupItem.populate() self.addChild(groupsItem) icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/style.png") stylesItem = TreeItem(None, icon, "QGIS Styles") stylesItem.setIcon(0, icon) styles = qgislayers.getVectorLayers() for style in styles: styleItem = QgsStyleItem(style) stylesItem.addChild(styleItem) self.addChild(stylesItem)
def publishDraggedGroup(explorer, groupItem, catalog, workspace): groupName = groupItem.element groups = layers.getGroups() group = groups[groupName] gslayers= [layer.name for layer in catalog.get_layers()] missing = [] overwrite = bool(QSettings().value("/OpenGeo/Settings/GeoServer/OverwriteGroupLayers", True, bool)) for layer in group: if layer.name() not in gslayers or overwrite: missing.append(layer) if missing: explorer.setProgressMaximum(len(missing), "Publish layers") progress = 0 ogcat = OGCatalog(catalog) for layer in missing: explorer.setProgress(progress) explorer.run(ogcat.publishLayer, None, [], layer, workspace, True) progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = [layer.name() for layer in group] layergroup = catalog.create_layergroup(groupName, names, names) explorer.run(catalog.save, "Create layer group from group '" + groupName + "'", [], layergroup)
def publishGroup(self, name, destName = None, workspace = None, overwrite = False, overwriteLayers = False): ''' Publishes a group in the given catalog name: the name of the QGIS group to publish. It will also be used as the GeoServer layergroup name workspace: The workspace to add the group to overwrite: if True, it will overwrite a previous group with the specified name, if it exists overwriteLayers: if False, in case a layer in the group is not found in the specified workspace, the corresponding layer from the current QGIS project will be published, but all layers of the group that can be found in the GeoServer workspace will not be published. If True, all layers in the group are published, even if layers with the same name exist in the workspace ''' groups = layers.getGroups() if name not in groups: raise Exception("The specified group does not exist") group = groups[name] for layer in group: gslayer = self.catalog.get_layer(layer.name()) if gslayer is None: self.publishLayer(layer, workspace, overwrite) names = [layer.name() for layer in group] destName = destName if destName is not None else name layergroup = self.catalog.create_layergroup(destName, names, names) self.catalog.save(layergroup)
def populate(self): icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/layer.png") layersItem = QgsTreeItem(None, icon, "QGIS Layers") layersItem.setIcon(0, icon) layers = qgislayers.getAllLayers() for layer in layers: layerItem = QgsLayerItem(layer) layersItem.addChild(layerItem) self.addChild(layersItem) icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/group.gif") groupsItem = QgsTreeItem(None, icon, "QGIS Groups") groups = qgislayers.getGroups() for group in groups: groupItem = QgsGroupItem(group) groupsItem.addChild(groupItem) groupItem.populate() self.addChild(groupsItem) icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/style.png") stylesItem = QgsTreeItem(None, icon, "QGIS Styles") stylesItem.setIcon(0, icon) styles = qgislayers.getAllLayers() for style in styles: styleItem = QgsStyleItem(style) stylesItem.addChild(styleItem) self.addChild(stylesItem)
def publishProject(self, tree, explorer): layers = qgislayers.getAllLayers() dlg = PublishProjectDialog(explorer.catalogs()) dlg.exec_() catalog = dlg.catalog if catalog is None: return workspace = dlg.workspace groupName = dlg.groupName explorer.setProgressMaximum(len(layers), "Publish layers") progress = 0 ogcat = OGCatalog(catalog) for layer in layers: explorer.setProgress(progress) if not explorer.run(publishLayer, None, [], ogcat, layer, workspace, True): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() groups = qgislayers.getGroups() for group in groups: names = [layer.name() for layer in groups[group]] try: layergroup = catalog.create_layergroup(group, names, names) explorer.run(catalog.save, "Create layer group '" + group + "'", [], layergroup) except ConflictingDataError, e: explorer.setWarning(str(e))
def publishGroup(self, tree, explorer): groupname = self.element groups = qgislayers.getGroups() grouplyrs = groups[groupname] cat = selectCatalog(explorer.catalogs()) if cat is None: return catgroup = cat.get_layergroup(groupname) toUpdate = set() toUpdate.add(tree.findAllItems(cat)[0]) overwrite = bool(QSettings().value( "/OpenGeo/Settings/GeoServer/OverwriteGroupLayers", True, bool)) dlg = PublishLayerGroupDialog(cat, groupname, grouplyrs, overwritegroup=True, overwritelayers=overwrite) dlg.exec_() grpName = dlg.definedname toPublish = dlg.topublish if grpName is None: # toPublish can be empty list return catgroup = cat.get_layergroup(grpName) names = [] if toPublish: explorer.setProgressMaximum(len(toPublish), "Publish layers") progress = 0 layernames = [] for layer, catalog, workspace, layername in toPublish: layernames.append(layername) explorer.setProgress(progress) ogcat = OGCatalog(catalog) if not explorer.run(ogcat.publishLayer, None, [], layer, workspace, True, layername): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = reversed(layernames) if catgroup: cat.delete(catgroup) #TODO calculate bounds bbox = None group = UnsavedLayerGroup(cat, grpName, names, names, bbox) explorer.run(cat.save, "Create layer group from group '" + groupname + "'", toUpdate, group)
def showGroups(self): if self.sender() == self.lastAction: return self.tree.clear() groups = qgislayers.getGroups() for group in groups: groupItem = QgsGroupItem(group) groupItem.populate() self.tree.addTopLevelItem(groupItem) self.lastAction = self.sender()
def publishDraggedGroup(explorer, groupItem, catalog, workspace=None): groupname = groupItem.element groups = qgislayers.getGroups() grouplyrs = groups[groupname] overwrite = bool(QSettings().value( "/OpenGeo/Settings/GeoServer/OverwriteGroupLayers", True, bool)) try: dlg = PublishLayerGroupDialog(catalog, groupname, grouplyrs, workspace=workspace, overwritegroup=True, overwritelayers=overwrite) dlg.exec_() except UserCanceledOperation: return False grpName = dlg.definedname toPublish = dlg.topublish if grpName is None: # toPublish can be empty list return False catgroup = catalog.get_layergroup(grpName) names = [] if toPublish: explorer.setProgressMaximum(len(toPublish), "Publish layers") progress = 0 layernames = [] for layer, catalog, workspc, layername in toPublish: layernames.append(layername) explorer.setProgress(progress) ogcat = OGCatalog(catalog) if not explorer.run(ogcat.publishLayer, None, [], layer, workspc, True, layername): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = reversed(layernames) if catgroup: catalog.delete(catgroup) #TODO calculate bounds bbox = None group = UnsavedLayerGroup(catalog, grpName, names, names, bbox) return explorer.run(catalog.save, "Create layer group from group '" + groupname + "'", [], group)
def publishGroup(self, tree, explorer): groupname = self.element groups = qgislayers.getGroups() group = groups[groupname] cat = selectCatalog(explorer.catalogs()) if cat is None: return gslayers = [layer.name for layer in cat.get_layers()] missing = [] overwrite = bool(QSettings().value( "/OpenGeo/Settings/GeoServer/OverwriteGroupLayers", True, bool)) for layer in group: if layer.name() not in gslayers or overwrite: missing.append(layer) toUpdate = set() toUpdate.add(tree.findAllItems(cat)[0]) if missing: catalogs = { k: v for k, v in explorer.catalogs().iteritems() if v == cat } dlg = PublishLayersDialog(catalogs, missing) dlg.exec_() toPublish = dlg.topublish if toPublish is None: return explorer.setProgressMaximum(len(toPublish), "Publish layers") progress = 0 for layer, catalog, workspace in toPublish: explorer.setProgress(progress) ogcat = OGCatalog(catalog) if not explorer.run(ogcat.publishLayer, None, [], layer, workspace, True): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = [layer.name() for layer in group] def _createGroup(): layergroup = cat.create_layergroup(groupname, names, names) cat.save(layergroup) explorer.run(_createGroup, "Create layer group from group '" + groupname + "'", toUpdate)
def publishGroup(self, tree, explorer): groupname = self.element groups = qgislayers.getGroups() group = groups[groupname] cat = selectCatalog(explorer.catalogs()) if cat is None: return gslayers= [layer.name for layer in cat.get_layers()] missing = [] overwrite = bool(QSettings().value("/OpenGeo/Settings/GeoServer/OverwriteGroupLayers", True, bool)) for layer in group: if layer.name() not in gslayers or overwrite: missing.append(layer) toUpdate = set(); toUpdate.add(tree.findAllItems(cat)[0]) if missing: catalogs = dict([(k ,v) for k, v in explorer.catalogs().iteritems() if v == cat]) dlg = PublishLayersDialog(catalogs, missing) dlg.exec_() toPublish = dlg.topublish if toPublish is None: return explorer.setProgressMaximum(len(toPublish), "Publish layers") progress = 0 for layer, catalog, workspace in toPublish: explorer.setProgress(progress) ogcat = OGCatalog(catalog) if not explorer.run(ogcat.publishLayer, None, [], layer, workspace, True): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = [layer.name() for layer in group] def _createGroup(): layergroup = cat.create_layergroup(groupname, names, names) cat.save(layergroup) explorer.run(_createGroup, "Create layer group from group '" + groupname + "'", toUpdate)
def publishGroup(self, name, destName=None, workspace=None, overwrite=False, overwriteLayers=False): ''' Publishes a group in the given catalog name: the name of the QGIS group to publish. It will also be used as the GeoServer layergroup name workspace: The workspace to add the group to overwrite: if True, it will overwrite a previous group with the specified name, if it exists overwriteLayers: if False, in case a layer in the group is not found in the specified workspace, the corresponding layer from the current QGIS project will be published, but all layers of the group that can be found in the GeoServer workspace will not be published. If True, all layers in the group are published, even if layers with the same name exist in the workspace ''' groups = layers.getGroups() if name not in groups: raise Exception("The specified group does not exist") destName = xmlNameFixUp(destName) if destName is not None \ else xmlNameFixUp(name) gsgroup = self.catalog.get_layergroup(destName) if gsgroup is not None and not overwrite: return group = groups[name] for layer in group: lyrname = xmlNameFixUp(layer.name()) gslayer = self.catalog.get_layer(lyrname) if gslayer is None or overwriteLayers: self.publishLayer(layer, workspace, True, lyrname) names = [xmlNameFixUp(layer.name()) for layer in group] layergroup = self.catalog.create_layergroup(destName, names, names) self.catalog.save(layergroup)
def publishGroup(self, tree, explorer): groupname = self.element groups = qgislayers.getGroups() group = groups[groupname] cat = selectCatalog(explorer.catalogs()) if cat is None: return gslayers= [layer.name for layer in cat.get_layers()] missing = [] for layer in group: if layer.name() not in gslayers: missing.append(layer) toUpdate = set(); toUpdate.add(tree.findAllItems(cat)[0]) if missing: catalogs = {k :v for k, v in explorer.catalogs().iteritems() if v == cat} dlg = PublishLayersDialog(catalogs, missing) dlg.exec_() toPublish = dlg.topublish if toPublish is None: return explorer.setProgressMaximum(len(toPublish), "Publish layers") progress = 0 for layer, catalog, workspace in toPublish: explorer.setProgress(progress) ogcat = OGCatalog(catalog) if not explorer.run(ogcat.publishLayer, None,#"Publish layer '" + layer.name() + "'", [], layer, workspace, True): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = [layer.name() for layer in group] layergroup = cat.create_layergroup(groupname, names, names) explorer.run(cat.save, "Create layer group from group '" + groupname + "'", [], layergroup) for item in toUpdate: item.refreshContent(explorer)
def publishProject(self, tree, explorer): layers = qgislayers.getAllLayers() dlg = PublishProjectDialog(explorer.catalogs()) dlg.exec_() catalog = dlg.catalog if catalog is None: return workspace = dlg.workspace groupName = dlg.groupName explorer.setProgressMaximum(len(layers), "Publish layers") progress = 0 for layer in layers: explorer.setProgress(progress) ogcat = OGCatalog(catalog) if not explorer.run(ogcat.publishLayer, None, #"Publish layer '" + layer.name() + "'", [], layer, workspace, True): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() groups = qgislayers.getGroups() for group in groups: names = [layer.name() for layer in groups[group]] layergroup = catalog.create_layergroup(group, names, names) explorer.run(catalog.save, "Create layer group '" + group + "'", [], layergroup) if groupName is not None: names = [layer.name() for layer in layers] layergroup = catalog.create_layergroup(groupName, names, names) explorer.run(catalog.save, "Create global layer group", [], layergroup) tree.findAllItems(catalog)[0].refreshContent(explorer)
def populate(self): grouplayers = qgislayers.getGroups()[self.element] for layer in grouplayers: layerItem = QgsLayerItem(layer) self.addChild(layerItem)
def populate(self): groups = qgislayers.getGroups() for group in groups: groupItem = QgsGroupItem(group) self.addChild(groupItem) groupItem.populate()
def publishProject(tree, explorer): layers = qgislayers.getAllLayers() if not layers: return dlg = PublishProjectDialog(explorer.catalogs()) dlg.exec_() catalog = dlg.catalog if catalog is None: return workspace = dlg.workspace groupName = dlg.groupName ogcat = OGCatalog(catalog) groups = qgislayers.getGroups() grouplyrs = [] for group in groups: grouplyrs.extend([layer for layer in groups[group]]) ungroupedlyrs = [layer for layer in layers if layer not in grouplyrs] publishedLyrs = [] if ungroupedlyrs: lyrsdlg = PublishLayersDialog( {0: catalog}, ungroupedlyrs, workspace=workspace, overwrite=False) lyrsdlg.exec_() toPublish = lyrsdlg.topublish if toPublish is None: return explorer.setProgressMaximum(len(toPublish), "Publish ungrouped layer") progress = 0 for layer, catalog, workspace, layername in toPublish: publishedLyrs.append(layername) explorer.setProgress(progress) if not explorer.run(ogcat.publishLayer, None, [], layer, workspace, True, layername): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() for group in groups: grouplyrs = [layer for layer in groups[group]] if not grouplyrs: continue # don't publish empty groups, when publishing project dlg = PublishLayerGroupDialog(catalog, group, grouplyrs, workspace=workspace, overwritegroup=False, overwritelayers=False) dlg.exec_() grpName = dlg.definedname toPublish = dlg.topublish if grpName is None: # toPublish can be empty list return explorer.setProgressMaximum(len(toPublish), "Publish grouped layer") progress = 0 layernames = [] for layer, catalog, workspace, layername in toPublish: layernames.append(layername) publishedLyrs.append(layername) explorer.setProgress(progress) if not explorer.run(ogcat.publishLayer, None, [], layer, workspace, True, layername): explorer.setProgress(0) return progress += 1 explorer.setProgress(progress) explorer.resetActivity() names = reversed(layernames) layergroup = catalog.create_layergroup(grpName, names, names) if not explorer.run(catalog.save, "Create layer group from group '" + group + "'", [], layergroup): return if groupName is not None: names = reversed(publishedLyrs) layergroup = catalog.create_layergroup(groupName, names, names) if not explorer.run(catalog.save, "Create global layer group", [], layergroup): return tree.findAllItems(catalog)[0].refreshContent(explorer) explorer.setInfo("Project published")