Revision 2540

View differences:

org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/org.gvsig.vectorediting.offset.lib.prov/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.vectorediting.offset.lib</artifactId>
6
    <version>1.0.104</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.offset.lib.prov</artifactId>
9
  <packaging>pom</packaging>
10
  <name>org.gvsig.vectorediting.offset.lib.prov</name>
11
   <modules>
12
    <module>
13
      org.gvsig.vectorediting.offset.lib.prov.offset
14
    </module>
15
  </modules>
16
</project>
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/org.gvsig.vectorediting.offset.lib.prov/org.gvsig.vectorediting.offset.lib.prov.offset/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.vectorediting.offset.lib.prov.offset.OffsetEditingLibrary
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/org.gvsig.vectorediting.offset.lib.prov/org.gvsig.vectorediting.offset.lib.prov.offset/src/main/java/org/gvsig/vectorediting/offset/lib/prov/offset/OffsetEditingProviderFactory.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 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 2
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

  
25
package org.gvsig.vectorediting.offset.lib.prov.offset;
26

  
27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.tools.ToolsLocator;
29
import org.gvsig.tools.dynobject.DynClass;
30
import org.gvsig.tools.dynobject.DynObject;
31
import org.gvsig.tools.service.spi.AbstractProviderFactory;
32
import org.gvsig.tools.service.spi.Provider;
33
import org.gvsig.tools.service.spi.ProviderServices;
34
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
35
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceinfo;
36
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
37

  
38
public class OffsetEditingProviderFactory extends AbstractProviderFactory
39
implements EditingProviderFactory {
40

  
41
    public static final String PROVIDER_NAME = "modify-offset";
42

  
43
    private final static String PROVIDER_DESCRIPTION =
44
        "Creates offset geometries from selection";
45

  
46
    public void initialize() {
47

  
48
    }
49

  
50
    public EditingServiceInfo getServiceInfo() {
51
        EditingServiceInfo serviceInfo =
52
            new DefaultEditingServiceinfo(PROVIDER_NAME, "", false, null,
53
                new int[] { Geometry.TYPES.POINT, Geometry.TYPES.MULTIPOINT,
54
                Geometry.TYPES.SURFACE, Geometry.TYPES.MULTISURFACE,
55
                Geometry.TYPES.LINE, Geometry.TYPES.MULTILINE,
56
                Geometry.TYPES.POLYGON, Geometry.TYPES.MULTIPOLYGON,
57
                Geometry.TYPES.CURVE, Geometry.TYPES.MULTICURVE });
58

  
59
        return serviceInfo;
60
    }
61

  
62
    @Override
63
    protected Provider doCreate(DynObject parameters, ProviderServices services) {
64
        return new OffsetEditingProvider(services, parameters);
65
    }
66

  
67
    @Override
68
    public DynObject createParameters() {
69
        DynObject dynobject = super.createParameters();
70
        dynobject.setDynValue(PROVIDER_NAME_FIELD, PROVIDER_NAME);
71
        return dynobject;
72
    }
73

  
74
    @Override
75
    protected DynClass createParametersDynClass() {
76
        DynClass dynclass =
77
            ToolsLocator.getDynObjectManager().createDynClass(PROVIDER_NAME,
78
                PROVIDER_DESCRIPTION);
79

  
80
        dynclass.addDynFieldString(PROVIDER_NAME_FIELD);
81
        dynclass.addDynFieldObject(FEATURE_STORE_FIELD);
82
        dynclass.addDynFieldObject(MAPCONTEXT_FIELD);
83

  
84
        return dynclass;
85
    }
86

  
87
}
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/org.gvsig.vectorediting.offset.lib.prov/org.gvsig.vectorediting.offset.lib.prov.offset/src/main/java/org/gvsig/vectorediting/offset/lib/prov/offset/OffsetEditingLibrary.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 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 2
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

  
25
package org.gvsig.vectorediting.offset.lib.prov.offset;
26

  
27
import org.gvsig.tools.ToolsLocator;
28
import org.gvsig.tools.i18n.I18nManager;
29
import org.gvsig.tools.library.AbstractLibrary;
30
import org.gvsig.tools.library.LibraryException;
31
import org.gvsig.vectorediting.lib.api.EditingLibrary;
32
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
33
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
34

  
35
/**
36
 * Library for default implementation initialization and configuration.
37
 *
38
 * @author gvSIG team
39
 * @version $Id$
40
 */
