You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2014/02/19 23:43:55 UTC
svn commit: r1569944 - in /sis/branches/JDK6: ./
core/sis-metadata/src/main/java/org/apache/sis/metadata/
core/sis-metadata/src/test/java/org/apache/sis/metadata/
core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/
Author: desruisseaux
Date: Wed Feb 19 22:43:54 2014
New Revision: 1569944
URL: http://svn.apache.org/r1569944
Log:
Merge from the JDK7 branch.
Modified:
sis/branches/JDK6/ (props changed)
sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/MetadataTestCase.java
sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java
Propchange: sis/branches/JDK6/
------------------------------------------------------------------------------
Merged /sis/branches/JDK7:r1569917-1569943
Modified: sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java?rev=1569944&r1=1569943&r2=1569944&view=diff
==============================================================================
--- sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java [UTF-8] (original)
+++ sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java [UTF-8] Wed Feb 19 22:43:54 2014
@@ -130,12 +130,11 @@ public class MetadataStandard implements
*/
public static final MetadataStandard ISO_19123;
static {
- final String[] prefix = {"Default", "Abstract"};
final String[] acronyms = {"CoordinateSystem", "CS", "CoordinateReferenceSystem", "CRS"};
// If new StandardImplementation instances are added below, please update StandardImplementation.readResolve().
- ISO_19111 = new StandardImplementation("ISO 19111", "org.opengis.referencing.", "org.apache.sis.referencing.", prefix, acronyms);
- ISO_19115 = new StandardImplementation("ISO 19115", "org.opengis.metadata.", "org.apache.sis.metadata.iso.", prefix, null);
+ ISO_19111 = new StandardImplementation("ISO 19111", "org.opengis.referencing.", "org.apache.sis.referencing.", acronyms);
+ ISO_19115 = new StandardImplementation("ISO 19115", "org.opengis.metadata.", "org.apache.sis.metadata.iso.", null);
ISO_19119 = new MetadataStandard ("ISO 19119", "org.opengis.service.");
ISO_19123 = new MetadataStandard ("ISO 19123", "org.opengis.coverage.");
INSTANCES = new MetadataStandard[] {
Modified: sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java?rev=1569944&r1=1569943&r2=1569944&view=diff
==============================================================================
--- sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java [UTF-8] (original)
+++ sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java [UTF-8] Wed Feb 19 22:43:54 2014
@@ -18,6 +18,8 @@ package org.apache.sis.metadata;
import java.util.Map;
import java.util.IdentityHashMap;
+import org.opengis.annotation.Classifier;
+import org.opengis.annotation.Stereotype;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.logging.Logging;
@@ -43,12 +45,6 @@ final class StandardImplementation exten
private final String implementationPackage;
/**
- * The prefixes that implementation classes may have.
- * The most common prefixes should be first, since the prefixes will be tried in that order.
- */
- private final String[] prefix;
-
- /**
* The acronyms that implementation classes may have, or {@code null} if none. If non-null,
* then this array shall contain (<var>full text</var>, <var>acronym</var>) pairs. The full
* text shall appear to the end of the class name, otherwise it is not replaced. This is
@@ -77,20 +73,29 @@ final class StandardImplementation exten
* @param citation The title of the standard.
* @param interfacePackage The root package for metadata interfaces, with a trailing {@code '.'}.
* @param implementationPackage The root package for metadata implementations. with a trailing {@code '.'}.
- * @param prefix The prefix of implementation class. This array is not cloned.
* @param acronyms An array of (full text, acronyms) pairs. This array is not cloned.
*/
StandardImplementation(final String citation, final String interfacePackage,
- final String implementationPackage, final String[] prefix, final String[] acronyms)
+ final String implementationPackage, final String[] acronyms)
{
super(citation, interfacePackage);
this.implementationPackage = implementationPackage;
- this.prefix = prefix;
this.acronyms = acronyms;
this.implementations = new IdentityHashMap<Class<?>,Class<?>>();
}
/**
+ * Returns {@code true} if the given type is conceptually abstract.
+ * The given type is usually an interface, so here "abstract" can not be in the Java sense.
+ * If this method can not find information about whether the given type is abstract,
+ * then this method conservatively returns {@code false}.
+ */
+ private static boolean isAbstract(final Class<?> type) {
+ final Classifier c = type.getAnnotation(Classifier.class);
+ return (c != null) && c.value() == Stereotype.ABSTRACT;
+ }
+
+ /**
* Returns the implementation class for the given interface, or {@code null} if none.
* This class uses heuristic rules based on naming conventions.
*
@@ -129,26 +134,19 @@ final class StandardImplementation exten
}
}
/*
- * Try to insert a prefix in front of the class name, until a match is found.
+ * Try to instantiate the implementation class.
*/
final int prefixPosition = buffer.lastIndexOf(".") + 1;
- int length = 0;
- for (final String p : prefix) {
- name = buffer.replace(prefixPosition, prefixPosition + length, p).toString();
- try {
- candidate = Class.forName(name);
- } catch (ClassNotFoundException e) {
- Logging.recoverableException(MetadataStandard.class, "getImplementation", e);
- length = p.length();
- continue;
- }
- if (candidate.isAnnotationPresent(Deprecated.class)) {
- // Skip deprecated implementations.
- length = p.length();
- continue;
+ buffer.insert(prefixPosition, isAbstract(type) ? "Abstract" : "Default");
+ name = buffer.toString();
+ try {
+ candidate = Class.forName(name);
+ if (!candidate.isAnnotationPresent(Deprecated.class)) {
+ implementations.put(type, candidate);
+ return candidate;
}
- implementations.put(type, candidate);
- return candidate;
+ } catch (ClassNotFoundException e) {
+ Logging.recoverableException(MetadataStandard.class, "getImplementation", e);
}
implementations.put(type, Void.TYPE); // Marker for "class not found".
}
Modified: sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/MetadataTestCase.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/MetadataTestCase.java?rev=1569944&r1=1569943&r2=1569944&view=diff
==============================================================================
--- sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/MetadataTestCase.java [UTF-8] (original)
+++ sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/MetadataTestCase.java [UTF-8] Wed Feb 19 22:43:54 2014
@@ -73,11 +73,15 @@ public abstract strictfp class MetadataT
/**
* Returns the SIS implementation for the given GeoAPI interface.
+ *
+ * @return {@inheritDoc}
*/
@Override
protected <T> Class<? extends T> getImplementation(final Class<T> type) {
assertTrue(standard.isMetadata(type));
- return standard.getImplementation(type).asSubclass(type);
+ final Class<?> impl = standard.getImplementation(type);
+ assertNotNull(type.getName(), impl);
+ return impl.asSubclass(type);
}
/**
Modified: sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java?rev=1569944&r1=1569943&r2=1569944&view=diff
==============================================================================
--- sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java [UTF-8] (original)
+++ sis/branches/JDK6/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/AllMetadataTest.java [UTF-8] Wed Feb 19 22:43:54 2014
@@ -214,6 +214,8 @@ public final strictfp class AllMetadataT
* Returns the expected namespace for an element defined by the given specification.
* For example the namespace of any type defined by {@link Specification#ISO_19115}
* is {@code "http://www.isotc211.org/2005/gmd"}.
+ *
+ * @return {@inheritDoc}
*/
@Override
protected String getExpectedNamespace(final Class<?> impl, final Specification specification) {
@@ -226,6 +228,8 @@ public final strictfp class AllMetadataT
/**
* Returns the type of the given element, or {@code null} if the type is not yet
* determined (the later cases could change in a future version).
+ *
+ * @return {@inheritDoc}
*/
@Override
protected String getExpectedTypeForElement(final Class<?> type, final Class<?> impl) {
@@ -251,6 +255,8 @@ public final strictfp class AllMetadataT
/**
* Returns the ISO 19139 wrapper for the given GeoAPI type,
* or {@code null} if no adapter is expected for the given type.
+ *
+ * @return {@inheritDoc}
*/
@Override
protected Class<?> getWrapperFor(final Class<?> type) throws ClassNotFoundException {
@@ -272,6 +278,8 @@ public final strictfp class AllMetadataT
/**
* Return {@code false} for the Apache SIS properties which are known to have no setter methods.
+ *
+ * @return {@inheritDoc}
*/
@Override
protected boolean isWritable(final Class<?> impl, final String property) {