Revision 3679

View differences:

org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
  <modelVersion>4.0.0</modelVersion>
3
  <parent>
4
    <groupId>org.gvsig</groupId>
5
    <artifactId>org.gvsig.topology</artifactId>
6
    <version>1.0.59</version>
7
  </parent>
8
  <artifactId>org.gvsig.topology.app</artifactId>
9
  <packaging>pom</packaging>
10
  <name>${project.artifactId}</name>
11
  <modules>
12
  	<module>org.gvsig.topology.app.mainplugin</module>
13
  </modules>
14
</project>
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/resources-plugin/i18n/text.properties
1
#Translations for language [es]
2
#Thu Nov 20 10:10:09 CET 2014
3
_Topology=Topologia
4
_Create_or_edit_plan=Crear o modificar plan
5
_Execute_plan=Ejecutar plan
6
_Topology_plan_error_inspector=Inspector de errores del Plan de topologia
7
_Topology_plan=Plan de topologia
8
_Show=Mostrar
9
_Show_errors=Mostrar errores
10
_Show_exceptions=Mostrar excepciones
11
_Show_only_in_visible_extent=Mostrar solo en el area visible
12
_Show_form_when_modify_geometry=Mostrar formulario al modificar la geometria
13
_Zoom=Zoom
14
Center_geometry=Centrar geometria
15
_Center_error=Centrar error
16
_Actions=Acciones
17
_Action=Acci\u00f3n
18
_Update=Actualizar
19
_Name=Nombre
20
_Tolerance=Tolerancia
21
_DataSets=Conjuntos de datos
22
_Dataset1=Conjunto de datos1
23
_Dataset2=Conjunto de datos2
24
_Rules=Reglas
25
_Remove_dataset=Eliminar conjunto de datos
26
_Add_dataset=A\u00f1adir conjunto de datos
27
_Remove_rule=Eliminar regla
28
_Add_rule=A\u00f1adir regla
29
_Edit_rule=Modificar regla
30
_Contains_Point=Contiene punto
31
_Primary_dataset=Conjunto de datos primario
32
_Secondary_dataset=Conjunto de datos secundario
33
_Rule=Regla
34
_Add_new_rule=A\u00f1adir nueva regla
35
_Exception=Excepcion
36
_Errors=Errores
37
_Parameters=Parametros
38
_Accept=Aceptar
39
_Execute=Ejecutar
40
_Any_rule=Cualquier regla
41
_Erase_error_marks=Eliminar marcas de errores
42
_Select_a_dataset=Seleccione un conjunto de datos
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
1
#Translations for language [en]
2
#Thu Nov 20 10:10:15 CET 2014
3
_Topology=Topology
4
_Create_or_edit_plan=Create or edit plan
5
_Execute_plan=Execute plan
6
_Topology_plan_error_inspector=Topology plan error inspector
7
_Topology_plan=Topology plan
8
_Show=Show
9
_Show_errors=Show errors
10
_Show_exceptions=Show exceptions
11
_Show_only_in_visible_extent=Show only in visible extent
12
_Show_form_when_modify_geometry=Show form when modify geometry
13
_Zoom=Zoom
14
_Center_geometry=Center geometry
15
_Center_error=Center error
16
_Actions=Actions
17
_Action=Action
18
_Update=Update
19
_Name=Name
20
_Tolerance=Tolerance
21
_DataSets=Datasets
22
_Dataset1=Dataset1
23
_Dataset2=Dataset2
24
_Rules=Rules
25
_Remove_dataset=Remove dataset
26
_Add_dataset=Add dataset
27
_Remove_rule=Remove rule
28
_Add_rule=Add rule
29
_Edit_rule=Edit rule
30
_Primary_dataset=Primary dataset
31
_Secondary_dataset=Secondary dataset
32
_Rule=Rule
33
_Add_new_rule=Add new rule
34
_Exception=Exception
35
_Errors=Errors
36
_Parameters=Parameters
37
_Accept=Accept
38
_Execute=Execute
39
_Any_rule=Any rule
40
_Erase_error_marks=Erase error marks
41
_Select_a_dataset=Select a dataset
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<!-- gvSIG. Desktop Geographic Information System. Copyright (C) 2007-2014 gvSIG
3
  Association. This program is free software; you can redistribute it and/or modify
4
  it under the terms of the GNU General Public License as published by the Free Software
5
  Foundation; either version 3 of the License, or (at your option) any later version.
6
  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
7
  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8
  PURPOSE. See the GNU General Public License for more details. You should have received
9
  a copy of the GNU General Public License along with this program; if not, write to
10
  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
11
  USA. For any additional information, do not hesitate to contact us at info AT gvsig.com,
12
  or visit our website www.gvsig.com. -->
13
<plugin-config>
14
  <depends plugin-name="org.gvsig.app.mainplugin" />
15
  <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
16
  <resourceBundle name="text" />
17
  <libraries library-dir="lib" />
18
  <extensions>
19

  
20

  
21
    <extension class-name="org.gvsig.topology.app.mainplugin.TopologyExtension"
22
      description="" active="true" priority="1">
23
            <action 
24
                name="tools-topology-create-or-modify"
25
                label="_Show_create_or_edit_topology_plan" 
26
                position="908300100"  
27
                tooltip="_Show_create_or_edit_topology_plan" 
28
                action-command="tools-topology-create-or-modify"
29
                icon="tools-topology-create-or-modify"
30
                accelerator=""
31
            />
32
            <action 
33
                name="tools-topology-execute"
34
                label="_Execute_topology_plan" 
35
                position="908300200"  
36
                tooltip="_Execute_topology_plan" 
37
                action-command="tools-topology-execute"
38
                icon="tools-topology-execute"
39
                accelerator=""
40
            />
41

  
42
            <menu text="tools/_Topology"
43
                              position="908300000" 
44
                              is_separator="true"/>
45
            <menu text="tools/_Topology/_Create_or_edit_plan" 
46
                              name="tools-topology-create-or-modify"/>