41
public class OffsetEditingLibrary extends AbstractLibrary {
42

  
43
    @Override
44
    public void doRegistration() {
45
        registerAsServiceOf(EditingLibrary.class);
46
    }
47

  
48
    @Override
49
    protected void doInitialize() throws LibraryException {
50
    }
51

  
52
    @Override
53
    protected void doPostInitialize() throws LibraryException {
54
        EditingProviderManager manager =
55
            EditingProviderLocator.getProviderManager();
56

  
57
        manager.addProviderFactory(new OffsetEditingProviderFactory());
58

  
59
        manager.registerIcon("vectorediting-tools", "modify-offset", this
60
            .getClass().getClassLoader(), this.getClass().getName());
61

  
62
        registerTranslations();
63
    }
64

  
65
    private void registerTranslations() {
66
        I18nManager manager = ToolsLocator.getI18nManager();
67
        manager.addResourceFamily("i18n.text",
68
            this.getClass().getClassLoader(), "offset-editing");
69
    }
70

  
71
}
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/org.gvsig.vectorediting.offset.lib.prov/org.gvsig.vectorediting.offset.lib.prov.offset/src/main/java/org/gvsig/vectorediting/offset/lib/prov/offset/OffsetEditingProvider.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 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 2
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.vectorediting.offset.lib.prov.offset;
25

  
26
import java.util.ArrayList;
27
import java.util.HashMap;
28
import java.util.LinkedHashMap;
29
import java.util.List;
30
import java.util.Map;
31
import org.apache.commons.lang3.StringUtils;
32
import org.gvsig.fmap.dal.exception.DataException;
33
import org.gvsig.fmap.dal.feature.EditableFeature;
34
import org.gvsig.fmap.dal.feature.Feature;
35
import org.gvsig.fmap.dal.feature.FeatureSelection;
36
import org.gvsig.fmap.dal.feature.FeatureStore;
37
import org.gvsig.fmap.geom.Geometry;
38
import org.gvsig.fmap.geom.GeometryException;
39
import org.gvsig.fmap.geom.GeometryLocator;
40
import org.gvsig.fmap.geom.GeometryManager;
41
import org.gvsig.fmap.geom.aggregate.Aggregate;
42
import org.gvsig.fmap.geom.aggregate.MultiCurve;
43
import org.gvsig.fmap.geom.aggregate.MultiPoint;
44
import org.gvsig.fmap.geom.aggregate.MultiSurface;
45
import org.gvsig.fmap.geom.operation.GeometryOperationException;
46
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
47
import org.gvsig.fmap.geom.primitive.Arc;
48
import org.gvsig.fmap.geom.primitive.Circle;
49
import org.gvsig.fmap.geom.primitive.Circumference;
50
import org.gvsig.fmap.geom.primitive.Curve;
51
import org.gvsig.fmap.geom.primitive.Ellipse;
52
import org.gvsig.fmap.geom.primitive.FilledSpline;
53
import org.gvsig.fmap.geom.primitive.Line;
54
import org.gvsig.fmap.geom.primitive.PeriEllipse;
55
import org.gvsig.fmap.geom.primitive.Point;
56
import org.gvsig.fmap.geom.primitive.Polygon;
57
import org.gvsig.fmap.geom.primitive.Spline;
58
import org.gvsig.fmap.geom.primitive.Surface;
59
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
60
import org.gvsig.tools.ToolsLocator;
61
import org.gvsig.tools.dispose.DisposableIterator;
62
import org.gvsig.tools.dynobject.DynObject;
63
import org.gvsig.tools.i18n.I18nManager;
64
import org.gvsig.tools.service.spi.ProviderServices;
65
import org.gvsig.vectorediting.lib.api.DrawingStatus;
66
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
67
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
68
import org.gvsig.vectorediting.lib.api.exceptions.DrawServiceException;
69
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException;
70
import org.gvsig.vectorediting.lib.api.exceptions.InvalidEntryException;
71
import org.gvsig.vectorediting.lib.api.exceptions.StartServiceException;
72
import org.gvsig.vectorediting.lib.spi.AbstractEditingProvider;
73
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
74
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
75
import org.gvsig.vectorediting.lib.spi.EditingProvider;
76
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
77
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
78
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
79
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
80

  
81
public class OffsetEditingProvider extends AbstractEditingProvider implements
82
        EditingProvider {
83

  
84
    private static final Double PRECISION = 1.0e-5;
85

  
86
    private static final String SIDE = "_side";
87

  
88
    private static final String LEFT = "_left";
89

  
90
    private static final String RIGHT = "_right";
91

  
92
    private static final String SHORT_LEFT = "_short_left";
93

  
94
    private static final String SHORT_RIGHT = "_short_right";
95

  
96

  
97
    private final EditingServiceParameter selectionParameter;
98

  
99
    private final EditingServiceParameter offsetParameter;
100

  
101
    private final EditingServiceParameter sideParameter;
102

  
103
    private final EditingServiceParameter deleteOriginalGeometriesParameter;
104

  
105
    private boolean deleteOriginalGeometries = false;
106

  
107
    private Map<EditingServiceParameter, Object> values;
108

  
109
    private final Map<String, String> options;
110

  
111
    private final FeatureStore featureStore;
112

  
113
    public OffsetEditingProvider(ProviderServices providerServices, DynObject parameters) {
114
        super(providerServices);
115
        this.featureStore = (FeatureStore) parameters.getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
116
        I18nManager i18nManager = ToolsLocator.getI18nManager();
117

  
118
        this.selectionParameter
119
                = new DefaultEditingServiceParameter("selection",
120
                        i18nManager.getTranslation("selection"), TYPE.SELECTION);
121

  
122
        this.offsetParameter
123
                = new DefaultEditingServiceParameter("offset_distance",
124
                        i18nManager.getTranslation("offset_distance"),
125
                        TYPE.POSITION, TYPE.VALUE, TYPE.DISTANCE);
126

  
127
        Map<String, String> sideOptions = new HashMap<>();
128
        sideOptions.put(i18nManager.getTranslation(SHORT_LEFT), i18nManager.getTranslation(LEFT));
129
        sideOptions.put(i18nManager.getTranslation(SHORT_RIGHT), i18nManager.getTranslation(RIGHT));
130
        
131
        String sideConsoleMsg
132
        = ((EditingProviderServices)providerServices).makeConsoleMessage(
133
                i18nManager.getTranslation(SIDE), sideOptions);
134

  
135

  
136
        this.sideParameter
137
                = new DefaultEditingServiceParameter("side",
138
                        sideConsoleMsg,
139
                        sideOptions,
140
                        TYPE.OPTION, TYPE.POSITION);
141

  
142
        this.options = new LinkedHashMap<>();
143
        options.put(i18nManager.getTranslation("short_yes"),
144
                "delete_original_geometries");
145
        options.put(i18nManager.getTranslation("short_no"),
146
                "keep_original_geometries");
147

  
148
        String consoleMsg
149
                = ((EditingProviderServices)providerServices).makeConsoleMessage(
150
                        "delete_original_geometries_question", options);
151

  
152
        this.deleteOriginalGeometriesParameter
153
                = new DefaultEditingServiceParameter("Delete original geometries",
154
                        consoleMsg, options, TYPE.OPTION);
155

  
156
    }
157

  
158
    @Override
159
    public EditingServiceParameter next() {
160

  
161
        if (values.get(selectionParameter) == null) {
162
            return selectionParameter;
163
        } else if (values.get(offsetParameter) == null) {
164
            return offsetParameter;
165
        } else if (values.get(sideParameter) == null) {
166
            Object offsetValue = values.get(offsetParameter);
167
            if (!(offsetValue instanceof Point)) {
168
                Double distance = (Double) offsetValue;
169
                if (distance >= 0) {
170
                    return sideParameter;
171
                }
172
            }
173
        }
174

  
175
        if (values.get(deleteOriginalGeometriesParameter) == null) {
176
            return this.deleteOriginalGeometriesParameter;
177
        }
178

  
179
        return null;
180
    }
181

  
182
    @Override
183
    public DrawingStatus getDrawingStatus(Point mousePosition) throws DrawServiceException {
184
        DefaultDrawingStatus drawingStatus = new DefaultDrawingStatus();
185
        EditingProviderManager editingProviderManager
186
                = EditingProviderLocator.getProviderManager();
187
//        ISymbol auxiliaryLineSymbolEditing = editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
188
        ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing");
189
        ISymbol auxiliaryLineSymbolEditingDirection = editingProviderManager.getSymbol("auxiliary-line-symbol-editing-direction");
190
        ISymbol lineSymbolEditing = editingProviderManager.getSymbol("line-symbol-editing");
191
        ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing");
192

  
193
        FeatureSelection selected
194
                = (FeatureSelection) values.get(selectionParameter);
195
        try {
196
            if ((selected != null) && !selected.isEmpty()) {
197
                Point point; // = null;
198
                double distance = 0.0;
199
                double side = 1.0;
200
                Object offsetValue = values.get(offsetParameter);
201

  
202
                if (offsetValue != null) {
203
                    if (offsetValue instanceof Point) {
204
                        distance = Math.abs(getMinDistance(selected, (Point) offsetValue));
205
                    } else {
206
                        distance = (Double) offsetValue;
207
                    }
208

  
209
                    Object sideValue = values.get(sideParameter);
210
                    if (sideValue == null) {
211
                        point = mousePosition;
212
                        side = Math.signum(getMinDistance(selected, point));
213
                    } else {
214
                        Double signum = getSideSignum((String) sideValue);
215
                        if (signum != null) {
216
                            side = signum;
217
                        }
218
                    }
219
                } else {
220
                    point = mousePosition;
221
                    distance = getMinDistance(selected, point);
222
                }
223

  
224
                DisposableIterator it;
225
                it = selected.fastIterator();
226

  
227
                while (it.hasNext()) {
228
                    Feature feat = (Feature) it.next();
229
                    Geometry transformedGeometry = feat.getDefaultGeometry().offset(distance * side);
230

  
231
                    ISymbol symbol = null;
232
                    if (transformedGeometry instanceof Curve || transformedGeometry instanceof MultiCurve) {
233
                        symbol = lineSymbolEditing;
234
                        drawingStatus.addStatus(feat.getDefaultGeometry(), auxiliaryLineSymbolEditingDirection, "Direction");
235
                    } else if (transformedGeometry instanceof Surface || transformedGeometry instanceof MultiSurface) {
236
                        symbol = polygonSymbolEditing;
237
                    } else if (transformedGeometry instanceof Point || transformedGeometry instanceof MultiPoint) {
238
                        symbol = auxiliaryPointSymbolEditing;
239
                    }
240
                    if (transformedGeometry instanceof Aggregate) {
241
                        int primitivesNumber = ((Aggregate) transformedGeometry).getPrimitivesNumber();
242
                        for (int i = 0; i < primitivesNumber; i++) {
243
                            drawingStatus.addStatus(((Aggregate) transformedGeometry).getPrimitiveAt(i), symbol, "");
244
                        }
245
                    } else {
246
                        drawingStatus.addStatus(transformedGeometry, symbol, "");
247
                    }
248
                }
249
                it.dispose();
250
            }
251
            return drawingStatus;
252
        } catch (Exception e) {
253
            throw new DrawServiceException(e);
254
        }
255
    }
256

  
257
    /**
258
     * @param selected
259
     * @param point
260
     * @return
261
     * @throws DataException
262
     * @throws GeometryOperationException
263
     * @throws GeometryOperationNotSupportedException
264
     * @throws GeometryException
265
     */
266
    private double getMinDistance(FeatureSelection selected, Point point) throws DataException, GeometryOperationNotSupportedException, GeometryOperationException, GeometryException {
267
        double minorDistance = Double.POSITIVE_INFINITY;
268
        DisposableIterator it;
269
        it = selected.fastIterator();
270
        while (it.hasNext()) {
271
            Feature feat = (Feature) it.next();
272
            Geometry geometry = feat.getDefaultGeometry();
273
            double distance = getDistance(geometry, point);
274
            if (distance < minorDistance) {
275
                minorDistance = distance;
276
            }
277
        }
278
        it.dispose();
279
        return minorDistance;
280

  
281
    }
282

  
283
    /**
284
     * @param geometry
285
     * @param point
286
     * @return
287
     * @throws GeometryOperationException
288
     * @throws GeometryOperationNotSupportedException
289
     * @throws GeometryException
290
     */
291
    private double getDistance(Geometry geometry, Point point) throws GeometryOperationNotSupportedException, GeometryOperationException, GeometryException {
292
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
293
        if (geometry instanceof Arc) {
294
            Arc arc = (Arc) geometry;
295
            Point center = arc.getCenterPoint();
296
            double radius = center.distance(arc.getInitPoint());
297
            double distance = center.distance(point) - radius;
298
            return distance;
299
        }
300

  
301
        if (geometry instanceof Circle) {
302
            Circle circle = (Circle) geometry;
303
            return circle.getCenter().distance(point) - circle.getRadious();
304
        }
305
        if (geometry instanceof Circumference) {
306
            Circumference circumference = (Circumference) geometry;
307
            return circumference.getCenter().distance(point) - circumference.getRadious();
308
        }
309
        if (geometry instanceof PeriEllipse) {
310
            double minDistance = Double.POSITIVE_INFINITY;
311
            PeriEllipse ellipse = (PeriEllipse) geometry;
312
            Geometry[] closestPoints = point.closestPoints(ellipse);
313
            if (closestPoints != null) {
314
                for (Geometry closestPoint : closestPoints) {
315
                    if (!point.equals(closestPoint)) {
316
                        double distance = closestPoint.distance(point);
317
                        if (distance < minDistance) {
318
                            minDistance = distance;
319
                        }
320
                    }
321
                }
322
            }
323
            Ellipse auxEllipse = (Ellipse) geomManager.create(Geometry.TYPES.ELLIPSE, geometry.getGeometryType().getSubType());
324
            auxEllipse.setPoints(ellipse.getAxis1Start(), ellipse.getAxis1End(), ellipse.getAxis2Dist());
325
            if (auxEllipse.contains(point)) {
326
                return -minDistance;
327
            }
328
            return minDistance;
329
        }
330
        if (geometry instanceof Ellipse) {
331
            Ellipse ellipse = (Ellipse) geometry;
332
            PeriEllipse auxPeriEllipse = (PeriEllipse) geomManager.create(Geometry.TYPES.PERIELLIPSE, geometry.getGeometryType().getSubType());
333
            auxPeriEllipse.setPoints(ellipse.getAxis1Start(), ellipse.getAxis1End(), ellipse.getAxis2Dist());
334
            double distance = getDistance(auxPeriEllipse, point);
335

  
336
            return distance;
337
        }
338

  
339
        if (geometry instanceof Spline || geometry instanceof FilledSpline) {
340
            return getDistance(geometry.toLines().getPrimitiveAt(0), point);
341
        }
342

  
343
        if (geometry instanceof Line) {
344
            Line line = (Line) geometry;
345
            double minDistance = Double.POSITIVE_INFINITY;
346
            Geometry[] closestPoints = point.closestPoints(line);
347
            Point closestPoint = null;
348
            if (closestPoints != null) {
349
                for (Geometry closestPoint1 : closestPoints) {
350
                    Point p = (Point) closestPoint1;
351
                    if (!point.equals(p)) {
352
                        double distance = p.distance(point);
353
                        if (distance < minDistance) {
354
                            minDistance = distance;
355
                            closestPoint = p;
356
                        }
357
                    }
358
                }
359
            }
360
            if (closestPoint != null) {
361
                for (int i = 0; i < line.getNumVertices() - 1; i++) {
362
                    Line segment = (Line) geomManager.create(Geometry.TYPES.LINE, geometry.getGeometryType().getSubType());
363
                    segment.addVertex(line.getVertex(i));
364
                    segment.addVertex(line.getVertex(i + 1));
365
                    if (segment.isWithinDistance(closestPoint, PRECISION)) {
366
                        if (line.getVertex(0).equals(line.getVertex(line.getNumVertices() - 1))) { //isClosed
367
                            if (line.toPolygons().contains(point)) {
368
                                return -minDistance;
369
                            }
370
                            return minDistance;
371
                        } else {
372
                            return getDirectedDistance(closestPoint, point, segment);
373
                        }
374
                    }
375
                }
376
            }
377
        }
378

  
379
        if (geometry instanceof Polygon) {
380
            Polygon polygon = (Polygon) geometry;
381
            if (!polygon.contains(point)) {
382
                double minDistance = Double.POSITIVE_INFINITY;
383
                Geometry[] closestPoints = point.closestPoints(polygon);
384
                Point closestPoint = null;
385
                if (closestPoints != null) {
386
                    for (Geometry closestPoint1 : closestPoints) {
387
                        Point p = (Point) closestPoint1;
388
                        if (!point.equals(p)) {
389
                            double distance = p.distance(point);
390
                            if (distance < minDistance) {
391
                                minDistance = distance;
392
                                closestPoint = p;
393
                            }
394
                        }
395
                    }
396
                }
397
                if (closestPoint != null) {
398
                    return closestPoint.distance(point);
399
                }
400
            } else {
401
                Line auxLine = (Line) polygon.toLines().getPrimitiveAt(0);
402
                if (auxLine != null) {
403
                    return getDistance(auxLine, point);
404
                }
405
            }
406
        }
407

  
408
        if (geometry instanceof Aggregate) {
409
            double minDistance = Double.POSITIVE_INFINITY;
410
            Aggregate aggregate2 = (Aggregate) geometry;
411
            for (int i = 0; i < aggregate2.getPrimitivesNumber(); i++) {
412
                double distance = getDistance(aggregate2.getPrimitiveAt(i), point);
413
                if (distance < minDistance) {
414
                    minDistance = distance;
415
                }
416
            }
417
            return minDistance;
418
        }
419
        return 0.0;
420
    }
421

  
422
    @Override
423
    public void stop() {
424
        values.clear();
425
    }
426

  
427
    private void validateAndInsertValue(EditingServiceParameter param,
428
            Object value) throws InvalidEntryException {
429
        I18nManager i18nManager = ToolsLocator.getI18nManager();
430

  
431
        if (param == selectionParameter) {
432
            if (value instanceof FeatureSelection) {
433
                values.put(param, value);
434
            }
435
        } else if (param == offsetParameter) {
436
            if (value instanceof Point) {
437
                try {
438
                    Double distance = getMinDistance((FeatureSelection) values.get(selectionParameter), (Point) value);
439
                    values.put(param, Math.abs(distance));
440
                    values.put(sideParameter, coerceSide(distance));
441
                } catch (Exception e) {
442
                    throw new InvalidEntryException(e);
443
                }
444
                return;
445
            }
446
            if (value instanceof Double) {
447
                Double distance = (Double) value;
448
                if (distance >= 0) {
449
                    values.put(param, value);
450
                } else {
451
                    values.put(param, Math.abs(distance));
452
                    values.put(sideParameter, coerceSide(distance));
453
                }
454
            }
455
        } else if (param == sideParameter) {
456
            if (value instanceof Point) {
457
                try {
458
                    values.put(param, coerceSide(getMinDistance((FeatureSelection) values.get(selectionParameter), (Point) value)));
459
                } catch (Exception e) {
460
                    throw new InvalidEntryException(e);
461
                }
462
                return;
463
            }
464
            if (value instanceof String) {
465
                values.put(param, coerceSide(value));
466
            }
467
        } else if (param == deleteOriginalGeometriesParameter) {
468
            if (value instanceof String) {
469
                if (((String) value).trim().equalsIgnoreCase(
470
                        i18nManager.getTranslation("short_yes"))) {
471
                    deleteOriginalGeometries = true;
472
                } else if (((String) value).trim().equalsIgnoreCase(
473
                        i18nManager.getTranslation("short_no"))) {
474
                    deleteOriginalGeometries = false;
475
                } else {
476
                    throw new InvalidEntryException(null);
477
                }
478
                values.put(param, value);
479
            }
480
        }
481

  
482
    }
483

  
484
    private String coerceSide(Object value) throws InvalidEntryException {
485

  
486
        if (value instanceof Double) {
487
            return (Double) value >= 0 ? LEFT : RIGHT;
488
        }
489
        if (value instanceof String) {
490
            Double signum = getSideSignum((String) value);
491
            if (signum != null) {
492
                return signum >= 0 ? LEFT : RIGHT;
493
            }
494
        }
495
        throw new InvalidEntryException(null);
496
    }
497

  
498
    private Double getSideSignum(String side) {
499
        I18nManager i18nManager = ToolsLocator.getI18nManager();
500
        String sideTrim = side.trim();
501
        if (StringUtils.equalsIgnoreCase(sideTrim, LEFT)
502
                || StringUtils.startsWithIgnoreCase(i18nManager.getTranslation(LEFT), sideTrim)) {
503
            return 1.0;
504
        } else if (StringUtils.equalsIgnoreCase(sideTrim, RIGHT)
505
                || StringUtils.startsWithIgnoreCase(i18nManager.getTranslation(RIGHT), sideTrim)) {
506
            return -1.0;
507
        }
508
        return null;
509
    }
510

  
511
    @Override
512
    public List<EditingServiceParameter> getParameters() {
513
        List<EditingServiceParameter> list
514
                = new ArrayList<>();
515
        list.add(selectionParameter);
516
        list.add(offsetParameter);
517
        list.add(sideParameter);
518
        return list;
519
    }
520

  
521
    @Override
522
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
523
        validateAndInsertValue(parameter, value);
524
    }
