Author: desruisseaux
Date: Fri Mar 6 15:16:29 2015
New Revision: 1664652
URL: http://svn.apache.org/r1664652
Log:
Added JUnit tests for MapProjectionParameters.
Added:
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java
(with props)
Modified:
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionDescriptor.java
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterBuilder.java
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
Modified:
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java?rev=1664652&r1=1664651&r2=1664652&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptorGroup.java
[UTF-8] Fri Mar 6 15:16:29 2015
@@ -154,7 +154,24 @@ public class DefaultParameterDescriptorG
{
super(properties, minimumOccurs, maximumOccurs);
ArgumentChecks.ensureNonNull("parameters", parameters);
- parameters = parameters.clone();
+ verifyNames(properties, parameters = parameters.clone());
+ descriptors = asList(parameters);
+ }
+
+ /**
+ * Creates a mandatory parameter group without cloning the given array.
This constructor shall
+ * be used only when we know that the given array is already a copy of the
user-provided array.
+ */
+ DefaultParameterDescriptorGroup(final Map<String,?> properties, final
GeneralParameterDescriptor[] parameters) {
+ super(properties, 1, 1);
+ verifyNames(properties, parameters.clone());
+ descriptors = asList(parameters);
+ }
+
+ /**
+ * Ensures that the given name array does not contain duplicate values.
+ */
+ private static void verifyNames(final Map<String,?> properties, final
GeneralParameterDescriptor[] parameters) {
for (int i=0; i<parameters.length; i++) {
ArgumentChecks.ensureNonNullElement("parameters", i, parameters);
final String name = parameters[i].getName().getCode();
@@ -166,7 +183,6 @@ public class DefaultParameterDescriptorG
}
}
}
- descriptors = asList(parameters);
}
/**
Modified:
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionDescriptor.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionDescriptor.java?rev=1664652&r1=1664651&r2=1664652&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionDescriptor.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/MapProjectionDescriptor.java
[UTF-8] Fri Mar 6 15:16:29 2015
@@ -42,7 +42,7 @@ import org.apache.sis.util.Workaround;
* {@code "standard_parallel_1"} and {@code "standard_parallel_2"}</li>
* </ul>
*
- * The main purpose of this class is to supported transparently the NetCDF
ways to express some parameter values.
+ * The main purpose of this class is to support transparently the NetCDF ways
to express some parameter values.
*
* @author Martin Desruisseaux (Geomatys)
* @since 0.6
@@ -93,7 +93,7 @@ final class MapProjectionDescriptor exte
* @param parameters The "real" parameters.
*/
MapProjectionDescriptor(final Map<String,?> properties, final
ParameterDescriptor<?>[] parameters) {
- super(properties, 1, 1, addAxisLength(parameters));
+ super(properties, addAxisLengths(parameters));
boolean hasP1 = false;
boolean hasP2 = false;
for (final ParameterDescriptor<?> param : parameters) {
@@ -119,7 +119,7 @@ final class MapProjectionDescriptor exte
* ("Relax constraint on placement of this()/super() call in
constructors").
*/
@Workaround(library="JDK", version="1.7")
- private static ParameterDescriptor<?>[] addAxisLength(final
ParameterDescriptor<?>[] parameters) {
+ private static ParameterDescriptor<?>[] addAxisLengths(final
ParameterDescriptor<?>[] parameters) {
final ParameterDescriptor<?>[] ext = new
ParameterDescriptor<?>[parameters.length + 2];
ext[0] = MapProjection.SEMI_MAJOR;
ext[1] = MapProjection.SEMI_MINOR;
Modified:
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterBuilder.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterBuilder.java?rev=1664652&r1=1664651&r2=1664652&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterBuilder.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/parameter/ParameterBuilder.java
[UTF-8] Fri Mar 6 15:16:29 2015
@@ -369,6 +369,11 @@ public class ParameterBuilder extends Bu
* <td>Array of 1 or 2 elements mapped to {@code
"standard_parallel_1"} and {@code "standard_parallel_2"}.</td></tr>
* </table>
*
+ * <div class="note"><b>Note:</b>
+ * When the {@code "earth_radius"} parameter is read, its value is the
+ * {@linkplain
org.apache.sis.referencing.datum.DefaultEllipsoid#getAuthalicRadius() authalic
radius}
+ * computed from the semi-major and semi-minor axis lengths.</div>
+ *
* Map projection parameter groups always have a {@linkplain
DefaultParameterDescriptorGroup#getMinimumOccurs()
* minimum} and {@linkplain
DefaultParameterDescriptorGroup#getMaximumOccurs() maximum occurrence} of 1,
* regardless the value given to {@link #setRequired(boolean)}.
Added:
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java?rev=1664652&view=auto
==============================================================================
---
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java
(added)
+++
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java
[UTF-8] Fri Mar 6 15:16:29 2015
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.parameter;
+
+import java.util.Map;
+import java.util.Collections;
+import org.opengis.parameter.ParameterDescriptor;
+import org.opengis.parameter.ParameterValue;
+import org.opengis.parameter.ParameterValueGroup;
+import org.apache.sis.test.DependsOn;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Tests the {@link MapProjectionParameters} class.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @since 0.6
+ * @version 0.6
+ * @module
+ */
+@DependsOn(ParametersTest.class)
+public final strictfp class MapProjectionParametersTest extends TestCase {
+ /**
+ * Creates a map projection descriptor with semi-major/minor axis lengths
+ * and the given amount of standard parallels.
+ *
+ * @param numStandardParallels 1 or 2 for including the standard parallels.
+ */
+ @SuppressWarnings("fallthrough")
+ private static MapProjectionDescriptor createDescriptor(final int
numStandardParallels) {
+ final ParameterDescriptor<?>[] parameters = new
ParameterDescriptor<?>[numStandardParallels + 1];
+ switch (numStandardParallels) {
+ default: throw new IllegalArgumentException();
+ case 2: parameters[2] = parameter("standard_parallel_2"); //
Fall through
+ case 1: parameters[1] = parameter("standard_parallel_1"); //
Fall through
+ case 0: parameters[0] = parameter("central_meridian");
+ break;
+ }
+ return new MapProjectionDescriptor(name("Lambert Conic Conformal
(2SP)"), parameters);
+ }
+
+ /** Creates a parameter of the given name. */
+ private static DefaultParameterDescriptor<?> parameter(final String name) {
+ return new DefaultParameterDescriptor<>(name(name), 1, 1,
Double.class, null, null, null);
+ }
+
+ /** Returns properties map for an object of the given name. */
+ private static Map<String,String> name(final String name) {
+ return Collections.singletonMap(MapProjectionDescriptor.NAME_KEY,
name);
+ }
+
+ /**
+ * Tests the {@code "earth_radius"} dynamic parameter.
+ */
+ @Test
+ public void testEarthRadius() {
+ final MapProjectionDescriptor descriptor = createDescriptor(0);
+ final ParameterValueGroup parameters = descriptor.createValue();
+
+ parameters.parameter("semi_major").setValue(6378137.000); // WGS84
+ parameters.parameter("semi_minor").setValue(6356752.314);
+ assertEquals(6371007,
parameters.parameter("earth_radius").doubleValue(), 0.5); // Authalic radius.
+ assertEquals(6378137, parameters.parameter("semi_major")
.doubleValue(), 0.5);
+ assertEquals(6356752, parameters.parameter("semi_minor")
.doubleValue(), 0.5);
+
+ parameters.parameter("earth_radius").setValue(6371000);
+ assertEquals(6371000,
parameters.parameter("earth_radius").doubleValue(), 0.0);
+ assertEquals(6371000, parameters.parameter("semi_major")
.doubleValue(), 0.0);
+ assertEquals(6371000, parameters.parameter("semi_minor")
.doubleValue(), 0.0);
+ }
+
+ /**
+ * Tests the {@code "inverse_flattening"} dynamic parameter.
+ */
+ @Test
+ public void testInverseFlattening() {
+ final MapProjectionDescriptor descriptor = createDescriptor(0);
+ final ParameterValueGroup parameters = descriptor.createValue();
+
+ parameters.parameter("semi_major").setValue(6378206.4); // Clarke 1866
+ parameters.parameter("semi_minor").setValue(6356583.8);
+ assertEquals(294.97870,
parameters.parameter("inverse_flattening").doubleValue(), 0.00001);
+ assertEquals(6378206.4, parameters.parameter("semi_major")
.doubleValue(), 0.5);
+ assertEquals(6356583.8, parameters.parameter("semi_minor")
.doubleValue(), 0.5);
+
+ parameters.parameter("semi_major").setValue(6378137.000); // WGS84
+ parameters.parameter("inverse_flattening").setValue(298.257223563);
+ assertEquals(298.257,
parameters.parameter("inverse_flattening").doubleValue(), 0.001);
+ assertEquals(6378137, parameters.parameter("semi_major")
.doubleValue(), 0.5);
+ assertEquals(6356752, parameters.parameter("semi_minor")
.doubleValue(), 0.5);
+ }
+
+ /**
+ * Tests the inverse flattening dynamic parameter set after the semi-major
axis length.
+ * This method tests actually the capability to compute the semi-minor
axis length.
+ */
+ @Test
+ public void testSemiMinor() {
+ final MapProjectionDescriptor descriptor = createDescriptor(0);
+ final ParameterValueGroup parameters = descriptor.createValue();
+
+ parameters.parameter("semi_major").setValue(6378137.000); // WGS84
+ parameters.parameter("inverse_flattening").setValue(298.257223563);
+ assertEquals(298.257,
parameters.parameter("inverse_flattening").doubleValue(), 0.001);
+ assertEquals(6378137, parameters.parameter("semi_major")
.doubleValue(), 0.5);
+ assertEquals(6356752, parameters.parameter("semi_minor")
.doubleValue(), 0.5);
+ }
+
+ /**
+ * Tests the standard parallel dynamic parameter.
+ */
+ @Test
+ public void testStandardParallel() {
+ final MapProjectionDescriptor descriptor = createDescriptor(2);
+ final ParameterValueGroup parameters = descriptor.createValue();
+ final ParameterValue<?> p = parameters.parameter("standard_parallel"
);
+ final ParameterValue<?> p1 =
parameters.parameter("standard_parallel_1");
+ final ParameterValue<?> p2 =
parameters.parameter("standard_parallel_2");
+ assertSame(p, parameters.parameter("standard_parallel" ));
+ assertSame(p1, parameters.parameter("standard_parallel_1"));
+ assertSame(p2, parameters.parameter("standard_parallel_2"));
+
+ /* Empty */ assertArrayEquals(new double[] { },
p.doubleValueList(), 0.0);
+ p1.setValue(40); assertArrayEquals(new double[] {40 },
p.doubleValueList(), 0.0);
+ p2.setValue(60); assertArrayEquals(new double[] {40,60},
p.doubleValueList(), 0.0);
+
+ p.setValue(new double[] {30,40});
+ assertEquals(30, p1.doubleValue(), 0.0);
+ assertEquals(40, p2.doubleValue(), 0.0);
+
+ p.setValue(new double[] {45});
+ assertEquals(45, p1.doubleValue(), 0.0);
+ assertEquals(Double.NaN, p2.doubleValue(), 0.0);
+ }
+}
Propchange:
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/parameter/MapProjectionParametersTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Modified:
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java?rev=1664652&r1=1664651&r2=1664652&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
[UTF-8] Fri Mar 6 15:16:29 2015
@@ -78,6 +78,7 @@ import org.junit.BeforeClass;
org.apache.sis.parameter.MatrixParametersTest.class,
org.apache.sis.parameter.MatrixParametersAlphaNumTest.class,
org.apache.sis.parameter.TensorValuesTest.class,
+ org.apache.sis.parameter.MapProjectionParametersTest.class,
org.apache.sis.referencing.operation.DefaultFormulaTest.class,
org.apache.sis.referencing.operation.DefaultOperationMethodTest.class,