You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by al...@apache.org on 2007/01/17 23:41:28 UTC
svn commit: r497216 -
/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
Author: alally
Date: Wed Jan 17 14:41:27 2007
New Revision: 497216
URL: http://svn.apache.org/viewvc?view=rev&rev=497216
Log:
Changed getDelegateAnalysisEngineSpecifiers so that it only
resolves delegate AE imports, not other imports such as the
flow controller.
UIMA-202: https://issues.apache.org/jira/browse/UIMA-202
Modified:
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java?view=diff&rev=497216&r1=497215&r2=497216
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java Wed Jan 17 14:41:27 2007
@@ -177,7 +177,7 @@
* @see org.apache.uima.analysis_engine.AnalysisEngineDescription#getDelegateAnalysisEngineSpecifiers()
*/
public Map getDelegateAnalysisEngineSpecifiers() throws InvalidXMLException {
- resolveImports(UIMAFramework.newDefaultResourceManager());
+ resolveDelegateAnalysisEngineImports(UIMAFramework.newDefaultResourceManager(), false);
return Collections.unmodifiableMap(mDelegateAnalysisEngineSpecifiers);
}
@@ -186,7 +186,7 @@
*/
public Map getDelegateAnalysisEngineSpecifiers(ResourceManager aResourceManager)
throws InvalidXMLException {
- resolveImports(aResourceManager);
+ resolveDelegateAnalysisEngineImports(aResourceManager, false);
return Collections.unmodifiableMap(mDelegateAnalysisEngineSpecifiers);
}
@@ -707,8 +707,8 @@
if (getSourceUrl() != null) {
aAlreadyImportedDelegateAeUrls.add(getSourceUrl());
}
- // resolve delegate AE imports
- resolveDelegateAnalysisEngineImports(aAlreadyImportedDelegateAeUrls, aResourceManager);
+ // resolve delegate AE imports (and recursively resolve imports therein)
+ resolveDelegateAnalysisEngineImports(aAlreadyImportedDelegateAeUrls, aResourceManager, true);
// resolve flow controller import
if (getFlowControllerDeclaration() != null) {
getFlowControllerDeclaration().resolveImports(aResourceManager);
@@ -723,16 +723,37 @@
getResourceManagerConfiguration().resolveImports(aResourceManager);
}
}
+
/**
* Resolves imports of delegate Analysis Engines. This reads from the
* delegateAnalysisEngineSpecifiersWithImports map and populates the
- * delegateAnalysisEngineSpecifiers map. This also recursively calls
- * {@link #resolveImports(Collection, ResourceManager)} on each delegate. If a cirular import is
- * found, an exception will be thrown.
+ * delegateAnalysisEngineSpecifiers map.
+ *
+ * @param aRecursive If true, this method will call {@link #resolveImports(Collection, ResourceManager)}
+ * on each delegate. If a cirular import is found, an exception will be thrown.
*/
- protected void resolveDelegateAnalysisEngineImports(Collection aAlreadyImportedDelegateAeUrls,
- ResourceManager aResourceManager) throws InvalidXMLException {
+ protected void resolveDelegateAnalysisEngineImports(ResourceManager aResourceManager, boolean aRecursive)
+ throws InvalidXMLException {
+ // add our own URL, if known, to the collection of enclosing aggregate URLs
+ Set urls = new HashSet();
+ if (getSourceUrl() != null) {
+ urls.add(getSourceUrl());
+ }
+ resolveDelegateAnalysisEngineImports(urls, aResourceManager, aRecursive);
+ }
+
+ /**
+ * Resolves imports of delegate Analysis Engines. This reads from the
+ * delegateAnalysisEngineSpecifiersWithImports map and populates the
+ * delegateAnalysisEngineSpecifiers map.
+ *
+ * @param aEnclosingAggregateAeUrls URLs of enclosing aggregate AEs. Used to detect circular imports.
+ * @param aRecursive If true, this method will call {@link #resolveImports(Collection, ResourceManager)}
+ * on each delegate. If a cirular import is found, an exception will be thrown.
+ */
+ protected void resolveDelegateAnalysisEngineImports(Collection aEnclosingAggregateAeUrls,
+ ResourceManager aResourceManager, boolean aRecursive) throws InvalidXMLException {
HashSet keys = new HashSet(); // keep track of keys we've encountered
// so we can remove stale entries
Iterator entryIterator = getDelegateAnalysisEngineSpecifiersWithImports().entrySet().iterator();
@@ -756,7 +777,7 @@
URL url = aeImport.findAbsoluteUrl(aResourceManager);
// check for resursive import
- if (aAlreadyImportedDelegateAeUrls.contains(url)) {
+ if (aEnclosingAggregateAeUrls.contains(url)) {
String name = getMetaData() == null ? "<null>" : getMetaData().getName();
throw new InvalidXMLException(InvalidXMLException.CIRCULAR_AE_IMPORT, new Object[] {
name, url });
@@ -780,7 +801,7 @@
// now resolve imports in ths delegate
if (spec instanceof AnalysisEngineDescription) {
- Set alreadyImportedUrls = new HashSet(aAlreadyImportedDelegateAeUrls);
+ Set alreadyImportedUrls = new HashSet(aEnclosingAggregateAeUrls);
alreadyImportedUrls.add(url);
((AnalysisEngineDescription) spec).resolveImports(alreadyImportedUrls, aResourceManager);
}
@@ -790,7 +811,7 @@
// resolve imports recursively on the delegate
if (entry.getValue() instanceof AnalysisEngineDescription) {
((AnalysisEngineDescription) entry.getValue()).resolveImports(
- aAlreadyImportedDelegateAeUrls, aResourceManager);
+ aEnclosingAggregateAeUrls, aResourceManager);
}
}
}