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);
         }
       }
     }