47
            <menu text="tools/_Topology/_Execute_plan" 
48
                              name="tools-topology-execute"/>
49
				
50
            <!--
51
            <tool-bar name="topology" position="2000">
52
                <action-tool name="tools-topology-create-or-modify"/>				
53
                <action-tool name="tools-topology-execute"/>				
54
            </tool-bar>                    
55
            -->
56
    </extension>
57

  
58

  
59
  </extensions>
60
</plugin-config>
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<!--
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

  
25
-->
26
<assembly>
27
    <id>gvsig-plugin-package</id>
28
    <formats>
29
        <format>zip</format>
30
    </formats>
31
    <baseDirectory>${project.artifactId}</baseDirectory>
32
    <includeBaseDirectory>true</includeBaseDirectory>
33
    <files>
34
        <file>
35
            <source>target/${project.artifactId}-${project.version}.jar</source>
36
            <outputDirectory>lib</outputDirectory>
37
        </file>
38
        <file>
39
            <source>target/package.info</source>
40
        </file>
41
    </files>
42

  
43
    <fileSets>
44
        <fileSet>
45
            <directory>src/main/resources-plugin</directory>
46
            <outputDirectory>.</outputDirectory>
47
        </fileSet>
48
    </fileSets>
49

  
50

  
51
    <dependencySets>
52
        <dependencySet>
53
            <useProjectArtifact>false</useProjectArtifact>
54
            <useTransitiveDependencies>false</useTransitiveDependencies>
55
            <outputDirectory>lib</outputDirectory>
56
            <includes>
57
                <include>org.gvsig:org.gvsig.topology.lib.api</include>
58
                <include>org.gvsig:org.gvsig.topology.lib.impl</include>
59
                <include>org.gvsig:org.gvsig.topology.swing.api</include>
60
                <include>org.gvsig:org.gvsig.topology.swing.impl</include>
61
            </includes>
62
        </dependencySet>
63
    </dependencySets>
64

  
65
</assembly>
66

  
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/java/org/gvsig/topology/app/mainplugin/AppTopologyServices.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.topology.app.mainplugin;
25

  
26
import java.io.File;
27
import java.util.ArrayList;
28
import java.util.HashMap;
29
import java.util.List;
30
import java.util.Map;
31
import javax.swing.DefaultListModel;
32
import javax.swing.ImageIcon;
33
import javax.swing.ListModel;
34
import javax.swing.tree.TreeModel;
35
import org.apache.commons.lang3.mutable.Mutable;
36
import org.apache.commons.lang3.mutable.MutableObject;
37
import org.gvsig.andami.IconThemeHelper;
38
import org.gvsig.andami.PluginsLocator;
39
import org.gvsig.app.ApplicationLocator;
40
import org.gvsig.app.ApplicationManager;
41
import org.gvsig.app.project.Project;
42
import org.gvsig.app.project.documents.Document;
43
import org.gvsig.app.project.documents.table.TableDocument;
44
import org.gvsig.app.project.documents.table.TableManager;
45
import org.gvsig.app.project.documents.view.ViewDocument;
46
import org.gvsig.app.project.documents.view.ViewManager;
47
import org.gvsig.fmap.dal.EditingNotification;
48
import org.gvsig.fmap.dal.EditingNotificationManager;
49
import org.gvsig.fmap.dal.feature.FeatureStore;
50
import org.gvsig.fmap.dal.swing.DALSwingLocator;
51
import org.gvsig.fmap.geom.Geometry;
52
import org.gvsig.fmap.geom.aggregate.MultiCurve;
53
import org.gvsig.fmap.geom.aggregate.MultiPoint;
54
import org.gvsig.fmap.geom.aggregate.MultiSurface;
55
import org.gvsig.fmap.geom.primitive.Curve;
56
import org.gvsig.fmap.geom.primitive.Envelope;
57
import org.gvsig.fmap.geom.primitive.Point;
58
import org.gvsig.fmap.geom.primitive.Surface;
59
import org.gvsig.fmap.mapcontext.MapContext;
60
import org.gvsig.fmap.mapcontext.MapContextLocator;
61
import org.gvsig.fmap.mapcontext.ViewPort;
62
import org.gvsig.fmap.mapcontext.events.ColorEvent;
63
import org.gvsig.fmap.mapcontext.events.ExtentEvent;
64
import org.gvsig.fmap.mapcontext.events.ProjectionEvent;
65
import org.gvsig.fmap.mapcontext.events.listeners.ViewPortListener;
66
import org.gvsig.fmap.mapcontext.layers.FLayer;
67
import org.gvsig.fmap.mapcontext.layers.FLayers;
68
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
69
import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
70
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
71
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol_v2;
72
import org.gvsig.fmap.mapcontrol.MapControlLocator;
73
import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
74
import org.gvsig.tools.dynobject.DynObject;
75
import org.gvsig.tools.exception.BaseException;
76
import org.gvsig.tools.observer.Observable;
77
import org.gvsig.tools.observer.Observer;
78
import org.gvsig.tools.swing.api.ListElement;
79
import org.gvsig.tools.visitor.VisitCanceledException;
80
import org.gvsig.tools.visitor.Visitor;
81
import org.gvsig.topology.lib.api.TopologyDataSet;
82
import org.gvsig.topology.lib.api.TopologyLocator;
83
import org.gvsig.topology.lib.api.TopologyManager;
84
import org.gvsig.topology.swing.api.TopologySwingServices;
85
import org.slf4j.Logger;
86
import org.slf4j.LoggerFactory;
87

  
88
/**
89
 *
90
 * @author jjdelcerro
91
 */
