Modified: sis/branches/JDK6/core/sis-referencing/src/main/resources/META-INF/services/org.opengis.referencing.operation.OperationMethod URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/main/resources/META-INF/services/org.opengis.referencing.operation.OperationMethod?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/main/resources/META-INF/services/org.opengis.referencing.operation.OperationMethod [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/main/resources/META-INF/services/org.opengis.referencing.operation.OperationMethod [UTF-8] Wed Apr 20 14:53:31 2016 @@ -2,6 +2,7 @@ # Heavier classes (e.g. having more dependencies) or classes less likely to be used, should be last. org.apache.sis.internal.referencing.provider.Affine org.apache.sis.internal.referencing.provider.Geographic3Dto2D +org.apache.sis.internal.referencing.provider.Geographic2Dto3D org.apache.sis.internal.referencing.provider.GeographicOffsets org.apache.sis.internal.referencing.provider.GeographicOffsets2D org.apache.sis.internal.referencing.provider.VerticalOffset @@ -11,12 +12,12 @@ org.apache.sis.internal.referencing.prov org.apache.sis.internal.referencing.provider.CoordinateFrameRotation org.apache.sis.internal.referencing.provider.GeographicToGeocentric org.apache.sis.internal.referencing.provider.GeocentricToGeographic -org.apache.sis.internal.referencing.provider.GeocentricTranslation2D org.apache.sis.internal.referencing.provider.GeocentricTranslation3D -org.apache.sis.internal.referencing.provider.PositionVector7Param2D +org.apache.sis.internal.referencing.provider.GeocentricTranslation2D org.apache.sis.internal.referencing.provider.PositionVector7Param3D -org.apache.sis.internal.referencing.provider.CoordinateFrameRotation2D +org.apache.sis.internal.referencing.provider.PositionVector7Param2D org.apache.sis.internal.referencing.provider.CoordinateFrameRotation3D +org.apache.sis.internal.referencing.provider.CoordinateFrameRotation2D org.apache.sis.internal.referencing.provider.Molodensky org.apache.sis.internal.referencing.provider.AbridgedMolodensky org.apache.sis.internal.referencing.provider.Equirectangular @@ -42,3 +43,4 @@ org.apache.sis.internal.referencing.prov org.apache.sis.internal.referencing.provider.NTv2 org.apache.sis.internal.referencing.provider.NADCON org.apache.sis.internal.referencing.provider.FranceGeocentricInterpolation +org.apache.sis.internal.referencing.provider.Interpolation1D
Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/ReferencingUtilitiesTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/ReferencingUtilitiesTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/ReferencingUtilitiesTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/ReferencingUtilitiesTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -90,8 +90,9 @@ public final strictfp class ReferencingU */ @Test public void testGetPropertiesForModifiedCRS() { - assertEquals("WGS 84", getPropertiesForModifiedCRS(HardCodedCRS.WGS84_3D).get(IdentifiedObject.NAME_KEY)); - assertEquals("WGS 84", getPropertiesForModifiedCRS(HardCodedCRS.GEOID_4D).get(IdentifiedObject.NAME_KEY)); + assertEquals("WGS 84", getPropertiesForModifiedCRS(HardCodedCRS.WGS84_3D).get(IdentifiedObject.NAME_KEY)); + assertEquals("WGS 84", getPropertiesForModifiedCRS(HardCodedCRS.GEOID_4D).get(IdentifiedObject.NAME_KEY)); + assertEquals("NTF (Paris)", getPropertiesForModifiedCRS(HardCodedCRS.NTF) .get(IdentifiedObject.NAME_KEY)); } /** Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/PoleRotationMock.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/PoleRotationMock.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/PoleRotationMock.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/PoleRotationMock.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -36,7 +36,7 @@ import org.apache.sis.parameter.Paramete * @module */ @SuppressWarnings("serial") -public final strictfp class PoleRotationMock extends MockProvider { +public final strictfp class PoleRotationMock extends ProviderMock { /** * The group of all parameters expected by this coordinate operation. */ Copied: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java (from r1740146, sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java) URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java?p2=sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java&p1=sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java&r1=1740146&r2=1740152&rev=1740152&view=diff ============================================================================== --- sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -130,9 +130,9 @@ public final strictfp class ProvidersTes */ @Test public void ensureParameterUniqueness() throws ReflectiveOperationException { - final Map<GeneralParameterDescriptor, String> groupNames = new IdentityHashMap<>(); - final Map<GeneralParameterDescriptor, GeneralParameterDescriptor> parameters = new HashMap<>(); - final Map<Object, Object> namesAndIdentifiers = new HashMap<>(); + final Map<GeneralParameterDescriptor, String> groupNames = new IdentityHashMap<GeneralParameterDescriptor, String>(); + final Map<GeneralParameterDescriptor, GeneralParameterDescriptor> parameters = new HashMap<GeneralParameterDescriptor, GeneralParameterDescriptor>(); + final Map<Object, Object> namesAndIdentifiers = new HashMap<Object, Object>(); for (final Class<?> c : methods()) { final OperationMethod method = (OperationMethod) c.newInstance(); final ParameterDescriptorGroup group = method.getParameters(); @@ -181,7 +181,7 @@ public final strictfp class ProvidersTes */ @Test public void testRedimension() { - final Map<Class<?>,Boolean> redimensionables = new HashMap<>(100); + final Map<Class<?>,Boolean> redimensionables = new HashMap<Class<?>,Boolean>(100); for (final Class<?> type : methods()) { assertNull(type.getName(), redimensionables.put(type, Boolean.FALSE)); } Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/SeismicBinGridMock.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/SeismicBinGridMock.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/SeismicBinGridMock.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/SeismicBinGridMock.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -38,7 +38,7 @@ import org.apache.sis.parameter.Paramete * @module */ @SuppressWarnings("serial") -public final strictfp class SeismicBinGridMock extends MockProvider { +public final strictfp class SeismicBinGridMock extends ProviderMock { /** * The group of all parameters expected by this coordinate operation. */ Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/TopocentricConversionMock.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/TopocentricConversionMock.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/TopocentricConversionMock.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/TopocentricConversionMock.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -36,7 +36,7 @@ import org.apache.sis.parameter.Paramete * @module */ @SuppressWarnings("serial") -public final strictfp class TopocentricConversionMock extends MockProvider { +public final strictfp class TopocentricConversionMock extends ProviderMock { /** * The group of all parameters expected by this coordinate operation. */ Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/GeodeticObjectParserTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/GeodeticObjectParserTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/GeodeticObjectParserTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/GeodeticObjectParserTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -92,14 +92,14 @@ public final strictfp class GeodeticObje } /** - * Parses the given text. + * Parses the given text. It is caller's responsibility to verify if some warnings have been emitted. * * @param type The expected object type. * @param text The WKT string to parse. * @return The parsed object. * @throws ParseException if an error occurred during the parsing. */ - private <T> T parse(final Class<T> type, final String text) throws ParseException { + private <T> T parseIgnoreWarnings(final Class<T> type, final String text) throws ParseException { if (parser == null) { newParser(Convention.DEFAULT); } @@ -107,13 +107,26 @@ public final strictfp class GeodeticObje final Object obj = parser.parseObject(text, position); assertEquals("errorIndex", -1, position.getErrorIndex()); assertEquals("index", text.length(), position.getIndex()); - assertNull("warnings", parser.getAndClearWarnings(obj)); - assertTrue("ignoredElements", parser.ignoredElements.isEmpty()); assertInstanceOf("GeodeticObjectParser.parseObject", type, obj); return type.cast(obj); } /** + * Parses the given text and ensure that no warnings have been emitted. + * + * @param type The expected object type. + * @param text The WKT string to parse. + * @return The parsed object. + * @throws ParseException if an error occurred during the parsing. + */ + private <T> T parse(final Class<T> type, final String text) throws ParseException { + final T obj = parseIgnoreWarnings(type, text); + assertNull("warnings", parser.getAndClearWarnings(obj)); + assertTrue("ignoredElements", parser.ignoredElements.isEmpty()); + return obj; + } + + /** * Asserts that the name and (optionally) the EPSG identifier of the given object are equal to the given strings. * As a special case if the given EPSG code is 0, then this method verifies that the given object has no identifier. * @@ -439,6 +452,48 @@ public final strictfp class GeodeticObje } /** + * Tests parsing of a CRS with a prime meridian having implicit unit in grads but axes having explicit unit + * in degrees. The specification in §8.2.2 (ii) said: + * + * "(snip) the prime meridian’s {@literal <irm longitude>} value shall be given in + * the same angular units as those for the horizontal axes of the geographic CRS." + * + * Consequently we expect the prime meridian to be in decimal degrees even if the WKT used in this test has + * an {@code Unit[“grade”, 0.015707963267948967]} element, because this WK also declare the axis as being in + * degrees. Since this can be confusing, we expect the parser to emit a warning. + * + * @throws ParseException if the parsing failed. + */ + @Test + @DependsOnMethod("testGeographicWithParisMeridian") + public void testMismatchedAngularUnits() throws ParseException { + String wkt = "GeodeticCRS[“NTF (Paris)”,\n" + + " Datum[“Nouvelle Triangulation Française (Paris)”,\n" + + " Ellipsoid[“Clarke 1880 (IGN)”, 6378249.2, 293.4660212936269]],\n" + + " PrimeMeridian[“Paris”, 2.33722917],\n" + // In units of the longitude axis. + " CS[ellipsoidal, 2],\n" + + " Axis[“Latitude (φ)”, NORTH, Unit[“degree”, 0.017453292519943295]],\n" + + " Axis[“Longitude (λ)”, EAST, Unit[“degree”, 0.017453292519943295]],\n" + + " Unit[“grade”, 0.015707963267948967]\n," + // Inconsistent with axis units. + " Id[“EPSG”, 4807]]"; + + GeographicCRS crs = parseIgnoreWarnings(GeographicCRS.class, wkt); + final Warnings warnings = parser.getAndClearWarnings(crs); + assertTrue("ignoredElements", parser.ignoredElements.isEmpty()); + assertNotNull("warnings", warnings); + assertEquals("warnings.numMessages", 1, warnings.getNumMessages()); + + assertNameAndIdentifierEqual("NTF (Paris)", 4807, crs); + PrimeMeridian pm = crs.getDatum().getPrimeMeridian(); + assertEquals("angularUnit", NonSI.DEGREE_ANGLE, pm.getAngularUnit()); + assertEquals("greenwichLongitude", 2.33722917, pm.getGreenwichLongitude(), STRICT); + EllipsoidalCS cs = crs.getCoordinateSystem(); + assertEquals("dimension", 2, cs.getDimension()); + assertAxisEquals(AxisNames.GEODETIC_LATITUDE, "φ", AxisDirection.NORTH, -90, +90, NonSI.DEGREE_ANGLE, RangeMeaning.EXACT, cs.getAxis(0)); + assertAxisEquals(AxisNames.GEODETIC_LONGITUDE, "λ", AxisDirection.EAST, -180, +180, NonSI.DEGREE_ANGLE, RangeMeaning.WRAPAROUND, cs.getAxis(1)); + } + + /** * Implementation of {@link #testGeographicCRS()} and {@link #testWithAxisSwapping()}. * This test expects no {@code AUTHORITY} element on any component. * @@ -1042,17 +1097,14 @@ public final strictfp class GeodeticObje @Test @DependsOnMethod("testGeographicWithImplicitAxes") public void testWarnings() throws ParseException { - newParser(Convention.DEFAULT); - final ParsePosition position = new ParsePosition(0); - final GeographicCRS crs = (GeographicCRS) parser.parseObject( + final GeographicCRS crs = parseIgnoreWarnings(GeographicCRS.class, "GEOGCS[“WGS 84”,\n" + " DATUM[“World Geodetic System 1984”,\n" + " SPHEROID[“WGS84”, 6378137.0, 298.257223563, Ext1[“foo”], Ext2[“bla”]]],\n" + " PRIMEM[“Greenwich”, 0.0, Intruder[“unknown”]],\n" + - " UNIT[“degree”, 0.017453292519943295], Intruder[“foo”]]", position); + " UNIT[“degree”, 0.017453292519943295], Intruder[“foo”]]"); verifyGeographicCRS(0, crs); - assertEquals("errorIndex", -1, position.getErrorIndex()); final Warnings warnings = parser.getAndClearWarnings(crs); assertNotNull("warnings", warnings); Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTParserTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTParserTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTParserTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/io/wkt/WKTParserTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -38,13 +38,20 @@ import static org.junit.Assert.*; * * @author Martin Desruisseaux (IRD, Geomatys) * @since 0.6 - * @version 0.6 + * @version 0.7 * @module */ @RunWith(JUnit4.class) @DependsOn(GeodeticObjectParserTest.class) public final strictfp class WKTParserTest extends CRSParserTest { /** + * Whether the test should replace the curly quotation marks “ and ” by the straight quotation mark ". + * The ISO 19162 specification uses only straight quotation marks, but SIS supports both. + * Curly quotation marks are convenient for identifying bugs, so we test them first. + */ + private boolean useStraightQuotes; + + /** * Creates a new test case using the default {@code CRSFactory} implementation. */ public WKTParserTest() { @@ -52,8 +59,8 @@ public final strictfp class WKTParserTes } /** - * Pre-process the WKT string before parsing. This method chooses randomly whether to replace - * curly quotation marks ({@code “} and {@code ”}) by straight quotation marks ({@code "}) or not. + * Pre-process the WKT string before parsing. This method may replace curly quotation marks + * ({@code “} and {@code ”}) by straight quotation marks ({@code "}). * The Apache SIS parser should understand both forms transparently. * * @param wkt The Well-Known Text to pre-process. @@ -61,7 +68,7 @@ public final strictfp class WKTParserTes */ @Override protected String preprocessWKT(String wkt) { - if (StrictMath.random() >= 0.5) { + if (useStraightQuotes) { wkt = super.preprocessWKT(wkt); } return wkt; @@ -110,6 +117,8 @@ public final strictfp class WKTParserTes public void testGeographic3D() throws FactoryException { super.testGeographic3D(); verifyEllipsoidalCS(); + useStraightQuotes = true; + super.testGeographic3D(); // Test again with “ and ” replaced by ". } /** @@ -135,6 +144,8 @@ public final strictfp class WKTParserTes public void testGeographicWithUnicode() throws FactoryException { super.testGeographicWithUnicode(); verifyEllipsoidalCS(); + useStraightQuotes = true; + super.testGeographicWithUnicode(); // Test again with “ and ” replaced by ". } /** @@ -160,6 +171,8 @@ public final strictfp class WKTParserTes public void testGeographicWithIdentifier() throws FactoryException { super.testGeographicWithIdentifier(); verifyEllipsoidalCS(); + useStraightQuotes = true; + super.testGeographicWithIdentifier(); // Test again with “ and ” replaced by ". } /** @@ -185,6 +198,8 @@ public final strictfp class WKTParserTes public void testGeographicWithGradUnits() throws FactoryException { super.testGeographicWithGradUnits(); verifyEllipsoidalCS(); + useStraightQuotes = true; + super.testGeographicWithGradUnits(); // Test again with “ and ” replaced by ". } /** @@ -218,6 +233,9 @@ public final strictfp class WKTParserTes assertEquals("name", AxisNames.GEOCENTRIC_X, cs.getAxis(0).getName().getCode()); assertEquals("name", AxisNames.GEOCENTRIC_Y, cs.getAxis(1).getName().getCode()); assertEquals("name", AxisNames.GEOCENTRIC_Z, cs.getAxis(2).getName().getCode()); + + useStraightQuotes = true; + super.testGeocentric(); // Test again with “ and ” replaced by ". } /** @@ -271,6 +289,9 @@ public final strictfp class WKTParserTes final CoordinateSystem cs = object.getCoordinateSystem(); assertEquals("name", AxisNames.EASTING, cs.getAxis(0).getName().getCode()); assertEquals("name", AxisNames.NORTHING, cs.getAxis(1).getName().getCode()); + + useStraightQuotes = true; + super.testProjectedWithFootUnits(); // Test again with “ and ” replaced by ". } /** @@ -307,6 +328,9 @@ public final strictfp class WKTParserTes final CoordinateSystem cs = object.getCoordinateSystem(); assertEquals("name", AxisNames.EASTING, cs.getAxis(0).getName().getCode()); assertEquals("name", AxisNames.NORTHING, cs.getAxis(1).getName().getCode()); + + useStraightQuotes = true; + super.testProjectedWithImplicitParameterUnits(); // Test again with “ and ” replaced by ". } /** @@ -329,6 +353,9 @@ public final strictfp class WKTParserTes final CoordinateSystem cs = object.getCoordinateSystem(); assertEquals("name", AxisNames.GRAVITY_RELATED_HEIGHT, cs.getAxis(0).getName().getCode()); assertEquals("datumType", VerticalDatumType.GEOIDAL, ((VerticalCRS) object).getDatum().getVerticalDatumType()); + + useStraightQuotes = true; + super.testVertical(); // Test again with “ and ” replaced by ". } /** @@ -349,6 +376,34 @@ public final strictfp class WKTParserTes super.testTemporal(); final CoordinateSystem cs = object.getCoordinateSystem(); assertEquals("name", AxisNames.TIME, cs.getAxis(0).getName().getCode()); + + useStraightQuotes = true; + super.testTemporal(); // Test again with “ and ” replaced by ". + } + + /** + * Completes the GeoAPI tests with a check of axis name. + * The WKT parsed by this test is (except for quote characters): + * + * {@preformat wkt + * PARAMETRICCRS[“WMO standard atmosphere layer 0”, + * PDATUM[“Mean Sea Level”,ANCHOR[“1013.25 hPa at 15°C”]], + * CS[parametric,1], + * AXIS[“pressure (hPa)”,up], + * PARAMETRICUNIT[“hPa”,100.0]] + * } + * + * @throws FactoryException if an error occurred during the WKT parsing. + */ + @Test + @Override + public void testParametric() throws FactoryException { + super.testParametric(); + final CoordinateSystem cs = object.getCoordinateSystem(); + assertEquals("name", "pressure", cs.getAxis(0).getName().getCode()); + + useStraightQuotes = true; + super.testParametric(); // Test again with “ and ” replaced by ". } /** @@ -374,6 +429,9 @@ public final strictfp class WKTParserTes final CoordinateSystem cs = object.getCoordinateSystem(); assertEquals("name", AxisNames.NORTHING, cs.getAxis(0).getName().getCode()); assertEquals("name", AxisNames.WESTING, cs.getAxis(1).getName().getCode()); + + useStraightQuotes = true; + super.testEngineering(); // Test again with “ and ” replaced by ". } /** @@ -399,6 +457,9 @@ public final strictfp class WKTParserTes final CoordinateSystem cs = object.getCoordinateSystem(); assertEquals("name", "site east", cs.getAxis(0).getName().getCode()); assertEquals("name", "site north", cs.getAxis(1).getName().getCode()); + + useStraightQuotes = true; + super.testEngineeringRotated(); // Test again with “ and ” replaced by ". } /** @@ -429,6 +490,9 @@ public final strictfp class WKTParserTes assertEquals("name", "x", cs.getAxis(0).getName().getCode()); assertEquals("name", "y", cs.getAxis(1).getName().getCode()); assertEquals("name", "z", cs.getAxis(2).getName().getCode()); + + useStraightQuotes = true; + super.testEngineeringForShip(); // Test again with “ and ” replaced by ". } /** @@ -461,6 +525,8 @@ public final strictfp class WKTParserTes public void testDerivedGeodetic() throws FactoryException { super.testDerivedGeodetic(); verifyEllipsoidalCS(); + useStraightQuotes = true; + super.testDerivedGeodetic(); // Test again with “ and ” replaced by ". } /** @@ -497,6 +563,9 @@ public final strictfp class WKTParserTes assertEquals("name", "Topocentric East", cs.getAxis(0).getName().getCode()); assertEquals("name", "Topocentric North", cs.getAxis(1).getName().getCode()); assertEquals("name", "Topocentric height", cs.getAxis(2).getName().getCode()); + + useStraightQuotes = true; + super.testDerivedEngineeringFromGeodetic(); // Test again with “ and ” replaced by ". } /** @@ -515,6 +584,9 @@ public final strictfp class WKTParserTes */ assertEquals("name", "I", cs.getAxis(0).getName().getCode()); assertEquals("name", "J", cs.getAxis(1).getName().getCode()); + + useStraightQuotes = true; + super.testDerivedEngineeringFromProjected(); // Test again with “ and ” replaced by ". } /** @@ -549,6 +621,9 @@ public final strictfp class WKTParserTes assertEquals("name", AxisNames.GEODETIC_LATITUDE, cs.getAxis(0).getName().getCode()); assertEquals("name", AxisNames.GEODETIC_LONGITUDE, cs.getAxis(1).getName().getCode()); assertEquals("name", AxisNames.GRAVITY_RELATED_HEIGHT, cs.getAxis(2).getName().getCode()); + + useStraightQuotes = true; + super.testCompoundWithVertical(); // Test again with “ and ” replaced by ". } /** @@ -557,18 +632,18 @@ public final strictfp class WKTParserTes * * {@preformat wkt * COMPOUNDCRS[“GPS position and time”, - * GEODCRS[“WGS 84”, - * DATUM[“World Geodetic System 1984”, - * ELLIPSOID[“WGS 84”,6378137,298.257223563]], - * CS[ellipsoidal,2], - * AXIS[“(lat)”,north,ORDER[1]], - * AXIS[“(lon)”,east,ORDER[2]], - * ANGLEUNIT[“degree”,0.0174532925199433]], - * TIMECRS[“GPS Time”, - * TIMEDATUM[“Time origin”,TIMEORIGIN[1980-01-01]], - * CS[temporal,1], - * AXIS[“time (T)”,future], - * TIMEUNIT[“day”,86400]]] + * GEODCRS[“WGS 84”, + * DATUM[“World Geodetic System 1984”, + * ELLIPSOID[“WGS 84”,6378137,298.257223563]], + * CS[ellipsoidal,2], + * AXIS[“(lat)”,north,ORDER[1]], + * AXIS[“(lon)”,east,ORDER[2]], + * ANGLEUNIT[“degree”,0.0174532925199433]], + * TIMECRS[“GPS Time”, + * TIMEDATUM[“Time origin”,TIMEORIGIN[1980-01-01]], + * CS[temporal,1], + * AXIS[“time (T)”,future], + * TIMEUNIT[“day”,86400]]] * } * * @throws FactoryException if an error occurred during the WKT parsing. @@ -581,5 +656,45 @@ public final strictfp class WKTParserTes assertEquals("name", AxisNames.GEODETIC_LATITUDE, cs.getAxis(0).getName().getCode()); assertEquals("name", AxisNames.GEODETIC_LONGITUDE, cs.getAxis(1).getName().getCode()); assertEquals("name", AxisNames.TIME, cs.getAxis(2).getName().getCode()); + + useStraightQuotes = true; + super.testCompoundWithTime(); // Test again with “ and ” replaced by ". + } + + /** + * Completes the GeoAPI tests with a check of axis names. + * The WKT parsed by this test is (except for quote characters): + * + * {@preformat wkt + * COMPOUNDCRS[“ICAO layer 0”, + * GEODETICCRS[“WGS 84”, + * DATUM[“World Geodetic System 1984”, + * ELLIPSOID[“WGS 84”,6378137,298.257223563, + * LENGTHUNIT[“metre”,1.0]]], + * CS[ellipsoidal,2], + * AXIS[“latitude”,north,ORDER[1]], + * AXIS[“longitude”,east,ORDER[2]], + * ANGLEUNIT[“degree”,0.0174532925199433]], + * PARAMETRICCRS[“WMO standard atmosphere”, + * PARAMETRICDATUM[“Mean Sea Level”, + * ANCHOR[“Mean Sea Level = 1013.25 hPa”]], + * CS[parametric,1], + * AXIS[“pressure (P)”,unspecified], + * PARAMETRICUNIT[“hPa”,100]]] + * } + * + * @throws FactoryException if an error occurred during the WKT parsing. + */ + @Test + @Override + public void testCompoundWithParametric() throws FactoryException { + super.testCompoundWithParametric(); + final CoordinateSystem cs = object.getCoordinateSystem(); + assertEquals("name", AxisNames.GEODETIC_LATITUDE, cs.getAxis(0).getName().getCode()); + assertEquals("name", AxisNames.GEODETIC_LONGITUDE, cs.getAxis(1).getName().getCode()); + assertEquals("name", "pressure", cs.getAxis(2).getName().getCode()); + + useStraightQuotes = true; + super.testCompoundWithParametric(); // Test again with “ and ” replaced by ". } } Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -29,6 +29,7 @@ import org.opengis.parameter.ParameterVa import org.apache.sis.metadata.iso.citation.Citations; import org.apache.sis.referencing.CommonCRS; import org.apache.sis.referencing.cs.HardCodedCS; +import org.apache.sis.referencing.factory.InvalidGeodeticParameterException; import org.apache.sis.internal.referencing.GeodeticObjectBuilder; import org.apache.sis.internal.util.Constants; import org.apache.sis.internal.system.Loggers; @@ -88,6 +89,25 @@ public final strictfp class DefaultProje private static final String XML_FILE = "ProjectedCRS.xml"; /** + * Creates a projected CRS and verifies its parameters. + * Verifies also that the constructor does not accept invalid base CRS. + * + * @throws FactoryException if the CRS creation failed. + */ + @Test + public void testConstructor() throws FactoryException { + final ProjectedCRS crs = create(HardCodedCRS.NTF); + verifyParameters(crs.getConversionFromBase().getParameterValues()); + try { + create(HardCodedCRS.WGS84_3D); + fail("Should not accept a three-dimensional base geodetic CRS."); + } catch (InvalidGeodeticParameterException e) { + final String message = e.getMessage(); + assertTrue(message, message.contains("Lambert Conic Conformal (1SP)")); + } + } + + /** * Creates the "NTF (Paris) / Lambert zone II" CRS. The prime meridian is always in grades, * but the axes can be in degrees or in grades depending if the {@code baseCRS} argument is * {@link HardCodedCRS.NTF_NORMALIZED_AXES} or {@link HardCodedCRS.NTF} respectively. @@ -109,11 +129,24 @@ public final strictfp class DefaultProje } /** + * Verifies the parameters of a {@code ProjectedCRS} created by the {@link #create(GeographicCRS)} method + * or something equivalent. + */ + private static void verifyParameters(final ParameterValueGroup pg) { + assertEquals("Latitude of natural origin", 52, pg.parameter("Latitude of natural origin") .doubleValue(NonSI.GRADE), STRICT); + assertEquals("Longitude of natural origin", 0, pg.parameter("Longitude of natural origin") .doubleValue(NonSI.GRADE), STRICT); + assertEquals("Scale factor at natural origin", 0.99987742, pg.parameter("Scale factor at natural origin").doubleValue(), STRICT); + assertEquals("False easting", 600000, pg.parameter("False easting") .doubleValue(SI.METRE), STRICT); + assertEquals("False northing", 2200000, pg.parameter("False northing") .doubleValue(SI.METRE), STRICT); + } + + /** * Tests WKT 1 formatting. * * @throws FactoryException if the CRS creation failed. */ @Test + @DependsOnMethod("testConstructor") public void testWKT1() throws FactoryException { final ProjectedCRS crs = create(HardCodedCRS.NTF); assertWktEquals(Convention.WKT1, @@ -447,16 +480,10 @@ public final strictfp class DefaultProje assertAxisDirectionsEqual("coordinateSystem", crs.getCoordinateSystem(), AxisDirection.EAST, AxisDirection.NORTH); final Projection conversion = crs.getConversionFromBase(); - final ParameterValueGroup pg = conversion.getParameterValues(); assertEpsgNameAndIdentifierEqual("Lambert zone II", 18082, conversion); assertEpsgNameAndIdentifierEqual("Lambert Conic Conformal (1SP)", 9801, conversion.getMethod()); - assertEquals("Latitude of natural origin", 52, pg.parameter("Latitude of natural origin") .doubleValue(NonSI.GRADE), STRICT); - assertEquals("Longitude of natural origin", 0, pg.parameter("Longitude of natural origin") .doubleValue(NonSI.GRADE), STRICT); - assertEquals("Scale factor at natural origin", 0.99987742, pg.parameter("Scale factor at natural origin").doubleValue(), STRICT); - assertEquals("False easting", 600000, pg.parameter("False easting") .doubleValue(SI.METRE), STRICT); - assertEquals("False northing", 2200000, pg.parameter("False northing") .doubleValue(SI.METRE), STRICT); - assertNotNull("conversion.mathTransform", conversion.getMathTransform()); + verifyParameters(conversion.getParameterValues()); /* * Test marshalling and compare with the original file. The comparison ignores the <gml:name> nodes because the * marshalled CRS contains many operation method and parameter aliases which were not in the original XML file. Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/crs/HardCodedCRS.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -36,7 +36,7 @@ import static org.apache.sis.referencing * * @author Martin Desruisseaux (Geomatys) * @since 0.4 - * @version 0.5 + * @version 0.7 * @module */ public final strictfp class HardCodedCRS { @@ -109,6 +109,38 @@ public final strictfp class HardCodedCRS HardCodedDatum.NTF, HardCodedCS.GEODETIC_2D); /** + * A three-dimensional geographic coordinate reference system using the Tokyo datum. + * This CRS uses (<var>longitude</var>, <var>latitude</var>, <var>height</var>) ordinates + * with longitude values increasing towards the East, latitude values increasing towards + * the North and ellipsoidal eight increasing toward up. + * The angular units are decimal degrees and the linear units are metres. + * + * <p>This CRS is equivalent to {@code EPSG:4301} except for axis order and the addition + * of ellipsoidal height.</p> + * + * @since 0.7 + */ + public static final DefaultGeographicCRS TOKYO = new DefaultGeographicCRS( + Collections.singletonMap(DefaultGeographicCRS.NAME_KEY, "Tokyo"), + HardCodedDatum.TOKYO, HardCodedCS.GEODETIC_3D); + + /** + * A two-dimensional geographic coordinate reference system using the JGD2000 datum. + * This CRS uses (<var>longitude</var>, <var>latitude</var>, <var>height</var>) ordinates + * with longitude values increasing towards the East, latitude values increasing towards + * the North and ellipsoidal eight increasing toward up. + * The angular units are decimal degrees and the linear units are metres. + * + * <p>This CRS is equivalent to {@code EPSG:4612} except for axis order and the addition + * of ellipsoidal height.</p> + * + * @since 0.7 + */ + public static final DefaultGeographicCRS JGD2000 = new DefaultGeographicCRS( + Collections.singletonMap(DefaultGeographicCRS.NAME_KEY, "JGD2000"), + HardCodedDatum.JGD2000, HardCodedCS.GEODETIC_3D); + + /** * A two-dimensional geographic coordinate reference system using a spherical datum. * This CRS uses (<var>longitude</var>, <var>latitude</var>) ordinates with longitude values * increasing towards the East and latitude values increasing towards the North. @@ -161,6 +193,18 @@ public final strictfp class HardCodedCRS getProperties(HardCodedCS.ELLIPSOIDAL_HEIGHT), HardCodedDatum.ELLIPSOID, HardCodedCS.ELLIPSOIDAL_HEIGHT); /** + * A vertical coordinate reference system using ellipsoidal datum. + * Ellipsoidal heights are measured along the normal to the ellipsoid used in the definition of horizontal datum. + * + * <p>This is not a valid vertical CRS according ISO 19111. + * This CRS is used by Apache SIS for internal calculation.</p> + * + * @since 0.7 + */ + public static final DefaultVerticalCRS ELLIPSOIDAL_HEIGHT_cm = new DefaultVerticalCRS( + getProperties(HardCodedCS.ELLIPSOIDAL_HEIGHT_cm), HardCodedDatum.ELLIPSOID, HardCodedCS.ELLIPSOIDAL_HEIGHT_cm); + + /** * A vertical coordinate reference system using Mean Sea Level datum. */ public static final DefaultVerticalCRS GRAVITY_RELATED_HEIGHT = new DefaultVerticalCRS( Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedAxes.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedAxes.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedAxes.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedAxes.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -114,6 +114,16 @@ public final strictfp class HardCodedAxe AxisDirection.UP, SI.METRE, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, null); /** + * Axis for height values above the ellipsoid in a + * {@linkplain org.apache.sis.referencing.crs.DefaultGeographicCRS geographic CRS}. + * Increasing ordinates values go {@linkplain AxisDirection#UP up} and units are {@linkplain SI#CENTIMETRE centimetres}. + * + * @since 0.7 + */ + public static final DefaultCoordinateSystemAxis ELLIPSOIDAL_HEIGHT_cm = create(AxisNames.ELLIPSOIDAL_HEIGHT, "h", + AxisDirection.UP, SI.CENTIMETRE, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, null); + + /** * Axis for height values measured from gravity. * Increasing ordinates values go {@linkplain AxisDirection#UP up} and units are {@linkplain SI#METRE metres}. * The ISO 19111 name is <cite>"gravity-related height"</cite> and the abbreviation is upper case <cite>"H"</cite>. Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedCS.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedCS.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedCS.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/cs/HardCodedCS.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -211,16 +211,26 @@ public final strictfp class HardCodedCS /** * A one-dimensional vertical CS with - * <var>{@linkplain HardCodedAxes#ELLIPSOIDAL_HEIGHT - * ellipsoidal height}</var> axis in metres. + * <var>{@linkplain HardCodedAxes#ELLIPSOIDAL_HEIGHT ellipsoidal height}</var> + * axis in metres. */ public static final DefaultVerticalCS ELLIPSOIDAL_HEIGHT = new DefaultVerticalCS( getProperties(HardCodedAxes.ELLIPSOIDAL_HEIGHT), HardCodedAxes.ELLIPSOIDAL_HEIGHT); /** * A one-dimensional vertical CS with - * <var>{@linkplain HardCodedAxes#GRAVITY_RELATED_HEIGHT - * gravity-related height}</var> axis in metres. + * <var>{@linkplain HardCodedAxes#ELLIPSOIDAL_HEIGHT ellipsoidal height}</var> + * axis in centimetres. + * + * @since 0.7 + */ + public static final DefaultVerticalCS ELLIPSOIDAL_HEIGHT_cm = new DefaultVerticalCS( + getProperties(HardCodedAxes.ELLIPSOIDAL_HEIGHT_cm), HardCodedAxes.ELLIPSOIDAL_HEIGHT_cm); + + /** + * A one-dimensional vertical CS with + * <var>{@linkplain HardCodedAxes#GRAVITY_RELATED_HEIGHT gravity-related height}</var> + * axis in metres. */ public static final DefaultVerticalCS GRAVITY_RELATED_HEIGHT = new DefaultVerticalCS( getProperties(HardCodedAxes.GRAVITY_RELATED_HEIGHT), HardCodedAxes.GRAVITY_RELATED_HEIGHT); Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGDataFormatter.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGDataFormatter.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGDataFormatter.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/sql/EPSGDataFormatter.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -85,8 +85,9 @@ import org.apache.sis.internal.jdk7.Stan * and add a {@code CONSTRAINT pk_change PRIMARY KEY (change_id)} line instead.</li> * <li>In the statement creating the {@code epsg_datum} table, * change the type of the {@code realization_epoch} column to {@code SMALLINT}.</li> - * <li>Change the type of {@code show_crs}, {@code show_operation} and all {@code deprecated} fields - * from {@code SMALLINT} to {@code BOOLEAN}.</li> + * <li>Change the type of {@code ellipsoid_shape}, {@code reverse_op}, {@code param_sign_reversal} + * {@code show_crs}, {@code show_operation} and all {@code deprecated} fields from {@code SMALLINT} + * (or sometime {@code VARCHAR(3)}) to {@code BOOLEAN}.</li> * <li>Change the type of every {@code table_name} columns from {@code VARCHAR(80)} to {@code epsg_table_name}.</li> * <li>Change the type of {@code coord_ref_sys_kind} column from {@code VARCHAR(24)} to {@code epsg_crs_kind}.</li> * <li>Change the type of {@code coord_sys_type} column from {@code VARCHAR(24)} to {@code epsg_cs_kind}.</li> @@ -177,15 +178,16 @@ public final class EPSGDataFormatter ext private boolean insertDatum; /** - * Number of columns to change from type SMALLINT to type BOOLEAN. - * All those columns must be last. + * Index (in reversal order) of columns to change from type SMALLINT to type BOOLEAN. + * Index 0 is the last columns, index 1 is the column before the last, <i>etc</i>. + * We use the reverse order because most boolean columns in the EPSG dataset are last. */ - private int numBooleanColumns; + private int[] booleanColumnIndices; /** - * The {@link #numBooleanColumns} value for each table. + * The {@link #booleanColumnIndices} value for each table. */ - private final Map<String,Integer> numBooleanColumnsForTables; + private final Map<String,int[]> booleanColumnIndicesForTables; /** * Creates a new instance. @@ -195,28 +197,29 @@ public final class EPSGDataFormatter ext */ private EPSGDataFormatter(final Connection c) throws SQLException { super(c, Integer.MAX_VALUE); - numBooleanColumnsForTables = new HashMap<String,Integer>(); - numBooleanColumnsForTables.put("epsg_alias", 0); - numBooleanColumnsForTables.put("epsg_area", 1); - numBooleanColumnsForTables.put("epsg_change", 0); - numBooleanColumnsForTables.put("epsg_coordinateaxis", 0); - numBooleanColumnsForTables.put("epsg_coordinateaxisname", 1); - numBooleanColumnsForTables.put("epsg_coordinatereferencesystem", 2); - numBooleanColumnsForTables.put("epsg_coordinatesystem", 1); - numBooleanColumnsForTables.put("epsg_coordoperation", 2); - numBooleanColumnsForTables.put("epsg_coordoperationmethod", 1); - numBooleanColumnsForTables.put("epsg_coordoperationparam", 1); - numBooleanColumnsForTables.put("epsg_coordoperationparamusage", 0); - numBooleanColumnsForTables.put("epsg_coordoperationparamvalue", 0); - numBooleanColumnsForTables.put("epsg_coordoperationpath", 0); - numBooleanColumnsForTables.put("epsg_datum", 1); - numBooleanColumnsForTables.put("epsg_deprecation", 0); - numBooleanColumnsForTables.put("epsg_ellipsoid", 1); - numBooleanColumnsForTables.put("epsg_namingsystem", 1); - numBooleanColumnsForTables.put("epsg_primemeridian", 1); - numBooleanColumnsForTables.put("epsg_supersession", 0); - numBooleanColumnsForTables.put("epsg_unitofmeasure", 1); - numBooleanColumnsForTables.put("epsg_versionhistory", 0); + final Map<String,int[]> m = new HashMap<String,int[]>(); + m.put("epsg_alias", new int[] { }); + m.put("epsg_area", new int[] {0 }); + m.put("epsg_change", new int[] { }); + m.put("epsg_coordinateaxis", new int[] { }); + m.put("epsg_coordinateaxisname", new int[] {0 }); + m.put("epsg_coordinatereferencesystem", new int[] {0,1}); + m.put("epsg_coordinatesystem", new int[] {0 }); + m.put("epsg_coordoperation", new int[] {0,1}); + m.put("epsg_coordoperationmethod", new int[] {0,8}); + m.put("epsg_coordoperationparam", new int[] {0 }); + m.put("epsg_coordoperationparamusage", new int[] {0 }); + m.put("epsg_coordoperationparamvalue", new int[] { }); + m.put("epsg_coordoperationpath", new int[] { }); + m.put("epsg_datum", new int[] {0 }); + m.put("epsg_deprecation", new int[] { }); + m.put("epsg_ellipsoid", new int[] {0,6}); + m.put("epsg_namingsystem", new int[] {0 }); + m.put("epsg_primemeridian", new int[] {0 }); + m.put("epsg_supersession", new int[] { }); + m.put("epsg_unitofmeasure", new int[] {0 }); + m.put("epsg_versionhistory", new int[] { }); + booleanColumnIndicesForTables = m; } /** @@ -304,14 +307,17 @@ public final class EPSGDataFormatter ext return 0; } /* - * Following statements do not make sense anymore on enumerated values: + * Following statements do not make sense anymore on enumerated or boolean values: * * UPDATE epsg_coordinatereferencesystem SET coord_ref_sys_kind = replace(coord_ref_sys_kind, CHR(182), CHR(10)); * UPDATE epsg_coordinatesystem SET coord_sys_type = replace(coord_sys_type, CHR(182), CHR(10)); * UPDATE epsg_datum SET datum_type = replace(datum_type, CHR(182), CHR(10)); + * UPDATE epsg_coordoperationparamusage SET param_sign_reversal = replace(param_sign_reversal, CHR(182), CHR(10)) */ if (line.contains("replace")) { - if (line.contains("coord_ref_sys_kind") || line.contains("coord_sys_type") || line.contains("datum_type")) { + if (line.contains("param_sign_reversal") || line.contains("coord_ref_sys_kind") + || line.contains("coord_sys_type") || line.contains("datum_type")) + { return 0; } } @@ -339,7 +345,7 @@ public final class EPSGDataFormatter ext throw new SQLException("This simple program wants VALUES on the same line than INSERT INTO."); } final String table = CharSequences.trimWhitespaces(line, INSERT_INTO.length(), valuesStart).toString(); - numBooleanColumns = numBooleanColumnsForTables.get(table); + booleanColumnIndices = booleanColumnIndicesForTables.get(table); insertDatum = table.equals("epsg_datum"); /* * We are beginning insertions in a new table. @@ -385,20 +391,40 @@ public final class EPSGDataFormatter ext */ private String replaceIntegerByBoolean(final String line) throws SQLException { final StringBuilder buffer = new StringBuilder(line); - int end = line.length(); - for (int n = 0; n < numBooleanColumns; n++) { - end = line.lastIndexOf(',', end - 1); - final int p = CharSequences.skipLeadingWhitespaces(line, end+1, line.length()); - final boolean value; - switch (line.charAt(p)) { - case '0': value = false; break; - case '1': value = true; break; - default: throw new SQLException("Unexpected boolean value at position " + p + " in:\n" + line); + int end = CharSequences.skipTrailingWhitespaces(buffer, 0, buffer.length()); + if (buffer.codePointBefore(end) == ')') end--; + for (int n=0, columnIndex=0; n < booleanColumnIndices.length; columnIndex++) { + int start = end; + for (int c; (c = buffer.codePointBefore(start)) != ',';) { + start -= Character.charCount(c); + if (c == '\'') { + while (true) { + c = buffer.codePointBefore(start); + start -= Character.charCount(c); + if (c == '\'') { + if (buffer.codePointBefore(start) != '\'') { + break; + } + start--; + } + } + } } - if (line.charAt(p+1) != (n == 0 ? ' ' : ',')) { - throw new SQLException("Unexpected character at position " + (p+1) + " in:\n" + line); + if (columnIndex == booleanColumnIndices[n]) { + String value = CharSequences.trimWhitespaces(buffer, start, end).toString(); + if (value.equals("0") || value.equalsIgnoreCase("'No'")) { + value = "false"; + } else if (value.equals("1") || value.equalsIgnoreCase("'Yes'")) { + value = "true"; + } else if (value.equalsIgnoreCase("Null") || value.equals("''")) { + value = "Null"; + } else { + throw new SQLException("Unexpected boolean value \"" + value + "\" at position " + start + " in:\n" + line); + } + buffer.replace(start, end, value); + n++; } - buffer.replace(p, p+1, String.valueOf(value)); + end = CharSequences.skipTrailingWhitespaces(buffer, 0, start - 1); } return buffer.toString(); } @@ -412,6 +438,7 @@ public final class EPSGDataFormatter ext /** * Removes the useless "E0" exponents after floating point numbers. */ + @SuppressWarnings("null") private static String removeUselessExponents(String line) { StringBuilder cleaned = null; final Matcher matcher = uselessExponentPattern.matcher(line); Copied: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java (from r1740146, sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java) URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java?p2=sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java&p1=sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java&r1=1740146&r2=1740152&rev=1740152&view=diff ============================================================================== --- sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/CoordinateOperationFinderTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -750,7 +750,7 @@ public final strictfp class CoordinateOp @Test @DependsOnMethod("testProjected4D_to_2D") public void testSpatioTemporalToDerived() throws FactoryException, TransformException { - final Map<String,Object> properties = new HashMap<>(); + final Map<String,Object> properties = new HashMap<String,Object>(); properties.put(DerivedCRS.NAME_KEY, "Display"); properties.put("conversion.name", "Display to WGS84"); Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperationTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperationTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperationTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConcatenatedOperationTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -16,16 +16,26 @@ */ package org.apache.sis.referencing.operation; +import java.util.Collections; import javax.xml.bind.JAXBException; +import org.opengis.util.FactoryException; import org.opengis.referencing.crs.GeodeticCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.CoordinateOperation; +import org.opengis.referencing.operation.MathTransformFactory; +import org.opengis.referencing.operation.NoninvertibleTransformException; +import org.apache.sis.referencing.operation.transform.EllipsoidToCentricTransform; +import org.apache.sis.referencing.datum.HardCodedDatum; +import org.apache.sis.referencing.crs.HardCodedCRS; +import org.apache.sis.internal.system.DefaultFactories; +import org.apache.sis.io.wkt.Convention; + import org.opengis.test.Validators; import org.apache.sis.test.DependsOn; import org.apache.sis.test.XMLTestCase; import org.junit.Test; -import static org.opengis.test.Assert.*; +import static org.apache.sis.test.MetadataAssert.*; import static org.apache.sis.test.TestUtilities.getSingleton; @@ -48,9 +58,80 @@ public final strictfp class DefaultConca private static final String XML_FILE = "ConcatenatedOperation.xml"; /** + * Creates a “Tokyo to JGD2000” transformation. + * + * @see DefaultTransformationTest#createGeocentricTranslation() + */ + private static DefaultConcatenatedOperation createGeocentricTranslation() throws FactoryException, NoninvertibleTransformException { + final MathTransformFactory mtFactory = DefaultFactories.forBuildin(MathTransformFactory.class); + final DefaultTransformation op = DefaultTransformationTest.createGeocentricTranslation(); + + final DefaultConversion before = new DefaultConversion( + Collections.singletonMap(DefaultConversion.NAME_KEY, "Geographic to geocentric"), + HardCodedCRS.TOKYO, // SourceCRS + op.getSourceCRS(), // TargetCRS + null, // InterpolationCRS + DefaultOperationMethodTest.create("Geographic/geocentric conversions", "9602", "EPSG guidance note #7-2", 3), + EllipsoidToCentricTransform.createGeodeticConversion(mtFactory, HardCodedDatum.TOKYO.getEllipsoid(), true)); + + final DefaultConversion after = new DefaultConversion( + Collections.singletonMap(DefaultConversion.NAME_KEY, "Geocentric to geographic"), + op.getTargetCRS(), // SourceCRS + HardCodedCRS.JGD2000, // TargetCRS + null, // InterpolationCRS + DefaultOperationMethodTest.create("Geographic/geocentric conversions", "9602", "EPSG guidance note #7-2", 3), + EllipsoidToCentricTransform.createGeodeticConversion(mtFactory, HardCodedDatum.JGD2000.getEllipsoid(), true).inverse()); + + return new DefaultConcatenatedOperation( + Collections.singletonMap(DefaultConversion.NAME_KEY, "Tokyo to JGD2000"), + new AbstractSingleOperation[] {before, op, after}, mtFactory); + } + + /** + * Tests WKT formatting. The WKT format used here is not defined in OGC/ISO standards; + * this is a SIS-specific extension. + * + * @throws FactoryException if an error occurred while creating the test operation. + * @throws NoninvertibleTransformException if an error occurred while creating the test operation. + */ + @Test + public void testWKT() throws FactoryException, NoninvertibleTransformException { + final DefaultConcatenatedOperation op = createGeocentricTranslation(); + assertWktEquals(Convention.WKT2_SIMPLIFIED, // Pseudo-WKT actually. + "ConcatenatedOperation[“Tokyo to JGD2000”,\n" + + " SourceCRS[GeodeticCRS[“Tokyo”,\n" + + " Datum[“Tokyo 1918”,\n" + + " Ellipsoid[“Bessel 1841”, 6377397.155, 299.1528128]],\n" + + " CS[ellipsoidal, 3],\n" + + " Axis[“Longitude (L)”, east, Unit[“degree”, 0.017453292519943295]],\n" + + " Axis[“Latitude (B)”, north, Unit[“degree”, 0.017453292519943295]],\n" + + " Axis[“Ellipsoidal height (h)”, up, Unit[“metre”, 1]]]],\n" + + " TargetCRS[GeodeticCRS[“JGD2000”,\n" + + " Datum[“Japanese Geodetic Datum 2000”,\n" + + " Ellipsoid[“GRS 1980”, 6378137.0, 298.257222101]],\n" + + " CS[ellipsoidal, 3],\n" + + " Axis[“Longitude (L)”, east, Unit[“degree”, 0.017453292519943295]],\n" + + " Axis[“Latitude (B)”, north, Unit[“degree”, 0.017453292519943295]],\n" + + " Axis[“Ellipsoidal height (h)”, up, Unit[“metre”, 1]]]],\n" + + " CoordinateOperationStep[“Geographic to geocentric”,\n" + + " Method[“Geographic/geocentric conversions”],\n" + + " Parameter[“semi_major”, 6377397.155, Unit[“metre”, 1]],\n" + + " Parameter[“semi_minor”, 6356078.962818189, Unit[“metre”, 1]]],\n" + + " CoordinateOperationStep[“Tokyo to JGD2000 (GSI)”,\n" + + " Method[“Geocentric translations”],\n" + + " Parameter[“X-axis translation”, -146.414],\n" + + " Parameter[“Y-axis translation”, 507.337],\n" + + " Parameter[“Z-axis translation”, 680.507]],\n" + + " CoordinateOperationStep[“Geocentric to geographic”,\n" + + " Method[“Geographic/geocentric conversions”],\n" + + " Parameter[“semi_major”, 6378137.0, Unit[“metre”, 1]],\n" + + " Parameter[“semi_minor”, 6356752.314140356, Unit[“metre”, 1]]]]", op); + } + + /** * Tests (un)marshalling of a concatenated operation. * - * @throws JAXBException If an error occurred during (un)marshalling. + * @throws JAXBException if an error occurred during (un)marshalling. */ @Test public void testXML() throws JAXBException { Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConversionTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConversionTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConversionTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultConversionTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -23,6 +23,7 @@ import org.opengis.util.FactoryException import org.opengis.parameter.ParameterValue; import org.opengis.parameter.ParameterValueGroup; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.opengis.referencing.crs.GeodeticCRS; import org.opengis.referencing.crs.GeographicCRS; import org.opengis.referencing.crs.TemporalCRS; import org.opengis.referencing.cs.EllipsoidalCS; @@ -96,7 +97,7 @@ public final strictfp class DefaultConve */ private static GeographicCRS changeCS(final CoordinateReferenceSystem crs, final EllipsoidalCS cs) { return new DefaultGeographicCRS(Collections.singletonMap(DefaultGeographicCRS.NAME_KEY, - crs.getName()), ((GeographicCRS) crs).getDatum(), cs); + crs.getName()), ((GeodeticCRS) crs).getDatum(), cs); } /** @@ -167,6 +168,7 @@ public final strictfp class DefaultConve * Asserts that at least some of the properties of the given {@code op} instance have the expected values * for an instance created by {@link #createLongitudeRotation(GeographicCRS, GeographicCRS)}. */ + @SuppressWarnings("SuspiciousToArrayCall") private static void verifyProperties(final DefaultConversion op, final boolean swapSourceAxes) { assertEquals("name", "Paris to Greenwich", op.getName().getCode()); assertEquals("sourceCRS", "NTF (Paris)", op.getSourceCRS().getName().getCode()); Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultTransformationTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultTransformationTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultTransformationTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/DefaultTransformationTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -69,7 +69,7 @@ public final strictfp class DefaultTrans /** * Creates a “Tokyo to JGD2000 (GSI)” transformation. */ - private static DefaultTransformation createGeocentricTranslation() { + static DefaultTransformation createGeocentricTranslation() { /* * The following code fills the parameter values AND creates itself the MathTransform instance * (indirectly, through the matrix). The later step is normally not our business, since we are @@ -108,6 +108,7 @@ public final strictfp class DefaultTrans * Asserts that at least some of the properties of the given {@code op} instance have the expected values * for an instance created by {@link #createGeocentricTranslation()}. */ + @SuppressWarnings("SuspiciousToArrayCall") private static void verifyProperties(final DefaultTransformation op) { assertEquals("name", "Tokyo to JGD2000 (GSI)", op.getName().getCode()); assertEquals("sourceCRS", "Tokyo 1918", op.getSourceCRS().getName().getCode()); @@ -177,9 +178,9 @@ public final strictfp class DefaultTrans " AXIS[“(Z)”, geocentricZ, ORDER[3]],\n" + " LENGTHUNIT[“metre”, 1]]],\n" + " METHOD[“Geocentric translations”, ID[“EPSG”, 1031]],\n" + - " PARAMETER[“X-axis translation”, -146.414, ID[“EPSG”, 8605]],\n" + - " PARAMETER[“Y-axis translation”, 507.337, ID[“EPSG”, 8606]],\n" + - " PARAMETER[“Z-axis translation”, 680.507, ID[“EPSG”, 8607]]]", op); + " PARAMETER[“X-axis translation”, -146.414, ID[“EPSG”, 8605]],\n" + + " PARAMETER[“Y-axis translation”, 507.337, ID[“EPSG”, 8606]],\n" + + " PARAMETER[“Z-axis translation”, 680.507, ID[“EPSG”, 8607]]]", op); assertWktEquals(Convention.WKT2_SIMPLIFIED, "CoordinateOperation[“Tokyo to JGD2000 (GSI)”,\n" + @@ -200,9 +201,9 @@ public final strictfp class DefaultTrans " Axis[“(Z)”, geocentricZ],\n" + " Unit[“metre”, 1]]],\n" + " Method[“Geocentric translations”],\n" + - " Parameter[“X-axis translation”, -146.414],\n" + - " Parameter[“Y-axis translation”, 507.337],\n" + - " Parameter[“Z-axis translation”, 680.507]]", op); + " Parameter[“X-axis translation”, -146.414],\n" + + " Parameter[“Y-axis translation”, 507.337],\n" + + " Parameter[“Z-axis translation”, 680.507]]", op); } /** Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/MatricesTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/MatricesTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/MatricesTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/MatricesTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -39,7 +39,7 @@ import static org.opengis.referencing.cs * * @author Martin Desruisseaux (Geomatys) * @since 0.4 - * @version 0.4 + * @version 0.7 * @module */ @DependsOn({ @@ -354,16 +354,49 @@ public final strictfp class MatricesTest }); matrix = Matrices.createPassThrough(2, matrix, 1); assertEquals(Matrices.create(6, 7, new double[] { - 1, 0, 0, 0, 0, 0, 0, // Dimension added - 0, 1, 0, 0, 0, 0, 0, // Dimension added - 0, 0, 2, 0, 3, 0, 8, // Sub-matrix, row 0 - 0, 0, 0, 4, 7, 0, 5, // Sub-matrix, row 1 - 0, 0, 0, 0, 0, 1, 0, // Dimension added - 0, 0, 0, 0, 0, 0, 1 // Last sub-matrix row + 1, 0, 0, 0, 0, 0, 0, // Dimension added + 0, 1, 0, 0, 0, 0, 0, // Dimension added + 0, 0, 2, 0, 3, 0, 8, // Sub-matrix, row 0 + 0, 0, 0, 4, 7, 0, 5, // Sub-matrix, row 1 + 0, 0, 0, 0, 0, 1, 0, // Dimension added + 0, 0, 0, 0, 0, 0, 1 // Last sub-matrix row }), matrix); } /** + * Tests {@link Matrices#resizeAffine(Matrix, int, int)}. + */ + @Test + public void testResizeAffine() { + // Add dimensions + MatrixSIS matrix = Matrices.create(3, 4, new double[] { + 2, 0, 3, 8, + 0, 4, 7, 5, + 0, 0, 0, 1 + }); + assertEquals(Matrices.create(5, 6, new double[] { + 2, 0, 3, 0, 0, 8, + 0, 4, 7, 0, 0, 5, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1 + }), Matrices.resizeAffine(matrix, 5, 6)); + + // Remove dimensions + matrix = Matrices.create(4, 5, new double[] { + 1, 2, 7, 8, 9, + 3, 4, 6, 7, 8, + 9, 8, 7, 6, 5, + 4, 3, 2, 1, -1 + }); + assertEquals(Matrices.create(3, 3, new double[] { + 1, 2, 9, + 3, 4, 8, + 4, 3, -1 + }), Matrices.resizeAffine(matrix, 3, 3)); + } + + /** * Tests {@link MatrixSIS#removeRows(int, int)} */ @Test Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/NonSquareMatrixTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/NonSquareMatrixTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/NonSquareMatrixTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/matrix/NonSquareMatrixTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -17,14 +17,13 @@ package org.apache.sis.referencing.operation.matrix; import java.util.Random; -import org.opengis.test.Assert; import org.apache.sis.test.DependsOn; import org.apache.sis.test.TestUtilities; import org.junit.AfterClass; import org.junit.Test; import static java.lang.Double.NaN; -import static org.junit.Assert.*; +import static org.opengis.test.Assert.*; /** @@ -103,12 +102,12 @@ public final strictfp class NonSquareMat 0, 0, 1 }); MatrixSIS inverse = m.inverse(); - Assert.assertMatrixEquals("Inverse of non-square matrix.", new NonSquareMatrix(3, 5, new double[] { + assertMatrixEquals("Inverse of non-square matrix.", new NonSquareMatrix(3, 5, new double[] { 0.5, 0, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 1}), inverse, STRICT); - Assert.assertMatrixEquals("Back to original.", new NonSquareMatrix(5, 3, new double[] { + assertMatrixEquals("Back to original.", new NonSquareMatrix(5, 3, new double[] { 2, 0, 0, 0, 0, NaN, 0, 4, 0, Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransformTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransformTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransformTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/CoordinateSystemTransformTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -17,19 +17,15 @@ package org.apache.sis.referencing.operation.transform; import javax.measure.unit.SI; -import javax.measure.unit.Unit; import org.opengis.util.FactoryException; import org.opengis.referencing.cs.CoordinateSystem; -import org.opengis.referencing.cs.CoordinateSystemAxis; import org.opengis.referencing.cs.SphericalCS; import org.opengis.referencing.operation.MathTransformFactory; import org.opengis.referencing.operation.TransformException; import org.apache.sis.referencing.crs.DefaultGeocentricCRS; import org.apache.sis.referencing.cs.CoordinateSystems; import org.apache.sis.referencing.cs.AxesConvention; -import org.apache.sis.referencing.cs.AxisFilter; import org.apache.sis.referencing.CommonCRS; -import org.apache.sis.measure.Units; // Test dependencies import org.opengis.test.referencing.TransformTestCase; @@ -40,10 +36,6 @@ import org.junit.BeforeClass; import org.junit.AfterClass; import org.junit.Test; -// Branch-dependent imports -import org.opengis.referencing.cs.AxisDirection; - - /** * Tests the {@link CoordinateSystemTransform} static factory method. @@ -92,29 +84,7 @@ public final strictfp class CoordinateSy * Returns the given coordinate system but with linear axes in centimetres instead of metres. */ private static CoordinateSystem toCentimetres(final CoordinateSystem cs) { - return CoordinateSystems.replaceAxes(cs, new AxisFilter() { - @Override public Unit<?> getUnitReplacement(CoordinateSystemAxis axis, Unit<?> unit) { - return Units.isLinear(unit) ? SI.CENTIMETRE : unit; - } - @Override public Unit<?> getUnitReplacement(Unit<?> unit) { - return Units.isLinear(unit) ? SI.CENTIMETRE : unit; - } - - @Override - public boolean accept(CoordinateSystemAxis axis) { - return true; - } - - @Override - public AxisDirection getDirectionReplacement(CoordinateSystemAxis axis, AxisDirection direction) { - return direction; - } - - @Override - public AxisDirection getDirectionReplacement(AxisDirection direction) { - return direction; - } - }); + return CoordinateSystems.replaceLinearUnit(cs, SI.CENTIMETRE); } /** Modified: sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactoryTest.java URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactoryTest.java?rev=1740152&r1=1740151&r2=1740152&view=diff ============================================================================== --- sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactoryTest.java [UTF-8] (original) +++ sis/branches/JDK6/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactoryTest.java [UTF-8] Wed Apr 20 14:53:31 2016 @@ -62,7 +62,7 @@ import static org.opengis.test.Assert.*; * @module */ @DependsOn({ - org.apache.sis.internal.referencing.provider.AllProvidersTest.class, + org.apache.sis.internal.referencing.provider.ProvidersTest.class, OperationMethodSetTest.class }) public final strictfp class DefaultMathTransformFactoryTest extends TestCase {
