You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2012/07/06 13:39:31 UTC

svn commit: r1358135 - in /uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker: engine/TextMarkerEngine.java extensions/DefaultEngineLoader.java extensions/TextMarkerEngineLoader.java

Author: pkluegl
Date: Fri Jul  6 11:39:31 2012
New Revision: 1358135

URL: http://svn.apache.org/viewvc?rev=1358135&view=rev
Log:
UIMA-2415
added (adapted) changes provided in attached files: loading from input streams

Modified:
    uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/engine/TextMarkerEngine.java
    uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/DefaultEngineLoader.java
    uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/TextMarkerEngineLoader.java

Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/engine/TextMarkerEngine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/engine/TextMarkerEngine.java?rev=1358135&r1=1358134&r2=1358135&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/engine/TextMarkerEngine.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/engine/TextMarkerEngine.java Fri Jul  6 11:39:31 2012
@@ -20,7 +20,9 @@
 package org.apache.uima.textmarker.engine;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -30,6 +32,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.antlr.runtime.ANTLRFileStream;
+import org.antlr.runtime.ANTLRInputStream;
 import org.antlr.runtime.CharStream;
 import org.antlr.runtime.CommonTokenStream;
 import org.antlr.runtime.RecognitionException;
@@ -116,7 +119,7 @@ public class TextMarkerEngine extends JC
   public static final String RELOAD_SCRIPT = "reloadScript";
 
   public static final String LOW_MEMORY_PROFILE = "lowMemoryProfile";
-  
+
   private String[] seeders;
 
   private Boolean createDebugInfo;
@@ -170,7 +173,7 @@ public class TextMarkerEngine extends JC
   private Boolean lowMemoryProfile;
 
   private boolean initialized = false;
-  
+
   private List<Type> seedTypes;
 
   @Override
@@ -202,7 +205,7 @@ public class TextMarkerEngine extends JC
     dynamicAnchoring = (Boolean) aContext.getConfigParameterValue(DYNAMIC_ANCHORING);
     reloadScript = (Boolean) aContext.getConfigParameterValue(RELOAD_SCRIPT);
     lowMemoryProfile = (Boolean) aContext.getConfigParameterValue(LOW_MEMORY_PROFILE);
-    
+
     removeBasics = removeBasics == null ? false : removeBasics;
     createDebugInfo = createDebugInfo == null ? false : createDebugInfo;
     createDebugOnlyFor = createDebugOnlyFor == null ? new String[0] : createDebugOnlyFor;
@@ -215,7 +218,7 @@ public class TextMarkerEngine extends JC
     dynamicAnchoring = dynamicAnchoring == null ? false : dynamicAnchoring;
     reloadScript = reloadScript == null ? false : reloadScript;
     lowMemoryProfile = lowMemoryProfile == null ? false : lowMemoryProfile;
-    
+
     this.context = aContext;
 
     factory = new TextMarkerExternalFactory();
@@ -385,7 +388,7 @@ public class TextMarkerEngine extends JC
     Type basicType = typeSystem.getType(BASIC_TYPE);
     seedTypes = seedAnnotations(cas);
     TextMarkerStream stream = new TextMarkerStream(cas, basicType, filter, lowMemoryProfile);
-    
+
     stream.initalizeBasics();
     return stream;
   }