92
@SuppressWarnings("UseSpecificCatch")
93
public class AppTopologyServices implements TopologySwingServices {
94

  
95
    private static final Logger LOGGER = LoggerFactory.getLogger(AppTopologyServices.class);
96

  
97
    private class WorkingAreaViewPortListener implements ViewPortListener {
98

  
99
        private WorkingAreaChangedListener workingAreaChangedListener;
100
        private ViewPort viewPort;
101

  
102
        public WorkingAreaViewPortListener(ViewPort viewPort, WorkingAreaChangedListener workingAreaChangedListener) {
103
            this.workingAreaChangedListener = workingAreaChangedListener;
104
            this.viewPort = viewPort;
105
        }
106

  
107
        public ViewPort getViewPort() {
108
            return this.viewPort;
109
        }
110

  
111
        @Override
112
        public void extentChanged(ExtentEvent e) {
113
            this.workingAreaChangedListener.workingAreaChanged(e.getNewExtent());
114
        }
115

  
116
        @Override
117
        public void backColorChanged(ColorEvent e) {
118
        }
119

  
120
        @Override
121
        public void projectionChanged(ProjectionEvent e) {
122
        }
123
    }
124

  
125
    private class EditingNotificationObserver implements Observer {
126

  
127
        public EditingNotificationObserver() {
128

  
129
        }
130

  
131
        @Override
132
        public void update(Observable o, Object notification) {
133
            EditingNotification n = (EditingNotification) notification;
134
            if (n.isCancelable() && n.getFeature() != null) {
135
                try {
136
                    DynObject data = n.getFeature().getAsDynObject();
137
                    DynObjectEditor editor = new DynObjectEditor(data);
138
                    editor.setTitle("Topology - " + n.getFeature().getType().getName());
139
                    editor.editObject(true);
140
                    if (editor.isCanceled()) {
141
                        n.cancel();
142
                    } else {
143
                        editor.getData(data);
144
                    }
145
                } catch (Exception ex) {
146
                    LOGGER.warn("Problems showing the feature in a form.", ex);
147
                }
148
            }
149
        }
150
    }
151

  
152
    private Map<WorkingAreaChangedListener, WorkingAreaViewPortListener> workingAreaListener;
153
    private ISymbol errorPolygonSymbol = null;
154
    private ISymbol errorPointSymbol = null;
155
    private ISymbol errorLineSymbol = null;
156
    private EditingNotificationObserver editingNotificationObserver = null;
157

  
158
    public AppTopologyServices() {
159
        this.workingAreaListener = new HashMap<>();
160
    }
161

  
162
    @Override
163
    public TreeModel getDataSetTreeModel() {
164
        ApplicationManager application = ApplicationLocator.getManager();
165
        ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
166
        return new DataSetsTreeModel(this, view);
167
    }
168

  
169
    @Override
170
    public ListModel getTablesListModel() {
171
        ApplicationManager application = ApplicationLocator.getManager();
172
        Project project = application.getCurrentProject();
173
        TopologyManager manager = TopologyLocator.getTopologyManager();
174
        
175
        DefaultListModel<TopologyDataSet> model = new DefaultListModel<TopologyDataSet>();
176
        
177
        List<Document> docs = project.getDocuments(TableManager.TYPENAME);
178
        for (Document doc : docs) {
179
            TableDocument table=(TableDocument) doc;
180
            TopologyDataSet dataset = manager.createDataSet(table.getName(), table.getFeatureStore());
181
            model.addElement(dataset);   
182
        }
183
        return model;
184
    }
185
    
186
    
187

  
188
    @Override
189
    public FeatureStore getFeatureStore(final TopologyDataSet dataSet) {
190
        final Mutable<FeatureStore> store = new MutableObject<>();
191
        store.setValue(null);
192

  
193

  
194
        ApplicationManager application = ApplicationLocator.getManager();
195
        Project project = application.getCurrentProject();
196

  
197
        List<Document> views = new ArrayList<>();
198
        views.add(project.getActiveDocument(ViewManager.TYPENAME));
199
//        views.addAll(project.getDocuments(ViewManager.TYPENAME));
200

  
201
        for (Document view : views) {
202
            if (view == null) {
203
                continue;
204
            }
205
            FLayers layers = ((ViewDocument) view).getMapContext().getLayers();
206
            try {
207
                layers.accept(new Visitor() {
208
                    @Override
209
                    public void visit(Object o) throws VisitCanceledException, BaseException {
210
                        if (o instanceof FLyrVect) {
211
                            FLyrVect layer = (FLyrVect) o;
212
                            if (dataSet.isThisStore(layer.getFeatureStore())) {
213
                                store.setValue(layer.getFeatureStore());
214
                                throw new VisitCanceledException();
215
                            }
216
                        }
217
                    }
218
                });
219
            } catch (VisitCanceledException ex) {
220
                break;
221
            } catch (Exception ex) {
222
                throw new RuntimeException(ex);
223
            }
224
        }
225
        if (store.getValue()==null){
226
            for (Document document : project.getDocuments(TableManager.TYPENAME)) {
227
                TableDocument table= (TableDocument) document;
228
                if (dataSet.isThisStore(table.getFeatureStore())) {
229
                    store.setValue(table.getFeatureStore());
230
                    break;
231
                }   
232
            } 
233
        }
234
        return store.getValue();
235
    }
236

  
237
    @Override
238
    public void zoomTo(Envelope envelope) {
239
        ApplicationManager application = ApplicationLocator.getManager();
240
        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
241
        if (viewdoc == null) {
242
            return;
243
        }
244
        ViewPort viewPort = viewdoc.getMapContext().getViewPort();
245
        viewPort.setEnvelope(envelope);
246
    }
247

  
248
    @Override
249
    public void refreshView() {
250
        try {
251
            ApplicationManager application = ApplicationLocator.getManager();
252
            ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
253
            if (viewdoc == null) {
254
                return;
255
            }
256
            viewdoc.getMapContext().invalidate();
257
        } catch (Exception ex) {
258
            LOGGER.warn("Cant refresh view", ex);
259
        }
260
    }
261

  
262
    @Override
263
    public void centerTo(Point point) {
264
        try {
265
            ApplicationManager application = ApplicationLocator.getManager();
266
            ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
267
            if (viewdoc == null) {
268
                return;
269
            }
270
            ViewPort viewPort = viewdoc.getMapContext().getViewPort();
271
            Envelope envelope = (Envelope) viewPort.getEnvelope().clone();
272
            envelope.centerTo(point);
273
            viewPort.setEnvelope(envelope);
274
        } catch (Exception ex) {
275
            LOGGER.warn("Cant center view", ex);
276
        }
277
    }
278

  
279
    @Override
280
    public Envelope getWorkingArea() {
281
        ApplicationManager application = ApplicationLocator.getManager();
282
        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
283
        if (viewdoc == null) {
284
            return null;
285
        }
286
        ViewPort viewPort = viewdoc.getMapContext().getViewPort();
287
        return viewPort.getEnvelope();
288
    }
289

  
290
    @Override
291
    public void addWorkingAreaChangedListener(WorkingAreaChangedListener listener) {
292
        ApplicationManager application = ApplicationLocator.getManager();
293
        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
294
        if (viewdoc == null) {
295
            return;
296
        }
297
        ViewPort viewPort = viewdoc.getMapContext().getViewPort();
298
        WorkingAreaViewPortListener viewPortListener = this.workingAreaListener.get(listener);
299
        if (viewPortListener == null) {
300
            viewPortListener = new WorkingAreaViewPortListener(viewPort, listener);
301
            this.workingAreaListener.put(listener, viewPortListener);
302
        } else {
303
            if (viewPort != viewPortListener.getViewPort()) {
304
                viewPortListener.getViewPort().removeViewPortListener(viewPortListener);
305
                viewPortListener = new WorkingAreaViewPortListener(viewPort, listener);
306
                this.workingAreaListener.put(listener, viewPortListener);
307
            }
308
        }
309
        viewPortListener.getViewPort().addViewPortListener(viewPortListener);
310
    }
311

  
312
    @Override
313
    public void removeWorkingAreaChangedListener(WorkingAreaChangedListener listener) {
314
        WorkingAreaViewPortListener viewPortListener = this.workingAreaListener.get(listener);
315
        if (viewPortListener == null) {
316
            return;
317
        }
318
        viewPortListener.getViewPort().removeViewPortListener(viewPortListener);
319
    }
320

  
321
    @Override
322
    public void addError(Geometry geom) {
323
        if (this.errorPointSymbol == null) {
324
            try {
325
                File pluginfolder = PluginsLocator.getManager().getPlugin(this).getPluginDirectory();
326
                File folder = new File(pluginfolder, "symbols");
327
                ISymbol[] symbols = MapContextLocator.getSymbolManager().loadSymbols(folder);
328
                for (ISymbol symbol : symbols) {
329
                    if (symbol instanceof ISymbol_v2) {
330
                        String symbolid = ((ISymbol_v2) symbol).getID();
331
                        switch(symbolid) {
332
                            case "topology-error-polygon":
333
                                this.errorPolygonSymbol = symbol;
334
                                break;
335
                            case "topology-error-line":
336
                                this.errorLineSymbol = symbol;
337
                                break;
338
                            case "topology-error-point":
339
                                this.errorPointSymbol = symbol;
340
                                break;
341
                        }
342
                    }
343
                }
344
            } catch (Exception ex) {
345
            }
346
        }
347
        ApplicationManager application = ApplicationLocator.getManager();
348
        ViewDocument viewdoc = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
349
        MapContext mapContext = viewdoc.getMapContext();
350
        GraphicLayer gl = mapContext.getGraphicsLayer();
351
        gl.removeGraphics("topology-errors");
352
        if ( geom!=null ) {
353
            ISymbol symbol = null;
354
            if( geom instanceof Point || geom instanceof MultiPoint) {
355
                symbol = this.errorPointSymbol;
356
            } else if( geom instanceof Curve || geom instanceof MultiCurve ) {
357
                symbol = this.errorLineSymbol;
358
            } else if( geom instanceof Surface || geom instanceof MultiSurface ) {
359
                symbol = this.errorPolygonSymbol;
360
            }
361
            if (symbol != null) {
362
                int symbolid = gl.getSymbolId(symbol);
363
                if (symbolid < 0) {
364
                    gl.addSymbol(symbol);
365
                    symbolid = gl.getSymbolId(symbol);
366
                }
367
                gl.addGraphic("topology-errors", geom, symbolid);
368
            }
369
        }
370
        mapContext.invalidate();
371
    }
372

  
373
    @Override
374
    public void setShowFormWhenEdit(boolean showFormWhenEdit) {
375
        if (this.editingNotificationObserver == null) {
376
            this.editingNotificationObserver = new EditingNotificationObserver();
377
        }
378
        EditingNotificationManager editingNotificationManager = DALSwingLocator.getEditingNotificationManager();
379
        if (showFormWhenEdit) {
380
            editingNotificationManager.addObserver(this.editingNotificationObserver);
381
        } else {
382
            editingNotificationManager.deleteObserver(this.editingNotificationObserver);
383
        }
384
    }
385

  
386
    @Override
387
    public ImageIcon getTreeIcon(TreeModel model, Object item) {
388
        return ((DataSetsTreeModel)model).getTreeIcon(item);
389
    }
390

  
391
}
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/java/org/gvsig/topology/app/mainplugin/DataSetsTreeModel.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.topology.app.mainplugin;
25

  
26
import javax.swing.ImageIcon;
27
import javax.swing.event.TreeModelListener;
28
import javax.swing.tree.TreeModel;
29
import javax.swing.tree.TreePath;
30
import org.gvsig.andami.IconThemeHelper;
31
import org.gvsig.app.project.documents.view.ViewDocument;
32
import org.gvsig.fmap.dal.DataStore;
33
import org.gvsig.fmap.mapcontext.MapContextLocator;
34
import org.gvsig.fmap.mapcontext.layers.FLayer;
35
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
36
import org.gvsig.fmap.mapcontrol.CompoundLayersTreeModel;
37
import org.gvsig.fmap.mapcontrol.MapControlLocator;
38
import org.gvsig.tools.swing.api.ListElement;
39
import org.gvsig.topology.lib.api.TopologyDataSet;
40
import org.gvsig.topology.lib.api.TopologyLocator;
41
import org.gvsig.topology.swing.api.TopologySwingServices;
42

  
43
/**
44
 *
45
 * @author jjdelcerro
46
 */
