Revision 2204

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.api/src/main/java/org/gvsig/vectorediting/swing/api/EditingContext.java
108 108
     * @param value
109 109
     * @throws InvalidEntryException
110 110
     */
111
    public void setValue(EditingServiceParameter parameter, String value) throws InvalidEntryException;
111
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException;
112 112
    
113 113
    public EditingService getActiveService();
114 114

  
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingContext.java
1254 1254
    }
1255 1255

  
1256 1256
    @Override
1257
    public void setValue(EditingServiceParameter parameter, String value) throws InvalidEntryException {
1258
        Object obj = coerceInputParameter(parameter, value);
1259
        getActiveService().setValue(parameter, obj);
1257
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
1258
        if( value instanceof CharSequence){
1259
            value = coerceInputParameter(parameter, value.toString());
1260
        } else if( value instanceof Point) {
1261
            contextSymbolTable.addPoint((Point) value);
1262
        }
1263
        getActiveService().setValue(parameter, value);
1260 1264
        nextParameter();
1261 1265
    }
1262 1266
    
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingBehavior.java
147 147
                }
148 148

  
149 149
                try {
150
                    editingContext.getActiveService().setValue(point);
150
                    //FIXME: Estar?a bien hacer esto
151
                    editingContext.setValue(currentParam, point);
152
//                    editingContext.getActiveService().setValue(point);
151 153
                } catch (VectorEditingException ex) {
152 154
                    I18nManager i18nManager = ToolsLocator.getI18nManager();
153 155
                    editingContext.showConsoleMessage(i18nManager
154 156
                        .getTranslation("invalid_option"));
155 157
                }
156 158

  
157
                editingContext.nextParameter();
159
//                editingContext.nextParameter();
158 160

  
159 161
            } else if (SwingUtilities.isRightMouseButton(e)) {
160 162

  
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/contextmenu/DistanceListener.java
19 19
public class DistanceListener extends MeasureListenerImpl {
20 20

  
21 21
    AcceptValueListener listener;
22
    private final String currentTool;
23 22

  
24
    public DistanceListener(MapControl mc, AcceptValueListener listener, String currentTool) {
23
    public DistanceListener(MapControl mc, AcceptValueListener listener) {
25 24
        super(mc);
26 25
        this.listener = listener;
27
        this.currentTool = currentTool;
28 26
    }
29 27

  
30 28
    @Override
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/contextmenu/DefaultEditingContextMenu.java
208 208

  
209 209
                MapControl mapCtrl = context.getMapControl();
210 210
                String currentTool = mapCtrl.getCurrentTool();
211
                DistanceListener mli = new DistanceListener(mapCtrl, listener, currentTool);
211
                DistanceListener mli = new DistanceListener(mapCtrl, listener);
212 212
                PolylineBehavior polylineBehavior = new PolylineBehavior(mli);
213 213
                mapCtrl.addBehavior("distance", polylineBehavior);
214 214

  
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/pom.xml
10 10
  <parent>
11 11
    <groupId>org.gvsig</groupId>
12 12
    <artifactId>org.gvsig.desktop</artifactId>
13
    <version>2.0.294</version>
13
    <version>2.0.295-SNAPSHOT</version>
14 14
  </parent>
15 15
  <url>https://devel.gvsig.org/sites/org.gvsig.vectorediting/${project.version}</url>
16 16
  <scm>
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingProviderServices.java
28 28
import java.util.Map;
29 29
import org.geotools.measure.AngleFormat;
30 30
import org.gvsig.euclidean.EuclideanLine2D;
31
import org.gvsig.expressionevaluator.Expression;
32
import org.gvsig.expressionevaluator.ExpressionUtils;
31 33
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
32 34
import org.gvsig.fmap.dal.DALLocator;
33 35
import org.gvsig.fmap.dal.DataManager;
......
622 624
            GeometryExpressionBuilder builder = dalBuilder.expression();
623 625
            String filter = builder.ST_Intersects(builder.geometry(buffer, mapContext.getProjection()), dalBuilder.geometry()).toString();
624 626
            String sortBy = builder.ST_Distance(builder.geometry(buffer), dalBuilder.geometry()).toString();
627
            Expression sortByExpression = ExpressionUtils.createExpression(sortBy);
625 628

  
626 629
            Feature f;
627
            f = store.findFirst(filter, sortBy, true);
630
            f = store.findFirst(filter, sortByExpression, true);
628 631
            if (f != null) {
629 632
                geometry = f.getDefaultGeometry();
630 633
            }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.autopolygon/src/main/java/org/gvsig/vectorediting/lib/prov/autopolygon/AutopolygonEditingProvider.java
105 105
        return list;
106 106
    }
107 107

  
108
    @Override
109
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
110
        validateAndInsertValue(parameter, value);
111
    }
112

  
108 113
    public void setValue(Object value) throws InvalidEntryException {
109 114
        EditingServiceParameter param = next();
110 115
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.editvertex/src/main/java/org/gvsig/vectorediting/lib/prov/editvertex/EditVertexEditingProvider.java
480 480
        return parameters;
481 481
    }
482 482

  
483
    @Override
484
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
485
        validateAndInsertValue(parameter, value);
486
    }
487

  
483 488
    public void setValue(Object value) throws InvalidEntryException {
484 489
        EditingServiceParameter parameter = next();
485 490
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.internalpolygon/src/main/java/org/gvsig/vectorediting/lib/prov/internalpolygon/InternalPolygonEditingProvider.java
112 112
        return list;
113 113
    }
114 114

  
115
    @Override
116
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
117
        validateAndInsertValue(parameter, value);
118
    }
119

  
115 120
    public void setValue(Object value) throws InvalidEntryException {
116 121
        EditingServiceParameter param = next();
117 122
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.scale/src/main/java/org/gvsig/vectorediting/lib/prov/scale/ScaleEditingProvider.java
403 403

  
404 404

  
405 405

  
406
    @Override
407
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
408
        validateAndInsertValue(parameter, value);
409
    }
410

  
406 411
    public void setValue(Object value) throws InvalidEntryException {
407 412
        EditingServiceParameter param = next();
408 413
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.line/src/main/java/org/gvsig/vectorediting/lib/prov/line/LineEditingProvider.java
171 171
        return parameters;
172 172
    }
173 173

  
174
    @Override
175
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
176
        validateAndInsertValue(parameter, value);
177
    }
178

  
174 179
    public void setValue(Object value) throws InvalidEntryException {
175 180
        EditingServiceParameter param = next();
176 181
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.spline/src/main/java/org/gvsig/vectorediting/lib/prov/spline/SplineEditingProvider.java
176 176
        return parameters;
177 177
    }
178 178

  
179
    @Override