@@ -418,26 +421,75 @@ public class TextMarkerEngine extends JC
   }
 
   private void initializeScript() throws AnalysisEngineProcessException {
-    String scriptLocation = locate(mainScript, scriptPaths, ".tm");
-    if (scriptLocation == null) {
-      // if someone loads an empty analysis engine and then reconfigures it
+    if(mainScript == null) {
       return;
     }
-    try {
-      script = loadScript(scriptLocation, null);
-    } catch (Exception e) {
-      throw new AnalysisEngineProcessException(e);
+    String scriptLocation = locate(mainScript, scriptPaths, ".tm");
+    if (scriptLocation == null) {
+      try {
+        String mainScriptPath = mainScript.replaceAll("\\.", "/") + ".tm";
+        script = loadScriptIS(mainScriptPath, null);
+      } catch (IOException e) {
+        throw new AnalysisEngineProcessException(new FileNotFoundException("Script [" + mainScript
+                + "] cannot be found at [" + collectionToString(scriptPaths)
+                + "] with extension .tm"));
+      } catch (RecognitionException e) {
+        throw new AnalysisEngineProcessException(new FileNotFoundException("Script [" + mainScript
+                + "] cannot be found at [" + collectionToString(scriptPaths)
+                + "] with extension .tm"));
+      }
+    } else {
+      try {
+        script = loadScript(scriptLocation, null);
+      } catch (Exception e) {
+        throw new AnalysisEngineProcessException(e);
+      }
     }
+
     Map<String, TextMarkerModule> additionalScripts = new HashMap<String, TextMarkerModule>();
     Map<String, AnalysisEngine> additionalEngines = new HashMap<String, AnalysisEngine>();
 
     if (additionalEngineLocations != null) {
       for (String eachEngineLocation : additionalEngineLocations) {
+        AnalysisEngine eachEngine;
         String location = locate(eachEngineLocation, descriptorPaths, ".xml");
+        if (location == null) {
+          String locationIS = locateIS(eachEngineLocation, descriptorPaths, ".xml");
+          try {
+            eachEngine = engineLoader.loadEngineIS(locationIS);
+          } catch (InvalidXMLException e) {
+            throw new AnalysisEngineProcessException(new FileNotFoundException("Engine at ["
+                    + eachEngineLocation + "] cannot be found in ["
+                    + collectionToString(descriptorPaths)
+                    + "] with extension .xml (from mainScript=" + mainScript + " in "
+                    + collectionToString(scriptPaths)));
+          } catch (ResourceInitializationException e) {
+            throw new AnalysisEngineProcessException(new FileNotFoundException("Engine at ["
+                    + eachEngineLocation + "] cannot be found in ["
+                    + collectionToString(descriptorPaths)
+                    + "] with extension .xml (from mainScript=" + mainScript + " in "
+                    + collectionToString(scriptPaths)));
+          } catch (IOException e) {
+            throw new AnalysisEngineProcessException(new FileNotFoundException("Engine at ["
+                    + eachEngineLocation + "] cannot be found in ["
+                    + collectionToString(descriptorPaths)
+                    + "] with extension .xml (from mainScript=" + mainScript + " in "
+                    + collectionToString(scriptPaths)));
+          }
+        } else {
+          try {
+            eachEngine = engineLoader.loadEngine(location);
+          } catch (Exception e) {
+            throw new AnalysisEngineProcessException(e);
+          }
+        }
         try {
-          AnalysisEngine eachEngine = engineLoader.loadEngine(location);
-          configureEngine(eachEngine);
           additionalEngines.put(eachEngineLocation, eachEngine);
+          String[] eachEngineLocationPartArray = eachEngineLocation.split("\\.");
+          if (eachEngineLocationPartArray.length > 1) {
+            String shortEachEngineLocation = eachEngineLocationPartArray[eachEngineLocationPartArray.length - 1];
+            additionalEngines.put(shortEachEngineLocation, eachEngine);
+          }
         } catch (Exception e) {
           throw new AnalysisEngineProcessException(e);
         }
@@ -449,6 +501,7 @@ public class TextMarkerEngine extends JC
         recursiveLoadScript(add, additionalScripts, additionalEngines);
       }
     }
+
     for (TextMarkerModule each : additionalScripts.values()) {
       each.setScriptDependencies(additionalScripts);
     }
@@ -460,6 +513,7 @@ public class TextMarkerEngine extends JC
     script.setEngineDependencies(additionalEngines);
   }
 
+
   private void configureEngine(AnalysisEngine engine) throws ResourceConfigurationException {
     ConfigurationParameterDeclarations configurationParameterDeclarations = engine
             .getAnalysisEngineMetaData().getConfigurationParameterDeclarations();
@@ -511,6 +565,10 @@ public class TextMarkerEngine extends JC
     return locate(name, paths, suffix, true);
   }
 
+  public static String locateIS(String name, String[] paths, String suffix) {
+    return locateIS(name, paths, suffix, true);
+  }
+
   public static String locate(String name, String[] paths, String suffix, boolean mustExist) {
     if (name == null || paths == null) {
       return null;
@@ -525,6 +583,14 @@ public class TextMarkerEngine extends JC
     return null;
   }
 
+  public static String locateIS(String name, String[] paths, String suffix, boolean mustExist) {
+    if (name == null) {
+      return null;
+    }
+    name = name.replaceAll("[.]", "/");
+    return name + suffix;
+  }
+
   private void recursiveLoadScript(String toLoad, Map<String, TextMarkerModule> additionalScripts,
           Map<String, AnalysisEngine> additionalEngines) throws AnalysisEngineProcessException {
     String location = locate(toLoad, scriptPaths, ".tm");
@@ -601,6 +667,23 @@ public class TextMarkerEngine extends JC
     return script;
   }
 
+  private TextMarkerModule loadScriptIS(String scriptLocation,
+          TypeSystemDescription localTSD) throws IOException, RecognitionException {
+    InputStream scriptInputStream = getClass().getClassLoader().getResourceAsStream(scriptLocation);
+    CharStream st = new ANTLRInputStream(scriptInputStream, scriptEncoding);
+    TextMarkerLexer lexer = new TextMarkerLexer(st);
+    CommonTokenStream tokens = new CommonTokenStream(lexer);
+    TextMarkerParser parser = new TextMarkerParser(tokens);
+    parser.setLocalTSD(localTSD);
+    parser.setExternalFactory(factory);
+    parser.setResourcePaths(resourcePaths);
+    String name = scriptLocation;
+    int lastIndexOf = name.lastIndexOf(".tm");
+    name = name.substring(0, lastIndexOf);
+    TextMarkerModule script = parser.file_input(name);
+    return script;
+  }
+
   public TextMarkerExternalFactory getFactory() {
     return factory;
   }
@@ -608,5 +691,17 @@ public class TextMarkerEngine extends JC
   public TextMarkerEngineLoader getEngineLoader() {
     return engineLoader;
   }
+  private String collectionToString(Collection collection) {
+    StringBuilder collectionSB = new StringBuilder();
+    collectionSB.append("{");
+    for (Object element : collection) {
+      collectionSB.append("[").append(element.toString()).append("]");
+    }
+    collectionSB.append("}");
+    return collectionSB.toString();
+  }
 
+  private String collectionToString(Object[] collection) {
+    return collectionToString(Arrays.asList(collection));
+  }
 }

Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/DefaultEngineLoader.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/DefaultEngineLoader.java?rev=1358135&r1=1358134&r2=1358135&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/DefaultEngineLoader.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/DefaultEngineLoader.java Fri Jul  6 11:39:31 2012
@@ -15,11 +15,12 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
-*/
+ */
 
 package org.apache.uima.textmarker.extensions;
 
 import java.io.IOException;
+import java.io.InputStream;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.analysis_engine.AnalysisEngine;
@@ -42,4 +43,13 @@ public abstract class DefaultEngineLoade
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);
     return ae;
   }
