001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002-2006, GeoTools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.gml2.bindings;
017:
018: import org.picocontainer.MutablePicoContainer;
019: import org.picocontainer.defaults.DefaultPicoContainer;
020: import com.vividsolutions.jts.geom.Coordinate;
021: import com.vividsolutions.jts.geom.GeometryFactory;
022: import com.vividsolutions.jts.geom.LineString;
023: import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory;
024: import org.geotools.xml.ElementInstance;
025: import org.geotools.xml.Node;
026:
027: public class GMLLineStringTypeBindingTest extends
028: AbstractGMLBindingTest {
029: ElementInstance line;
030: ElementInstance coord1;
031: ElementInstance coord2;
032: ElementInstance coord3;
033: ElementInstance coords;
034: MutablePicoContainer container;
035:
036: protected void setUp() throws Exception {
037: super .setUp();
038:
039: line = createElement(GML.NAMESPACE, "myLineString",
040: GML.LINESTRINGTYPE, null);
041: coord1 = createElement(GML.NAMESPACE, "coord", GML.COORDTYPE,
042: null);
043: coord2 = createElement(GML.NAMESPACE, "coord", GML.COORDTYPE,
044: null);
045: coord3 = createElement(GML.NAMESPACE, "coord", GML.COORDTYPE,
046: null);
047:
048: coords = createElement(GML.NAMESPACE, "coordinates",
049: GML.COORDINATESTYPE, null);
050:
051: container = new DefaultPicoContainer();
052: container
053: .registerComponentInstance(CoordinateArraySequenceFactory
054: .instance());
055: container
056: .registerComponentImplementation(GeometryFactory.class);
057: container
058: .registerComponentImplementation(GMLLineStringTypeBinding.class);
059: }
060:
061: public void testCoordTwo() throws Exception {
062: Node node = createNode(line, new ElementInstance[] { coord1,
063: coord2 }, new Object[] {
064: createCoordinateSequence(new Coordinate(1, 2)),
065: createCoordinateSequence(new Coordinate(3, 4)) }, null,
066: null);
067:
068: GMLLineStringTypeBinding s = (GMLLineStringTypeBinding) container
069: .getComponentInstanceOfType(GMLLineStringTypeBinding.class);
070: LineString lineString = (LineString) s.parse(line, node, null);
071:
072: assertNotNull(lineString);
073: assertEquals(lineString.getNumPoints(), 2);
074: assertEquals(lineString.getPointN(0).getX(), 1d, 0);
075: assertEquals(lineString.getPointN(0).getY(), 2d, 0);
076: assertEquals(lineString.getPointN(1).getX(), 3d, 0);
077: assertEquals(lineString.getPointN(1).getY(), 4d, 0);
078: }
079:
080: public void testCoordSingle() throws Exception {
081: Node node = createNode(line, new ElementInstance[] { coord1 },
082: new Object[] { createCoordinateSequence(new Coordinate(
083: 1, 2)), }, null, null);
084:
085: GMLLineStringTypeBinding s = (GMLLineStringTypeBinding) container
086: .getComponentInstanceOfType(GMLLineStringTypeBinding.class);
087:
088: try {
089: LineString lineString = (LineString) s.parse(line, node,
090: null);
091: fail("Should have died with just one coordinate");
092: } catch (RuntimeException e) {
093: //ok
094: }
095: }
096:
097: public void testCoordMulti() throws Exception {
098: Node node = createNode(line, new ElementInstance[] { coord1,
099: coord2, coord3 }, new Object[] {
100: createCoordinateSequence(new Coordinate(1, 2)),
101: createCoordinateSequence(new Coordinate(3, 4)),
102: createCoordinateSequence(new Coordinate(5, 6)) }, null,
103: null);
104:
105: GMLLineStringTypeBinding s = (GMLLineStringTypeBinding) container
106: .getComponentInstanceOfType(GMLLineStringTypeBinding.class);
107: LineString lineString = (LineString) s.parse(line, node, null);
108:
109: assertNotNull(lineString);
110: assertEquals(lineString.getNumPoints(), 3);
111: assertEquals(lineString.getPointN(0).getX(), 1d, 0);
112: assertEquals(lineString.getPointN(0).getY(), 2d, 0);
113: assertEquals(lineString.getPointN(1).getX(), 3d, 0);
114: assertEquals(lineString.getPointN(1).getY(), 4d, 0);
115: assertEquals(lineString.getPointN(2).getX(), 5d, 0);
116: assertEquals(lineString.getPointN(2).getY(), 6d, 0);
117: }
118:
119: public void testCoordinatesTwo() throws Exception {
120: Node node = createNode(
121: line,
122: new ElementInstance[] { coords },
123: new Object[] { createCoordinateSequence(new Coordinate[] {
124: new Coordinate(1, 2), new Coordinate(3, 4) }), },
125: null, null);
126:
127: GMLLineStringTypeBinding s = (GMLLineStringTypeBinding) container
128: .getComponentInstanceOfType(GMLLineStringTypeBinding.class);
129:
130: LineString lineString = (LineString) s.parse(line, node, null);
131: assertNotNull(lineString);
132: assertEquals(lineString.getNumPoints(), 2);
133: assertEquals(lineString.getPointN(0).getX(), 1d, 0);
134: assertEquals(lineString.getPointN(0).getY(), 2d, 0);
135: assertEquals(lineString.getPointN(1).getX(), 3d, 0);
136: assertEquals(lineString.getPointN(1).getY(), 4d, 0);
137: }
138:
139: public void testCoordinatesSingle() throws Exception {
140: Node node = createNode(
141: line,
142: new ElementInstance[] { coords },
143: new Object[] { createCoordinateSequence(new Coordinate[] { new Coordinate(
144: 1, 2) }), }, null, null);
145:
146: GMLLineStringTypeBinding s = (GMLLineStringTypeBinding) container
147: .getComponentInstanceOfType(GMLLineStringTypeBinding.class);
148:
149: try {
150: LineString lineString = (LineString) s.parse(line, node,
151: null);
152: fail("Should have died with just one coordinate");
153: } catch (RuntimeException e) {
154: //ok
155: }
156: }
157:
158: public void testCoordinatesMulti() throws Exception {
159: Node node = createNode(
160: line,
161: new ElementInstance[] { coords },
162: new Object[] { createCoordinateSequence(new Coordinate[] {
163: new Coordinate(1, 2), new Coordinate(3, 4),
164: new Coordinate(5, 6) }), }, null, null);
165:
166: GMLLineStringTypeBinding s = (GMLLineStringTypeBinding) container
167: .getComponentInstanceOfType(GMLLineStringTypeBinding.class);
168:
169: LineString lineString = (LineString) s.parse(line, node, null);
170: assertNotNull(lineString);
171: assertEquals(lineString.getNumPoints(), 3);
172: assertEquals(lineString.getPointN(0).getX(), 1d, 0);
173: assertEquals(lineString.getPointN(0).getY(), 2d, 0);
174: assertEquals(lineString.getPointN(1).getX(), 3d, 0);
175: assertEquals(lineString.getPointN(1).getY(), 4d, 0);
176: assertEquals(lineString.getPointN(2).getX(), 5d, 0);
177: assertEquals(lineString.getPointN(2).getY(), 6d, 0);
178: }
179: }
|