180
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
181
        validateAndInsertValue(parameter, value);
182
    }
183

  
179 184
    public void setValue(Object value) throws InvalidEntryException {
180 185
        EditingServiceParameter parameter = next();
181 186
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.polyline/src/main/java/org/gvsig/vectorediting/lib/prov/polyline/PolylineEditingProvider.java
503 503
        throw new InvalidEntryException(null);
504 504
    }
505 505

  
506
    @Override
507
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
508
        validateAndInsertValue(parameter, value);
509
    }
510

  
506 511
    public void setValue(Object value) throws InvalidEntryException {
507 512
        EditingServiceParameter param = next();
508 513
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.simplify/src/main/java/org/gvsig/vectorediting/lib/prov/simplify/SimplifyEditingProvider.java
136 136
        return parameters;
137 137
    }
138 138

  
139
    @Override
140
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
141
        validateAndInsertValue(parameter, value);
142
    }
143

  
139 144
    public void setValue(Object value) throws InvalidEntryException {
140 145
        EditingServiceParameter parameter = next();
141 146
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.remove/src/main/java/org/gvsig/vectorediting/lib/prov/remove/RemoveEditingProvider.java
116 116
        return parameters;
117 117
    }
118 118

  
119
    @Override
120
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
121
        validateAndInsertValue(parameter, value);
122
    }
123

  
119 124
    public void setValue(Object value) throws InvalidEntryException {
120 125
        EditingServiceParameter parameter = next();
121 126
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.ellipse/src/main/java/org/gvsig/vectorediting/lib/prov/ellipse/FilledEllipseEditingProvider.java
236 236
    }
237 237

  
238 238
    @Override
239
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
240
        validateAndInsertValue(parameter, value);
241
    }
242

  
243
    @Override
239 244
    public void setValue(Object value) throws InvalidEntryException {
240 245
        EditingServiceParameter parameter = this.next();
241 246
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.ellipse/src/main/java/org/gvsig/vectorediting/lib/prov/ellipse/FilledEllipseCenterAxesEditingProvider.java
237 237
    }
238 238

  
239 239
    @Override
240
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
241
        validateAndInsertValue(parameter, value);
242
    }
243

  
244
    @Override
240 245
    public void setValue(Object value) throws InvalidEntryException {
241 246
        EditingServiceParameter parameter = this.next();
242 247
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.converttopolyline/src/main/java/org/gvsig/vectorediting/lib/prov/converttopolyline/ConvertToPolylineEditingProvider.java
108 108
        return parameters;
109 109
    }
110 110

  
111
    @Override
112
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
113
        validateAndInsertValue(parameter, value);
114
    }
115

  
111 116
    public void setValue(Object value) throws InvalidEntryException {
112 117
        EditingServiceParameter parameter = next();
113 118
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.explode/src/main/java/org/gvsig/vectorediting/lib/prov/explode/ExplodeEditingProvider.java
121 121
        return parameters;
122 122
    }
123 123

  
124
    @Override
125
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
126
        validateAndInsertValue(parameter, value);
127
    }
128

  
124 129
    public void setValue(Object value) throws InvalidEntryException {
125 130
        EditingServiceParameter parameter = next();
126 131
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.polarmatrix/src/main/java/org/gvsig/vectorediting/lib/prov/polarmatrix/PolarMatrixEditingProvider.java
382 382
        return parameters;
383 383
    }
384 384

  
385
    @Override
386
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
387
        validateAndInsertValue(parameter, value);
388
    }
389

  
385 390
    public void setValue(Object value) throws InvalidEntryException {
386 391
        EditingServiceParameter parameter = next();
387 392
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.splitline/src/main/java/org/gvsig/vectorediting/lib/prov/splitline/SplitLineEditingProvider.java
203 203
        return parameters;
204 204
    }
205 205

  
206
    @Override
207
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
208
        validateAndInsertValue(parameter, value);
209
    }
210

  
206 211
    public void setValue(Object value) throws InvalidEntryException {
207 212
        EditingServiceParameter parameter = next();
208 213
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.multipoint/src/main/java/org/gvsig/vectorediting/lib/prov/multipoint/MultipointEditingProvider.java
144 144
        return parameters;
145 145
    }
146 146

  
147
    @Override
148
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
149
        validateAndInsertValue(parameter, value);
150
    }
151

  
147 152
    public void setValue(Object value) throws InvalidEntryException {
148 153
        EditingServiceParameter parameter = next();
149 154
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.arc/src/main/java/org/gvsig/vectorediting/lib/prov/arc/ArcEditingProvider.java
196 196
        return parameters;
197 197
    }
198 198

  
199
    @Override
200
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
201
        validateAndInsertValue(parameter, value);
202
    }
203

  
199 204
    public void setValue(Object value) throws InvalidEntryException {
200 205
        EditingServiceParameter param = next();
201 206
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.regularpolygon/src/main/java/org/gvsig/vectorediting/lib/prov/regularpolygon/RegularPolygonEditingProvider.java
391 391
        return parameters;
392 392
    }
393 393

  
394
    @Override
395
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
396
        validateAndInsertValue(parameter, value);
397
    }
398

  
394 399
    public void setValue(Object value) throws InvalidEntryException {
395 400
        EditingServiceParameter parameter = next();
396 401
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.duplicate/src/main/java/org/gvsig/vectorediting/lib/prov/duplicate/DuplicateEditingProvider.java
235 235
        return parameters;
236 236
    }
237 237

  
238
    @Override
239
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
240
        validateAndInsertValue(parameter, value);
241
    }
242

  
238 243
    public void setValue(Object value) throws InvalidEntryException {
239 244
        EditingServiceParameter parameter = next();
240 245
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.reversedirection/src/main/java/org/gvsig/vectorediting/lib/prov/reversedirection/ReverseDirectionEditingProvider.java
116 116
        return parameters;
117 117
    }
118 118

  
119
    @Override
120
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
121
        validateAndInsertValue(parameter, value);
122
    }
123

  
119 124
    public void setValue(Object value) throws InvalidEntryException {
120 125
        EditingServiceParameter parameter = next();
121 126
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.stretch/src/main/java/org/gvsig/vectorediting/lib/prov/stretch/StretchEditingProvider.java
347 347

  
348 348

  
349 349

  
350
    @Override
351
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
352
        validateAndInsertValue(parameter, value);
353
    }
354

  
350 355
    public void setValue(Object value) throws InvalidEntryException {
351 356
        EditingServiceParameter param = next();
352 357
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.smoothline/src/main/java/org/gvsig/vectorediting/lib/prov/smoothline/SmoothLineEditingProvider.java
170 170
        return parameters;
171 171
    }
172 172

  
173
    @Override
