gvsig-vectorediting / org.gvsig.vectorediting / trunk / org.gvsig.vectorediting / org.gvsig.vectorediting.lib / org.gvsig.vectorediting.lib.prov / org.gvsig.vectorediting.lib.prov.circlecr / src / test / java / org / gvsig / vectorediting / lib / prov / circlecr / CircleCrTest.java @ 322
History | View | Annotate | Download (16 KB)
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.lib.prov.circlecr; |
26 |
|
27 |
import java.io.File; |
28 |
import java.net.URL; |
29 |
import java.util.List; |
30 |
|
31 |
import org.gvsig.fmap.crs.CRSFactory; |
32 |
import org.gvsig.fmap.dal.DALLocator; |
33 |
import org.gvsig.fmap.dal.DataManager; |
34 |
import org.gvsig.fmap.dal.DataStoreParameters; |
35 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
36 |
import org.gvsig.fmap.geom.Geometry; |
37 |
import org.gvsig.fmap.geom.GeometryLocator; |
38 |
import org.gvsig.fmap.geom.GeometryManager; |
39 |
import org.gvsig.fmap.geom.aggregate.MultiSurface; |
40 |
import org.gvsig.fmap.geom.primitive.Circle; |
41 |
import org.gvsig.fmap.geom.primitive.Point; |
42 |
import org.gvsig.fmap.geom.primitive.Surface; |
43 |
import org.gvsig.fmap.mapcontext.MapContext; |
44 |
import org.gvsig.fmap.mapcontext.ViewPort; |
45 |
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase; |
46 |
import org.gvsig.vectorediting.lib.api.DrawingStatus; |
47 |
import org.gvsig.vectorediting.lib.api.EditingManager; |
48 |
import org.gvsig.vectorediting.lib.api.EditingService; |
49 |
import org.gvsig.vectorediting.lib.api.EditingServiceParameter; |
50 |
import org.gvsig.vectorediting.lib.api.exceptions.FinishServiceException; |
51 |
import org.gvsig.vectorediting.lib.api.exceptions.InvalidEntryException; |
52 |
import org.gvsig.vectorediting.lib.api.exceptions.VectorEditingException; |
53 |
import org.gvsig.vectorediting.lib.impl.DefaultEditingManager; |
54 |
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus; |
55 |
|
56 |
/**
|
57 |
* Circle CR provider test.
|
58 |
*
|
59 |
* This test uses src/test/resources/cartography
|
60 |
*
|
61 |
* @author llmarques
|
62 |
*
|
63 |
*/
|
64 |
public class CircleCrTest extends AbstractLibraryAutoInitTestCase { |
65 |
|
66 |
GeometryManager geoManager; |
67 |
DataManager dataManager; |
68 |
EditingManager editingManager; |
69 |
EditingService service; |
70 |
FeatureStore featureStoreTest; |
71 |
MapContext mapContextTest; |
72 |
|
73 |
@Override
|
74 |
protected void doSetUp() throws Exception { |
75 |
|
76 |
editingManager = new DefaultEditingManager();
|
77 |
|
78 |
geoManager = GeometryLocator.getGeometryManager(); |
79 |
|
80 |
try {
|
81 |
featureStoreTest = openFeatureStoretest("provincias_andalucia.shp");
|
82 |
} catch (Exception e) { |
83 |
fail("Unexpected exception opening test feature store: "
|
84 |
+ e.getMessage()); |
85 |
} |
86 |
|
87 |
mapContextTest = |
88 |
new MapContext(new ViewPort(featureStoreTest |
89 |
.getDefaultFeatureType().getDefaultSRS())); |
90 |
|
91 |
service = |
92 |
editingManager.getEditingService( |
93 |
CircleCREditingProviderFactory.PROVIDER_NAME, featureStoreTest, |
94 |
mapContextTest); |
95 |
|
96 |
service.start(); |
97 |
|
98 |
} |
99 |
|
100 |
public void testFinish() { |
101 |
|
102 |
// Try to finish without values.
|
103 |
try {
|
104 |
|
105 |
service.finish(); |
106 |
fail("No exception has been thrown");
|
107 |
|
108 |
} catch (NullPointerException e) { |
109 |
// Test OK, got expected exception
|
110 |
} catch (FinishServiceException e) {
|
111 |
fail("Unexpected exception ending service: " + e.getMessage());
|
112 |
} |
113 |
|
114 |
// Try to finish only with center value
|
115 |
Point center = null; |
116 |
try {
|
117 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
118 |
|
119 |
service.setValue(center); |
120 |
|
121 |
service.finish(); |
122 |
fail("No exception has been thrown");
|
123 |
|
124 |
} catch (NullPointerException e) { |
125 |
// Test OK, got expected exception
|
126 |
} catch (Exception e) { |
127 |
fail("Unexpected exception ending service: " + e.getMessage());
|
128 |
} |
129 |
|
130 |
// Restart service
|
131 |
try {
|
132 |
service.stop(); |
133 |
service.start(); |
134 |
} catch (Exception e) { |
135 |
fail("Unexpected exception restarting service: " + e.getMessage());
|
136 |
} |
137 |
|
138 |
// Try to finish with valid points
|
139 |
Double radius;
|
140 |
try {
|
141 |
radius = 10.0;
|
142 |
|
143 |
service.setValue(center); |
144 |
service.setValue(radius); |
145 |
|
146 |
Geometry geom = service.finish(); |
147 |
|
148 |
assertNotNull("geometry is null", geom);
|
149 |
assertEquals("geometry type != MULTISURFACE", geom.getType(),
|
150 |
Geometry.TYPES.MULTISURFACE); |
151 |
|
152 |
Surface surface = ((MultiSurface) geom).getSurfaceAt(0);
|
153 |
assertTrue(surface instanceof Circle);
|
154 |
assertTrue(((Circle) surface).getCenter().getX() == 0);
|
155 |
assertTrue(((Circle) surface).getCenter().getY() == 0);
|
156 |
assertTrue(((Circle) surface).getRadious() == 10.0);
|
157 |
|
158 |
} catch (Exception e) { |
159 |
fail("Unexpected exception ending service. " + e.getMessage());
|
160 |
} |
161 |
|
162 |
// Try to finish with null featureStore
|
163 |
try {
|
164 |
|
165 |
service = |
166 |
editingManager.getEditingService( |
167 |
CircleCREditingProviderFactory.PROVIDER_NAME, null,
|
168 |
mapContextTest); |
169 |
|
170 |
service.start(); |
171 |
|
172 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
173 |
radius = 10.0;
|
174 |
|
175 |
service.setValue(center); |
176 |
service.setValue(radius); |
177 |
|
178 |
service.finish(); |
179 |
fail("No exception has been thrown");
|
180 |
} catch (FinishServiceException e) {
|
181 |
// Test OK, got expected exception
|
182 |
} catch (Exception e) { |
183 |
fail("Unexpected exception finishing with null feature store: "
|
184 |
+ e.getMessage()); |
185 |
} |
186 |
|
187 |
} |
188 |
|
189 |
public void testfinishAndStore() { |
190 |
|
191 |
// Try to finish and store without values
|
192 |
try {
|
193 |
|
194 |
service.finishAndStore(); |
195 |
fail("No exception has been thrown");
|
196 |
|
197 |
} catch (NullPointerException e) { |
198 |
// Test OK, got expected exception
|
199 |
} catch (FinishServiceException e) {
|
200 |
fail("Unexpected exception ending and storing service: "
|
201 |
+ e.getMessage()); |
202 |
} |
203 |
|
204 |
// Try to finish and store only with center value
|
205 |
Point center = null; |
206 |
try {
|
207 |
|
208 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
209 |
|
210 |
service.finishAndStore(); |
211 |
fail("No exception has been thrown");
|
212 |
|
213 |
} catch (NullPointerException e) { |
214 |
// Test OK, got expected exception
|
215 |
} catch (Exception e) { |
216 |
fail("Unexpected exception ending and storing service: "
|
217 |
+ e.getMessage()); |
218 |
} |
219 |
|
220 |
// Try to finish and store with null featureStore
|
221 |
Double radius;
|
222 |
try {
|
223 |
|
224 |
service = |
225 |
editingManager.getEditingService( |
226 |
CircleCREditingProviderFactory.PROVIDER_NAME, null,
|
227 |
mapContextTest); |
228 |
|
229 |
service.start(); |
230 |
|
231 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
232 |
radius = 10.0;
|
233 |
|
234 |
service.setValue(center); |
235 |
service.setValue(radius); |
236 |
|
237 |
service.finishAndStore(); |
238 |
fail("No exception has been thrown");
|
239 |
} catch (FinishServiceException e) {
|
240 |
// Test OK, got expected exception
|
241 |
} catch (Exception e) { |
242 |
fail("Unexpected exception ending and storing service: "
|
243 |
+ e.getMessage()); |
244 |
} |
245 |
|
246 |
// Try to finish and store with valid values
|
247 |
try {
|
248 |
|
249 |
service = |
250 |
editingManager.getEditingService( |
251 |
CircleCREditingProviderFactory.PROVIDER_NAME, |
252 |
featureStoreTest, mapContextTest); |
253 |
|
254 |
service.start(); |
255 |
|
256 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
257 |
radius = 10.0;
|
258 |
|
259 |
service.setValue(center); |
260 |
service.setValue(radius); |
261 |
|
262 |
featureStoreTest.edit(); |
263 |
service.finishAndStore(); |
264 |
featureStoreTest.finishEditing(); |
265 |
|
266 |
} catch (Exception e) { |
267 |
fail("Unexpected exception ending service. " + e.getMessage());
|
268 |
} |
269 |
|
270 |
} |
271 |
|
272 |
public void testgetDrawingStatus() { |
273 |
|
274 |
// Try to get drawing status without values
|
275 |
Point mousePosition = null; |
276 |
DrawingStatus dws = new DefaultDrawingStatus();
|
277 |
try {
|
278 |
mousePosition = |
279 |
geoManager.createPoint(10, 10, Geometry.SUBTYPES.GEOM2D); |
280 |
dws = service.getDrawingStatus(mousePosition); |
281 |
assertNull(dws); |
282 |
} catch (Exception e) { |
283 |
fail("Unexpected exception get drawing status. " + e.getMessage());
|
284 |
} |
285 |
|
286 |
// Try to get drawing status with valid center value
|
287 |
Point center;
|
288 |
try {
|
289 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
290 |
service.setValue(center); |
291 |
dws = service.getDrawingStatus(mousePosition); |
292 |
|
293 |
assertNotNull(dws); |
294 |
assertTrue(dws.getGeometries().size() == 3);
|
295 |
assertNotNull(dws.getGeometries().get(0));
|
296 |
assertNotNull(dws.getGeometries().get(1));
|
297 |
assertNotNull(dws.getGeometries().get(2));
|
298 |
|
299 |
} catch (Exception e) { |
300 |
fail("Unexpected exception get drawing status. " + e.getMessage());
|
301 |
} |
302 |
|
303 |
// Try to get drawing status with valid center and radius values
|
304 |
Double raidus = 10.0; |
305 |
try {
|
306 |
service.setValue(raidus); |
307 |
dws = service.getDrawingStatus(mousePosition); |
308 |
|
309 |
assertNull(dws); |
310 |
} catch (Exception e) { |
311 |
fail("Unexpected exception get drawing status. " + e.getMessage());
|
312 |
} |
313 |
|
314 |
} |
315 |
|
316 |
public void testgetName() { |
317 |
|
318 |
assertEquals(CircleCREditingProviderFactory.PROVIDER_NAME, |
319 |
service.getName()); |
320 |
|
321 |
} |
322 |
|
323 |
public void testgetParameters() { |
324 |
List<EditingServiceParameter> parameters = service.getParameters();
|
325 |
|
326 |
assertNotNull(parameters); |
327 |
assertTrue(parameters.size() == 2);
|
328 |
|
329 |
EditingServiceParameter parameter = parameters.get(0);
|
330 |
|
331 |
assertTrue(parameter.getTypes().size() == 1);
|
332 |
assertTrue(parameter.getTypes().iterator().next() == EditingServiceParameter.TYPE.POSITION); |
333 |
|
334 |
parameter = parameters.get(1);
|
335 |
assertTrue(parameter.getTypes().size() == 2);
|
336 |
assertTrue(parameter.getTypes().contains( |
337 |
EditingServiceParameter.TYPE.POSITION)); |
338 |
assertTrue(parameter.getTypes().contains( |
339 |
EditingServiceParameter.TYPE.VALUE)); |
340 |
} |
341 |
|
342 |
public void testNext() { |
343 |
|
344 |
// Try to set values in correct order
|
345 |
assertNotNull(service.next()); |
346 |
|
347 |
List<EditingServiceParameter> parameters = service.getParameters();
|
348 |
EditingServiceParameter centerParameter = parameters.get(0);
|
349 |
EditingServiceParameter radiusParamenter = parameters.get(1);
|
350 |
|
351 |
assertEquals(centerParameter, service.next()); |
352 |
|
353 |
Point center;
|
354 |
try {
|
355 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
356 |
service.setValue(center); |
357 |
} catch (Exception e) { |
358 |
fail("Unexpected exception getting next parameter: "
|
359 |
+ e.getMessage()); |
360 |
} |
361 |
|
362 |
assertNotNull(service.next()); |
363 |
|
364 |
assertEquals(radiusParamenter, service.next()); |
365 |
|
366 |
Double radius = 10.0; |
367 |
try {
|
368 |
service.setValue(radius); |
369 |
} catch (Exception e) { |
370 |
fail("Unexpected exception getting next parameter: "
|
371 |
+ e.getMessage()); |
372 |
} |
373 |
|
374 |
assertNull(service.next()); |
375 |
|
376 |
// Try to set first radius.
|
377 |
try {
|
378 |
service.stop(); |
379 |
service.start(); |
380 |
} catch (Exception e) { |
381 |
fail(); |
382 |
} |
383 |
|
384 |
assertNotNull(service.next()); |
385 |
assertEquals(centerParameter, service.next()); |
386 |
|
387 |
try {
|
388 |
service.setValue(radius); |
389 |
} catch (InvalidEntryException e) {
|
390 |
// Got expected value when radius is instance of Double. If radius
|
391 |
// is a string point, service will set that value like center.
|
392 |
} |
393 |
|
394 |
// Check service.next() returns center
|
395 |
assertEquals(centerParameter, service.next()); |
396 |
|
397 |
} |
398 |
|
399 |
public void testsetValue() { |
400 |
|
401 |
// Try to set invalid center
|
402 |
Point center = null; |
403 |
try {
|
404 |
service.setValue(center); |
405 |
} catch (InvalidEntryException e1) {
|
406 |
// Test ok, got expected exception
|
407 |
} |
408 |
|
409 |
// Try to set radius = 0
|
410 |
double radius = 0; |
411 |
try {
|
412 |
service.setValue(radius); |
413 |
} catch (InvalidEntryException e1) {
|
414 |
// Test ok, got expected exception
|
415 |
} catch (Exception e) { |
416 |
fail("Unexpected exception setting radius = 0: " + e.getMessage());
|
417 |
} |
418 |
|
419 |
// Try to set negative radius
|
420 |
radius = -1;
|
421 |
try {
|
422 |
service.setValue(radius); |
423 |
} catch (InvalidEntryException e1) {
|
424 |
// Test ok, got expected exception
|
425 |
} catch (Exception e) { |
426 |
fail("Unexpected exception setting negative radius: "
|
427 |
+ e.getMessage()); |
428 |
} |
429 |
|
430 |
// Try to set valid center
|
431 |
try {
|
432 |
center = geoManager.createPoint(0, 0, Geometry.SUBTYPES.GEOM2D); |
433 |
service.setValue(center); |
434 |
} catch (Exception e) { |
435 |
fail("Unexpected exception setting valid center: " + e.getMessage());
|
436 |
} |
437 |
|
438 |
// Check center has been set
|
439 |
assertTrue(service.next().getTypes().size() == 2);
|
440 |
assertTrue(service.next().getTypes() |
441 |
.contains(EditingServiceParameter.TYPE.VALUE)); |
442 |
assertTrue(service.next().getTypes() |
443 |
.contains(EditingServiceParameter.TYPE.POSITION)); |
444 |
|
445 |
// Try to set valid radius value
|
446 |
radius = 10.0;
|
447 |
try {
|
448 |
service.setValue(radius); |
449 |
} catch (InvalidEntryException e) {
|
450 |
fail("Unexpected exception setting valid radius: " + e.getMessage());
|
451 |
} |
452 |
|
453 |
assertNull(service.next()); |
454 |
} |
455 |
|
456 |
public void testStart() { |
457 |
service = |
458 |
editingManager.getEditingService( |
459 |
CircleCREditingProviderFactory.PROVIDER_NAME, featureStoreTest, |
460 |
mapContextTest); |
461 |
|
462 |
try {
|
463 |
service.start(); |
464 |
} catch (VectorEditingException e) {
|
465 |
fail("Unexpected exception starting service: " + e.getMessage());
|
466 |
} |
467 |
} |
468 |
|
469 |
public void testStop() { |
470 |
service = |
471 |
editingManager.getEditingService( |
472 |
CircleCREditingProviderFactory.PROVIDER_NAME, featureStoreTest, |
473 |
mapContextTest); |
474 |
|
475 |
try {
|
476 |
service.start(); |
477 |
service.stop(); |
478 |
} catch (VectorEditingException e) {
|
479 |
fail("Unexpected exception starting or stopping service: "
|
480 |
+ e.getMessage()); |
481 |
} |
482 |
} |
483 |
|
484 |
private FeatureStore openFeatureStoretest(String resourceName) |
485 |
throws Exception { |
486 |
|
487 |
URL shapeURL =
|
488 |
this.getClass().getResource("/cartography/" + resourceName); |
489 |
if (shapeURL == null) { |
490 |
throw new IllegalStateException("Can't locate cartography resource"); |
491 |
} |
492 |
File shapeFile = new File(shapeURL.getFile()); |
493 |
if (!shapeFile.exists()) {
|
494 |
throw new IllegalStateException("cartography resource not exists"); |
495 |
} |
496 |
|
497 |
dataManager = DALLocator.getDataManager(); |
498 |
|
499 |
DataStoreParameters params = dataManager.createStoreParameters("Shape");
|
500 |
|
501 |
params.setDynValue("shpfile", shapeFile);
|
502 |
params.setDynValue("CRS", CRSFactory.getCRS("EPSG:23030")); |
503 |
params.setDynValue("useNullGeometry", false); |
504 |
params.validate(); |
505 |
|
506 |
return (FeatureStore) dataManager.openStore("Shape", params); |
507 |
|
508 |
} |
509 |
|
510 |
} |