47
public class DataSetsTreeModel implements TreeModel {
48

  
49
    private final ViewDocument view;
50
    private final CompoundLayersTreeModel deletaged;
51
    private final TopologySwingServices services;
52
    private final ListElement<Object> root;
53
    
54
    public DataSetsTreeModel(TopologySwingServices services, ViewDocument view) {
55
        this.services = services;
56
        this.view = view;
57
        CompoundLayersTreeModel model = (CompoundLayersTreeModel) MapControlLocator.getMapControlManager().createCompoundLayersTreeModel();
58
        model.addLayers(view.getMapContext().getLayers());
59
        this.deletaged = model;
60
        this.root = new ListElement<>("Project", this.deletaged.getRoot());
61
                
62
    }
63
    
64
    private Object getNode(Object value) {
65
        if( value instanceof ListElement ) {
66
            return ((ListElement) value).getValue();
67
        }
68
        return value;
69
    }
70
    
71
    @Override
72
    public Object getRoot() {
73
        return this.root;
74
    }
75

  
76
    @Override
77
    public Object getChild(Object parent, int index) {
78
        parent = this.getNode(parent);
79
        Object x = this.deletaged.getChild(parent, index);
80
        if( x instanceof SingleLayer ) {
81
            SingleLayer layer = (SingleLayer)x;
82
            DataStore store = layer.getDataStore();
83
            x = TopologyLocator.getTopologyManager().createDataSet(
84
                    layer.getName(),
85
                    store
86
            );
87
        }
88
        return x;
89
    }
90

  
91
    @Override
92
    public int getChildCount(Object parent) {
93
        parent = this.getNode(parent);
94
        return this.deletaged.getChildCount(parent);
95
    }
96

  
97
    @Override
98
    public boolean isLeaf(Object node) {
99
        node = this.getNode(node);
100
        return this.deletaged.isLeaf(node);
101
    }
102

  
103
    @Override
104
    public void valueForPathChanged(TreePath path, Object newValue) {
105
        this.deletaged.valueForPathChanged(path, newValue);
106
    }
107

  
108
    @Override
109
    public int getIndexOfChild(Object parent, Object child) {
110
        parent = this.getNode(parent);
111
        return this.deletaged.getIndexOfChild(parent, child);
112
    }
113

  
114
    @Override
115
    public void addTreeModelListener(TreeModelListener l) {
116
        this.deletaged.addTreeModelListener(l);
117
    }
118

  
119
    @Override
120
    public void removeTreeModelListener(TreeModelListener l) {
121
        this.deletaged.removeTreeModelListener(l);
122
    }
123

  
124
    public ImageIcon getTreeIcon(Object item) {
125
        if( this.getRoot()==item ) {
126
            return IconThemeHelper.getImageIcon("topology-tree-project");
127
        }
128
        if (item instanceof ListElement) {
129
            item = ((ListElement) item).getValue();
130
        }
131
        if( this.view.getMapContext().getLayers()==item ) {
132
            return IconThemeHelper.getImageIcon("document-view-tree-icon");
133
        }
134
        if (item instanceof TopologyDataSet) {
135
            DataStore store = ((TopologyDataSet)item).getStore();
136
            String iconName = MapContextLocator.getMapContextManager().getIconLayer(store);
137
            return IconThemeHelper.getImageIcon(iconName);
138
        }
139
        if (item instanceof FLayer) {
140
            String iconName = ((FLayer) item).getTocImageIcon();
141
            return IconThemeHelper.getImageIcon(iconName);
142
        }
143
        return IconThemeHelper.getImageIcon("topology-tree-folder");
144
    }
145
    
146
}
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/src/main/java/org/gvsig/topology/app/mainplugin/TopologyExtension.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.topology.app.mainplugin;
25

  
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import org.apache.commons.lang.StringUtils;
29
import org.gvsig.andami.IconThemeHelper;
30
import org.gvsig.andami.plugins.Extension;
31
import org.gvsig.app.ApplicationLocator;
32
import org.gvsig.app.ApplicationManager;
33
import org.gvsig.app.project.documents.Document;
34
import org.gvsig.app.project.documents.view.ViewDocument;
35
import org.gvsig.app.project.documents.view.ViewManager;
36
import org.gvsig.tools.ToolsLocator;
37
import org.gvsig.tools.i18n.I18nManager;
38
import org.gvsig.tools.swing.api.ToolsSwingLocator;
39
import org.gvsig.tools.swing.api.windowmanager.Dialog;
40
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
41
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
42
import org.gvsig.topology.lib.api.TopologyLocator;
43
import org.gvsig.topology.lib.api.TopologyManager;
44
import org.gvsig.topology.lib.api.TopologyPlan;
45
import org.gvsig.topology.swing.api.JTopologyPlanProperties;
46
import org.gvsig.topology.swing.api.JTopologyReport;
47
import org.gvsig.topology.swing.api.TopologySwingLocator;
48
import org.gvsig.topology.swing.api.TopologySwingManager;
49

  
50
/**
51
 *
52
 * @author jjdelcerro
53
 */