174
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
175
        validateAndInsertValue(parameter, value);
176
    }
177

  
173 178
    public void setValue(Object value) throws InvalidEntryException {
174 179
        EditingServiceParameter parameter = next();
175 180
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.trimline/src/main/java/org/gvsig/vectorediting/lib/prov/trimline/TrimLineEditingProvider.java
227 227
        return parameters;
228 228
    }
229 229

  
230
    @Override
231
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
232
        validateAndInsertValue(parameter, value);
233
    }
234

  
230 235
    public void setValue(Object value) throws InvalidEntryException {
231 236
        EditingServiceParameter parameter = next();
232 237
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCREditingProvider.java
177 177
        return list;
178 178
    }
179 179

  
180
    @Override
181
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
182
        validateAndInsertValue(parameter, value);
183
    }
184

  
180 185
    public void setValue(Object value) throws InvalidEntryException {
181 186
        EditingServiceParameter param = next();
182 187
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/Circle2Tg1PEditingProvider.java
413 413
    }
414 414

  
415 415
    @Override
416
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
417
        validateAndInsertValue(parameter, value);
418
    }
419

  
420
    @Override
416 421
    public void setValue(Object value) throws InvalidEntryException {
417 422
        EditingServiceParameter param = next();
418 423
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleTanTanRadiusEditingProvider.java
214 214

  
215 215
        MapContext mapContext = (MapContext) this.parameters.getDynValue(EditingProviderFactory.MAPCONTEXT_FIELD);
216 216
        Geometry geometry = editingProviderServices.getGeometryOfVisibleLayers(point, featureStore, mapContext);
217
//        Geometry geometry = editingProviderServices.getGeometry(point, this.featureStore, mapContext);
218
//        if(geometry == null){
219
//            FLayer[] visibleLayers = mapContext.getLayers().getVisibles();//.getActives();
220
//            for (FLayer visibleLayer : visibleLayers) {
221
//                if(visibleLayer instanceof FLyrVect){
222
//                    if(((FLyrVect) visibleLayer).getFeatureStore()!=this.featureStore){
223
//                        geometry  = editingProviderServices.getGeometry(point, ((FLyrVect)visibleLayer).getFeatureStore(), mapContext);
224
//                        if(geometry != null){
225
//                            break;
226
//                        }
227
//                    }
228
//                }
229
//            }
230
//        }
231 217
        return geometry;
232 218
    }
233 219
    
......
261 247
    }
262 248

  
263 249
    @Override
250
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
251
        validateAndInsertValue(parameter, value);
252
    }
253

  
254
    @Override
264 255
    public void setValue(Object value) throws InvalidEntryException {
265 256
        EditingServiceParameter param = next();
266 257
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.point/src/main/java/org/gvsig/vectorediting/lib/prov/point/PointEditingProvider.java
33 33
import org.gvsig.fmap.geom.aggregate.MultiPoint;
34 34
import org.gvsig.fmap.geom.primitive.Point;
35 35
import org.gvsig.fmap.geom.type.GeometryType;
36
import org.gvsig.tools.ToolsLocator;
36 37
import org.gvsig.tools.dynobject.DynObject;
38
import org.gvsig.tools.i18n.I18nManager;
37 39
import org.gvsig.tools.service.spi.ProviderServices;
38 40
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
39 41
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
......
100 102
        return list;
101 103
    }
102 104

  
105
    @Override
106
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
107
        validateAndInsertValue(parameter, value);
108
    }
109

  
103 110
    public void setValue(Object value) throws InvalidEntryException {
104 111
        EditingServiceParameter param = next();
105
        if (isValidValue(param, value)) {
112
        validateAndInsertValue(param, value);
113
    }
114
    
115
    private void validateAndInsertValue(EditingServiceParameter parameter,
116
        Object value) throws InvalidEntryException {
117

  
118
        if (isValidValue(parameter, value)) {
106 119
            this.valuePoint = (Point) value;
107 120
        } else {
108 121
            throw new InvalidEntryException(null);
109 122
        }
110 123
    }
111 124

  
125

  
112 126
    public void finishAndStore() throws FinishServiceException {
113 127
        Geometry geometry = null;
114 128
        try {
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.split/src/main/java/org/gvsig/vectorediting/lib/prov/split/SplitEditingProvider.java
138 138
        return parameters;
139 139
    }
140 140

  
141
    @Override
142
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
143
        validateAndInsertValue(parameter, value);
144
    }
145

  
141 146
    public void setValue(Object value) throws InvalidEntryException {
142 147
        EditingServiceParameter parameter = next();
143 148
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.rectangularmatrix/src/main/java/org/gvsig/vectorediting/lib/prov/rectangularmatrix/RectangularMatrixEditingProvider.java
343 343
        return parameters;
344 344
    }
345 345

  
346
    @Override
347
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
348
        validateAndInsertValue(parameter, value);
349
    }
350

  
346 351
    public void setValue(Object value) throws InvalidEntryException {
347 352
        EditingServiceParameter parameter = next();
348 353
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.rotate/src/main/java/org/gvsig/vectorediting/lib/prov/rotate/RotateEditingProvider.java
330 330
        return list;
331 331
    }
332 332

  
333
    @Override
334
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
335
        validateAndInsertValue(parameter, value);
336
    }
337

  
333 338
    public void setValue(Object value) throws InvalidEntryException {
334 339
        EditingServiceParameter param = next();
335 340
        validateAndInsertValue(param, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.join/src/main/java/org/gvsig/vectorediting/lib/prov/join/JoinEditingProvider.java
117 117
        return parameters;
118 118
    }
119 119

  
120
    @Override
121
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
122
        validateAndInsertValue(parameter, value);
123
    }
