001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/test/junit/org/deegree/ogcwebservices/wfs/FeatureDisambiguatorTest.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53177 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042: ---------------------------------------------------------------------------*/
043: package org.deegree.ogcwebservices.wfs;
044:
045: import java.io.FileOutputStream;
046: import java.io.IOException;
047: import java.io.OutputStream;
048: import java.net.URL;
049: import java.util.HashMap;
050: import java.util.Map;
051:
052: import junit.framework.TestCase;
053:
054: import org.deegree.datatypes.QualifiedName;
055: import org.deegree.framework.xml.XMLParsingException;
056: import org.deegree.framework.xml.schema.XMLSchemaException;
057: import org.deegree.io.datastore.DatastoreException;
058: import org.deegree.io.datastore.schema.MappedGMLSchema;
059: import org.deegree.io.datastore.schema.MappedGMLSchemaDocument;
060: import org.deegree.model.crs.UnknownCRSException;
061: import org.deegree.model.feature.Feature;
062: import org.deegree.model.feature.FeatureCollection;
063: import org.deegree.model.feature.GMLFeatureAdapter;
064: import org.deegree.model.feature.GMLFeatureCollectionDocument;
065: import org.deegree.model.feature.Validator;
066: import org.deegree.model.feature.schema.FeatureType;
067: import org.xml.sax.SAXException;
068:
069: import alltests.AllTests;
070: import alltests.Configuration;
071:
072: /**
073: * Test case that tries to disambiguate some example feature collections with anonymous features
074: * (that are equal to other features in the collection and have to be merged).
075: *
076: * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider</a>
077: * @author last edited by: $Author: apoth $
078: *
079: * @version $Revision: 9335 $, $Date: 2007-12-27 02:51:08 -0800 (Thu, 27 Dec 2007) $
080: */
081: public class FeatureDisambiguatorTest extends TestCase {
082:
083: private MappedGMLSchema schema;
084:
085: private Validator validator;
086:
087: private URL schemaURL = new URL(Configuration.getWFSBaseDir(),
088: "example/philosopher/featuretypes/Philosopher.xsd");
089:
090: private URL outputDir = new URL(Configuration.getWFSBaseDir(),
091: Configuration.GENERATED_DIR + "/");
092:
093: private static final String TEST_FILE1 = "featureCollection.xml";
094:
095: private static final String TEST_FILE2 = "cyclicFeatureCollection.xml";
096:
097: private static final String TEST_FILE3 = "erroneousFeatureCollection.xml";
098:
099: public FeatureDisambiguatorTest() throws IOException, SAXException,
100: XMLSchemaException, XMLParsingException,
101: UnknownCRSException {
102:
103: MappedGMLSchemaDocument schemaDoc = new MappedGMLSchemaDocument();
104: schemaDoc.load(schemaURL);
105: schema = schemaDoc.parseMappedGMLSchema();
106:
107: // build feature type map
108: Map<QualifiedName, FeatureType> ftMap = new HashMap<QualifiedName, FeatureType>();
109: FeatureType[] featureTypes = schema.getFeatureTypes();
110: for (FeatureType type : featureTypes) {
111: ftMap.put(type.getName(), type);
112: }
113:
114: validator = new Validator(ftMap);
115: }
116:
117: public void testRootFeatureDisambiguation() throws Exception {
118: GMLFeatureCollectionDocument fcDoc = new GMLFeatureCollectionDocument(
119: false);
120: fcDoc.load(FeatureDisambiguatorTest.class
121: .getResource(TEST_FILE1));
122: FeatureCollection fc = fcDoc.parse();
123: for (int i = 0; i < fc.size(); i++) {
124: Feature feature = fc.getFeature(i);
125: AllTests.LOG.logInfo("Validating feature '"
126: + feature.getId());
127: validator.validate(feature);
128: }
129:
130: fc = new FeatureDisambiguator(fc).mergeFeatures();
131:
132: String outputFile = new URL(outputDir, "disambiguated_fc1.xml")
133: .getFile();
134: OutputStream os = new FileOutputStream(outputFile);
135: GMLFeatureAdapter adapter = new GMLFeatureAdapter();
136: adapter.export(fc, os);
137: os.close();
138: AllTests.LOG.logInfo("Wrote '" + outputFile + "'.");
139: }
140:
141: public void testCyclicDisambiguation() throws Exception {
142: GMLFeatureCollectionDocument fcDoc = new GMLFeatureCollectionDocument(
143: false);
144: fcDoc.load(FeatureDisambiguatorTest.class
145: .getResource(TEST_FILE2));
146: FeatureCollection fc = fcDoc.parse();
147: for (int i = 0; i < fc.size(); i++) {
148: Feature feature = fc.getFeature(i);
149: AllTests.LOG.logInfo("Validating feature '"
150: + feature.getId());
151: validator.validate(feature);
152: }
153:
154: fc = new FeatureDisambiguator(fc).mergeFeatures();
155:
156: String outputFile = new URL(outputDir, "disambiguated_fc2.xml")
157: .getFile();
158: OutputStream os = new FileOutputStream(outputFile);
159: GMLFeatureAdapter adapter = new GMLFeatureAdapter();
160: adapter.export(fc, os);
161: os.close();
162: AllTests.LOG.logInfo("Wrote '" + outputFile + "'.");
163: }
164:
165: public void testUnsuccessfulDisambiguation() throws Exception {
166: GMLFeatureCollectionDocument fcDoc = new GMLFeatureCollectionDocument(
167: false);
168: fcDoc.load(FeatureDisambiguatorTest.class
169: .getResource(TEST_FILE3));
170: FeatureCollection fc = fcDoc.parse();
171: for (int i = 0; i < fc.size(); i++) {
172: Feature feature = fc.getFeature(i);
173: AllTests.LOG.logInfo("Validating feature '"
174: + feature.getId());
175: validator.validate(feature);
176: }
177:
178: try {
179: fc = new FeatureDisambiguator(fc).mergeFeatures();
180: fail("Disambiguation did not fail, but must!");
181: } catch (DatastoreException e) {
182: AllTests.LOG
183: .logInfo("OK - disambiguation failed (and must fail): "
184: + e.getMessage());
185: }
186: }
187: }
188:
189: /***************************************************************************************************
190: * <code>
191: Changes to this class. What the people have been up to:
192:
193: $Log$
194: Revision 1.6 2007/02/12 10:16:55 wanhoff
195: fixed header and footer
196:
197: Revision 1.5 2006/11/27 09:15:54 poth
198: JNI integration of proj4 has been removed. The CRS functionality now will be done by native deegree code.
199:
200: Revision 1.4 2006/08/31 15:03:22 mschneider
201: Deactivated guessing of simple types.
202:
203: Revision 1.3 2006/08/14 13:03:26 mschneider
204: Improved documentation.
205:
206: Revision 1.2 2006/08/09 17:05:23 mschneider
207: Added two tests
208:
209: Revision 1.1 2006/08/01 10:43:39 mschneider
210: Initial version.
211:
212: </code>
213: **************************************************************************************************/
|