This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 5967341a84747e75423892fe746fb6399e54ac58 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Thu Nov 10 20:21:27 2022 +0100 Update for a change in GeoAPI: - New method: `ParameterDescriptor.getValueType()`. https://github.com/opengeospatial/geoapi/issues/76 --- .../main/java/org/apache/sis/feature/Features.java | 6 ++-- .../jaxb/metadata/replace/ServiceParameter.java | 3 +- .../apache/sis/util/iso/DefaultNameFactory.java | 1 + .../org/apache/sis/util/iso/DefaultTypeName.java | 37 +++++++++++----------- .../main/java/org/apache/sis/util/iso/Names.java | 22 +++++++++++-- .../sis/parameter/DefaultParameterDescriptor.java | 18 +++++++++-- .../org/apache/sis/parameter/ParametersTest.java | 4 ++- 7 files changed, 63 insertions(+), 28 deletions(-) diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/Features.java b/core/sis-feature/src/main/java/org/apache/sis/feature/Features.java index 0ecfd7ccff..86e00cb23d 100644 --- a/core/sis-feature/src/main/java/org/apache/sis/feature/Features.java +++ b/core/sis-feature/src/main/java/org/apache/sis/feature/Features.java @@ -20,7 +20,6 @@ import java.util.Map; import java.util.Optional; import java.util.IdentityHashMap; import org.opengis.util.GenericName; -import org.opengis.util.NameFactory; import org.opengis.util.InternationalString; import org.opengis.metadata.maintenance.ScopeCode; import org.opengis.metadata.quality.ConformanceResult; @@ -28,8 +27,8 @@ import org.opengis.metadata.quality.DataQuality; import org.opengis.metadata.quality.Element; import org.opengis.metadata.quality.Result; import org.apache.sis.util.Static; +import org.apache.sis.util.iso.Names; import org.apache.sis.util.iso.DefaultNameFactory; -import org.apache.sis.internal.system.DefaultFactories; import org.apache.sis.internal.feature.Resources; // Branch-dependent imports @@ -244,8 +243,7 @@ public final class Features extends Static { // Tested first because this is the main interest for this method. return DefaultAssociationRole.getValueTypeName((FeatureAssociationRole) property); } else if (property instanceof AttributeType<?>) { - final DefaultNameFactory factory = DefaultFactories.forBuildin(NameFactory.class, DefaultNameFactory.class); - return factory.toTypeName(((AttributeType<?>) property).getValueClass()); + return Names.createTypeName(((AttributeType<?>) property).getValueClass()); } else if (property instanceof Operation) { final IdentifiedType result = ((Operation) property).getResult(); if (result != null) { diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java index f3187366cc..7613231284 100644 --- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java +++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java @@ -293,9 +293,10 @@ public final class ServiceParameter extends SimpleIdentifiedObject implements Pa * Note that there is not setter method, since we expect the same information * to be provided in the {@link #name} attribute type. */ + @Override @XmlElement(name = "valueType", namespace = LegacyNamespaces.SRV) @XmlJavaTypeAdapter(GO_GenericName.class) // Not in package-info because shall not be applied to getLegacyName(). - final TypeName getValueType() { + public final TypeName getValueType() { if (memberName != null && FilterByVersion.LEGACY_METADATA.accept()) { return memberName.getAttributeType(); } diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameFactory.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameFactory.java index 92fcc67b5d..a7557d787a 100644 --- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameFactory.java +++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameFactory.java @@ -419,6 +419,7 @@ public class DefaultNameFactory extends AbstractFactory implements NameFactory { * * @see DefaultTypeName#toClass() * @see Names#toClass(TypeName) + * @see Names#createTypeName(Class) * * @since 0.5 */ diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java index c065bd66b3..deaca620e4 100644 --- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java +++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultTypeName.java @@ -34,10 +34,11 @@ import org.apache.sis.util.UnknownNameException; * * <h2>Mapping Java classes to type names</h2> * It is sometime useful to establish a mapping between {@link Class} and {@code TypeName}. - * When an UML identifier from an OGC standard exists for a given {@code Class}, Apache SIS - * uses that identifier prefixed by the {@code "OGC"} namespace. + * When an UML identifier from an OGC standard exists for a given {@code Class}, + * Apache SIS uses that identifier prefixed by the {@code "OGC"} namespace. * Note that this is <strong>not</strong> a standard practice. - * A more standard practice would be to use the <cite>definition identifiers in OGC namespace</cite> + * A more standard practice would be to use the + * <a href="https://schemas.opengis.net/definitions/1.1.0/dataType.xml">data type URN standard values</a> * (third column in the table below), but the set of data type identifiers defined by OGC is currently * small and is sometime not an exact match. * @@ -45,68 +46,68 @@ import org.apache.sis.util.UnknownNameException; * <caption>Mapping from Java classes to type names (non-exhaustive list)</caption> * <tr> * <th>Java class</th> - * <th>Type name (unofficial)</th> - * <th>Definition identifier in OGC namespace</th> - * <th>Recommended URL in Web Processing Services</th> + * <th>Scoped type name</th> + * <th class="sep">Data type URN standard values</th> + * <th>URL in Web Services</th> * </tr><tr> * <td>{@link org.opengis.util.InternationalString}</td> * <td>{@code OGC:FreeText}</td> - * <td></td> + * <td class="sep"></td> * <td></td> * </tr><tr> * <td>{@link java.lang.String}</td> * <td>{@code OGC:CharacterString}</td> - * <td>{@code urn:ogc:def:dataType:OGC::string}</td> + * <td class="sep">{@code urn:ogc:def:dataType:OGC::string}</td> * <td>{@code http://www.w3.org/2001/XMLSchema#string}</td> * </tr><tr> * <td>{@link java.net.URI}</td> * <td>{@code OGC:URI}</td> - * <td>{@code urn:ogc:def:dataType:OGC::anyURI}</td> + * <td class="sep">{@code urn:ogc:def:dataType:OGC::anyURI}</td> * <td></td> * </tr><tr> * <td>{@link java.lang.Boolean}</td> * <td>{@code OGC:Boolean}</td> - * <td>{@code urn:ogc:def:dataType:OGC::boolean}</td> + * <td class="sep">{@code urn:ogc:def:dataType:OGC::boolean}</td> * <td>{@code http://www.w3.org/2001/XMLSchema#boolean}</td> * </tr><tr> * <td>{@link java.lang.Integer}</td> * <td>{@code OGC:Integer}</td> - * <td>{@code urn:ogc:def:dataType:OGC::nonNegativeInteger}</td> + * <td class="sep">{@code urn:ogc:def:dataType:OGC::nonNegativeInteger}</td> * <td>{@code http://www.w3.org/2001/XMLSchema#integer}</td> * </tr><tr> * <td>{@link java.math.BigDecimal}</td> * <td>{@code OGC:Decimal}</td> - * <td></td> + * <td class="sep"></td> * <td>{@code http://www.w3.org/2001/XMLSchema#decimal}</td> * </tr><tr> * <td>{@link java.lang.Double}</td> * <td>{@code OGC:Real}</td> - * <td></td> + * <td class="sep"></td> * <td>{@code http://www.w3.org/2001/XMLSchema#double}</td> * </tr><tr> * <td>{@link java.lang.Float}</td> * <td>{@code OGC:Real}</td> - * <td></td> + * <td class="sep"></td> * <td>{@code http://www.w3.org/2001/XMLSchema#float}</td> * </tr><tr> * <td>{@link java.util.Date}</td> * <td>{@code OGC:DateTime}</td> - * <td></td> + * <td class="sep"></td> * <td></td> * </tr><tr> * <td>{@link java.util.Locale}</td> * <td>{@code OGC:PT_Locale}</td> - * <td></td> + * <td class="sep"></td> * <td></td> * </tr><tr> * <td>{@link org.opengis.metadata.Metadata}</td> * <td>{@code OGC:MD_Metadata}</td> - * <td></td> + * <td class="sep"></td> * <td></td> * </tr><tr> * <td>Unknown Java class</td> * <td>{@code class:}<the class name></td> - * <td></td> + * <td class="sep"></td> * <td></td> * </tr> * </table> diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java index 8fc8d6b6bc..cdce2bb011 100644 --- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java +++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/Names.java @@ -72,7 +72,7 @@ import static org.apache.sis.util.ArgumentChecks.ensureNonNull; * </table></blockquote> * * @author Martin Desruisseaux (Geomatys) - * @version 1.0 + * @version 1.3 * * @see DefaultNameFactory * @see DefaultNameSpace @@ -250,6 +250,24 @@ public final class Names extends Static { return factory.createTypeName(createNameSpace(factory, namespace, separator), localPart); } + /** + * Suggests a type name for the given class. Apache SIS provides a mapping between {@code Class} + * and {@code TypeName} objects as documented in the {@link DefaultTypeName} javadoc. + * This is the converse of {@link #toClass(TypeName)} method. + * + * @param valueClass the type of values, used for inferring a {@link TypeName} instance. + * @return a type name for values of the given type. + * + * @see DefaultNameFactory#toTypeName(Class) + * + * @since 1.3 + */ + public static TypeName createTypeName(final Class<?> valueClass) { + ensureNonNull("valueClass", valueClass); + final DefaultNameFactory factory = DefaultFactories.forBuildin(NameFactory.class, DefaultNameFactory.class); + return factory.toTypeName(valueClass); // SIS-specific method. + } + /** * Creates a member name for values of the given class. A {@link TypeName} will be inferred * from the given {@code valueClass} as documented in the {@link DefaultTypeName} javadoc. @@ -353,8 +371,8 @@ public final class Names extends Static { * @throws UnknownNameException if a mapping from the given name to a Java class was expected to exist * (typically because of the {@linkplain DefaultTypeName#scope() scope}) but the operation failed. * + * @see #createTypeName(Class) * @see DefaultTypeName#toClass() - * @see DefaultNameFactory#toTypeName(Class) * * @since 0.5 */ diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java index da4b0e09fa..e73d118369 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/DefaultParameterDescriptor.java @@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlRootElement; import javax.measure.Unit; import org.opengis.util.CodeList; +import org.opengis.util.TypeName; import org.opengis.parameter.ParameterValue; import org.opengis.parameter.ParameterDescriptor; import org.apache.sis.util.Classes; @@ -31,6 +32,7 @@ import org.apache.sis.util.Numbers; import org.apache.sis.util.Utilities; import org.apache.sis.util.ComparisonMode; import org.apache.sis.util.resources.Errors; +import org.apache.sis.util.iso.Names; import org.apache.sis.measure.Range; import org.apache.sis.measure.MeasurementRange; import org.apache.sis.internal.util.Numerics; @@ -65,7 +67,7 @@ import static org.apache.sis.util.ArgumentChecks.ensureCanCast; * * @author Martin Desruisseaux (IRD, Geomatys) * @author Johann Sorel (Geomatys) - * @version 0.8 + * @version 1.3 * * @param <T> the type of elements to be returned by {@link DefaultParameterValue#getValue()}. * @@ -313,7 +315,19 @@ public class DefaultParameterDescriptor<T> extends AbstractParameterDescriptor i } /** - * Returns the class that describe the type of the parameter. + * Returns the name that describes the type of parameter values. + * + * @return value type of the parameter. + * + * @since 1.3 + */ + @Override + public final TypeName getValueType() { + return Names.createTypeName(valueClass); + } + + /** + * Returns the class that describes the type of parameter values. * * @return the parameter value class. */ diff --git a/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java b/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java index ed1c8e9a49..fdb16740a8 100644 --- a/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java +++ b/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java @@ -25,6 +25,7 @@ import org.opengis.parameter.ParameterDirection; import org.opengis.parameter.ParameterValue; import org.opengis.parameter.ParameterValueGroup; import org.opengis.metadata.Identifier; +import org.opengis.util.TypeName; import org.opengis.util.GenericName; import org.opengis.util.InternationalString; import org.apache.sis.measure.Range; @@ -43,7 +44,7 @@ import static org.junit.Assert.*; * Tests the static methods in the {@link Parameters} class. * * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.3 * @since 0.4 * @module */ @@ -123,6 +124,7 @@ public final strictfp class ParametersTest extends TestCase { @Override public ParameterDirection getDirection() {return descriptor.getDirection();} @Override public int getMinimumOccurs() {return descriptor.getMinimumOccurs();} @Override public int getMaximumOccurs() {return descriptor.getMaximumOccurs();} + @Override public TypeName getValueType() {return descriptor.getValueType();} @Override public Class<T> getValueClass() {return descriptor.getValueClass();} @Override public Set<T> getValidValues() {return descriptor.getValidValues();} @Override public Comparable<T> getMinimumValue() {return descriptor.getMinimumValue();}