Revision 61 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

View differences:

CircleCREditingProvider.java
11 11
import java.util.List;
12 12
import java.util.Map;
13 13

  
14
import org.gvsig.fmap.dal.exception.DataException;
15 14
import org.gvsig.fmap.dal.feature.FeatureStore;
16 15
import org.gvsig.fmap.geom.Geometry;
17 16
import org.gvsig.fmap.geom.GeometryLocator;
18 17
import org.gvsig.fmap.geom.GeometryManager;
19 18
import org.gvsig.fmap.geom.aggregate.MultiCurve;
20 19
import org.gvsig.fmap.geom.aggregate.MultiSurface;
21
import org.gvsig.fmap.geom.exception.CreateGeometryException;
22
import org.gvsig.fmap.geom.operation.GeometryOperationException;
23
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
24 20
import org.gvsig.fmap.geom.primitive.Arc;
25 21
import org.gvsig.fmap.geom.primitive.Circle;
26 22
import org.gvsig.fmap.geom.primitive.Curve;
27
import org.gvsig.fmap.geom.primitive.Line;
28 23
import org.gvsig.fmap.geom.primitive.Point;
29 24
import org.gvsig.fmap.geom.type.GeometryType;
30 25
import org.gvsig.tools.dynobject.DynObject;
31
import org.gvsig.tools.exception.BaseException;
32 26
import org.gvsig.tools.service.spi.ProviderServices;
33 27
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
34 28
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
29
import org.gvsig.vectorediting.lib.api.exceptions.DrawServiceException;
30
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException;
31
import org.gvsig.vectorediting.lib.api.exceptions.InvalidOptionException;
32
import org.gvsig.vectorediting.lib.api.exceptions.InvalidValueException;
35 33
import org.gvsig.vectorediting.lib.spi.AbstractEditingProvider;
36 34
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
37 35
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
......
48 46
      .getLogger(CircleCREditingProvider.class);
49 47

  
50 48
  protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
51
  
49

  
52 50
  private EditingServiceParameter center = new DefaultEditingServiceParameter(
53 51
      "Center", "Center position of circle", TYPE.POSITION);
54 52

  
......
66 64
        .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
67 65
  }