+
+  protected AnalysisEngine loadEngineMyselfIS(String location) throws IOException,
+          InvalidXMLException, ResourceInitializationException {
+    InputStream locationIS = getClass().getClassLoader().getResourceAsStream(location);
+    XMLInputSource in = new XMLInputSource(locationIS, null);
+    ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in);
+    AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);
+    return ae;
+  }
 }

Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/TextMarkerEngineLoader.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/TextMarkerEngineLoader.java?rev=1358135&r1=1358134&r2=1358135&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/TextMarkerEngineLoader.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/extensions/TextMarkerEngineLoader.java Fri Jul  6 11:39:31 2012
@@ -15,7 +15,7 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
-*/
+ */
 
 package org.apache.uima.textmarker.extensions;
 
@@ -51,17 +51,40 @@ public class TextMarkerEngineLoader exte
     return result;
   }
 
+  public AnalysisEngine loadEngineIS(String location) throws InvalidXMLException,
+          ResourceInitializationException, IOException {
+    String name = getEngineNameIS(location);
+    AnalysisEngine result = null;
+    IEngineLoader engineLoader = loaders.get(name);
+    if (engineLoader != null) {
+      result = engineLoader.loadEngine(location);
+    } else {
+      result = loadEngineMyselfIS(location);
+    }
+    return result;
+  }
+
   public void addLoader(String engine, IEngineLoader loader) {
     loaders.put(engine, loader);
   }
 
   private String getEngineName(String location) {
-    File file = new File(location);
+    File file;
+    try {
+      file = new File(location);
+    } catch (java.lang.NullPointerException e) {
+      throw new java.lang.NullPointerException("File[" + location + "] cannot be opened.");
+    }
     location = file.getName();
     String[] split = location.split("[.]");
     return split[split.length - 2];
   }
 
+  private String getEngineNameIS(String location) {
+    String[] split = location.split("[.]");
+    return split[split.length - 2];
+  }
+
   public boolean isInitialized() {
     return !loaders.isEmpty();
   }