54
public class TopologyExtension extends Extension {
55

  
56
    @Override
57
    public void initialize() {
58
        
59
    }
60

  
61
    @Override
62
    public void postInitialize() {
63
        AppTopologyServices services = new AppTopologyServices();
64
        
65
        TopologyManager manager = TopologyLocator.getTopologyManager();
66
        manager.setDefaultServices(services);
67
        
68
        TopologySwingManager swingManager = TopologySwingLocator.getTopologySwingManager();
69
        swingManager.setDefaultServices(services);
70
  
71
        IconThemeHelper.registerIcon("document", "document-view-tree-icon", this);
72
        IconThemeHelper.registerIcon("topology", "topology-tree-folder", this);
73
        IconThemeHelper.registerIcon("topology", "topology-tree-project", this);
74
    }
75

  
76
    
77
    @Override
78
    public void execute(String action) {
79
        if( StringUtils.equalsIgnoreCase("tools-topology-create-or-modify", action) ) {
80
            I18nManager i18n = ToolsLocator.getI18nManager();
81
            ApplicationManager application = ApplicationLocator.getManager();
82
            final ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
83
            if( view==null ) {
84
                // TODO: Mensaje de se necesita una vista 
85
                return;
86
            }
87
            TopologyManager manager = TopologyLocator.getTopologyManager();
88
            TopologySwingManager swingManager = TopologySwingLocator.getTopologySwingManager();
89
            WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
90
            
91
            final JTopologyPlanProperties panel = swingManager.createJTopologyPlan();
92

  
93
            TopologyPlan plan = manager.createTopologyPlan();
94
            String jsonPlan = (String) view.getProperty("TopologyPlan");
95
            if( !StringUtils.isEmpty(jsonPlan) ) {
96
                plan.fromJSON(jsonPlan);
97
            } 
98
            panel.put(plan);
99
            
100
            final Dialog dlg = winManager.createDialog(
101
                    panel.asJComponent(),
102
                    i18n.getTranslation("_Topology_plan"),
103
                    null, 
104
                    WindowManager_v2.BUTTONS_OK_CANCEL
105
            );
106
            dlg.addActionListener(new ActionListener() {
107
                @Override
108
                public void actionPerformed(ActionEvent e) {
109
                    if( dlg.getAction()==WindowManager_v2.BUTTON_OK ) {
110
                        TopologyPlan plan = panel.fetch(null);
111
                        view.setProperty("TopologyPlan", plan.toJSON().toString());
112
                    }
113
                }
114
            });
115
            dlg.show(WindowManager.MODE.WINDOW);
116

  
117
        } else if( StringUtils.equalsIgnoreCase("tools-topology-execute", action) ) {
118
            I18nManager i18n = ToolsLocator.getI18nManager();
119
            ApplicationManager application = ApplicationLocator.getManager();
120
            final ViewDocument view = (ViewDocument) application.getActiveDocument(ViewManager.TYPENAME);
121
            if( view==null ) {
122
                // TODO: Mensaje de se necesita una vista 
123
                return;
124
            }
125
            TopologyManager manager = TopologyLocator.getTopologyManager();
126
            final TopologySwingManager swingManager = TopologySwingLocator.getTopologySwingManager();
127
            final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
128
            
129

  
130
            String jsonPlan = (String) view.getProperty("TopologyPlan");
131
            if( StringUtils.isEmpty(jsonPlan) ) {
132
                // TODO: Mensaje de crear plan
133
                return;
134
            }
135
           
136
            final TopologyPlan plan = manager.createTopologyPlan();
137
            plan.fromJSON(jsonPlan);
138
            JTopologyReport panel = swingManager.createJTopologyReport(plan);
139
            panel.put(plan);
140
            winManager.showWindow(
141
                    panel.asJComponent(), 
142
                    i18n.getTranslation("_Topology_plan_error_inspector") + " ("+plan.getName()+")",
143
                    WindowManager.MODE.TOOL
144
            );
145

  
146
            Thread th = new Thread(new Runnable() {
147
                @Override
148
                public void run() {
149
                    plan.execute();
150
                }
151
            }, "TopologyPlan-"+ plan.getName());
152
            th.start();
153
        }
154
    }
155

  
156
    @Override
157
    public boolean isEnabled() {
158
        ApplicationManager application = ApplicationLocator.getManager();
159
        Document view = application.getActiveDocument(ViewManager.TYPENAME);
160
        return view!=null;
161
    }
162

  
163
    @Override
164
    public boolean isVisible() {
165
        return true;
166
    }
167
    
168
}
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
  <modelVersion>4.0.0</modelVersion>
