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)       
Example #3
0
 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)
Example #4
0
 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))
Example #6
0
 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))
Example #7
0
    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)
Example #8
0
 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 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()
Example #10
0
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)
Example #11
0
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)
Example #12
0
    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)    
Example #14
0
    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)                                                
Example #17
0
 def populate(self):
     grouplayers = qgislayers.getGroups()[self.element]
     for layer in grouplayers:
         layerItem = QgsLayerItem(layer)
         self.addChild(layerItem)
Example #18
0
 def populate(self):
     groups = qgislayers.getGroups()
     for group in groups:
         groupItem = QgsGroupItem(group)
         self.addChild(groupItem)
         groupItem.populate()
 def populate(self):            
     grouplayers = qgislayers.getGroups()[self.element]
     for layer in grouplayers:
         layerItem = QgsLayerItem(layer)                                
         self.addChild(layerItem)
Example #20
0
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")