68 66

  
69
  public DefaultDrawingStatus draw(Point mousePosition) throws BaseException {
67
  public DefaultDrawingStatus draw(Point mousePosition)
68
      throws DrawServiceException {
70 69
    DefaultDrawingStatus geometries = new DefaultDrawingStatus();
71 70
    if (values.get(center) != null) {
72 71
      Point centerPoint = (Point) values.get(center);
73
      Curve line = ((EditingProviderServices) getProviderServices())
74
          .createLine(centerPoint.getX(), centerPoint.getY(),
75
              mousePosition.getX(), mousePosition.getY(), featureStore);
76
      Arc circle = ((EditingProviderServices) getProviderServices()).createArc(
77
          centerPoint, mousePosition.distance(centerPoint), 0, 2 * Math.PI,
78
          featureStore);
79
      geometries.addGeometry(circle);
80
      geometries.addGeometry(centerPoint);
81
      geometries.addGeometry(line);
72
      try {
73
        Curve line = ((EditingProviderServices) getProviderServices())
74
            .createLine(centerPoint.getX(), centerPoint.getY(),
75
                mousePosition.getX(), mousePosition.getY(), featureStore);
76
        Arc circle = ((EditingProviderServices) getProviderServices())
77
            .createArc(centerPoint, mousePosition.distance(centerPoint), 0,
78
                2 * Math.PI, featureStore);
79
        geometries.addGeometry(circle);
80
        geometries.addGeometry(centerPoint);
81
        geometries.addGeometry(line);
82 82

  
83
      }
84
      catch (Exception e) {
85
        throw new  DrawServiceException(e);
86
      }
87

  
83 88
      return geometries;
84 89
    }
85 90

  
......
102 107
  }
103 108

  
104 109
  private void validateAndInsertValue(EditingServiceParameter param,
105
                                      Object value) {
110
                                      Object value) throws InvalidValueException {
106 111
    if (param == center) {
107 112
      if (value instanceof Point) {
108 113
        values.put(param, value);
......
115 120
        try {
116 121
          radiusValue = ((Point) value).distance((Point) values.get(center));
117 122
        }
118
        catch (GeometryOperationNotSupportedException e) {
119
          logger.warn("Can't calculate the radius", e);
123
        catch (Exception e) {
124
          throw new InvalidValueException(e);
120 125
        }
121
        catch (GeometryOperationException e) {
122
          logger.warn("Can't calculate the radius", e);
123
        }
124 126
        if (radiusValue != null) {
125 127
          values.put(param, radiusValue);
126 128
        }
......
143 145
    return list;
144 146
  }
145 147

  
146
  public void value(Object value) {
148
  public void value(Object value) throws InvalidValueException, InvalidOptionException{
147 149
    EditingServiceParameter param = next();
148 150
    validateAndInsertValue(param, value);
149 151
  }
150 152

  
151
  public void finish() throws CreateGeometryException, DataException {
153
  public void finish() throws FinishServiceException{
152 154
    Point centerPoint = (Point) values.get(center);
153 155
    double radiusValue = (Double) values.get(radius);
154
    EditingProviderServices editingProviderServices = (EditingProviderServices)
155
        getProviderServices();
156
    GeometryType storeGeomType = editingProviderServices
157
        .getGeomType(featureStore);
158
    Geometry geometry = null;
159
    if (storeGeomType.isTypeOf(SURFACE)) {
160
      geometry = editingProviderServices.createCircle(centerPoint, radiusValue,
161
          featureStore);
162
      editingProviderServices.insertGeometryIntoFeatureStore(geometry,
163
          featureStore);
156
    EditingProviderServices editingProviderServices = (EditingProviderServices) getProviderServices();
157
    try {
158
      GeometryType storeGeomType = editingProviderServices
159
          .getGeomType(featureStore);
160
      Geometry geometry = null;
161
      if (storeGeomType.isTypeOf(SURFACE)) {
162
        geometry = editingProviderServices.createCircle(centerPoint,
163
            radiusValue, featureStore);
164
        editingProviderServices.insertGeometryIntoFeatureStore(geometry,
165
            featureStore);
166
      }
167
      else if (storeGeomType.isTypeOf(CURVE)) {
168
        geometry = editingProviderServices.createArc(centerPoint, radiusValue,
169
            0, 2 * Math.PI, featureStore);
170
        editingProviderServices.insertGeometryIntoFeatureStore(geometry,
171
            featureStore);
172
      }
173
      else if (storeGeomType.isTypeOf(MULTISURFACE)) {
174
        geometry = editingProviderServices.createCircle(centerPoint,
175
            radiusValue, featureStore);
176
        MultiSurface multisurface;
177
        multisurface = geomManager.createMultiSurface(storeGeomType
178
            .getSubType());
179
        multisurface.addSurface((Circle) geometry);
180
        editingProviderServices.insertGeometryIntoFeatureStore(multisurface,
181
            featureStore);
182
      }
183
      else if (storeGeomType.isTypeOf(MULTICURVE)) {
184
        geometry = editingProviderServices.createArc(centerPoint, radiusValue,
185
            0, 2 * Math.PI, featureStore);
186
        MultiCurve multicurve;
187
        multicurve = geomManager.createMultiCurve(storeGeomType.getSubType());
188
        multicurve.addCurve((Arc) geometry);
189
        editingProviderServices.insertGeometryIntoFeatureStore(multicurve,
190
            featureStore);
191
      }
192
      else {
193
        editingProviderServices.insertGeometryIntoFeatureStore(geometry,
194
            featureStore);
195
      }
164 196
    }
165
    else if (storeGeomType.isTypeOf(CURVE)) {
166
      geometry = editingProviderServices.createArc(centerPoint, radiusValue, 0,
167
          2 * Math.PI, featureStore);
168
      editingProviderServices.insertGeometryIntoFeatureStore(geometry,
169
          featureStore);
197
    catch (Exception e) {
198
      throw new FinishServiceException(e);
170 199
    }
171
    else if (storeGeomType.isTypeOf(MULTISURFACE)) {
172
      geometry = editingProviderServices.createCircle(centerPoint, radiusValue,
173
          featureStore);
174
      MultiSurface multisurface;
175
      multisurface = geomManager.createMultiSurface(storeGeomType.getSubType());
176
      multisurface.addSurface((Circle) geometry);
177
      editingProviderServices.insertGeometryIntoFeatureStore(multisurface,
178
          featureStore);
179
    }
180
    else if (storeGeomType.isTypeOf(MULTICURVE)) {
181
      geometry = editingProviderServices.createArc(centerPoint, radiusValue, 0,
182
          2 * Math.PI, featureStore);
183
      MultiCurve multicurve;
184
      multicurve = geomManager.createMultiCurve(storeGeomType.getSubType());
185
      multicurve.addCurve((Arc) geometry);
186
      editingProviderServices.insertGeometryIntoFeatureStore(multicurve,
187
          featureStore);
188

  
189
    }
190
    else {
191
      editingProviderServices.insertGeometryIntoFeatureStore(geometry,
192
          featureStore);
193
    }
194 200
  }
195 201

  
196 202
  public void start() {

Also available in: Unified diff