124

  
120 125
    public void setValue(Object value) throws InvalidEntryException {
121 126
        EditingServiceParameter parameter = next();
122 127
        validateAndInsertValue(parameter, value);
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.extendline/src/main/java/org/gvsig/vectorediting/lib/prov/extendline/ExtendLineEditingProvider.java
21 21
 * For any additional information, do not hesitate to contact us
22 22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23 23
 */
24

  
25 24
package org.gvsig.vectorediting.lib.prov.extendline;
26 25

  
27 26
import java.util.ArrayList;
27
import java.util.HashMap;
28 28
import java.util.List;
29

  
29
import java.util.Map;
30 30
import org.cresques.cts.IProjection;
31

  
32 31
import org.gvsig.fmap.dal.exception.DataException;
33 32
import org.gvsig.fmap.dal.feature.EditableFeature;
34 33
import org.gvsig.fmap.dal.feature.Feature;
......
37 36
import org.gvsig.fmap.dal.feature.FeatureSet;
38 37
import org.gvsig.fmap.dal.feature.FeatureStore;
39 38
import org.gvsig.fmap.geom.Geometry;
39
import static org.gvsig.fmap.geom.Geometry.TYPES.CURVE;
40
import static org.gvsig.fmap.geom.Geometry.TYPES.MULTICURVE;
40 41
import org.gvsig.fmap.geom.GeometryLocator;
41 42
import org.gvsig.fmap.geom.GeometryManager;
43
import org.gvsig.fmap.geom.GeometryUtils;
42 44
import org.gvsig.fmap.geom.aggregate.MultiCurve;
43 45
import org.gvsig.fmap.geom.exception.CreateGeometryException;
44 46
import org.gvsig.fmap.geom.operation.GeometryOperationException;
45 47
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
46 48
import org.gvsig.fmap.geom.primitive.Arc;
47 49
import org.gvsig.fmap.geom.primitive.Curve;
50
import org.gvsig.fmap.geom.primitive.Line;
48 51
import org.gvsig.fmap.geom.primitive.Point;
49 52
import org.gvsig.fmap.geom.primitive.Primitive;
50 53
import org.gvsig.fmap.geom.type.GeometryType;
51 54
import org.gvsig.fmap.mapcontext.MapContext;
52 55
import org.gvsig.fmap.mapcontext.layers.vectorial.SpatialEvaluatorsFactory;
53
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
54
import org.gvsig.tools.dispose.DisposableIterator;
55
import org.gvsig.tools.dispose.DisposeUtils;
56 56
import org.gvsig.tools.dynobject.DynObject;
57 57
import org.gvsig.tools.evaluator.Evaluator;
58 58
import org.gvsig.tools.exception.BaseException;
......
74 74
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
75 75
import org.gvsig.vectorediting.lib.spi.EditingProvider;
76 76
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
77
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
78
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
77
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
79 78

  
80 79
/**
81 80
 * @author llmarques
82 81
 *
83 82
 */
84 83
public class ExtendLineEditingProvider extends AbstractEditingProvider
85
    implements EditingProvider {
84
        implements EditingProvider {
86 85

  
87 86
    private final int TOLERANCE_PIXELS = 3;
88 87

  
......
90 89

  
91 90
    private final EditingServiceParameter selectionParameter;
92 91

  
93
    private final EditingServiceParameter linesToExtendParameter;
92
    private final EditingServiceParameter geometryToExtendToParameter;
94 93

  
95
    private FeatureSelection selection;
94
    protected Map<EditingServiceParameter, Object> values;
96 95

  
97
    private FeatureSet linesToExtend;
98

  
99 96
    private final FeatureStore featureStore;
100 97

  
101 98
    private final MapContext mapContext;
......
103 100
    /**
104 101
     * Default constructor.
105 102
     *
106
     * @param services
107
     *            available services for this provider
108
     * @param parameters
109
     *            of this provider
103
     * @param services available services for this provider
104
     * @param parameters of this provider
110 105
     */
111 106
    public ExtendLineEditingProvider(ProviderServices services,
112
        DynObject parameters) {
107
            DynObject parameters) {
113 108
        super(services);
114 109

  
115
        this.featureStore =
116
            (FeatureStore) parameters
117
                .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
110
        this.featureStore
111
                = (FeatureStore) parameters
112
                        .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
118 113

  
119
        this.mapContext =
120
            (MapContext) parameters
121
                .getDynValue(EditingProviderFactory.MAPCONTEXT_FIELD);
114
        this.mapContext
115
                = (MapContext) parameters
116
                        .getDynValue(EditingProviderFactory.MAPCONTEXT_FIELD);
122 117

  
123
        this.selectionParameter =
124
            new DefaultEditingServiceParameter("selection", "selection",
125
                TYPE.SELECTION);
118
        this.selectionParameter
119
                = new DefaultEditingServiceParameter("selection", "selection",
120
                        TYPE.SELECTION);
126 121

  
127
        this.linesToExtendParameter =
128
            new DefaultEditingServiceParameter("line_to_extend",
129
                "line_to_extend", TYPE.POSITION);
122
        this.geometryToExtendToParameter
123
                = new DefaultEditingServiceParameter("geometry_to_extend_to",
124
                        "geometry_to_extend_to", TYPE.POSITION);
130 125
    }
131 126

  
132 127
    public EditingServiceParameter next() {
133
        if (selection == null) {
128
        if (values.get(selectionParameter) == null) {
134 129
            return selectionParameter;
135
        } else if (linesToExtend == null) {
136
            return linesToExtendParameter;
130
        } else if (values.get(geometryToExtendToParameter) == null) {
131
            return geometryToExtendToParameter;
137 132
        }
138 133
        return null;
139 134
    }
140 135

  
136
    @Override
141 137
    public DrawingStatus getDrawingStatus(Point mousePosition)
142
        throws DrawServiceException {
138
            throws DrawServiceException {
143 139

  
140
        FeatureSelection selection = (FeatureSelection) values.get(selectionParameter);
144 141
        if (selection != null) {
145 142
            DefaultDrawingStatus drawingStatus = new DefaultDrawingStatus();
146
            EditingProviderManager editingProviderManager =
147
                EditingProviderLocator.getProviderManager();
148
            ISymbol lineSymbolEditing = editingProviderManager.getSymbol("line-symbol-editing");
143
            // We do not show the possible result when moving the mouse
144
            // due to possible performance problems working with databases
149 145

  
150
            double tolerance =
151
                mapContext.getViewPort().toMapDistance(TOLERANCE_PIXELS);
152

  
153
            Geometry buffer;
154
            FeatureSet geometries;
155
            DisposableIterator it = null;
156
            try {
157
                // Create buffer with tolerance to get the geometry to be
158
                // extended
159
                buffer = mousePosition.buffer(tolerance);
160
                geometries = getGeometryByBuffer(buffer);
161

  
162
                it = geometries.fastIterator();
163
                while (it.hasNext()) {
164
                    Feature feature = (Feature) it.next();
165
                    if (!selection.isSelected(feature)) {
166
                        Geometry geometry = feature.getDefaultGeometry();
167

  
168

  
169
                        if (geometry instanceof MultiCurve) {
170
                            MultiCurve multiCurve = (MultiCurve) geometry;
171

  
172
                            for (int i = 0; i < multiCurve
173
                                .getPrimitivesNumber(); i++) {
174

  
175
                                Curve curve = multiCurve.getCurveAt(i);
176
                                if (!isClosed(curve)) {
177
                                    Curve extendedCurve =
178
                                        extendLine(mousePosition, curve);
179
                                    drawingStatus.addStatus(extendedCurve,lineSymbolEditing, "");
180
                                }
181
                            }
182

  
183
                        } else if (geometry instanceof Curve) {
184
                            if (!isClosed((Curve) geometry)) {
185
                                Curve extendedCurve =
186
                                    extendLine(mousePosition, (Curve) geometry);
187
                                drawingStatus.addStatus(extendedCurve,lineSymbolEditing, "");
188
                            }
189
                        }
190
                    }
191
                }
192

  
193
            } catch (BaseException e) {
194
                throw new DrawServiceException(e);
195
            } finally {
196
                DisposeUtils.dispose(it);
197
            }
146
//            EditingProviderManager editingProviderManager
147
//                    = EditingProviderLocator.getProviderManager();
148
//            ISymbol lineSymbolEditing = editingProviderManager.getSymbol("line-symbol-editing");
149
//            DisposableIterator selectionIterator = null;
150
//            try {
151
//                Geometry boundaryGeometry = getGeometry(mousePosition);
152
//                if (boundaryGeometry != null) {
153
//
154
//                    selectionIterator = selection.fastIterator();
155
//                    while (selectionIterator.hasNext()) {
156
//                        Feature feature = (Feature) selectionIterator.next();
157
//
158
//                        Geometry geometry = feature.getDefaultGeometry();
159
//
160
//                        if (geometry instanceof MultiCurve) {
161
//                            MultiCurve multiCurve = (MultiCurve) geometry;
162
//
163
//                            for (int i = 0; i < multiCurve
164
//                                    .getPrimitivesNumber(); i++) {
165
//
166
//                                Curve curve = multiCurve.getCurveAt(i);
167
//                                if (!isClosed(curve)) {
168
//                                    Curve extendedCurve
169
//                                            = extendLine(mousePosition, curve, boundaryGeometry);
170
//                                    drawingStatus.addStatus(extendedCurve, lineSymbolEditing, "");
171
//                                }
172
//                            }
173
//
174
//                        } else if (geometry instanceof Curve) {
175
//                            if (!isClosed((Curve) geometry)) {
176
//                                Curve extendedCurve
177
//                                        = extendLine(mousePosition, (Curve) geometry, boundaryGeometry);
178
//                                drawingStatus.addStatus(extendedCurve, lineSymbolEditing, "");
179
//                            }
180
//                        }
181
//
182
//                    }
183
//                    DisposeUtils.dispose(selectionIterator);
184
//
185
//                }
186
//
187
//            } catch (BaseException e) {
188
//                throw new DrawServiceException(e);
189
//            } finally {
190
//                DisposeUtils.dispose(selectionIterator);
191
//            }
198 192
            return drawingStatus;
199 193
        }
200 194
        return null;
......
216 210
        return false;
217 211
    }
218 212

  
219
    private Curve extendLine(Point mousePosition, Curve curve)
220
        throws GeometryOperationNotSupportedException,
221
        GeometryOperationException, DataException, CreateGeometryException {
222
        ExtendLineOperation operation =
223
            ExtendLineOperationUtils.getOperation((Primitive) curve);
213
    private Curve extendLine(Point mousePosition, Curve curve, Geometry boundaryGeometry)
214
            throws GeometryOperationNotSupportedException,
215
            GeometryOperationException, DataException, CreateGeometryException {
216
        ExtendLineOperation operation
217
                = ExtendLineOperationUtils.getOperation((Primitive) curve);
224 218

  
225
        return operation.extendLine(curve, mousePosition, selection);
219
        return operation.extendLine(curve, mousePosition, boundaryGeometry);
226 220
    }
227 221

  
228 222
    public void stop() throws StopServiceException {
229
        linesToExtend = null;
223
        values.clear();
230 224
    }
231 225

  
232 226
    public List<EditingServiceParameter> getParameters() {
233 227
        List<EditingServiceParameter> parameters = new ArrayList<>();
234 228
        parameters.add(selectionParameter);
235
        parameters.add(linesToExtendParameter);
229
        parameters.add(geometryToExtendToParameter);
236 230
        return parameters;
237 231
    }
238 232

  
233
    @Override
234
    public void setValue(EditingServiceParameter parameter, Object value) throws InvalidEntryException {
235
        validateAndInsertValue(parameter, value);
236
    }
237

  
239 238
    public void setValue(Object value) throws InvalidEntryException {
240 239
        EditingServiceParameter parameter = next();
241 240
        validateAndInsertValue(parameter, value);
242 241
    }
243 242

  
244 243
    private void validateAndInsertValue(
245
        final EditingServiceParameter parameter, Object value)
246
        throws InvalidEntryException {
244
            final EditingServiceParameter parameter, Object value)
245
            throws InvalidEntryException {
247 246

  
248 247
        if (parameter == selectionParameter) {
249 248
            if (value instanceof FeatureSelection) {
......
253 252
                        featureSelection.accept(new Visitor() {
254 253

  
255 254
                            public void visit(Object obj)
256
                                throws VisitCanceledException, BaseException {
255
                                    throws VisitCanceledException, BaseException {
257 256
                                Feature feature = (Feature) obj;
258
                                Geometry geometry =
259
                                    feature.getDefaultGeometry();
260
                                GeometryType geoType =
261
                                    geometry.getGeometryType();
257
                                Geometry geometry
258
                                        = feature.getDefaultGeometry();
262 259

  
263
                                if (!geoType.isTypeOf(SURFACE)
264
                                    && !geoType.isTypeOf(MULTISURFACE)
265
                                    && !geoType.isTypeOf(CURVE)
266
                                    && !geoType.isTypeOf(MULTICURVE)) {
260
                                if (!isValidGeometryToSelect(geometry)) {
267 261
                                    throw new InvalidEntryException(null);
268 262
                                }
269 263
                            }
270 264
                        });
271
                        selection = featureSelection;
265
                        values.put(parameter, featureSelection);
272 266
                        return;
273 267
                    } catch (BaseException e) {
274 268
                        throw new InvalidEntryException(e);
275 269
                    }
276 270
                }
277 271
            }
278
        } else if (parameter == linesToExtendParameter) {
272
        } else if (parameter == geometryToExtendToParameter) {
279 273
            if (value instanceof Point) {
280 274
                Point point = (Point) value;
281
                try {
282
                    double tolerance =
283
                        mapContext.getViewPort()
284
                            .toMapDistance(TOLERANCE_PIXELS);
285 275

  
286
                    // Create buffer with tolerance to get geometries to be
287
                    // extended
288
                    Geometry buffer = point.buffer(tolerance);
289
                    FeatureSet geometries = getGeometryByBuffer(buffer);
276
//                EditingProviderServices editingProviderServices = (EditingProviderServices) getProviderServices();
277
                Geometry geometry = getGeometry(point); //editingProviderServices.getGeometryOfVisibleLayers(point, featureStore, mapContext);
278
                if (geometry != null) {
279
                    values.put(parameter, geometry);
280
                    insertedPoint = point;
281
                }
290 282

  
291
                    if (geometries.getSize() > 0) {
283
//                try {
284
//                    double tolerance =
285
//                        mapContext.getViewPort()
286
//                            .toMapDistance(TOLERANCE_PIXELS);
287
//
288
//                    // Create buffer with tolerance to get geometries to be
289
//                    // extended
290
//                    Geometry buffer = point.buffer(tolerance);
291
//                    FeatureSet geometries = getGeometryByBuffer(buffer);
292
//
293
//                    if (geometries.getSize() > 0) {
294
//
295
//                        geometries.accept(new Visitor() {
296
//
297
//                            public void visit(Object obj)
298
//                                throws VisitCanceledException, BaseException {
299
//                                Feature feature = (Feature) obj;
300
//                                Geometry geometry =
301
//                                    feature.getDefaultGeometry();
302
//                                GeometryType geoType =
303
//                                    geometry.getGeometryType();
304
//
305
//                                if (!geoType.isTypeOf(CURVE)
306
//                                    && !geoType.isTypeOf(MULTICURVE)) {
307
//                                    throw new InvalidEntryException(null);
308
//                                }
309
//                            }
310
//                        });
311
//
312
//                        insertedPoint = point;
313
//                        geometryToExtendTo = geometries;
314
//                        return;
315
//                    }
316
//                } catch (BaseException e) {
317
//                    throw new InvalidEntryException(e);
318
//                }
319
            }
320
        }
321
        throw new InvalidEntryException(null);
322
    }
292 323

  
293
                        geometries.accept(new Visitor() {
324
    private boolean isValidGeometryToSelect(Geometry geometry) {
325
        GeometryType geoType
326
                = geometry.getGeometryType();
327
        if (!geoType.isTypeOf(CURVE)
328
                && !geoType.isTypeOf(MULTICURVE)) {
329
            return false;
330
        }
294 331

  
295
                            public void visit(Object obj)
296
                                throws VisitCanceledException, BaseException {
297
                                Feature feature = (Feature) obj;
298
                                Geometry geometry =
299
                                    feature.getDefaultGeometry();
300
                                GeometryType geoType =
301
                                    geometry.getGeometryType();
332
        if (geoType.isTypeOf(CURVE)) {
333
            if (geometry instanceof Line ) {
334
                Line line = (Line) geometry;
335
                if (line.isClosed()) {
336
                    return false;
337
                }
338
                return true;
339
            }
340
            if (geometry instanceof Arc ) {
341
                Arc arc = (Arc) geometry;
342
                if (arc.getInitPoint().equals(arc.getEndPoint())) {
343
                    return false;
344
                }
345
                return true;
346
            }
347
            return false;
348
        }
302 349

  
303
                                if (!geoType.isTypeOf(CURVE)
304
                                    && !geoType.isTypeOf(MULTICURVE)) {
305
                                    throw new InvalidEntryException(null);
306
                                }
307
                            }
308
                        });
309

  
310
                        insertedPoint = point;
311
                        linesToExtend = geometries;
312
                        return;
313
                    }
314
                } catch (BaseException e) {
315
                    throw new InvalidEntryException(e);
350
        if (geoType.isTypeOf(MULTICURVE)) {
351
            MultiCurve multiCurve = (MultiCurve) geometry;
352
            for (Geometry geom : multiCurve) {
353
                if (!isValidGeometryToSelect(geom)) {
354
                    return false;
316 355
                }
317 356
            }
318 357
        }
319
        throw new InvalidEntryException(null);
358
        return true;
359

  
320 360
    }
321 361

  
362
    private Geometry getGeometry(Point point) {
363
        EditingProviderServices editingProviderServices = (EditingProviderServices) getProviderServices();
364
        Geometry geometry = editingProviderServices.getGeometryOfVisibleLayers(point, featureStore, mapContext);
365
        return geometry;
366
    }
367

  
322 368
    private FeatureSet getGeometryByBuffer(Geometry buffer) throws DataException {
323 369
        FeatureQuery queryByGeometry = featureStore.createFeatureQuery();
324 370

  
325 371
        // Get default SRS of default feature type
326
        IProjection defaultSRS =
327
            this.featureStore.getDefaultFeatureType().getDefaultSRS();
372
        IProjection defaultSRS
373
                = this.featureStore.getDefaultFeatureType().getDefaultSRS();
328 374

  
329 375
        Evaluator iee = SpatialEvaluatorsFactory.getInstance().intersects(
330
                buffer, 
331
                defaultSRS, 
376
                buffer,
377
                defaultSRS,
332 378
                featureStore
333 379
        );
334 380

  
......
342 388
    }
343 389

  
344 390
    public void finishAndStore() throws FinishServiceException {
345
        if (selection != null && linesToExtend != null) {
391
        FeatureSelection selection = (FeatureSelection) values.get(selectionParameter);
392
        Geometry geometryToExtendTo = (Geometry) values.get(geometryToExtendToParameter);
393
        if (selection != null && geometryToExtendTo != null) {
346 394

  
347 395
            try {
348
                linesToExtend.accept(new Visitor() {
349

  
350
                    public void visit(Object obj)
351
                        throws VisitCanceledException, BaseException {
396
                selection.accept(new Visitor() {
397
                    @Override
398
                    public void visit(Object obj) throws VisitCanceledException, BaseException {
352 399
                        Feature feature = (Feature) obj;
353 400
                        Geometry geometry = feature.getDefaultGeometry();
354 401
                        EditableFeature eFeature = feature.getEditable();
......
356 403
                        if (geometry instanceof MultiCurve) {
357 404

  
358 405
                            // Create new multicurve geometry
359
                            MultiCurve extendedMultiCurve =
360
                                createMultiCurve(geometry);
406
                            MultiCurve extendedMultiCurve
407
                                    = createMultiCurve(geometry);
361 408

  
362 409
                            // Iterate overs primitives and execute extend
363 410
                            // line operation
364 411
                            MultiCurve multiCurve = (MultiCurve) geometry;
365 412

  
366 413
                            for (int i = 0; i < multiCurve
367
                                .getPrimitivesNumber(); i++) {
414
                                    .getPrimitivesNumber(); i++) {
368 415

  
369 416
                                Curve curve = multiCurve.getCurveAt(i);
370
                                Curve extendedCurve =
371
                                    extendLine(insertedPoint, curve);
417
                                Curve extendedCurve
418
                                        = extendLine(insertedPoint, curve, geometryToExtendTo);
372 419
                                extendedMultiCurve.addCurve(extendedCurve);
373 420
                            }
374 421

  
375 422
                            eFeature.setDefaultGeometry(extendedMultiCurve);
376 423

  
377 424
                        } else if (geometry instanceof Curve) {
378
                            Curve extendedCurve =
379
                                extendLine(insertedPoint, (Curve) geometry);
425
                            Curve extendedCurve
426
                                    = extendLine(insertedPoint, (Curve) geometry, geometryToExtendTo);
380 427
                            eFeature.setDefaultGeometry(extendedCurve);
381 428
                        }
382 429

  
383
                        linesToExtend.update(eFeature);
430
//                        Curve extendedCurve
431
//                                = extendLine(insertedPoint, (Curve) geometry, geometryToExtendTo);
432
//                        eFeature.setDefaultGeometry(extendedCurve);
433
                        selection.update(eFeature);
384 434
                    }
435

  
385 436
                });
386 437

  
387
                linesToExtend.dispose();
388

  
438
//                geometryToExtendTo.accept(new Visitor() {
439
//
440
//                    public void visit(Object obj)
441
//                        throws VisitCanceledException, BaseException {
442
//                        Feature feature = (Feature) obj;
443
//                        Geometry geometry = feature.getDefaultGeometry();
444
//                        EditableFeature eFeature = feature.getEditable();
445
//
446
//                        if (geometry instanceof MultiCurve) {
447
//
448
//                            // Create new multicurve geometry
449
//                            MultiCurve extendedMultiCurve =
450
//                                createMultiCurve(geometry);
451
//
452
//                            // Iterate overs primitives and execute extend
453
//                            // line operation
454
//                            MultiCurve multiCurve = (MultiCurve) geometry;
455
//
456
//                            for (int i = 0; i < multiCurve
457
//                                .getPrimitivesNumber(); i++) {
458
//
459
//                                Curve curve = multiCurve.getCurveAt(i);
460
//                                Curve extendedCurve =
461
//                                    extendLine(insertedPoint, curve);
462
//                                extendedMultiCurve.addCurve(extendedCurve);
463
//                            }
464
//
465
//                            eFeature.setDefaultGeometry(extendedMultiCurve);
466
//
467
//                        } else if (geometry instanceof Curve) {
468
//                            Curve extendedCurve =
469
//                                extendLine(insertedPoint, (Curve) geometry);
470
//                            eFeature.setDefaultGeometry(extendedCurve);
471
//                        }
472
//
473
//                        geometryToExtendTo.update(eFeature);
474
//                    }
475
//                });
476
//
477
//                geometryToExtendTo.dispose();
389 478
            } catch (BaseException e) {
390 479
                throw new FinishServiceException(e);
391 480
            }
......
393 482
    }
394 483

  
395 484
    private MultiCurve createMultiCurve(Geometry geometry)
396
        throws FinishServiceException {
485
            throws FinishServiceException {
397 486

  
398 487
        GeometryManager geoManager = GeometryLocator.getGeometryManager();
399 488
        int subtype = geometry.getGeometryType().getSubType();
......
408 497
    }
409 498

  
410 499
    public void start() throws StartServiceException, InvalidEntryException {
411
        linesToExtend = null;
500
        this.values = new HashMap<>();
412 501
        FeatureSelection selected = null;
413
        if (featureStore != null && selection == null) {
502
        if (featureStore != null && values.get(selectionParameter) == null) {
414 503
            try {
415 504
                selected = featureStore.getFeatureSelection();
416 505
            } catch (DataException e) {
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.extendline/src/main/java/org/gvsig/vectorediting/lib/prov/extendline/operation/ExtendLineOperationUtils.java
21 21
 * For any additional information, do not hesitate to contact us
22 22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23 23
 */
24

  
25 24
package org.gvsig.vectorediting.lib.prov.extendline.operation;
26 25

  
27 26
import java.util.HashMap;
28 27
import java.util.Map;
29

  
30 28
import org.gvsig.fmap.dal.exception.DataException;
31 29
import org.gvsig.fmap.dal.feature.Feature;
32 30
import org.gvsig.fmap.dal.feature.FeatureSelection;
......
65 63
     */
66 64
    private final static int PROJECTION_LIMIT = 100;
67 65

  
68
    private static Map<Integer, ExtendLineOperation> operations =
69
        new HashMap<Integer, ExtendLineOperation>();
66
    private static Map<Integer, ExtendLineOperation> operations
67
            = new HashMap<Integer, ExtendLineOperation>();
70 68

  
71 69
    public ExtendLineOperationUtils() {
72 70
    }
......
86 84
    /**
87 85
     * Calculates the nearest intersection among curve and boundary objects
88 86
     * depending on side received as parameter.
89
     * 
90
     * @param line
91
     *            to be extended
92
     * @param sideToExtend
93
     *            What side will be extend. Use
94
     *            {@link ExtendLineOperationUtils#START_SIDE} and
95
     *            {@link ExtendLineOperationUtils#END_SIDE}
96
     * @param boundaryObjects
97
     *            to calculate intersection points.
87
     *
88
     * @param line to be extended
89
     * @param sideToExtend What side will be extend. Use
90
     * {@link ExtendLineOperationUtils#START_SIDE} and
91
     * {@link ExtendLineOperationUtils#END_SIDE}
92
     * @param boundaryObjects to calculate intersection points.
98 93
     * @return the nearest intersection point. Return Null if arc does not
99
     *         intersect
100
     *         with any boundary object
94
     * intersect with any boundary object
95
     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
96
     * @throws org.gvsig.fmap.dal.exception.DataException
97
     * @throws
98
     * org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException
99
     * @throws org.gvsig.fmap.geom.operation.GeometryOperationException
101 100
     */
102 101
    public static Point curveIntersection(Curve line, String sideToExtend,
103
        FeatureSelection boundaryObjects) throws CreateGeometryException,
104
        DataException, GeometryOperationNotSupportedException,
105
        GeometryOperationException {
102
            FeatureSelection boundaryObjects) throws CreateGeometryException,
103
            DataException, GeometryOperationNotSupportedException,
104
            GeometryOperationException {
106 105

  
107
        Point initPoint = null;
108
        Point endPoint = null;
106
        Point initPoint = getExtremeSegmentInitPoint(line, sideToExtend);
107
        Point endPoint = getExtremeSegmentEndPoint(line, sideToExtend);
109 108

  
109
        return getIntersectionOfProjectedLine(initPoint, endPoint,
110
                boundaryObjects);
111
    }
112

  
113
    /**
114
     * Calculates the nearest intersection among curve and boundary objects
115
     * depending on side received as parameter.
116
     *
117
     * @param line to be extended
118
     * @param sideToExtend What side will be extend. Use
119
     * {@link ExtendLineOperationUtils#START_SIDE} and
120
     * {@link ExtendLineOperationUtils#END_SIDE}
121
     * @param boundaryObject to calculate intersection points.
122
     * @return the nearest intersection point. Return Null if arc does not
123
     * intersect with any boundary object
124
     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
125
     * @throws org.gvsig.fmap.dal.exception.DataException
126
     * @throws
127
     * org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException
128
     * @throws org.gvsig.fmap.geom.operation.GeometryOperationException
129
     */
130
    public static Point curveIntersection(Curve line, String sideToExtend,
131
            Geometry boundaryObject) throws CreateGeometryException,
132
            DataException, GeometryOperationNotSupportedException,
133
            GeometryOperationException {
134

  
135
        Point initPoint = getExtremeSegmentInitPoint(line, sideToExtend);
136
        Point endPoint = getExtremeSegmentEndPoint(line, sideToExtend);
137

  
138
        return getIntersectionOfProjectedLine(initPoint, endPoint,
139
                boundaryObject);
140
    }
141

  
142
    private static Point getExtremeSegmentEndPoint(Curve line, String sideToExtend) {
110 143
        // Start side line is formed by second point and first point
111 144
        if (sideToExtend.equalsIgnoreCase(START_SIDE)) {
145
            return line.getVertex(0);
146
            // End side line is formed by penultimate point and last point
147
        } else if (sideToExtend.equalsIgnoreCase(END_SIDE)) {
148
            return line.getVertex(line.getNumVertices() - 1);
149
        }
150
        return null;
151
    }
112 152

  
113
            initPoint = line.getVertex(1);
114
            endPoint = line.getVertex(0);
115

  
153
    private static Point getExtremeSegmentInitPoint(Curve line, String sideToExtend) {
154
        // Start side line is formed by second point and first point
155
        if (sideToExtend.equalsIgnoreCase(START_SIDE)) {
156
            return line.getVertex(1);
116 157
            // End side line is formed by penultimate point and last point
117 158
        } else if (sideToExtend.equalsIgnoreCase(END_SIDE)) {
118

  
119
            initPoint = line.getVertex(line.getNumVertices() - 2);
120
            endPoint = line.getVertex(line.getNumVertices() - 1);
121

  
159
            return line.getVertex(line.getNumVertices() - 2);
122 160
        }
123

  
124
        return getIntersectionOfProjectedLine(initPoint, endPoint,
125
            boundaryObjects);
161
        return null;
126 162
    }
127 163

  
128 164
    /**
129 165
     * Calculates the nearest intersection point among arc and boundary objects
130
     * depending on side received as parameter.
131
     * 
132
     * Strategy:
133
     * 
166
     * depending on side received as parameter.Strategy:
167
     *
134 168
     * 1- Create a full arc with the same center and radius of arc received by
135
     * parameter.
136
     * 2- Iterate over boundary objects.
137
     * 3- If some boundary object intersects with full arc, calculates the
138
     * distance to start point or end point depending on side to be extend.
139
     * 4- Return the nearest intersection point.
140
     * 
141
     * @param arcToBeExtended
142
     *            Arc to be extended
143
     * @param sideToExtend
144
     *            What side will be extend. Use
145
     *            {@link ExtendLineOperationUtils#START_SIDE} and
146
     *            {@link ExtendLineOperationUtils#END_SIDE}
147
     * @param boundaryObjects
148
     *            to calculate intersection points.
169
     * parameter.2- Iterate over boundary objects.3- If some boundary object
170
     * intersects with full arc, calculates the distance to start point or end
171
     * point depending on side to be extend.4- Return the nearest intersection
172
     * point.
173
     *
174
     *
175
     * @param arcToBeExtended Arc to be extended
176
     * @param sideToExtend What side will be extend. Use
177
     * {@link ExtendLineOperationUtils#START_SIDE} and
178
     * {@link ExtendLineOperationUtils#END_SIDE}
179
     * @param boundaryObjects to calculate intersection points.
149 180
     * @return the nearest intersection point. Return Null if arc does not
150
     *         intersect with any boundary object
181
     * intersect with any boundary object
182
     * @throws
183
     * org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException
184
     * @throws org.gvsig.fmap.geom.operation.GeometryOperationException
185
     * @throws org.gvsig.fmap.geom.exception.CreateGeometryException
186
     * @throws org.gvsig.fmap.dal.exception.DataException
151 187
     */
152 188
    public static Point arcIntersection(Arc arcToBeExtended,
153
        String sideToExtend, FeatureSelection boundaryObjects)
154
        throws GeometryOperationNotSupportedException,
155
        GeometryOperationException, CreateGeometryException, DataException {
189
            String sideToExtend, FeatureSelection boundaryObjects)
190
            throws GeometryOperationNotSupportedException,
191
            GeometryOperationException, CreateGeometryException, DataException {
156 192

  
157 193
        GeometryManager geoManager = GeometryLocator.getGeometryManager();
158 194
        int subtype = arcToBeExtended.getGeometryType().getSubType();
......
175 211
                Geometry intersectionGeometry = tmpArc.intersection(geometry);
176 212

  
177 213
                if (intersectionGeometry instanceof MultiPoint) {
178
                    MultiPoint intersectionMultiPoint =
179
                        (MultiPoint) intersectionGeometry;
214
                    MultiPoint intersectionMultiPoint
215
                            = (MultiPoint) intersectionGeometry;
180 216

  
181 217
                    for (int i = 0; i < intersectionMultiPoint
182
                        .getPrimitivesNumber(); i++) {
218
                            .getPrimitivesNumber(); i++) {
183 219
                        Point point = intersectionMultiPoint.getPointAt(i);
184 220
                        double distance = Double.POSITIVE_INFINITY;
185 221

  
186 222
                        if (sideToExtend.equalsIgnoreCase(START_SIDE)) {
187
                            distance =
188
                                point.distance(arcToBeExtended.getInitPoint());
223
                            distance
224
                                    = point.distance(arcToBeExtended.getInitPoint());
189 225
                        } else if (sideToExtend.equalsIgnoreCase(END_SIDE)) {
190
                            distance =
191
                                point.distance(arcToBeExtended.getEndPoint());
226
                            distance
227
                                    = point.distance(arcToBeExtended.getEndPoint());
192 228
                        }
193 229

  
194 230
                        if (distance < minDistance) {
......
201 237
                    double distance = Double.POSITIVE_INFINITY;
202 238

  
203 239
                    if (sideToExtend.equalsIgnoreCase("start")) {
204
                        distance =
205
                            intersectionPoint.distance(arcToBeExtended
206
                                .getInitPoint());
240
                        distance
241
                                = intersectionPoint.distance(arcToBeExtended
242
                                        .getInitPoint());
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff