You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2013/02/20 18:14:04 UTC
svn commit: r1448303 - in /uima/sandbox/uimafit/trunk:
uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/
uimafit-legacy-support/src/main/java/org/apache/uima/fit/legacy/
uimafit/src/main/java/org/apache/uima/fit/factory/ uimafit/s...
Author: rec
Date: Wed Feb 20 17:14:03 2013
New Revision: 1448303
URL: http://svn.apache.org/r1448303
Log:
[UIMA-2679] Support legacy uimaFIT META-INF location
https://issues.apache.org/jira/browse/UIMA-267
Issue UIMA-2679: Support legacy uimaFIT META-INF location
https://issues.apache.org/jira/browse/UIMA-2679
- Marked several files as internal API
- Changed META-INF location to org.apache.uima.fit
- Extended LegacySupportModule to scan for descriptors
- Moved descriptor scanning code to MetaDataUtil
Added:
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupport.java (with props)
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataType.java (with props)
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataUtil.java (with props)
uima/sandbox/uimafit/trunk/uimafit/src/test/resources/META-INF/org.apache.uima.fit/
- copied from r1446497, uima/sandbox/uimafit/trunk/uimafit/src/test/resources/META-INF/org.uimafit/
Removed:
uima/sandbox/uimafit/trunk/uimafit/src/test/resources/META-INF/org.uimafit/
Modified:
uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickDescriptor.java
uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickPipeline.java
uima/sandbox/uimafit/trunk/uimafit-legacy-support/src/main/java/org/apache/uima/fit/legacy/LegacySupportPluginImpl.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FsIndexFactory.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/EnhancedClassFile.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedExternalResourceDescription_impl.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedLogger.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/JCasGenPomFriendly.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupportPlugin.java
uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ReflectionUtil.java
Modified: uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickDescriptor.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickDescriptor.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickDescriptor.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickDescriptor.java Wed Feb 20 17:14:03 2013
@@ -35,7 +35,7 @@ public class GetStartedQuickDescriptor {
public static void main(String[] args) throws ResourceInitializationException,
FileNotFoundException, SAXException, IOException {
- // uimaFIT automatically uses all type systems listed in META-INF/org.uimafit/types.txt
+ // uimaFIT automatically uses all type systems listed in META-INF/org.apache.uima.fit/types.txt
// Instantiate the analysis engine using the value "uimaFIT" for the parameter
// PARAM_STRING ("stringParam").
Modified: uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickPipeline.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickPipeline.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickPipeline.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/GetStartedQuickPipeline.java Wed Feb 20 17:14:03 2013
@@ -31,7 +31,7 @@ import org.apache.uima.jcas.JCas;
public class GetStartedQuickPipeline {
public static void main(String[] args) throws UIMAException {
- // uimaFIT automatically uses all type systems listed in META-INF/org.uimafit/types.txt
+ // uimaFIT automatically uses all type systems listed in META-INF/org.apache.uima.fit/types.txt
// uimaFIT doesn't provide any collection readers - so we will just instantiate a JCas and
// run it through our AE
Modified: uima/sandbox/uimafit/trunk/uimafit-legacy-support/src/main/java/org/apache/uima/fit/legacy/LegacySupportPluginImpl.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit-legacy-support/src/main/java/org/apache/uima/fit/legacy/LegacySupportPluginImpl.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit-legacy-support/src/main/java/org/apache/uima/fit/legacy/LegacySupportPluginImpl.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit-legacy-support/src/main/java/org/apache/uima/fit/legacy/LegacySupportPluginImpl.java Wed Feb 20 17:14:03 2013
@@ -33,6 +33,10 @@ import org.apache.uima.fit.legacy.conver
import org.apache.uima.fit.legacy.converter.SofaCapabilityConverter;
import org.apache.uima.fit.legacy.converter.TypeCapabilityConverter;
import org.apache.uima.fit.util.LegacySupportPlugin;
+import org.apache.uima.fit.util.MetaDataType;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.uimafit.factory.FsIndexFactory;
+import org.uimafit.factory.TypeSystemDescriptionFactory;
/**
* Legacy support plug in for the Google Code version of uimaFIT.
@@ -138,4 +142,15 @@ public class LegacySupportPluginImpl imp
}
converterRegistry.put(aConverter.getModernType(), aConverter);
}
+
+ public String[] scanTypeDescriptors(MetaDataType aType) throws ResourceInitializationException {
+ switch (aType) {
+ case FS_INDEX:
+ return FsIndexFactory.scanIndexDescriptors();
+ case TYPE_SYSTEM:
+ return TypeSystemDescriptionFactory.scanTypeDescriptors();
+ default:
+ return new String[0];
+ }
+ }
}
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FsIndexFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FsIndexFactory.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FsIndexFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FsIndexFactory.java Wed Feb 20 17:14:03 2013
@@ -20,8 +20,7 @@ package org.apache.uima.fit.factory;
import static java.util.Arrays.asList;
import static org.apache.uima.UIMAFramework.getXMLParser;
-import static org.apache.uima.fit.factory.TypeSystemDescriptionFactory.resolve;
-import static org.apache.uima.fit.factory.TypeSystemDescriptionFactory.scanImportsAndManifests;
+import static org.apache.uima.fit.util.MetaDataUtil.*;
import static org.apache.uima.fit.util.ReflectionUtil.getInheritableAnnotation;
import java.io.IOException;
@@ -31,6 +30,7 @@ import java.util.List;
import org.apache.commons.logging.LogFactory;
import org.apache.uima.fit.descriptor.FsIndex;
import org.apache.uima.fit.descriptor.FsIndexKey;
+import org.apache.uima.fit.util.MetaDataType;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.metadata.FsIndexCollection;
import org.apache.uima.resource.metadata.FsIndexDescription;
@@ -147,17 +147,6 @@ public final class FsIndexFactory {
return key;
}
- /**
- * System property indicating which locations to scan for index descriptions. A list of locations
- * may be given separated by ";".
- */
- public static final String FS_INDEX_IMPORT_PATTERN = "org.uimafit.fsindex.import_pattern";
-
- /**
- * Index manifest location.
- */
- public static final String FS_INDEX_MANIFEST_PATTERN = "classpath*:META-INF/org.uimafit/fsindexes.txt";
-
private static String[] indexDescriptorLocations;
/**
@@ -204,8 +193,8 @@ public final class FsIndexFactory {
/**
* Creates a {@link FsIndexCollection} from all index descriptions that can be found via the
- * {@link #FS_INDEX_IMPORT_PATTERN} or via the {@code META-INF/org.uimafit/fsindexes.txt} files in
- * the classpath.
+ * {@link #FS_INDEX_IMPORT_PATTERN} or via the {@code META-INF/org.apache.uima.fit/fsindexes.txt}
+ * files in the classpath.
*
* @return the auto-scanned indexes.
*/
@@ -240,8 +229,7 @@ public final class FsIndexFactory {
*/
public static String[] scanIndexDescriptors() throws ResourceInitializationException {
if (indexDescriptorLocations == null) {
- indexDescriptorLocations = resolve(scanImportsAndManifests(FS_INDEX_MANIFEST_PATTERN,
- FS_INDEX_IMPORT_PATTERN));
+ indexDescriptorLocations = scanDescriptors(MetaDataType.FS_INDEX);
}
return indexDescriptorLocations;
}
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/TypeSystemDescriptionFactory.java Wed Feb 20 17:14:03 2013
@@ -19,20 +19,15 @@
package org.apache.uima.fit.factory;
import static org.apache.uima.UIMAFramework.getXMLParser;
+import static org.apache.uima.fit.util.MetaDataUtil.scanDescriptors;
import static org.apache.uima.util.CasCreationUtils.mergeTypeSystems;
import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.LogFactory;
+import org.apache.uima.fit.util.MetaDataType;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.metadata.Import;
import org.apache.uima.resource.metadata.TypeSystemDescription;
@@ -40,8 +35,6 @@ import org.apache.uima.resource.metadata
import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLInputSource;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
/**
*/
@@ -50,17 +43,6 @@ public final class TypeSystemDescription
// This class is not meant to be instantiated
}
- /**
- * System property indicating which locations to scan for type descriptions. A list of locations
- * may be given separated by ";".
- */
- public static final String TYPE_IMPORT_PATTERN = "org.apache.uima.fit.type.import_pattern";
-
- /**
- * Type manifest location.
- */
- public static final String TYPE_MANIFEST_PATTERN = "classpath*:META-INF/org.uimafit/types.txt";
-
private static String[] typeDescriptorLocations;
/**
@@ -134,8 +116,8 @@ public final class TypeSystemDescription
/**
* Creates a {@link TypeSystemDescription} from all type descriptions that can be found via the
- * {@link #TYPE_IMPORT_PATTERN} or via the {@code META-INF/org.uimafit/types.txt} files in the
- * classpath.
+ * {@link #TYPE_IMPORT_PATTERN} or via the {@code META-INF/org.apache.uima.fit/types.txt} files in
+ * the classpath.
*
* @return the auto-scanned type system.
*/
@@ -170,8 +152,7 @@ public final class TypeSystemDescription
*/
public static String[] scanTypeDescriptors() throws ResourceInitializationException {
if (typeDescriptorLocations == null) {
- typeDescriptorLocations = resolve(scanImportsAndManifests(TYPE_MANIFEST_PATTERN,
- TYPE_IMPORT_PATTERN));
+ typeDescriptorLocations = scanDescriptors(MetaDataType.TYPE_SYSTEM);
}
return typeDescriptorLocations;
}
@@ -183,65 +164,4 @@ public final class TypeSystemDescription
public static void forceTypeDescriptorsScan() {
typeDescriptorLocations = null;
}
-
- /**
- * Scan patterns from manifest files and from the specified system property.
- *
- * @param manifestPatterns
- * pattern matching the manifest files.
- * @param importProperty
- * system property containing additional patterns.
- * @return array or all patterns found.
- */
- public static String[] scanImportsAndManifests(String manifestPatterns, String importProperty)
- throws ResourceInitializationException {
- ArrayList<String> patterns = new ArrayList<String>();
-
- // Scan auto-import locations
- patterns.addAll(Arrays.asList(System.getProperty(importProperty, "").split(";")));
-
- // Scan manifest
- for (String mfUrl : resolve(manifestPatterns)) {
- InputStream is = null;
- try {
- is = new URL(mfUrl).openStream();
- @SuppressWarnings("unchecked")
- List<? extends String> lines = IOUtils.readLines(is);
- patterns.addAll(lines);
- } catch (IOException e) {
- throw new ResourceInitializationException(e);
- } finally {
- IOUtils.closeQuietly(is);
- }
- }
-
- return patterns.toArray(new String[patterns.size()]);
- }
-
- /**
- * Resolve a list of patterns to a set of URLs.
- *
- * @return an array of locations.
- * @throws ResourceInitializationException
- * if the locations could not be resolved.
- */
- public static String[] resolve(String... patterns) throws ResourceInitializationException {
- Set<String> locations = new HashSet<String>();
- PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
- try {
- // Scan auto-import locations. Using a set to avoid scanning a pattern twice.
- for (String pattern : new TreeSet<String>(Arrays.asList(patterns))) {
- String p = pattern.trim();
- if (p.length() == 0) {
- continue;
- }
- for (Resource r : resolver.getResources(pattern)) {
- locations.add(r.getURL().toString());
- }
- }
- return locations.toArray(new String[locations.size()]);
- } catch (IOException e) {
- throw new ResourceInitializationException(e);
- }
- }
}
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/EnhancedClassFile.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/EnhancedClassFile.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/EnhancedClassFile.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/EnhancedClassFile.java Wed Feb 20 17:14:03 2013
@@ -25,7 +25,7 @@ import java.lang.annotation.RetentionPol
import java.lang.annotation.Target;
/**
- * Marks a class as having been processed by an uimaFIT class enhancer, such as the
+ * INTERNAL API - Marks a class as having been processed by an uimaFIT class enhancer, such as the
* uimafit-maven-plugin. If the annotation is present, the enhancer does process the class again.
*/
@Retention(RetentionPolicy.RUNTIME)
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedExternalResourceDescription_impl.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedExternalResourceDescription_impl.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedExternalResourceDescription_impl.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedExternalResourceDescription_impl.java Wed Feb 20 17:14:03 2013
@@ -27,7 +27,7 @@ import org.apache.uima.resource.impl.Ext
import org.apache.uima.resource.metadata.ExternalResourceBinding;
/**
- * Extended {@link ExternalResourceDescription_impl} which can carry
+ * INTERNAL API - Extended {@link ExternalResourceDescription_impl} which can carry
* {@link ExternalResourceDescription}s.
*
*/
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedLogger.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedLogger.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedLogger.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ExtendedLogger.java Wed Feb 20 17:14:03 2013
@@ -27,7 +27,7 @@ import org.apache.uima.util.Level;
import org.apache.uima.util.Logger;
/**
- * Wrapper for the UIMA {@link Logger} offering a more convenient API similar to that of the Apache
+ * INTERNAL API - Wrapper for the UIMA {@link Logger} offering a more convenient API similar to that of the Apache
* Commons Logging interface {@link org.apache.commons.logging.Log Log} or to that of Log4J's
* {@code Category} and SLF4J's {@code Logger}, using the names {@code error}, {@code warn},
* {@code info}, {@code debug} and {@code trace} and mapping these to UIMA logging levels.
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/JCasGenPomFriendly.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/JCasGenPomFriendly.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/JCasGenPomFriendly.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/JCasGenPomFriendly.java Wed Feb 20 17:14:03 2013
@@ -24,7 +24,6 @@ import java.io.IOException;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.impl.CASImpl;
-import org.apache.uima.fit.factory.TypeSystemDescriptionFactory;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.tools.jcasgen.Jg;
@@ -55,9 +54,9 @@ import org.apache.uima.util.XMLInputSour
* </executions>
* <configuration>
* <classpathScope>test</classpathScope>
- * <mainClass>org.uimafit.util.JCasGenPomFriendly</mainClass>
+ * <mainClass>org.apache.uima.fit.util.util.JCasGenPomFriendly</mainClass>
* <arguments>
- * <argument>file:src/test/resources/META-INF/org.uimafit/type/**/*.xml</argument>
+ * <argument>file:src/test/resources/META-INF/org.apache.uima.fit/type/**/*.xml</argument>
* <argument>${basedir}/src/test/java</argument>
* </arguments>
* </configuration>
@@ -71,7 +70,7 @@ public class JCasGenPomFriendly {
*/
public static void main(String[] args) throws Exception {
Jg jg = new Jg();
- for (String file : TypeSystemDescriptionFactory.resolve(args[0].split(";"))) {
+ for (String file : MetaDataUtil.resolve(args[0].split(";"))) {
generate(jg, file, args[1], load(file));
}
}
Added: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupport.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupport.java?rev=1448303&view=auto
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupport.java (added)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupport.java Wed Feb 20 17:14:03 2013
@@ -0,0 +1,70 @@
+package org.apache.uima.fit.util;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AccessibleObject;
+
+import org.apache.uima.resource.ResourceInitializationException;
+
+/**
+ * INTERNAL API - Legacy support.
+ */
+public final class LegacySupport {
+
+ private LegacySupport() {
+ // No instances
+ }
+
+ private static LegacySupportPlugin legacySupportPlugin;
+
+ // Initialize legacy support once on startup.
+ static {
+ try {
+ Class<?> plc = Class.forName("org.apache.uima.fit.legacy.LegacySupportPluginImpl");
+ legacySupportPlugin = (LegacySupportPlugin) plc.newInstance();
+ } catch (IllegalAccessException e) {
+ // Cannot access legacy support for some reason, where to log this?
+ } catch (ClassNotFoundException e) {
+ // Legacy support not available.
+ } catch (InstantiationException e) {
+ // Some other odd reason the plugin cannot be instantiated. Again, where to log this?
+ }
+
+ // If no legacy support is available, instantiate a dummy.
+ if (legacySupportPlugin == null) {
+ legacySupportPlugin = new LegacySupportPlugin() {
+ public boolean isAnnotationPresent(AccessibleObject aObject,
+ Class<? extends Annotation> aAnnotationClass) {
+ return false;
+ }
+
+ public <L extends Annotation, M extends Annotation> M getAnnotation(
+ AccessibleObject aObject, Class<M> aAnnotationClass) {
+ return null;
+ }
+
+ public boolean isAnnotationPresent(Class<?> aObject,
+ Class<? extends Annotation> aAnnotationClass) {
+ return false;
+ }
+
+ public <L extends Annotation, M extends Annotation> M getAnnotation(Class<?> aObject,
+ Class<M> aAnnotationClass) {
+ return null;
+ }
+
+ public String[] scanTypeDescriptors(MetaDataType aType)
+ throws ResourceInitializationException {
+ return new String[0];
+ }
+ };
+ }
+ }
+
+ /**
+ * Get legacy support instance. Never returns {@code null}. If no legacy support plug-in is
+ * available, a dummy plug-in is returned.
+ */
+ public static LegacySupportPlugin getInstance() {
+ return legacySupportPlugin;
+ }
+}
Propchange: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupportPlugin.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupportPlugin.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupportPlugin.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/LegacySupportPlugin.java Wed Feb 20 17:14:03 2013
@@ -3,6 +3,11 @@ package org.apache.uima.fit.util;
import java.lang.annotation.Annotation;
import java.lang.reflect.AccessibleObject;
+import org.apache.uima.resource.ResourceInitializationException;
+
+/**
+ * INTERNAL API - Legacy support plug-in API.
+ */
public interface LegacySupportPlugin {
/**
* Checks if a legacy version of the given modern annotation is present.
@@ -69,4 +74,13 @@ public interface LegacySupportPlugin {
// */
// <M extends Annotation> Object getDefaultValue(AccessibleObject aObject, Class<M> aAnnotationClass,
// String aProperty);
+
+ /**
+ * Get all currently accessible descriptor locations for the given type.
+ *
+ * @return an array of locations.
+ * @throws ResourceInitializationException
+ * if the locations could not be resolved.
+ */
+ String[] scanTypeDescriptors(MetaDataType aType) throws ResourceInitializationException;
}
Added: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataType.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataType.java?rev=1448303&view=auto
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataType.java (added)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataType.java Wed Feb 20 17:14:03 2013
@@ -0,0 +1,9 @@
+package org.apache.uima.fit.util;
+
+/**
+ * INTERNAL API - Kinds of meta data uimaFIT uses.
+ */
+public enum MetaDataType {
+ TYPE_SYSTEM,
+ FS_INDEX;
+}
Propchange: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataType.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataUtil.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataUtil.java?rev=1448303&view=auto
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataUtil.java (added)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataUtil.java Wed Feb 20 17:14:03 2013
@@ -0,0 +1,139 @@
+package org.apache.uima.fit.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+/**
+ * INTERNAL API - Utility methods to locate and access uimaFIT meta data.
+ */
+public final class MetaDataUtil {
+
+ private MetaDataUtil() {
+ // No instances
+ }
+
+ /**
+ * Scan patterns from manifest files and from the specified system property.
+ *
+ * @param manifestPatterns
+ * pattern matching the manifest files.
+ * @param importProperty
+ * system property containing additional patterns.
+ * @return array or all patterns found.
+ */
+ public static String[] scanImportsAndManifests(MetaDataType aType)
+ throws ResourceInitializationException {
+ ArrayList<String> patterns = new ArrayList<String>();
+
+ // Scan auto-import locations
+ for (String property : getImportProperties(aType)) {
+ patterns.addAll(Arrays.asList(System.getProperty(property, "").split(";")));
+ }
+
+ // Scan manifest
+ for (String mfUrl : resolve(getManifestLocations(aType))) {
+ InputStream is = null;
+ try {
+ is = new URL(mfUrl).openStream();
+ @SuppressWarnings("unchecked")
+ List<? extends String> lines = IOUtils.readLines(is);
+ patterns.addAll(lines);
+ } catch (IOException e) {
+ throw new ResourceInitializationException(e);
+ } finally {
+ IOUtils.closeQuietly(is);
+ }
+ }
+
+ return patterns.toArray(new String[patterns.size()]);
+ }
+
+ /**
+ * Resolve a list of patterns to a set of URLs.
+ *
+ * @return an array of locations.
+ * @throws ResourceInitializationException
+ * if the locations could not be resolved.
+ */
+ public static String[] resolve(String... patterns) throws ResourceInitializationException {
+ Set<String> locations = new HashSet<String>();
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ try {
+ // Scan auto-import locations. Using a set to avoid scanning a pattern twice.
+ for (String pattern : new TreeSet<String>(Arrays.asList(patterns))) {
+ String p = pattern.trim();
+ if (p.length() == 0) {
+ continue;
+ }
+ for (Resource r : resolver.getResources(pattern)) {
+ locations.add(r.getURL().toString());
+ }
+ }
+ return locations.toArray(new String[locations.size()]);
+ } catch (IOException e) {
+ throw new ResourceInitializationException(e);
+ }
+ }
+
+ /**
+ * Get manifest locations for the specified type.
+ */
+ public static String[] getManifestLocations(MetaDataType aType) {
+ List<String> locations = new ArrayList<String>();
+ switch (aType) {
+ case FS_INDEX:
+ locations.add("classpath*:META-INF/org.apache.uima.fit/fsindexes.txt");
+ break;
+ case TYPE_SYSTEM:
+ locations.add("classpath*:META-INF/org.apache.uima.fit/types.txt");
+ break;
+ }
+
+ return locations.toArray(new String[locations.size()]);
+ }
+
+ /**
+ * Get system properties indicating which locations to scan for descriptions of the given type. A
+ * list of locations may be given separated by ";".
+ */
+ public static String[] getImportProperties(MetaDataType aType) {
+ List<String> locations = new ArrayList<String>();
+ switch (aType) {
+ case FS_INDEX:
+ locations.add("org.apache.uima.fit.fsindex.import_pattern");
+ break;
+ case TYPE_SYSTEM:
+ locations.add("org.apache.uima.fit.type.import_pattern");
+ break;
+ }
+
+ return locations.toArray(new String[locations.size()]);
+ }
+
+ /**
+ * Get all currently accessible descriptor locations for the given type.
+ *
+ * @return an array of locations.
+ * @throws ResourceInitializationException
+ * if the locations could not be resolved.
+ */
+ public static String[] scanDescriptors(MetaDataType aType)
+ throws ResourceInitializationException {
+ String[] locations1 = resolve(scanImportsAndManifests(aType));
+ String[] locations2 = LegacySupport.getInstance().scanTypeDescriptors(aType);
+ return (String[]) ArrayUtils.addAll(locations1, locations2);
+ }
+}
Propchange: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/MetaDataUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ReflectionUtil.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ReflectionUtil.java?rev=1448303&r1=1448302&r2=1448303&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ReflectionUtil.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/util/ReflectionUtil.java Wed Feb 20 17:14:03 2013
@@ -26,50 +26,10 @@ import java.util.Arrays;
import java.util.List;
/**
+ * INTERNAL API - Utility methods to access Java annotations.
*/
public final class ReflectionUtil {
- private static LegacySupportPlugin legacySupportPlugin;
-
- // Initialize legacy support once on startup.
- static {
- try {
- Class<?> plc = Class.forName("org.apache.uima.fit.legacy.LegacySupportPluginImpl");
- legacySupportPlugin = (LegacySupportPlugin) plc.newInstance();
- } catch (IllegalAccessException e) {
- // Cannot access legacy support for some reason, where to log this?
- } catch (ClassNotFoundException e) {
- // Legacy support not available.
- } catch (InstantiationException e) {
- // Some other odd reason the plugin cannot be instantiated. Again, where to log this?
- }
-
- // If no legacy support is available, instantiate a dummy.
- if (legacySupportPlugin == null) {
- legacySupportPlugin = new LegacySupportPlugin() {
- public boolean isAnnotationPresent(AccessibleObject aObject,
- Class<? extends Annotation> aAnnotationClass) {
- return false;
- }
-
- public <L extends Annotation, M extends Annotation> M getAnnotation(
- AccessibleObject aObject, Class<M> aAnnotationClass) {
- return null;
- }
-
- public boolean isAnnotationPresent(Class<?> aObject,
- Class<? extends Annotation> aAnnotationClass) {
- return false;
- }
-
- public <L extends Annotation, M extends Annotation> M getAnnotation(Class<?> aObject,
- Class<M> aAnnotationClass) {
- return null;
- }
- };
- }
- }
-
private ReflectionUtil() {
// Library class
}
@@ -173,7 +133,7 @@ public final class ReflectionUtil {
}
// If not present, check if an equivalent legacy annotation is present
- return legacySupportPlugin.isAnnotationPresent(aObject, aAnnotationClass);
+ return LegacySupport.getInstance().isAnnotationPresent(aObject, aAnnotationClass);
}
/**
@@ -188,7 +148,7 @@ public final class ReflectionUtil {
}
// If not present, check if an equivalent legacy annotation is present
- return legacySupportPlugin.isAnnotationPresent(aObject, aAnnotationClass);
+ return LegacySupport.getInstance().isAnnotationPresent(aObject, aAnnotationClass);
}
/**
@@ -200,7 +160,7 @@ public final class ReflectionUtil {
{
T annotation = aObject.getAnnotation(aAnnotationClass);
if (annotation == null) {
- annotation = legacySupportPlugin.getAnnotation(aObject, aAnnotationClass);
+ annotation = LegacySupport.getInstance().getAnnotation(aObject, aAnnotationClass);
}
return annotation;
}
@@ -214,7 +174,7 @@ public final class ReflectionUtil {
{
T annotation = aObject.getAnnotation(aAnnotationClass);
if (annotation == null) {
- annotation = legacySupportPlugin.getAnnotation(aObject, aAnnotationClass);
+ annotation = LegacySupport.getInstance().getAnnotation(aObject, aAnnotationClass);
}
return annotation;
}