001: //$HeadURL: $
002: /*---------------- FILE HEADER ------------------------------------------
003: This file is part of deegree.
004: Copyright (C) 2001-2008 by:
005: Department of Geography, University of Bonn
006: http://www.giub.uni-bonn.de/deegree/
007: lat/lon GmbH
008: http://www.lat-lon.de
009:
010: This library is free software; you can redistribute it and/or
011: modify it under the terms of the GNU Lesser General Public
012: License as published by the Free Software Foundation; either
013: version 2.1 of the License, or (at your option) any later version.
014: This library is distributed in the hope that it will be useful,
015: but WITHOUT ANY WARRANTY; without even the implied warranty of
016: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017: Lesser General Public License for more details.
018: You should have received a copy of the GNU Lesser General Public
019: License along with this library; if not, write to the Free Software
020: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021: Contact:
022:
023: Andreas Poth
024: lat/lon GmbH
025: Aennchenstr. 19
026: 53177 Bonn
027: Germany
028: E-Mail: poth@lat-lon.de
029:
030: Prof. Dr. Klaus Greve
031: Department of Geography
032: University of Bonn
033: Meckenheimer Allee 166
034: 53115 Bonn
035: Germany
036: E-Mail: greve@giub.uni-bonn.de
037: ---------------------------------------------------------------------------*/
038:
039: package org.deegree.ogcwebservices.wcts.data;
040:
041: import java.util.ArrayList;
042: import java.util.List;
043:
044: import org.deegree.framework.log.ILogger;
045: import org.deegree.framework.log.LoggerFactory;
046: import org.deegree.i18n.Messages;
047: import org.deegree.model.crs.CRSTransformationException;
048: import org.deegree.model.crs.CoordinateSystem;
049: import org.deegree.model.crs.GeoTransformer;
050: import org.deegree.model.spatialschema.Geometry;
051: import org.deegree.ogcwebservices.OGCWebServiceException;
052: import org.deegree.ogcwebservices.wcts.WCTSExceptionCode;
053:
054: /**
055: * <code>GeometryData</code> encapsulates a list of geometries which can be transformed using the
056: * {@link #doTransform(boolean)} method.
057: *
058: * @author <a href="mailto:bezema@lat-lon.de">Rutger Bezema</a>
059: *
060: * @author last edited by: $Author:$
061: *
062: * @version $Revision:$, $Date:$
063: *
064: */
065: public class GeometryData extends TransformableData<Geometry> {
066: private List<Geometry> sourceGeometries;
067:
068: private final List<Geometry> transformedGeometries;
069:
070: private static ILogger LOG = LoggerFactory
071: .getLogger(GeometryData.class);
072:
073: /**
074: * Creates a data instance which handles geometries.
075: *
076: * @param sourceCRS
077: * in which the data is referenced.
078: * @param targetCRS
079: * to which the data should be transformed.
080: * @param transformableData
081: * to transform
082: * @throws IllegalArgumentException
083: * if either one of the crs's are <code>null</code>.
084: */
085: public GeometryData(CoordinateSystem sourceCRS,
086: CoordinateSystem targetCRS, List<Geometry> transformableData)
087: throws IllegalArgumentException {
088: super (sourceCRS, targetCRS);
089: if (transformableData == null) {
090: transformableData = new ArrayList<Geometry>();
091: }
092: this .sourceGeometries = transformableData;
093: transformedGeometries = new ArrayList<Geometry>(
094: this .sourceGeometries.size());
095: }
096:
097: /*
098: * (non-Javadoc)
099: *
100: * @see org.deegree.ogcwebservices.wcts.operation.TransformableData#doTransform(boolean)
101: */
102: @Override
103: public void doTransform(boolean enableLogging)
104: throws OGCWebServiceException {
105: GeoTransformer transformer = getGeotransformer();
106: for (Geometry geom : sourceGeometries) {
107: try {
108: if (!getSourceCRS().equals(geom.getCoordinateSystem())) {
109: throw new OGCWebServiceException(Messages
110: .getMessage(
111: "WCTS_MISMATCHING_CRS_DEFINITIONS",
112: getSourceCRS().getIdentifier(),
113: geom.getCoordinateSystem()
114: .getIdentifier()),
115: WCTSExceptionCode.INVALIDPARAMETERVALUE);
116: }
117: transformedGeometries.add(transformer.transform(geom));
118: } catch (IllegalArgumentException e) {
119: LOG.logError(e.getMessage(), e);
120: } catch (CRSTransformationException e) {
121: LOG.logError(e.getMessage(), e);
122: }
123: }
124: }
125:
126: /*
127: * (non-Javadoc)
128: *
129: * @see org.deegree.ogcwebservices.wcts.operation.TransformableData#getResult()
130: */
131: @Override
132: public List<Geometry> getTransformedData() {
133: return transformedGeometries;
134: }
135:
136: }
|