3
  <parent>
4
    <groupId>org.gvsig</groupId>
5
    <artifactId>org.gvsig.topology.app</artifactId>
6
    <version>1.0.59</version>
7
  </parent>
8
  <artifactId>org.gvsig.topology.app.mainplugin</artifactId>
9
  <name>${project.artifactId}</name>
10
  <dependencies>
11
    <dependency>
12
        <groupId>org.gvsig</groupId>
13
        <artifactId>org.gvsig.app.mainplugin</artifactId>
14
        <scope>compile</scope>
15
    </dependency>
16
    <dependency>
17
    	<groupId>org.gvsig</groupId>
18
    	<artifactId>org.gvsig.topology.lib.api</artifactId>
19
        <scope>compile</scope>
20
    </dependency>
21
    <dependency>
22
    	<groupId>org.gvsig</groupId>
23
    	<artifactId>org.gvsig.topology.lib.impl</artifactId>
24
        <scope>runtime</scope>
25
    </dependency>
26
    <dependency>
27
    	<groupId>org.gvsig</groupId>
28
    	<artifactId>org.gvsig.topology.swing.api</artifactId>
29
        <scope>compile</scope>
30
    </dependency>
31
    <dependency>
32
    	<groupId>org.gvsig</groupId>
33
    	<artifactId>org.gvsig.topology.swing.impl</artifactId>
34
        <scope>runtime</scope>
35
    </dependency>
36
    <dependency>
37
      <groupId>org.gvsig</groupId>
38
      <artifactId>org.gvsig.app.document.table.app.mainplugin</artifactId>
39
      <scope>compile</scope>
40
    </dependency>
41
  </dependencies>
42

  
43
  <properties>
44
    <gvsig.package.info.state>testing</gvsig.package.info.state>
45
    <gvsig.package.info.official>true</gvsig.package.info.official>
46
    <gvsig.package.info.dependencies>required: org.gvsig.app -ge 2.2.0</gvsig.package.info.dependencies>
47
    <gvsig.package.info.categories />
