44 |
44 |
public class CircleCREditingProvider extends AbstractEditingProvider implements
|
45 |
45 |
EditingProvider {
|
46 |
46 |
|
47 |
|
private static final Logger logger = LoggerFactory.getLogger(CircleCREditingProvider.class);
|
|
47 |
private static final Logger logger = LoggerFactory
|
|
48 |
.getLogger(CircleCREditingProvider.class);
|
48 |
49 |
|
49 |
50 |
protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
|
50 |
|
|
|
51 |
|
51 |
52 |
private EditingServiceParameter center = new DefaultEditingServiceParameter(
|
52 |
53 |
"Center", "Center position of circle", TYPE.POSITION);
|
53 |
54 |
|
... | ... | |
66 |
67 |
}
|
67 |
68 |
|
68 |
69 |
public DefaultDrawingStatus draw(Point mousePosition) throws BaseException {
|
69 |
|
DefaultDrawingStatus geometries = new DefaultDrawingStatus();
|
|
70 |
DefaultDrawingStatus geometries = new DefaultDrawingStatus();
|
70 |
71 |
if (values.get(center) != null) {
|
71 |
72 |
Point centerPoint = (Point) values.get(center);
|
72 |
|
Curve line = ((EditingProviderServices) getProviderServices()).createLine(centerPoint.getX(), centerPoint.getY(), mousePosition.getX(), mousePosition.getY(), featureStore);
|
73 |
|
Arc circle = ((EditingProviderServices) getProviderServices()).createArc(centerPoint, mousePosition.distance(centerPoint), 0, 2*Math.PI, featureStore);
|
|
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);
|
74 |
79 |
geometries.addGeometry(circle);
|
75 |
80 |
geometries.addGeometry(centerPoint);
|
76 |
81 |
geometries.addGeometry(line);
|
... | ... | |
92 |
97 |
return null;
|
93 |
98 |
}
|
94 |
99 |
|
95 |
|
public void stop(){
|
|
100 |
public void stop() {
|
96 |
101 |
|
97 |
102 |
}
|
98 |
103 |
|
99 |
|
private void validateAndInsertValue(EditingServiceParameter param, Object value) {
|
100 |
|
if (param == center) {
|
101 |
|
if (value instanceof Point) {
|
102 |
|
values.put(param, value);
|
103 |
|
return;
|
104 |
|
}
|
105 |
|
} else if (param == radius) {
|
106 |
|
if (value instanceof Point) {
|
107 |
|
Double radiusValue = null;
|
108 |
|
try {
|
109 |
|
radiusValue = ((Point)value).distance((Point) values.get(center));
|
110 |
|
} catch (GeometryOperationNotSupportedException e) {
|
111 |
|
logger.warn("Can't calculate the radius", e);
|
112 |
|
} catch (GeometryOperationException e) {
|
113 |
|
logger.warn("Can't calculate the radius", e);
|
114 |
|
}
|
115 |
|
if (radiusValue != null){
|
116 |
|
values.put(param, radiusValue);
|
117 |
|
}
|
118 |
|
} else if (value instanceof Double) {
|
119 |
|
values.put(param, value);
|
120 |
|
} else if (value instanceof String) {
|
121 |
|
//FIXME: el string podr?a ser tambi?n un punto
|
122 |
|
Double.parseDouble((String) value);
|
123 |
|
values.put(param, value);
|
124 |
|
}
|
125 |
|
}
|
126 |
|
}
|
|
104 |
private void validateAndInsertValue(EditingServiceParameter param,
|
|
105 |
Object value) {
|
|
106 |
if (param == center) {
|
|
107 |
if (value instanceof Point) {
|
|
108 |
values.put(param, value);
|
|
109 |
return;
|
|
110 |
}
|
|
111 |
}
|
|
112 |
else if (param == radius) {
|
|
113 |
if (value instanceof Point) {
|
|
114 |
Double radiusValue = null;
|
|
115 |
try {
|
|
116 |
radiusValue = ((Point) value).distance((Point) values.get(center));
|
|
117 |
}
|
|
118 |
catch (GeometryOperationNotSupportedException e) {
|
|
119 |
logger.warn("Can't calculate the radius", e);
|
|
120 |
}
|
|
121 |
catch (GeometryOperationException e) {
|
|
122 |
logger.warn("Can't calculate the radius", e);
|
|
123 |
}
|
|
124 |
if (radiusValue != null) {
|
|
125 |
values.put(param, radiusValue);
|
|
126 |
}
|
|
127 |
}
|
|
128 |
else if (value instanceof Double) {
|
|
129 |
values.put(param, value);
|
|
130 |
}
|
|
131 |
else if (value instanceof String) {
|
|
132 |
// FIXME: el string podr?a ser tambi?n un punto
|
|
133 |
Double.parseDouble((String) value);
|
|
134 |
values.put(param, value);
|
|
135 |
}
|
|
136 |
}
|
|
137 |
}
|
127 |
138 |
|
128 |
139 |
public List<EditingServiceParameter> getParameters() {
|
129 |
140 |
List<EditingServiceParameter> list = new ArrayList<EditingServiceParameter>();
|
... | ... | |
140 |
151 |
public void finish() throws CreateGeometryException, DataException {
|
141 |
152 |
Point centerPoint = (Point) values.get(center);
|
142 |
153 |
double radiusValue = (Double) values.get(radius);
|
143 |
|
GeometryType storeGeomType = ((EditingProviderServices) getProviderServices()).getGeomType(featureStore);
|
|
154 |
EditingProviderServices editingProviderServices = (EditingProviderServices)
|
|
155 |
getProviderServices();
|
|
156 |
GeometryType storeGeomType = editingProviderServices
|
|
157 |
.getGeomType(featureStore);
|
144 |
158 |
Geometry geometry = null;
|
145 |
|
if(storeGeomType.isTypeOf(SURFACE)){
|
146 |
|
geometry = ((EditingProviderServices) getProviderServices()).createCircle(centerPoint, radiusValue, featureStore);
|
147 |
|
((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
|
148 |
|
} else if(storeGeomType.isTypeOf(CURVE)){
|
149 |
|
geometry = ((EditingProviderServices) getProviderServices()).createArc(centerPoint, radiusValue, 0, 2*Math.PI, featureStore);
|
150 |
|
((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
|
151 |
|
} else if(storeGeomType.isTypeOf(MULTISURFACE)){
|
152 |
|
geometry = ((EditingProviderServices) getProviderServices()).createCircle(centerPoint, radiusValue, featureStore);
|
153 |
|
MultiSurface multisurface;
|
154 |
|
multisurface = geomManager.createMultiSurface(storeGeomType.getSubType());
|
155 |
|
multisurface.addSurface((Circle)geometry);
|
156 |
|
((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(multisurface, featureStore);
|
157 |
|
} else if(storeGeomType.isTypeOf(MULTICURVE)){
|
158 |
|
geometry = ((EditingProviderServices) getProviderServices()).createArc(centerPoint, radiusValue, 0, 2*Math.PI, featureStore);
|
159 |
|
MultiCurve multicurve;
|
160 |
|
multicurve = geomManager.createMultiCurve(storeGeomType.getSubType());
|
161 |
|
multicurve.addCurve((Arc)geometry);
|
162 |
|
((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(multicurve, featureStore);
|
|
159 |
if (storeGeomType.isTypeOf(SURFACE)) {
|
|
160 |
geometry = editingProviderServices.createCircle(centerPoint, radiusValue,
|
|
161 |
featureStore);
|
|
162 |
editingProviderServices.insertGeometryIntoFeatureStore(geometry,
|
|
163 |
featureStore);
|
|
164 |
}
|
|
165 |
else if (storeGeomType.isTypeOf(CURVE)) {
|
|
166 |
geometry = editingProviderServices.createArc(centerPoint, radiusValue, 0,
|
|
167 |
2 * Math.PI, featureStore);
|
|
168 |
editingProviderServices.insertGeometryIntoFeatureStore(geometry,
|
|
169 |
featureStore);
|
|
170 |
}
|
|
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);
|
163 |
188 |
|
164 |
|
} else {
|
165 |
|
((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
|
166 |
|
}
|
|
189 |
}
|
|
190 |
else {
|
|
191 |
editingProviderServices.insertGeometryIntoFeatureStore(geometry,
|
|
192 |
featureStore);
|
|
193 |
}
|
167 |
194 |
}
|
168 |
195 |
|
169 |
196 |
public void start() {
|