525

  
526
    @Override
527
    public void setValue(Object value) throws InvalidEntryException {
528
        EditingServiceParameter param = next();
529
        validateAndInsertValue(param, value);
530
    }
531

  
532
    @Override
533
    public void finishAndStore() throws FinishServiceException {
534

  
535
        FeatureSelection selected
536
                = (FeatureSelection) values.get(selectionParameter);
537
        try {
538
            if (!selected.isEmpty()) {
539
                double side = 1.0;
540
                Object sideValue = values.get(sideParameter);
541
                if (sideValue != null) {
542
                    if (sideValue instanceof String) {
543
                        Double signum = getSideSignum((String) sideValue);
544
                        side = signum != null ? signum : null;
545
                    }
546
                }
547
                double distance = ((Double) values.get(offsetParameter)) * side;
548
                DisposableIterator it;
549
                it = selected.fastIterator();
550

  
551
                while (it.hasNext()) {
552
                    Feature feature = (Feature) it.next();
553
                    Geometry geom;
554
                    try {
555
                        geom = feature.getDefaultGeometry().offset(distance);
556
                    } catch (GeometryOperationNotSupportedException | GeometryOperationException e) {
557
                        throw new FinishServiceException(e);
558
                    }
559

  
560
                    if (this.deleteOriginalGeometries) {
561
                        // Se sustituye la geometr?a original por la
562
                        // calculada
563
                        EditableFeature editableFeature
564
                                = feature.getEditable();
565
                        editableFeature.setDefaultGeometry(geom);
566
                        ((EditingProviderServices) getProviderServices())
567
                                .updateFeatureInFeatureStore(editableFeature,
568
                                        featureStore);
569
                    } else {
570
                        // Se crea una feature nueva copiando los valores de
571
                        // la feature original excepto aquellos que sean PK
572
                        EditingProviderServices editingProviderServices
573
                                = (EditingProviderServices) getProviderServices();
574
                        EditableFeature editableFeature
575
                                = editingProviderServices
576
                                        .getFeatureCopyWithoutPK(featureStore,
577
                                                feature);
578
                        editableFeature.setDefaultGeometry(geom);
579
                        editingProviderServices
580
                                .insertFeatureIntoFeatureStore(editableFeature,
581
                                        featureStore);
582
                    }
583

  
584
                }
585
                it.dispose();
586
                featureStore.getFeatureSelection().deselectAll();
587
            }
588
        } catch (DataException e) {
589
            throw new FinishServiceException(e);
590
        }
591
    }
592

  
593
    private Double getDirectedDistance(Point pointInLine, Point distancePoint, Line line)
594
            throws GeometryOperationNotSupportedException, GeometryOperationException {
595
        Double distance = distancePoint.distance(pointInLine);
596
        EditingProviderServices editingProviderServices
597
                = (EditingProviderServices) getProviderServices();
598
        Double angle = editingProviderServices.getAngle(pointInLine, distancePoint);
599
        double angleLine = editingProviderServices.getAngle(line.getVertex(0), line.getVertex(1));
600

  
601
        Double angleDifference = angle - angleLine;
602
        if (angleDifference < 0) {
603
            angleDifference += 2 * Math.PI;
604
        }
605
        if (angleDifference > Math.PI) {
606
            distance = -distance;
607
        }
608
        return distance;
609
    }
610

  
611
    @Override
612
    public Geometry finish() throws FinishServiceException {
613
        return null;
614
    }
615

  
616
    @Override
617
    public void start() throws StartServiceException {
618
        this.values = new HashMap<>();
619
        FeatureSelection selected = null;
620
        if (featureStore != null) {
621
            try {
622
                selected
623
                        = (FeatureSelection) featureStore.getFeatureSelection()
624
                                .clone();
625
            } catch (DataException e) {
626
                throw new StartServiceException(e);
627
            } catch (CloneNotSupportedException e) {
628
                // Do nothing
629
            }
630
            if ((selected != null) && (selected.getSelectedCount() > 0)) {
631
                values.put(selectionParameter, selected);
632
            }
633
        }
634
    }