48
    <gvsig.package.info.name>Topology framework</gvsig.package.info.name>
49
    <gvsig.package.info.description>Topology framework and basic rules</gvsig.package.info.description>
50
    <gvsig.package.info.owner>gvSIG Association</gvsig.package.info.owner>
51
    <gvsig.package.info.javaVM>j1_8</gvsig.package.info.javaVM>
52
    <gvsig.package.info.sourcesURL>${project.scm.url}</gvsig.package.info.sourcesURL>
53
    <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-topology/pool</gvsig.package.info.poolURL>
54
  </properties>
55

  
56
</project>
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.app/org.gvsig.topology.app.mainplugin/buildNumber.properties
1
#Wed Apr 21 02:09:39 CEST 2021
2
buildNumber=65
0 3

  
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/lib/impl/TopologyImplLibrary.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.topology.lib.impl;
25

  
26
import org.gvsig.fmap.dal.DALLibrary;
27
import org.gvsig.fmap.geom.GeometryLibrary;
28
import org.gvsig.tools.ToolsLibrary;
29
import org.gvsig.tools.library.AbstractLibrary;
30
import org.gvsig.tools.library.LibraryException;
31
import org.gvsig.topology.lib.api.TopologyLibrary;
32
import org.gvsig.topology.lib.api.TopologyLocator;
33
import org.gvsig.topology.lib.api.TopologyManager;
34
import org.gvsig.topology.rule.ContainsNullRuleFactory;
35
import org.gvsig.topology.rule.ContainsPointRuleFactory;
36
import org.gvsig.topology.rule.MustBeLargerThanToleranceLineRuleFactory;
37
import org.gvsig.topology.rule.MustNotOverlapPolygonRuleFactory;
38
import org.gvsig.topology.rule.PointMustBeProperlyInsidePolygonRuleFactory;
39

  
40
/**
41
 *
42
 * @author jjdelcerro
43
 */
44
public class TopologyImplLibrary extends AbstractLibrary {
45

  
46
    @Override
47
    public void doRegistration() {
48
        super.doRegistration();
49
        registerAsImplementationOf(TopologyLibrary.class);
50
        this.require(ToolsLibrary.class);
51
        this.require(DALLibrary.class);
52
        this.require(GeometryLibrary.class);
53
    }
54

  
55
    @Override
56
    protected void doInitialize() throws LibraryException {
57
        TopologyLocator.registerDefaultTopologyManager(DefaultTopologyManager.class);
58
    }
59

  
60
    @Override
61
    protected void doPostInitialize() throws LibraryException {
62
        ContainsNullRuleFactory.selfRegister();
63
        ContainsPointRuleFactory.selfRegister();
64
        MustBeLargerThanToleranceLineRuleFactory.selfRegister();
65
        MustNotOverlapPolygonRuleFactory.selfRegister();
66
        PointMustBeProperlyInsidePolygonRuleFactory.selfRegister();
67
    }
68

  
69
}
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/lib/impl/DefaultTopologyReportLine.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.topology.lib.impl;
25

  
26
import org.gvsig.fmap.dal.feature.FeatureReference;
27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.topology.lib.api.TopologyDataSet;
29
import org.gvsig.topology.lib.api.TopologyReport;
30
import org.gvsig.topology.lib.api.TopologyReportLine;
31
import org.gvsig.topology.lib.api.TopologyRule;
32

  
33
/**
34
 *
35
 * @author jjdelcerro
36
 */
