Author: gdavis Date: 2007-07-31 14:50:58 -0700 (Tue, 31 Jul 2007) New Revision: 26397 Added: geotools/trunk/gt/modules/unsupported/geometry/src/main/resources/META-INF/services/org.opengis.geometry.PositionFactory geotools/trunk/gt/modules/unsupported/geometry/src/main/resources/META-INF/services/org.opengis.geometry.Precision geotools/trunk/gt/modules/unsupported/geometry/src/main/resources/META-INF/services/org.opengis.geometry.aggregate.AggregateFactory geotools/trunk/gt/modules/unsupported/geometry/src/main/resources/META-INF/services/org.opengis.geometry.complex.ComplexFactory geotools/trunk/gt/modules/unsupported/geometry/src/main/resources/META-INF/services/org.opengis.geometry.primitive.PrimitiveFactory geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/aggregate/AggregateGeometryBuilderTest.java Removed: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/FeatGeomFactoryImpl.java Modified: geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryBuilder.java geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryFactoryFinder.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/PositionFactoryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateFactoryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/MultiPrimitiveImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/complex/ComplexFactoryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/CurveSegmentImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DirectPositionImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DoublePointArray.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/EnvelopeImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/GeometryFactoryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/LineSegmentImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PointArrayImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PolyhedralSurfaceImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TinImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TriangulatedSurfaceImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/GeometryToWKTString.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/WKTReader.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/MaximalEdgeRing.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/OverlayOp.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveBoundaryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/OrientablePrimitiveProxy.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/PrimitiveFactoryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/root/GeometryImpl.java geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/util/algorithm2D/PointLocator.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/aggregate/PicoMultiCurveTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/aggregate/PicoMultiPointTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/aggregate/PicoMultiPrimitiveTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/aggregate/PicoMultiSurfaceTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/complex/CompositeSurfaceTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/complex/PicoCompositeCurveTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/complex/PicoCompositePointTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/complex/PicoCompositeSurfaceTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/DirectPositionTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/EnvelopeTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/GeometryFactoryTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/LineStringLineSegmentTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/PicoDirectPositionTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/PicoEnvelopeTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/PicoGeometryFactoryTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/PicoLineSegmentTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/PicoLineStringLineSegmentTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/coordinate/PointArrayTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/operations/CentroidTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/operations/ConvexHullTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/operations/DisplayGeometry.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/operations/IsSimpleOperationTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/operations/RelateOperatorsTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/operations/SetOperationsTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/BoundaryTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/CurveTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/Dimension2o5DTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/DisplayCurve.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PicoCurveTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PicoPointTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PicoPrimitiveFactoryTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PicoRingTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PicoSurfaceTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PointTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PrimitiveFactoryTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/PrimitiveGeometryBuilderTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/RingTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/iso/primitive/SurfaceTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/xml/AbstractGeometryTest.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/xml/GeometryConformanceTestCases.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/xml/GeometryConformanceTestSuite.java geotools/trunk/gt/modules/unsupported/geometry/src/test/java/org/geotools/geometry/xml/GeometryTestParser.java Log: removed featgeomfactory and updated related code and tests. Finished the geometryfactoryfinder implementation and updated some tests to use and test it Modified: geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryBuilder.java =================================================================== --- geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryBuilder.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryBuilder.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -9,6 +9,9 @@ import org.opengis.geometry.DirectPosition; import org.opengis.geometry.PositionFactory; import org.opengis.geometry.Precision; +import org.opengis.geometry.aggregate.AggregateFactory; +import org.opengis.geometry.complex.ComplexFactory; +import org.opengis.geometry.coordinate.GeometryFactory; import org.opengis.geometry.coordinate.Position; import org.opengis.geometry.primitive.PrimitiveFactory; import org.opengis.referencing.FactoryException; @@ -50,8 +53,10 @@ private Precision precision; private PositionFactory positionFactory; - private PrimitiveFactory primitiveFactory; + private AggregateFactory aggregateFactory; + private ComplexFactory complexFactory; + private GeometryFactory geometryFactory; public GeometryBuilder( CoordinateReferenceSystem crs ){ this.crs = crs; @@ -75,8 +80,14 @@ public void setCoordianteReferenceSystem( CoordinateReferenceSystem crs ) { if( this.crs != crs ){ positionFactory = null; + primitiveFactory = null; + aggregateFactory = null; + complexFactory = null; + geometryFactory = null; } - this.crs = crs; + this.crs = crs; + hints.remove(Hints.CRS); + hints.put( Hints.CRS, crs ); } public Precision getPrecision() { @@ -100,6 +111,27 @@ return primitiveFactory; } + public AggregateFactory getAggregateFactory() { + if( aggregateFactory == null ){ + aggregateFactory = GeometryFactoryFinder.getAggregateFactory( hints); + } + return aggregateFactory; + } + + public GeometryFactory getGeometryFactory() { + if( geometryFactory == null ){ + geometryFactory = GeometryFactoryFinder.getGeometryFactory( hints); + } + return geometryFactory; + } + + public ComplexFactory getComplexFactory() { + if( complexFactory == null ){ + complexFactory = GeometryFactoryFinder.getComplexFactory( hints); + } + return complexFactory; + } + public DirectPosition createDirectPosition( double[] ordinates ) { return getPositionFactory().createDirectPosition( ordinates ); } Modified: geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryFactoryFinder.java =================================================================== --- geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryFactoryFinder.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/library/referencing/src/main/java/org/geotools/geometry/GeometryFactoryFinder.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -29,7 +29,6 @@ import org.opengis.geometry.complex.ComplexFactory; import org.opengis.geometry.coordinate.GeometryFactory; import org.opengis.geometry.primitive.PrimitiveFactory; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.datum.DatumFactory; @@ -50,7 +49,7 @@ /** * Do not allows any instantiation of this class. */ - GeometryFactoryFinder() { + private GeometryFactoryFinder() { // singleton } @@ -91,11 +90,11 @@ return completed; }*/ - public static Precision getPrecision(Hints hints) throws FactoryRegistryException { + public static synchronized Precision getPrecision(Hints hints) throws FactoryRegistryException { return (Precision) getServiceRegistry().getServiceProvider( Precision.class, null, hints, Hints.PRECISION ); } - public static PositionFactory getPositionFactory( Hints hints) throws FactoryRegistryException { + public static synchronized PositionFactory getPositionFactory( Hints hints) throws FactoryRegistryException { return (PositionFactory) getServiceRegistry().getServiceProvider( PositionFactory.class, null, hints, Hints.POSITION_FACTORY ); } /** @@ -106,19 +105,19 @@ * @throws FactoryRegistryException if no implementation was found or can be created for the * {@link DatumFactory} interface. */ - public static GeometryFactory getGeometryFactory( Hints hints) throws FactoryRegistryException { + public static synchronized GeometryFactory getGeometryFactory( Hints hints) throws FactoryRegistryException { return (GeometryFactory) getServiceRegistry().getServiceProvider( GeometryFactory.class, null, hints, Hints.GEOMETRY_FACTORY ); } - public static ComplexFactory getComplexFactory(Hints hints) throws FactoryRegistryException { + public static synchronized ComplexFactory getComplexFactory(Hints hints) throws FactoryRegistryException { return (ComplexFactory) getServiceRegistry().getServiceProvider( ComplexFactory.class, null, hints, Hints.COMPLEX_FACTORY ); } - public static AggregateFactory getAggregateFactory(Hints hints) throws FactoryRegistryException { + public static synchronized AggregateFactory getAggregateFactory(Hints hints) throws FactoryRegistryException { return (AggregateFactory) getServiceRegistry().getServiceProvider( AggregateFactory.class, null, hints, Hints.AGGREGATE_FACTORY ); } - public static PrimitiveFactory getPrimitiveFactory(Hints hints) throws FactoryRegistryException { + public static synchronized PrimitiveFactory getPrimitiveFactory(Hints hints) throws FactoryRegistryException { return (PrimitiveFactory) getServiceRegistry().getServiceProvider( PrimitiveFactory.class, null, hints, Hints.PRIMITIVE_FACTORY ); } Deleted: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/FeatGeomFactoryImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/FeatGeomFactoryImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/FeatGeomFactoryImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -1,372 +0,0 @@ -/* - * GeoTools - OpenSource mapping toolkit - * http://geotools.org - * (C) 2006-2007, GeoTools Project Management Committee (PMC) - * (C) 2006 University of Applied Sciences K(Fachhochschule K - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - */ - -package org.geotools.geometry.iso; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.geotools.geometry.iso.aggregate.AggregateFactoryImpl; -import org.geotools.geometry.iso.complex.ComplexFactoryImpl; -import org.geotools.geometry.iso.coordinate.GeometryFactoryImpl; -import org.geotools.geometry.iso.io.CollectionFactory; -import org.geotools.geometry.iso.io.CollectionFactoryMemoryImpl; -import org.geotools.geometry.iso.primitive.PrimitiveFactoryImpl; -import org.geotools.geometry.iso.root.GeometryImpl; -import org.geotools.referencing.crs.DefaultGeographicCRS; -import org.opengis.referencing.crs.CoordinateReferenceSystem; -import org.opengis.geometry.coordinate.GeometryFactory; -import org.opengis.geometry.primitive.OrientableCurve; -import org.opengis.geometry.primitive.OrientableSurface; -import org.opengis.geometry.primitive.Point; -import org.opengis.geometry.primitive.Primitive; - -/** - * The Feature Geometry Factory is the most upper factory and is responsible for - * the management of: - * - * - The used Geometry Factory implementation (GeoAPI GeometryFactory). Each - * Feature Geometry Factory can only hold one Geometry Factory implementation. - * - * - The used Primitive Factory implementation (GeoAPI PrimitiveFactory). Each - * Feature Geometry Factory can only hold one Primitive Factory implementation. - * - * - The used Complex Factory implementation (GeoAPI ComplexFactory). Each - * Feature Geometry Factory can only hold one Complex Factory implementation. - * - * - The Coordinate Reference System. - * - * - The dimension model. Each Feature Geometry Factory can be of one dimension - * model, e.g. can only handle geometry objects of the same coordinate - * dimension. - * - * - The precision model. - * - */ -public class FeatGeomFactoryImpl { - - // Instances of the dimension types - private static FeatGeomFactoryImpl singleton2D = null; - - private static FeatGeomFactoryImpl singleton2o5D = null; - - private static FeatGeomFactoryImpl singleton3D = null; - - /** - * Returns the coordinate factory according to the desired dimension model. - * <p> - * Please understand that this default is useless as does not have - * a useful coordiante reference system. As such it is mostly useful - * for test cases. - * </p> - * - * @param dimension - * @return CoordinateFactory - */ - public static GeometryFactoryImpl getDefaultGeometryFactory( - DimensionModel dimension) { - if (dimension.is2D()) { - return getDefault2D().getGeometryFactoryImpl(); - } else if (dimension.is2o5D()) { - return getDefault2o5D().getGeometryFactoryImpl(); - } else if (dimension.is3D()) { - return getDefault3D().getGeometryFactoryImpl(); - } else { - return null; - } - } - - /** - * TODO Diese Lg wird auf Dauer nicht funktionieren, wenn wir zwischen - * 2.D, 2.5D und 3D unterscheiden men. Ich schlage den oben stehenden - * getter vor. - * - * @param dimension - * @return - */ -// public static CoordinateFactoryImpl getDefaultCoordinateFactory( -// int dimension) { -// if (dimension == 2) { -// return singleton2D.getCoordinateFactory(); -// } else if (dimension == 3) { -// return singleton3D.getCoordinateFactory(); -// } else { -// return null; -// } -// } - - // The coordinate reference system - private CoordinateReferenceSystem coordinateReferenceSystem = null; - - // The used precision model - private PrecisionModel precisionModel = null; - - private GeometryFactoryImpl geometryFactory; - - private PrimitiveFactoryImpl primitiveFactory; - - private PositionFactoryImpl positionFactory; - - private ComplexFactoryImpl complexFactory; - - private AggregateFactoryImpl aggregateFactory; - - private CollectionFactory collectionFactory; - - // The dimension model, which handles one of the three dimension types: 2D, - // 2.5D and 3D - private DimensionModel dimensionModel = null; - - public FeatGeomFactoryImpl(CoordinateReferenceSystem crs ){ - this( crs, crs.getCoordinateSystem().getDimension() ); - } - /** - * Private Constructor - * - * @param crs - * @param dimensionModel - */ - private FeatGeomFactoryImpl(CoordinateReferenceSystem crs, - int dimensionModel) { - this.coordinateReferenceSystem = crs; - this.positionFactory = new PositionFactoryImpl(crs, new PrecisionModel()); - - this.geometryFactory = new GeometryFactoryImpl(crs, positionFactory); - this.primitiveFactory = new PrimitiveFactoryImpl(crs, positionFactory); - this.complexFactory = new ComplexFactoryImpl(crs); - this.aggregateFactory = new AggregateFactoryImpl(crs); - this.collectionFactory = new CollectionFactoryMemoryImpl(); - - // Create the dimension model - this.dimensionModel = new DimensionModel(dimensionModel); - - // Set Precision Model (Default: float) - this.precisionModel = new PrecisionModel(); - } - - - /** - * Returns the Feature Geometry Factory for 2 dimensional space - * - * @return GeometryFactoryImpl - */ - public static FeatGeomFactoryImpl getDefault2D() { - if (singleton2D == null) - singleton2D = new FeatGeomFactoryImpl( - DefaultGeographicCRS.WGS84, - DimensionModel.TWO_DIMENSIONIAL); - return singleton2D; - } - - /** - * Returns the Feature Geometry Factory for 2.5 dimensional space - * - * @return GeometryFactoryImpl - */ - public static FeatGeomFactoryImpl getDefault2o5D() { - if (singleton2o5D == null) - singleton2o5D = new FeatGeomFactoryImpl( - DefaultGeographicCRS.WGS84_3D, - DimensionModel.TWOoFIVE_DIMENSIONIAL); - return singleton2o5D; - } - - /** - * Returns the Feature Geometry Factory for 3 dimensional space - * - * @return GeometryFactoryImpl - */ - public static FeatGeomFactoryImpl getDefault3D() { - if (singleton3D == null) - singleton3D = new FeatGeomFactoryImpl( - DefaultGeographicCRS.WGS84_3D, - DimensionModel.THREE_DIMENSIONIAL); - return singleton3D; - } - - /** - * @return CoordinateReferenceSystem - */ - public CoordinateReferenceSystem getCoordinateReferenceSystem() { - return this.coordinateReferenceSystem; - } - - /** - * @return coordinate dimension (int) - * @throws Exception - */ - public int getCoordinateDimension() { - return coordinateReferenceSystem.getCoordinateSystem().getDimension(); - // Auskommentiert und ersetzt durch Sanjay, da Endlos-Schleife - // Stattdessen wird Membervariable mDimension eingefuegt. - // return this.getCoordinateDimension(); - //return this.dimensionModel.getCoordinateDimension(); - } - - /** - * Returns the used Precision Model - * - * @return the used Precision Model - */ - public PrecisionModel getPrecision() { - return this.precisionModel; - } - - /** - * Returns the used Dimension Model - * - * @return the used Dimension Model - */ - public DimensionModel getDimensionModel() { - return this.dimensionModel; - } - - /** - * @return Returns the aggregateFactory. - */ - public AggregateFactoryImpl getAggregateFactory() { - return this.aggregateFactory; - } - - /** - * @return Returns the complexFactory. - */ - public ComplexFactoryImpl getComplexFactory() { - return this.complexFactory; - } - - /** - * @return Returns the coordinateFactoryImpl. - */ - public GeometryFactoryImpl getGeometryFactoryImpl() { - return this.geometryFactory; - } - - public GeometryFactory getGeometryFactory() { - return this.geometryFactory; - } - /** - * @return Returns the primitiveFactory. - */ - public PrimitiveFactoryImpl getPrimitiveFactory() { - return this.primitiveFactory; - } - - /** - * @return Returns the listFactory. - */ - public CollectionFactory getListFactory() { - return this.collectionFactory; - } - - - /** - * Creates a new Geometry object appropriate to the input Primitives. The - * method will return a Primitive object, if one list contains only one - * element and the rest is empty. In all other cases, that is that exist - * more than one Primitive in the lists, the method will return a Complex - * object. - * - * @param aSurfaces - * List of Surfaces - * @param aCurves - * List of Curves - * @param aPoints - * List of Points - * @return a Geometry instance. - * That is a Point/Curve/Surface if the parameters only contain one point or one curve or one surface. - * It is a MultiPoint/MultiCurve/MultiSurface if the parameters contain one list with more than two entries and the other two lists are empty. - * Or it is a MultiPrimitive if the parameters contain a mixture of points, curves and surfaces. - */ - public GeometryImpl createGeometry(List<OrientableSurface> aSurfaces, - List<OrientableCurve> aCurves, List<Point> aPoints) { - - int nS = aSurfaces.size(); - int nC = aCurves.size(); - int nP = aPoints.size(); - - if (nS + nC + nP == 0) - // Return null if the sets are empty - return null; - //throw new IllegalArgumentException("All Sets are empty"); - - - if (nS == 0) { - - if (nC == 0) { - - // Surfaces empty, Curves empty, Points not empty - if (nP == 1) { - - // POINT - return (GeometryImpl) aPoints.get(0); - - } else { - - // MULTIPOINT - return (GeometryImpl) this.aggregateFactory.createMultiPoint(new HashSet(aPoints)); - - } - } else if (nP == 0) { - - // Surfaces empty, Curves not empty, Points empty - if (nC == 1) { - - // CURVE - - return (GeometryImpl) aCurves.get(0); - } else { - - // MULTICURVE - return (GeometryImpl) this.aggregateFactory.createMultiCurve(new HashSet(aCurves)); - } - } - - } else { - - if (nC == 0 && nP == 0) { - - if (nS == 1) { - - // SURFACE - return (GeometryImpl) aSurfaces.get(0); - - } else { - - // MULTISURFACE - return (GeometryImpl) this.aggregateFactory.createMultiSurface(new HashSet(aSurfaces)); - - } - - } - - } - - // All other cases: MULTIPRIMITIVE - Set<Primitive> tPrimitives = new HashSet<Primitive>(); - tPrimitives.addAll(aSurfaces); - tPrimitives.addAll(aCurves); - tPrimitives.addAll(aPoints); - - return (GeometryImpl) this.aggregateFactory.createMultiPrimitive(tPrimitives); - - } - - - -} Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/PositionFactoryImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/PositionFactoryImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/PositionFactoryImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -27,7 +27,6 @@ import org.geotools.geometry.iso.coordinate.DoublePointArray; import org.geotools.geometry.iso.coordinate.PointArrayImpl; import org.geotools.referencing.crs.DefaultGeographicCRS; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.MismatchedDimensionException; import org.opengis.geometry.PositionFactory; @@ -35,6 +34,7 @@ import org.opengis.geometry.PrecisionType; import org.opengis.geometry.coordinate.PointArray; import org.opengis.geometry.coordinate.Position; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * Default implementation of PositionFactory that stores contents using double. Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateFactoryImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateFactoryImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateFactoryImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -17,8 +17,15 @@ package org.geotools.geometry.iso.aggregate; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.Set; +import org.geotools.factory.Factory; +import org.geotools.factory.Hints; +import org.geotools.geometry.iso.PrecisionModel; +import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.geometry.aggregate.AggregateFactory; import org.opengis.geometry.aggregate.MultiCurve; import org.opengis.geometry.aggregate.MultiPoint; @@ -33,19 +40,66 @@ /** * */ -public class AggregateFactoryImpl implements AggregateFactory { +public class AggregateFactoryImpl implements Factory, AggregateFactory { //private FeatGeomFactoryImpl geometryFactory; private CoordinateReferenceSystem crs; + + private Map hintsWeCareAbout = new HashMap(); + + /** + * This is just here so FactorySPI can find us. + * We have set it up with a default (undocumented) configuration + * for testing! + */ + public AggregateFactoryImpl() { + this( (Hints)null ); + } + + /** + * This is the constructor used by GeometryFactoryFinder when a user + * requests a new instance. + * The provided hints *must* be provided: + * <ul> + * <li>Hints.CRS + * </ul> + * There is no default for these values - you must describe your data source + * for us if we are to make useful Geometry object for you. + * + * @param hints Hints (must include CRS) + */ + public AggregateFactoryImpl(Hints hints) { + if (hints == null) { + this.crs = DefaultGeographicCRS.WGS84; + } + else { + this.crs = (CoordinateReferenceSystem) hints.get(Hints.CRS); + } + + hintsWeCareAbout.put( Hints.CRS, crs ); + } /** * @param crs */ public AggregateFactoryImpl(CoordinateReferenceSystem crs) { this.crs = crs; + hintsWeCareAbout.put( Hints.CRS, crs ); } /** + * Report back to FactoryRegistry about our configuration. + * <p> + * FactoryRegistry will check to make sure that there are no duplicates + * created (so there will be only a "single" PositionFactory created + * with this configuration). + * </p> + */ + public Map getImplementationHints() { + return Collections.unmodifiableMap( hintsWeCareAbout ); + } + + /** * Creates a MultiPrimitive by a set of Primitives. * @param points Set of Points which shall be contained by the MultiPoint * @return Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/AggregateImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -20,8 +20,8 @@ import java.util.Set; import org.geotools.geometry.iso.root.GeometryImpl; +import org.opengis.geometry.Geometry; import org.opengis.geometry.aggregate.Aggregate; -import org.opengis.geometry.Geometry; import org.opengis.referencing.crs.CoordinateReferenceSystem; /** Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/MultiPrimitiveImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/MultiPrimitiveImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/aggregate/MultiPrimitiveImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -28,10 +28,10 @@ import org.opengis.geometry.Boundary; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; +import org.opengis.geometry.Geometry; import org.opengis.geometry.aggregate.MultiPrimitive; import org.opengis.geometry.complex.Complex; import org.opengis.geometry.primitive.Primitive; -import org.opengis.geometry.Geometry; import org.opengis.referencing.crs.CoordinateReferenceSystem; Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/complex/ComplexFactoryImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/complex/ComplexFactoryImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/complex/ComplexFactoryImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -17,9 +17,17 @@ package org.geotools.geometry.iso.complex; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import org.geotools.factory.Factory; +import org.geotools.factory.GeoTools; +import org.geotools.factory.Hints; +import org.geotools.geometry.GeometryFactoryFinder; import org.geotools.geometry.iso.primitive.PointImpl; +import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.geometry.complex.ComplexFactory; import org.opengis.geometry.complex.CompositeCurve; import org.opengis.geometry.complex.CompositePoint; @@ -29,16 +37,52 @@ import org.opengis.geometry.primitive.Point; import org.opengis.referencing.crs.CoordinateReferenceSystem; -public class ComplexFactoryImpl implements ComplexFactory { +public class ComplexFactoryImpl implements Factory, ComplexFactory { //private FeatGeomFactoryImpl geometryFactory; private CoordinateReferenceSystem crs; + private Map hintsWeCareAbout = new HashMap(); + /** FactorySPI entry point */ + public ComplexFactoryImpl() { + this((Hints)null ); + } + + /** Just the defaults, use GeometryFactoryFinder for the rest */ + public ComplexFactoryImpl( Hints hints ) { + if (hints == null) { + this.crs = DefaultGeographicCRS.WGS84; + hints = GeoTools.getDefaultHints(); + hints.put(Hints.CRS, crs ); + } + else { + this.crs = (CoordinateReferenceSystem) hints.get( Hints.CRS ); + if( crs == null ){ + throw new NullPointerException("A CRS Hint is required in order to use ComplexFactoryImpl"); + } + } + + hintsWeCareAbout.put(Hints.CRS, crs ); + } + /** */ public ComplexFactoryImpl(CoordinateReferenceSystem crs) { this.crs = crs; + hintsWeCareAbout.put(Hints.CRS, crs ); } + + /** + * Report back to FactoryRegistry about our configuration. + * <p> + * FactoryRegistry will check to make sure that there are no duplicates + * created (so there will be only a "single" PositionFactory created + * with this configuration). + * </p> + */ + public Map getImplementationHints() { + return Collections.unmodifiableMap( hintsWeCareAbout ); + } public CompositePoint createCompositePoint(Point generator) { return new CompositePointImpl(crs, (PointImpl) generator); Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/CurveSegmentImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/CurveSegmentImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/CurveSegmentImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -24,7 +24,6 @@ import org.geotools.geometry.iso.util.DoubleOperation; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; -import org.opengis.geometry.coordinate.ParamForPoint; import org.opengis.geometry.coordinate.Position; import org.opengis.geometry.primitive.CurveInterpolation; import org.opengis.geometry.primitive.CurveSegment; Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DirectPositionImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DirectPositionImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DirectPositionImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -19,14 +19,13 @@ import java.util.Arrays; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.util.DoubleOperation; import org.geotools.geometry.iso.util.algorithmND.AlgoPointND; import org.geotools.referencing.CRS; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.MismatchedDimensionException; import org.opengis.geometry.coordinate.Position; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * @author Jackson Roehrig & Sanjay Jena @@ -49,15 +48,6 @@ * Coordinate Reference System used to determine meaning of above coordinates */ private CoordinateReferenceSystem crs; - - /** - * Creates a direct Position initializing all ordiante values with 0.0 - * @deprecated Please use new DirectPosition( factory.getCoordianteReferenceSystem() ); - * @param factory - */ - public DirectPositionImpl(FeatGeomFactoryImpl factory) { - this( factory.getCoordinateReferenceSystem() ); - } public DirectPositionImpl( CoordinateReferenceSystem crs ){ final int N = crs.getCoordinateSystem().getDimension(); @@ -132,17 +122,6 @@ this.coordinate = new double[] { x, y, z, m }; } - /** - * The Feature Geometry Factory can be accessed through this getter-method. - * Hereby Coordinate classes get possibility to get the factorys instance. - * TODO I dont know if this is a clear design, but it works for now. (SJ) - * @deprecated We no longer pass or store a factory to this class - * @return GeometryFactoryImpl - */ - private FeatGeomFactoryImpl XgetGeometryFactory() { - return null; //this.factory; - } - /* * (non-Javadoc) * Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DoublePointArray.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DoublePointArray.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/DoublePointArray.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -21,10 +21,10 @@ import java.util.List; import org.geotools.geometry.iso.util.DoubleOperation; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.coordinate.PointArray; import org.opengis.geometry.coordinate.Position; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * This implementation is a "fast" wrapper over top of a double array. Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/EnvelopeImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/EnvelopeImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/EnvelopeImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -18,14 +18,13 @@ package org.geotools.geometry.iso.coordinate; import org.geotools.geometry.iso.DimensionModel; -import org.geotools.geometry.iso.PositionFactoryImpl; import org.geotools.geometry.iso.UnsupportedDimensionException; import org.geotools.geometry.iso.util.algorithmND.AlgoRectangleND; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; import org.opengis.geometry.PositionFactory; import org.opengis.geometry.coordinate.Position; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * An envlope represents the bounding box of a geometric object. Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/GeometryFactoryImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/GeometryFactoryImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/GeometryFactoryImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -19,19 +19,24 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; +import org.geotools.factory.Factory; +import org.geotools.factory.GeoTools; +import org.geotools.factory.Hints; +import org.geotools.geometry.GeometryFactoryFinder; import org.geotools.geometry.iso.aggregate.MultiPrimitiveImpl; import org.geotools.geometry.iso.primitive.CurveImpl; -import org.geotools.geometry.iso.primitive.PrimitiveFactoryImpl; import org.geotools.geometry.iso.primitive.RingImpl; import org.geotools.geometry.iso.primitive.SurfaceBoundaryImpl; import org.geotools.geometry.iso.primitive.SurfaceImpl; import org.geotools.geometry.iso.util.Assert; -import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; import org.opengis.geometry.MismatchedDimensionException; @@ -63,6 +68,7 @@ import org.opengis.geometry.primitive.Ring; import org.opengis.geometry.primitive.Surface; import org.opengis.geometry.primitive.SurfaceBoundary; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * convenience methods to create objects of the coordinate geometry package @@ -71,7 +77,7 @@ * @author Jackson Roehrig & Sanjay Jena * */ -public class GeometryFactoryImpl implements GeometryFactory { +public class GeometryFactoryImpl implements Factory, GeometryFactory { // ************************************************************************** // ************************************************************************** @@ -82,14 +88,53 @@ //private FeatGeomFactoryImpl geometryFactory; private CoordinateReferenceSystem crs; private PositionFactory positionFactory; + private Map hintsWeCareAbout = new HashMap(); + /** FactorySPI entry point */ + public GeometryFactoryImpl() { + this((Hints)null ); + } + + /** Just the defaults, use GeometryFactoryFinder for the rest */ + public GeometryFactoryImpl( Hints hints ) { + if (hints == null) { + this.crs = DefaultGeographicCRS.WGS84; + hints = GeoTools.getDefaultHints(); + hints.put(Hints.CRS, crs ); + } + else { + this.crs = (CoordinateReferenceSystem) hints.get( Hints.CRS ); + if( crs == null ){ + throw new NullPointerException("A CRS Hint is required in order to use GeometryFactoryImpl"); + } + } + + this.positionFactory = GeometryFactoryFinder.getPositionFactory(hints); + hintsWeCareAbout.put(Hints.CRS, crs ); + hintsWeCareAbout.put(Hints.POSITION_FACTORY, positionFactory ); + } + /** * @param crs */ public GeometryFactoryImpl(CoordinateReferenceSystem crs, PositionFactory pf) { this.crs = crs; this.positionFactory = pf; + hintsWeCareAbout.put(Hints.CRS, crs ); + hintsWeCareAbout.put(Hints.POSITION_FACTORY, positionFactory ); } + + /** + * Report back to FactoryRegistry about our configuration. + * <p> + * FactoryRegistry will check to make sure that there are no duplicates + * created (so there will be only a "single" PositionFactory created + * with this configuration). + * </p> + */ + public Map getImplementationHints() { + return Collections.unmodifiableMap( hintsWeCareAbout ); + } /* (non-Javadoc) * @see org.opengis.geometry.coordinate.Factory#getCoordinateReferenceSystem() Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/LineSegmentImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/LineSegmentImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/LineSegmentImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -20,9 +20,9 @@ import org.geotools.geometry.iso.util.DoubleOperation; import org.geotools.geometry.iso.util.algorithmND.AlgoPointND; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.coordinate.LineSegment; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PointArrayImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PointArrayImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PointArrayImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -26,11 +26,11 @@ import org.geotools.geometry.iso.primitive.CurveImpl; import org.geotools.geometry.iso.util.DoubleOperation; import org.geotools.geometry.iso.util.algorithmND.AlgoPointND; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.coordinate.LineSegment; import org.opengis.geometry.coordinate.PointArray; import org.opengis.geometry.coordinate.Position; +import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * Many of the geometric constructs in this International Standard require the Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PolyhedralSurfaceImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PolyhedralSurfaceImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/PolyhedralSurfaceImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -19,7 +19,6 @@ import java.util.List; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.primitive.SurfaceBoundaryImpl; import org.geotools.geometry.iso.primitive.SurfaceImpl; import org.opengis.geometry.coordinate.Polygon; @@ -57,8 +56,7 @@ * @param factory * @param boundary */ - public PolyhedralSurfaceImpl(FeatGeomFactoryImpl factory, - SurfaceBoundaryImpl boundary) { + public PolyhedralSurfaceImpl(SurfaceBoundaryImpl boundary) { super(boundary); } Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TinImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TinImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TinImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.primitive.SurfaceBoundaryImpl; import org.opengis.geometry.primitive.SurfacePatch; @@ -170,11 +169,11 @@ * @param maxLength * @param triangles */ - public TinImpl(FeatGeomFactoryImpl factory, SurfaceBoundaryImpl surfBdry, + public TinImpl(SurfaceBoundaryImpl surfBdry, ArrayList<PositionImpl> post, ArrayList<LineStringImpl> stopLines, ArrayList<LineStringImpl> breakLines, double maxLength, ArrayList<TriangleImpl> triangles) { - super(factory, surfBdry); + super(surfBdry); this.controlPoint = post; this.breakLines = breakLines; this.stopLines = stopLines; @@ -189,11 +188,11 @@ * @param breakLines * @param maxLength */ - public TinImpl(FeatGeomFactoryImpl factory, PositionImpl[] post, + public TinImpl(PositionImpl[] post, LineStringImpl[] stopLines, LineStringImpl[] breakLines, double maxLength) { /* Call super class; Triangles will be set later */ - super(factory); + super(null); this.controlPoint = new ArrayList<PositionImpl>(); this.breakLines = new ArrayList<LineStringImpl>(); Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TriangulatedSurfaceImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TriangulatedSurfaceImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/coordinate/TriangulatedSurfaceImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.primitive.SurfaceBoundaryImpl; import org.opengis.geometry.coordinate.Polygon; import org.opengis.geometry.coordinate.Triangle; @@ -49,23 +48,19 @@ List<Polygon> triangles) { super(crs, triangles); } - + /** - * Constructor without arguments Triangle Patches have to be setted after - * - * @param factory + * */ - public TriangulatedSurfaceImpl(FeatGeomFactoryImpl factory) { - super(factory, (SurfaceBoundaryImpl) null); + public TriangulatedSurfaceImpl() { + super((SurfaceBoundaryImpl) null); } /** - * @param factory * @param boundary */ - public TriangulatedSurfaceImpl(FeatGeomFactoryImpl factory, - SurfaceBoundaryImpl boundary) { - super(factory, boundary); + public TriangulatedSurfaceImpl(SurfaceBoundaryImpl boundary) { + super(boundary); } /** Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/GeometryToWKTString.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/GeometryToWKTString.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/GeometryToWKTString.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -22,6 +22,7 @@ import org.geotools.geometry.iso.primitive.RingImpl; import org.opengis.geometry.DirectPosition; +import org.opengis.geometry.Geometry; import org.opengis.geometry.aggregate.MultiCurve; import org.opengis.geometry.aggregate.MultiPoint; import org.opengis.geometry.aggregate.MultiPrimitive; @@ -38,7 +39,6 @@ import org.opengis.geometry.primitive.Ring; import org.opengis.geometry.primitive.Surface; import org.opengis.geometry.primitive.SurfaceBoundary; -import org.opengis.geometry.Geometry; public class GeometryToWKTString { Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/WKTReader.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/WKTReader.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/io/wkt/WKTReader.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -35,6 +35,8 @@ import org.geotools.geometry.iso.primitive.SurfaceBoundaryImpl; import org.geotools.geometry.iso.primitive.SurfaceImpl; import org.geotools.geometry.iso.util.AssertionFailedException; +import org.opengis.geometry.Geometry; +import org.opengis.geometry.PositionFactory; import org.opengis.geometry.coordinate.LineString; import org.opengis.geometry.coordinate.Position; import org.opengis.geometry.primitive.Curve; @@ -44,8 +46,6 @@ import org.opengis.geometry.primitive.Ring; import org.opengis.geometry.primitive.Surface; import org.opengis.geometry.primitive.SurfaceBoundary; -import org.opengis.geometry.Geometry; -import org.opengis.geometry.PositionFactory; import org.opengis.referencing.crs.CoordinateReferenceSystem; /** Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/MaximalEdgeRing.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/MaximalEdgeRing.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/MaximalEdgeRing.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.topograph2D.DirectedEdge; import org.geotools.geometry.iso.topograph2D.DirectedEdgeStar; import org.geotools.geometry.iso.topograph2D.EdgeRing; Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/OverlayOp.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/OverlayOp.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/operation/overlay/OverlayOp.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -21,11 +21,13 @@ package org.geotools.geometry.iso.operation.overlay; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.UnsupportedDimensionException; +import org.geotools.geometry.iso.aggregate.AggregateFactoryImpl; import org.geotools.geometry.iso.operation.GeometryGraphOperation; import org.geotools.geometry.iso.root.GeometryImpl; import org.geotools.geometry.iso.topograph2D.Coordinate; @@ -41,10 +43,11 @@ import org.geotools.geometry.iso.topograph2D.Position; import org.geotools.geometry.iso.util.Assert; import org.geotools.geometry.iso.util.algorithm2D.PointLocator; +import org.opengis.geometry.Geometry; import org.opengis.geometry.primitive.OrientableCurve; import org.opengis.geometry.primitive.OrientableSurface; import org.opengis.geometry.primitive.Point; -import org.opengis.geometry.Geometry; +import org.opengis.geometry.primitive.Primitive; import org.opengis.referencing.crs.CoordinateReferenceSystem; /** @@ -579,9 +582,102 @@ // geomList.addAll(resultPolyList); // build the most specific geometry possible - FeatGeomFactoryImpl gf = new FeatGeomFactoryImpl(crs); - return gf.createGeometry( + //FeatGeomFactoryImpl gf = new FeatGeomFactoryImpl(crs); + return createGeometry( resultPolyList, resultLineList, resultPointList); } + /** + * Creates a new Geometry object appropriate to the input Primitives. The + * method will return a Primitive object, if one list contains only one + * element and the rest is empty. In all other cases, that is that exist + * more than one Primitive in the lists, the method will return a Complex + * object. + * + * @param aSurfaces + * List of Surfaces + * @param aCurves + * List of Curves + * @param aPoints + * List of Points + * @return a Geometry instance. + * That is a Point/Curve/Surface if the parameters only contain one point or one curve or one surface. + * It is a MultiPoint/MultiCurve/MultiSurface if the parameters contain one list with more than two entries and the other two lists are empty. + * Or it is a MultiPrimitive if the parameters contain a mixture of points, curves and surfaces. + */ + public GeometryImpl createGeometry(List<OrientableSurface> aSurfaces, + List<OrientableCurve> aCurves, List<Point> aPoints) { + + int nS = aSurfaces.size(); + int nC = aCurves.size(); + int nP = aPoints.size(); + AggregateFactoryImpl aggregateFactory = new AggregateFactoryImpl(crs); + + if (nS + nC + nP == 0) + // Return null if the sets are empty + return null; + //throw new IllegalArgumentException("All Sets are empty"); + + + if (nS == 0) { + + if (nC == 0) { + + // Surfaces empty, Curves empty, Points not empty + if (nP == 1) { + + // POINT + return (GeometryImpl) aPoints.get(0); + + } else { + + // MULTIPOINT + return (GeometryImpl) aggregateFactory.createMultiPoint(new HashSet(aPoints)); + + } + } else if (nP == 0) { + + // Surfaces empty, Curves not empty, Points empty + if (nC == 1) { + + // CURVE + + return (GeometryImpl) aCurves.get(0); + } else { + + // MULTICURVE + return (GeometryImpl) aggregateFactory.createMultiCurve(new HashSet(aCurves)); + } + } + + } else { + + if (nC == 0 && nP == 0) { + + if (nS == 1) { + + // SURFACE + return (GeometryImpl) aSurfaces.get(0); + + } else { + + // MULTISURFACE + return (GeometryImpl) aggregateFactory.createMultiSurface(new HashSet(aSurfaces)); + + } + + } + + } + + // All other cases: MULTIPRIMITIVE + Set<Primitive> tPrimitives = new HashSet<Primitive>(); + tPrimitives.addAll(aSurfaces); + tPrimitives.addAll(aCurves); + tPrimitives.addAll(aPoints); + + return (GeometryImpl) aggregateFactory.createMultiPrimitive(tPrimitives); + + } + } Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveBoundaryImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveBoundaryImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveBoundaryImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -19,7 +19,6 @@ import java.util.Set; -import org.geotools.geometry.iso.FeatGeomFactoryImpl; import org.geotools.geometry.iso.coordinate.EnvelopeImpl; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.complex.Complex; Modified: geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveImpl.java =================================================================== --- geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveImpl.java 2007-07-31 19:06:37 UTC (rev 26396) +++ geotools/trunk/gt/modules/unsupported/geometry/src/main/java/org/geotools/geometry/iso/primitive/CurveImpl.java 2007-07-31 21:50:58 UTC (rev 26397) @@ -34,7 +34,6 @@ im... [truncated message content] |