635

  
636
    @Override
637
    public String getName() {
638
        return OffsetEditingProviderFactory.PROVIDER_NAME;
639
    }
640
}
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/org.gvsig.vectorediting.offset.lib.prov/org.gvsig.vectorediting.offset.lib.prov.offset/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.vectorediting.offset.lib.prov</artifactId>
6
    <version>1.0.104</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.offset.lib.prov.offset</artifactId>
9
  <name>org.gvsig.vectorediting.offset.lib.prov.offset</name>
10

  
11
  <dependencies>
12
    <dependency>
13
      <groupId>org.gvsig</groupId>
14
      <artifactId>org.gvsig.vectorediting.lib.api</artifactId>
15
    </dependency>
16
    <dependency>
17
      <groupId>org.gvsig</groupId>
18
      <artifactId>org.gvsig.vectorediting.lib.impl</artifactId>
19
    </dependency>
20
    <dependency>
21
      <groupId>org.gvsig</groupId>
22
      <artifactId>org.gvsig.vectorediting.lib.spi</artifactId>
23
    </dependency>
24
  </dependencies>
25
</project>
0 26

  
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.lib/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.vectorediting.offset</artifactId>
6
    <version>1.0.104</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.offset.lib</artifactId>
9
  <packaging>pom</packaging>
10
  <name>org.gvsig.vectorediting.offset.lib</name>
11
    <modules>
12
    <module>org.gvsig.vectorediting.offset.lib.prov</module>
13
  </modules>
14
</project>
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/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.desktop</artifactId>
6
    <version>2.0.322</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.offset</artifactId>
9
  <version>1.0.104</version>
10
  <packaging>pom</packaging>
11
  <name>org.gvsig.vectorediting.offset</name>
12
  <description>Project that provides the offset vector editing tool</description>
13

  
14
	<repositories>
15
		<repository>
16
			<id>gvsig-public-http-repository</id>
17
			<name>gvSIG maven public HTTP repository</name>
18
			<url>http://devel.gvsig.org/m2repo/j2se</url>
19
			<releases>
20
				<enabled>true</enabled>
21
				<updatePolicy>daily</updatePolicy>
22
				<checksumPolicy>warn</checksumPolicy>
23
			</releases>
24
			<snapshots>
25
				<enabled>true</enabled>
26
				<updatePolicy>daily</updatePolicy>
27
				<checksumPolicy>warn</checksumPolicy>
28
			</snapshots>
29
		</repository>
30
	</repositories>
31

  
32
	<url>dav:https://devel.gvsig.org/sites/${project.artifactId}/${project.version}</url>
33
	<scm>
34
		<connection>scm:svn:https://devel.gvsig.org/svn/gvsig-vectorediting/org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104</connection>
35
		<developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-vectorediting/org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104</developerConnection>
36
		<url>https://devel.gvsig.org/redmine/projects/gvsig-vector-editing/repository/show/org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104</url>
37
	</scm>
38

  
39
	<distributionManagement>
40
		<site>
41
			<id>gvsig-repository</id>
42
			<url>dav:https://devel.gvsig.org/download/projects/gvsig-vectorediting/pool/${project.artifactId}/${project.version}</url>
43
		</site>
44
	</distributionManagement>
45

  
46
	<build>
47
		<plugins>
48
			<plugin>
49
				<groupId>org.apache.maven.plugins</groupId>
50
				<artifactId>maven-release-plugin</artifactId>
51
				<configuration>
52
					<tagBase>https://devel.gvsig.org/svn/gvsig-vectorediting/${project.artifactId}/tags</tagBase>
53
				</configuration>
54
			</plugin>
55
		</plugins>
56
	</build>
57

  
58
	<dependencyManagement>
59
		<dependencies>
60
			<dependency>
61
				<groupId>org.gvsig</groupId>
62
				<artifactId> org.gvsig.vectorediting </artifactId>
63
				<version>${org.gvsig.vectorediting.version}</version>
64
				<scope>import</scope>
65
				<type>pom</type>
66
			</dependency>
67
			<dependency>
68
				<groupId>org.gvsig</groupId>
69
				<artifactId>org.gvsig.vectorediting.offset.lib.prov.offset</artifactId>
70
				<version>1.0.104</version>
71
			</dependency>
72
		</dependencies>
73
	</dependencyManagement>
74

  
75
  <modules>
76
    <module>org.gvsig.vectorediting.offset.lib</module>
77
    <module>org.gvsig.vectorediting.offset.app</module>
78
  </modules>
79

  
80
  <properties>
81
     <org.gvsig.vectorediting.version>1.0.146</org.gvsig.vectorediting.version>
82
  </properties>
83
</project>
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.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.vectorediting.offset</artifactId>
6
    <version>1.0.104</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.offset.app</artifactId>
9
  <packaging>pom</packaging>
10
  <name>org.gvsig.vectorediting.offset.app</name>
11
  <modules>
12
    <module>org.gvsig.vectorediting.offset.app.mainplugin</module>
13
  </modules>
14
</project>
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.app.mainplugin/buildNumber.properties
1
#Wed Apr 21 01:58:33 CEST 2021
2
buildNumber=111
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
1
modify_offset = Parallel geometry
2
selection = Selection
3
first_point_of_symmetry_axis=First point of the symmetry axis
4
second_point_of_symmetry_axis=Second point of the symmetry axis
5
delete_original_geometries_question=Delete original geometries?
6
short_yes=Y
7
short_no=N
8
delete_original_geometries = Delete original geometries
9
keep_original_geometries = Keep original geometries
10
offset_distance= Distance
11
_Left=Left
12
_right=Right
13
_short_left=L
14
_short_right=R
15
_side=Side
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.app.mainplugin/src/main/resources-plugin/i18n/text.properties
1
modify_offset = Geometr\u00eda paralela
2
selection=Selecci\u00f3n
3
first_point_of_symmetry_axis=Primer punto del eje de simetr\u00eda
4
second_point_of_symmetry_axis=Segundo punto del eje de simetr\u00eda
5
delete_original_geometries_question=\u00bfDesea borrar las geometr\u00edas originales?
6
short_yes=S
7
short_no=N
8
delete_original_geometries = Eliminar geometr\u00edas originales
9
keep_original_geometries = Mantener geometr\u00edas originales
10
offset_distance=Distancia
11
_left=Izquierdo
12
_right=Derecho
13
_short_left=I
14
_short_right=D
15
_side=Lado
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.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-2013
3
	gvSIG Association. This program is free software; you can redistribute it
4
	and/or modify it under the terms of the GNU General Public License as published
5
	by the Free Software Foundation; either version 3 of the License, or (at
6
	your option) any later version. This program is distributed in the hope that
7
	it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
8
	of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
9
	Public License for more details. You should have received a copy of the GNU
10
	General Public License along with this program; if not, write to the Free
11
	Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
12
	USA. For any additional information, do not hesitate to contact us at info
13
	AT gvsig.com, or visit our website www.gvsig.com. -->
14
<plugin-config>
15
	<depends plugin-name="org.gvsig.vectorediting.app.mainplugin" />
16
	<resourceBundle name="text" />
17
	<libraries library-dir="lib" />
18
	<extensions>
19
		<extension class-name="org.gvsig.vectorediting.app.mainplugin.ServiceExtension"
20
			description="" active="true" priority="1">
21

  
22
			<action name="modify-offset" label="modify_offset"
23
                tooltip="modify_offset" position="601004400" action-command="modify-offset"
24
                icon="modify-offset" accelerator="" />
25

  
26
			<menu text="Layer/Modify/modify_offset" name="modify-offset" />
27

  
28
			<tool-bar name="vector_editing" position="4000">
29
				<selectable-tool name="modify-offset" />
30
			</tool-bar>
31

  
32
		</extension>
33
	</extensions>
34
</plugin-config>
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.app.mainplugin/src/main/resources/README.txt
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
Put into this folder the resources to be included in the plugin jar.
27

  
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.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.vectorediting.offset.lib.prov.offset</include>
58
      </includes>
59
    </dependencySet>
60
  </dependencySets>
61

  
62
</assembly>
63

  
org.gvsig.vectorediting.offset/tags/org.gvsig.vectorediting.offset-1.0.104/org.gvsig.vectorediting.offset.app/org.gvsig.vectorediting.offset.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.vectorediting.offset.app</artifactId>
6
    <version>1.0.104</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.offset.app.mainplugin</artifactId>
9
  <name>org.gvsig.vectorediting.offset.app.mainplugin</name>
10

  
11
    <properties>
12
        <!-- Package info property values -->
13
        <gvsig.package.info.state>testing</gvsig.package.info.state>
14
        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.1.0-A, required: org.gvsig.vectorediting.app.mainplugin -ge 1.0.0, conflict: org.gvsig.editing.app.mainplugin -ge 1</gvsig.package.info.dependencies>
15
        <gvsig.package.info.official>true</gvsig.package.info.official>
16
        <gvsig.package.info.name>Tools: Vector editing offset provider</gvsig.package.info.name>
17
        <gvsig.package.info.description>Symmetry provider: provides offset geometries.</gvsig.package.info.description>
18
        <gvsig.package.info.categories>Vector</gvsig.package.info.categories>
19
        <gvsig.package.info.javaVM>j1_6</gvsig.package.info.javaVM>
20
        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-vectorediting/pool</gvsig.package.info.poolURL>
21
    </properties>
22

  
23
    <dependencies>
24
      <dependency>
25
        <groupId>org.gvsig</groupId>
26
        <artifactId>org.gvsig.vectorediting.app.mainplugin</artifactId>
27
        <scope>compile</scope>
28
      </dependency>
29
      <dependency>
30
        <groupId>org.gvsig</groupId>
31
        <artifactId>org.gvsig.vectorediting.lib.api</artifactId>
32
      </dependency>
33
      <dependency>
34
        <groupId>org.gvsig</groupId>
35
        <artifactId>org.gvsig.vectorediting.lib.impl</artifactId>
36
      </dependency>
37
      <dependency>
38
        <groupId>org.gvsig</groupId>
39
        <artifactId>org.gvsig.vectorediting.lib.spi</artifactId>
40
      </dependency>
41
    <dependency>
42
      <groupId>org.gvsig</groupId>
43
      <artifactId>org.gvsig.vectorediting.offset.lib.prov.offset</artifactId>
44
    </dependency>
45
    </dependencies>
46
</project>
0 47

  

Also available in: Unified diff