37
public class DefaultTopologyReportLine implements TopologyReportLine {
38
    
39
    private final TopologyReport report;
40
    private final TopologyRule rule;
41
    private final TopologyDataSet dataSet1;
42
    private final TopologyDataSet dataSet2;
43
    private final Geometry geometry;
44
    private final FeatureReference feature1;
45
    private final FeatureReference feature2;
46
    private final int primitive1;
47
    private final int primitive2;
48
    private boolean exception;
49
    private final String description;
50
    private final String data;
51
    private final Geometry errorGeometry;
52
    
53
    DefaultTopologyReportLine(DefaultTopologyReport report, 
54
            TopologyRule rule, 
55
            TopologyDataSet dataSet1, 
56
            TopologyDataSet dataSet2, 
57
            Geometry geometry,
58
            Geometry error,
59
            FeatureReference feature1, 
60
            FeatureReference feature2, 
61
            int primitive1,
62
            int primitive2,
63
            boolean exception,
64
            String description,
65
            String data
66
        ) {
67
        this.report = report;
68
        this.rule = rule;
69
        this.dataSet1 = dataSet1;
70
        this.dataSet2 = dataSet2;
71
        this.geometry = geometry;
72
        this.feature1 = feature1;
73
        this.feature2 = feature2;
74
        this.primitive1 = primitive1;
75
        this.primitive2 = primitive2;
76
        this.exception = exception;
77
        this.description = description;
78
        this.errorGeometry = error;
79
        this.data = data;
80
    }
81

  
82
    @Override
83
    public TopologyRule getRule() {
84
        return this.rule;
85
    }
86

  
87
    @Override
88
    public TopologyDataSet getDataSet1() {
89
        return this.dataSet1;
90
    }
91

  
92
    @Override
93
    public TopologyDataSet getDataSet2() {
94
        return this.dataSet2;
95
    }
96

  
97
    @Override
98
    public Geometry getGeometry() {
99
        return this.geometry;
100
    }
101

  
102
    @Override
103
    public FeatureReference getFeature1() {
104
        return this.feature1;
105
    }
106

  
107
    @Override
108
    public FeatureReference getFeature2() {
109
        return this.feature2;
110
    }
111

  
112
    @Override
113
    public boolean isException() {
114
        return this.exception;
115
    }
116
    
117
    public void setException(boolean exception) {
118
        this.exception = exception;
119
    }
120

  
121
    @Override
122
    public String getDescription() {
123
        return description;
124
    }
125

  
126
    @Override
127
    public Geometry getError() {
128
        return this.errorGeometry;
129
    }
130

  
131
    @Override
132
    public int getPrimitiveNumber1() {
133
        return this.primitive1;
134
    }
135

  
136
    @Override
137
    public int getPrimitiveNumber2() {
138
        return this.primitive2;
139
    }
140

  
141
    @Override
142
    public String getData() {
143
        return this.data;
144
    }
145
}
org.gvsig.topology/tags/org.gvsig.topology-1.0.59/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/lib/impl/DefaultTopologyDataSet.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.topology.lib.impl;
25

  
26
import java.util.Iterator;
27
import java.util.Map;
28
import org.apache.commons.collections.IteratorUtils;
29
import org.apache.commons.lang3.StringUtils;
30
import org.apache.commons.lang3.mutable.MutableObject;
31
import org.gvsig.expressionevaluator.Expression;
32
import org.gvsig.expressionevaluator.ExpressionBuilder;
33
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
34
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
35
import org.gvsig.expressionevaluator.ExpressionUtils;
36
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
37
import org.gvsig.expressionevaluator.GeometryExpressionUtils;
38
import org.gvsig.fmap.dal.DataStore;
39
import org.gvsig.fmap.dal.EditingNotification;
40
import org.gvsig.fmap.dal.EditingNotificationManager;
41
import org.gvsig.fmap.dal.exception.DataException;
42
import org.gvsig.fmap.dal.feature.EditableFeature;
43
import org.gvsig.fmap.dal.feature.Feature;
44
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
45
import org.gvsig.fmap.dal.feature.FeatureReference;
46
import org.gvsig.fmap.dal.feature.FeatureSet;
47
import org.gvsig.fmap.dal.feature.FeatureStore;
48
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
49
import org.gvsig.fmap.dal.feature.FeatureType;
50
import org.gvsig.fmap.dal.swing.DALSwingLocator;
51
import org.gvsig.fmap.geom.Geometry;
52
import org.gvsig.fmap.geom.GeometryLocator;
53
import org.gvsig.fmap.geom.GeometryManager;
54
import org.gvsig.fmap.geom.GeometryUtils;
55
import org.gvsig.fmap.geom.SpatialIndex;
56
import org.gvsig.fmap.geom.type.GeometryType;
57
import org.gvsig.tools.dispose.DisposableIterator;
58
import org.gvsig.tools.exception.BaseException;
59
import org.gvsig.tools.util.PropertiesSupportHelper;
60
import org.gvsig.tools.visitor.VisitCanceledException;
61
import org.gvsig.tools.visitor.Visitor;
62
import org.gvsig.topology.lib.api.CancelOperationException;
63
import org.gvsig.topology.lib.api.PerformOperationException;
64
import org.gvsig.topology.lib.api.TopologyDataSet;
65
import org.gvsig.topology.lib.api.TopologyLocator;
66
import org.gvsig.topology.lib.api.TopologyManager;
67
import org.json.JSONObject;
68
import org.gvsig.topology.lib.api.TopologyServices;
69
import org.slf4j.Logger;
70
import org.slf4j.LoggerFactory;
71

  
72
/**
73
 *
74
 * @author jjdelcerro
75
 */
76
@SuppressWarnings({"EqualsAndHashcode","UseSpecificCatch"})
77
public class DefaultTopologyDataSet implements TopologyDataSet {
78

  
79
    private final static Logger LOGGER = LoggerFactory.getLogger(DefaultTopologyDataSet.class);
80
    
81
    private TopologyServices services;
82
    private String name;
83
    private DataStore store;
84
    private boolean needFinishEditing;
85
    private String fullName;
86
    private PropertiesSupportHelper propertiesHelper;
87
    private MutableObject<SpatialIndex> spatialIndex = null;
88
    
89
    public DefaultTopologyDataSet() {
90
        this.services = null;
91
        this.name = null;
92
        this.store = null;
93
        this.needFinishEditing = false;
94
        this.fullName = null;
95
        this.propertiesHelper = new PropertiesSupportHelper();
96
    }
97

  
98
    public DefaultTopologyDataSet(TopologyServices services, String name, DataStore store) {
99
        this.services = services;
100
        this.name = name;
101
        this.store = store;
102
        this.needFinishEditing = false;
103
        if( store!=null ) {
104
            this.fullName = store.getFullName();
105
        }
106
    }
107

  
108
    @Override
109
    public void restart() {
110
        this.store  = null;
111
        this.spatialIndex = null;
112
    }
113
    
114
    @Override
115
    public boolean equals(Object obj) {
116
        if( !(obj instanceof DefaultTopologyDataSet) ) {
117
            return false;
118
        }
119
        DefaultTopologyDataSet other = (DefaultTopologyDataSet)obj;
120
        if( this.store != other.store ) {
121
            return false;
122
        }
123
        if( !StringUtils.equals(this.getName(), other.getName()) ) {
124
            return false;
125
        }
126
        return true;
127
    }
128

  
129
    @Override
130
    public String getName() {
131
        return this.name;
132
    }
133

  
134
    @Override
135
    public void setName(String name) {
136
        this.name = name;
137
    }
138

  
139
    @Override
140
    public String toString() {
141
        try {
142
            FeatureAttributeDescriptor attr = this.getFeatureStore().getDefaultFeatureType().getDefaultGeometryAttribute();
143
            String geomType = attr.getGeomType().getName();
144
            return this.name + " ("+ geomType + ")";
145
        } catch(Exception ex) {
146
            return this.name ;
147
        }
148
    }
149

  
150
    @Override
151
    public void setStore(DataStore store) {
152
        this.store = store;
153
    }
154

  
155
    @Override
156
    public DataStore getStore() {
157
        if (this.store == null) {
158
            this.store = this.services.getFeatureStore(this);
159
        }
160
        return this.store;
161
    }
162

  
163
    @Override
164
    public FeatureStore getFeatureStore() {
165
        if (this.store == null) {
166
            this.store = this.services.getFeatureStore(this);
167
        }
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff