Author: pkluegl
Date: Thu Oct 30 13:26:41 2014
New Revision: 1635493

URL: http://svn.apache.org/r1635493
Log:
UIMA-4074
- applied patch

Modified:
    
uima/ruta/trunk/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java
    
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
    
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/FSTBlock.java
    
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptBlock.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptFactory.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java

Modified: 
uima/ruta/trunk/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java
 (original)
+++ 
uima/ruta/trunk/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java
 Thu Oct 30 13:26:41 2014
@@ -40,13 +40,12 @@ import org.apache.uima.ruta.visitor.Infe
 
 /**
  * Exemplary implementation of a block extension, which applied its rules in 
reverse order.
- *
+ * 
  */
 public class ExampleBlock extends RutaBlock {
 
-  public ExampleBlock(RutaBlock parent,
-          String defaultNamespace) {
-    super(parent, defaultNamespace);
+  public ExampleBlock(RutaBlock parent, String defaultNamespace) {
+    super(parent, defaultNamespace, parent != null ? parent.getContext() : 
null);
   }
 
   @Override
@@ -83,7 +82,4 @@ public class ExampleBlock extends RutaBl
     return result;
   }
 
-
-
-
 }

Modified: 
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
 (original)
+++ 
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/OnlyFirstBlock.java
 Thu Oct 30 13:26:41 2014
@@ -21,6 +21,7 @@ package org.apache.uima.ruta.block;
 
 import java.util.List;
 
+import org.apache.uima.UimaContext;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.BlockApply;
@@ -42,9 +43,8 @@ import org.apache.uima.ruta.visitor.Infe
  */
 public class OnlyFirstBlock extends RutaBlock {
 
-  public OnlyFirstBlock(RutaBlock parent,
-          String defaultNamespace) {
-    super(parent, defaultNamespace);
+  public OnlyFirstBlock(RutaBlock parent, String defaultNamespace) {
+    super(parent, defaultNamespace, parent != null ? parent.getContext() : 
null);
   }
 
   @Override

Modified: 
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/FSTBlock.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/FSTBlock.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/FSTBlock.java
 (original)
+++ 
uima/ruta/trunk/ruta-core-ext/src/main/java/org/apache/uima/ruta/block/fst/FSTBlock.java
 Thu Oct 30 13:26:41 2014
@@ -42,7 +42,8 @@ public class FSTBlock extends RutaBlock 
 
   public FSTBlock(String name, RutaRule rule, List<RutaStatement> elements, 
RutaBlock parent,
           String defaultNamespace) {
-    super(name, rule, elements, parent, defaultNamespace);
+    super(name, rule, elements, parent, defaultNamespace, parent != null ? 
parent.getContext()
+            : null);
   }
 
   @Override
@@ -76,7 +77,7 @@ public class FSTBlock extends RutaBlock 
   @Override
   public void setElements(List<RutaStatement> elements) {
     this.elements = elements;
-    
+
     auto = new Automaton(elements);
   }
 

Modified: 
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
 Thu Oct 30 13:26:41 2014
@@ -52,6 +52,7 @@ import org.antlr.runtime.TokenStream;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.resource.metadata.TypeDescription;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.apache.uima.UimaContext;
 
 import org.apache.uima.ruta.action.AbstractRutaAction;
 import org.apache.uima.ruta.action.ActionFactory;
@@ -100,7 +101,7 @@ private RutaExternalFactory external;
 private String namespace;
 private String moduleName;
 private ResourceManager resourceManager;
-
+private UimaContext context;
 public void setResourceManager(ResourceManager resourceManager) {
   this.resourceManager = resourceManager;  
 }
@@ -108,6 +109,10 @@ public void setResourceManager(ResourceM
 public void setExternalFactory(RutaExternalFactory factory) {
        external = factory;
 }
+       public void setContext(UimaContext context){
+           this.context = context;
+           factory.setContext(context);
+       }
 
        public void emitErrorMessage(String msg) {
                System.out.println(msg);

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java 
(original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java 
Thu Oct 30 13:26:41 2014
@@ -21,6 +21,7 @@ package org.apache.uima.ruta;
 
 import java.util.List;
 
+import org.apache.uima.UimaContext;
 import org.apache.uima.ruta.rule.RutaRule;
 
 public abstract class RutaBlock extends RutaStatement {
@@ -37,18 +38,21 @@ public abstract class RutaBlock extends 
 
   private RutaModule script;
 
-  public RutaBlock(RutaBlock parent, String defaultNamespace) {
-    this(null, null, null, parent, defaultNamespace);
+  protected UimaContext context;
+
+  public RutaBlock(RutaBlock parent, String defaultNamespace, UimaContext 
context) {
+    this(null, null, null, parent, defaultNamespace, context);
   }
 
   public RutaBlock(String name, RutaRule rule, List<RutaStatement> elements, 
RutaBlock parent,
-          String defaultNamespace) {
+          String defaultNamespace, UimaContext context) {
     super(parent);
     this.name = name;
     this.rule = rule;
     this.elements = elements;
     this.environment = new RutaEnvironment(this);
     this.namespace = defaultNamespace;
+    this.context = context;
   }
 
   public RutaRule getRule() {
@@ -97,4 +101,12 @@ public abstract class RutaBlock extends 
     return name;
   }
 
+  public UimaContext getContext() {
+    return context;
+  }
+
+  public void setContext(UimaContext context) {
+    this.context = context;
+  }
+
 }

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
 Thu Oct 30 13:26:41 2014
@@ -41,6 +41,7 @@ import org.apache.uima.cas.CASException;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.TypeSystem;
 import org.apache.uima.fit.factory.TypeSystemDescriptionFactory;
+import org.apache.uima.resource.ResourceAccessException;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.resource.metadata.TypeDescription;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
@@ -70,19 +71,26 @@ import org.springframework.core.io.Resou
 public class RutaEnvironment {
 
   private final Object annotationTypeDummy = new Object();
+
   private Map<String, Type> types;
+
   private Map<String, RutaWordList> wordLists;
-  private Map<String, CSVTable> tables;
+
+  private Map<String, RutaTable> tables;
+
   private RutaBlock owner;
+
   /**
-   * Mapping from short type name (e.g. {@code W}) to their disambiguated long 
type names
-   * (e.g. {@code org.apache.uima.ruta.type.W}).
+   * Mapping from short type name (e.g. {@code W}) to their disambiguated long 
type names (e.g.
+   * {@code org.apache.uima.ruta.type.W}).
    */
   private Map<String, String> namespaces;
+
   /**
    * Mapping from ambiguous short type names to all their possible long type 
names.
    */
   private Map<String, Set<String>> ambiguousTypeAlias;
+
   /**
    * Set of imported typesystems.
    */
@@ -93,6 +101,7 @@ public class RutaEnvironment {
    */
   private static class Alias {
     final String longName;
+
     final String shortName;
 
     Alias(String longName, String shortName) {
@@ -102,15 +111,16 @@ public class RutaEnvironment {
   }
 
   /**
-   * Types that are imported in the environment. Keys are type system 
descriptors and values are aliased types.
+   * Types that are imported in the environment. Keys are type system 
descriptors and values are
+   * aliased types.
    */
   private Map<String, List<Alias>> typeImports;
 
   /**
    * Packages that are imported in the environment without a typesystem 
specification.
    *
-   * Keys are package names and values are aliases. An empty string as alias 
means that all types from the package
-   * should be imported in the default namespace.
+   * Keys are package names and values are aliases. An empty string as alias 
means that all types
+   * from the package should be imported in the default namespace.
    */
   private Map<String, List<String>> packageImports;
 
@@ -118,7 +128,9 @@ public class RutaEnvironment {
    * Set of types that are declared in the script.
    */
   private Set<String> declaredAnnotationTypes;
+
   private Map<String, Object> variableValues;
+
   private Map<String, Class<?>> variableTypes;
 
   private Map<String, Class<?>> availableTypes;
@@ -134,11 +146,11 @@ public class RutaEnvironment {
   private Map<String, Object> initializedVariables;
 
   private ResourceManager resourceManager;
-  
+
   public RutaEnvironment(RutaBlock owner) {
     super();
     this.owner = owner;
-    
+
     types = new HashMap<String, Type>();
     namespaces = new HashMap<String, String>();
     ambiguousTypeAlias = new HashMap<String, Set<String>>();
@@ -147,7 +159,7 @@ public class RutaEnvironment {
     packageImports = new HashMap<String, List<String>>();
     declaredAnnotationTypes = new HashSet<String>();
     wordLists = new HashMap<String, RutaWordList>();
-    tables = new HashMap<String, CSVTable>();
+    tables = new HashMap<String, RutaTable>();
     variableValues = new HashMap<String, Object>();
     variableTypes = new HashMap<String, Class<?>>();
     variableGenericTypes = new HashMap<String, Class<?>>();
@@ -185,8 +197,10 @@ public class RutaEnvironment {
   /**
    * Import short type names.
    *
-   * @param cas          Cas to initialize the types for.
-   * @param strictImport Specify whether all types should be imported (false) 
or only types
+   * @param cas
+   *          Cas to initialize the types for.
+   * @param strictImport
+   *          Specify whether all types should be imported (false) or only 
types
    */
   public void initializeTypes(CAS cas, boolean strictImport) {
     this.cas = cas;
@@ -203,7 +217,8 @@ public class RutaEnvironment {
         importPackageAliases(cas.getTypeSystem());
       }
 
-      // "Document" can be resolved to "uima.tcas.DocumentAnnotation" or 
"org.apache.uima.ruta.type.Document",
+      // "Document" can be resolved to "uima.tcas.DocumentAnnotation" or
+      // "org.apache.uima.ruta.type.Document",
       // we force it to the former
       ambiguousTypeAlias.remove("Document");
       namespaces.remove("Document");
@@ -223,7 +238,8 @@ public class RutaEnvironment {
   /**
    * Imports all types that are known to a type system.
    *
-   * @param ts Type system to import.
+   * @param ts
+   *          Type system to import.
    * @throws CASException
    */
   private void importAllTypes(TypeSystem ts) throws CASException {
@@ -239,8 +255,10 @@ public class RutaEnvironment {
   /**
    * Import all types that are declared by the script.
    *
-   * @param casTS Type system containing all known types.
-   * @throws InvalidXMLException When import cannot be resolved.
+   * @param casTS
+   *          Type system containing all known types.
+   * @throws InvalidXMLException
+   *           When import cannot be resolved.
    */
   private void importDeclaredTypes(TypeSystem casTS) throws 
InvalidXMLException {
     for (String name : declaredAnnotationTypes) {
@@ -256,12 +274,15 @@ public class RutaEnvironment {
   /**
    * Import all typesystems that are imported in the script.
    *
-   * @param casTS Type system containing all known types.
-   * @throws InvalidXMLException When import cannot be resolved.
+   * @param casTS
+   *          Type system containing all known types.
+   * @throws InvalidXMLException
+   *           When import cannot be resolved.
    */
   private void importDeclaredTypesystems(TypeSystem casTS) throws 
InvalidXMLException {
     String[] descriptors = typesystems.toArray(new String[typesystems.size()]);
-    TypeSystemDescription ts = 
TypeSystemDescriptionFactory.createTypeSystemDescription(descriptors);
+    TypeSystemDescription ts = TypeSystemDescriptionFactory
+            .createTypeSystemDescription(descriptors);
     ts.resolveImports();
     for (TypeDescription td : ts.getTypes()) {
       Type type = casTS.getType(td.getName());
@@ -276,7 +297,8 @@ public class RutaEnvironment {
   /**
    * Imports all type aliases.
    *
-   * @param casTS Cas type system.
+   * @param casTS
+   *          Cas type system.
    */
   private void importTypeAliases(TypeSystem casTS) {
     for (List<Alias> aliases : typeImports.values()) {
@@ -290,15 +312,15 @@ public class RutaEnvironment {
     }
   }
 
-
   /**
    * Import all packages that are imported by the script.
    *
-   * @param casTS Type system containing all known types.
+   * @param casTS
+   *          Type system containing all known types.
    */
   private void importPackageAliases(TypeSystem casTS) {
     Iterator<Type> iter = casTS.getTypeIterator();
-    while(iter.hasNext()) {
+    while (iter.hasNext()) {
       Type type = iter.next();
       String name = type.getName();
       String pkg = name.substring(0, Math.max(name.lastIndexOf('.'), 0));
@@ -355,9 +377,11 @@ public class RutaEnvironment {
   /**
    * Resolves an annotation type.
    *
-   * @param match Annotation type to resolve.
+   * @param match
+   *          Annotation type to resolve.
    * @return Resolved annotation type or null if match is unknown.
-   * @throws IllegalArgumentException When {@code match} is ambiguous.
+   * @throws IllegalArgumentException
+   *           When {@code match} is ambiguous.
    */
   public Type getType(String match) {
     // make sure that match is not ambiguous
@@ -399,7 +423,8 @@ public class RutaEnvironment {
   /**
    * Add a typesystem to the script.
    *
-   * @param descriptor Type system's descriptor path.
+   * @param descriptor
+   *          Type system's descriptor path.
    */
   public void addTypeSystem(String descriptor) {
     typesystems.add(descriptor);
@@ -408,8 +433,10 @@ public class RutaEnvironment {
   /**
    * Import a type in the current namespace.
    *
-   * @param longName  Complete type name.
-   * @param shortName Short type name (without namespace).
+   * @param longName
+   *          Complete type name.
+   * @param shortName
+   *          Short type name (without namespace).
    */
   private void importType(String longName, String shortName) {
     Set<String> targets = ambiguousTypeAlias.get(shortName);
@@ -437,12 +464,15 @@ public class RutaEnvironment {
   /**
    * Import a type from a type system.
    *
-   * @param typesystem Typesystem from which to import the type or null.
-   * @param longName Type to import.
-   * @param shortName  Short name to use for this type.
+   * @param typesystem
+   *          Typesystem from which to import the type or null.
+   * @param longName
+   *          Type to import.
+   * @param shortName
+   *          Short name to use for this type.
    */
   public void importTypeFromTypeSystem(String typesystem, String longName, 
String shortName) {
-    String key = typesystem != null? typesystem : "";
+    String key = typesystem != null ? typesystem : "";
     List<Alias> aliases = typeImports.get(key);
 
     if (aliases == null) {
@@ -458,21 +488,27 @@ public class RutaEnvironment {
    *
    * The type is aliased by its unqualified name.
    *
-   * @param typesystem Typesystem from which to import the type or null.
-   * @param longName Type to import.
+   * @param typesystem
+   *          Typesystem from which to import the type or null.
+   * @param longName
+   *          Type to import.
    */
   public void importTypeFromTypeSystem(String typesystem, String longName) {
-    importTypeFromTypeSystem(typesystem, longName, 
longName.substring(longName.lastIndexOf('.') + 1));
+    importTypeFromTypeSystem(typesystem, longName,
+            longName.substring(longName.lastIndexOf('.') + 1));
   }
 
   /**
    * Import all the types from a package.
    *
-   * @param typesystem  Type system describing the package to load.
-   * @param packageName Package to load or null to load all packages.
+   * @param typesystem
+   *          Type system describing the package to load.
+   * @param packageName
+   *          Package to load or null to load all packages.
    */
   public void importPackageFromTypeSystem(String typesystem, String 
packageName, String alias) {
-    TypeSystemDescription tsd = 
TypeSystemDescriptionFactory.createTypeSystemDescription(typesystem);
+    TypeSystemDescription tsd = TypeSystemDescriptionFactory
+            .createTypeSystemDescription(typesystem);
     try {
       tsd.resolveImports(getResourceManager());
     } catch (InvalidXMLException e) {
@@ -481,8 +517,8 @@ public class RutaEnvironment {
 
     for (TypeDescription td : tsd.getTypes()) {
       String qname = td.getName();
-      if (packageName == null ||
-          (qname.startsWith(packageName) && qname.indexOf('.', 
packageName.length() + 1) == -1)) {
+      if (packageName == null
+              || (qname.startsWith(packageName) && qname.indexOf('.', 
packageName.length() + 1) == -1)) {
         // td is in packageName
         if (alias != null) {
           String shortName = alias + "." + 
qname.substring(qname.lastIndexOf('.') + 1);
@@ -497,8 +533,10 @@ public class RutaEnvironment {
   /**
    * Imports all the packages from the specified type system.
    *
-   * @param typesystem Typesystem to load.
-   * @param alias      Alias for all the packages.
+   * @param typesystem
+   *          Typesystem to load.
+   * @param alias
+   *          Alias for all the packages.
    */
   public void importAllPackagesFromTypeSystem(String typesystem, String alias) 
{
     importPackageFromTypeSystem(typesystem, null, alias);
@@ -507,8 +545,10 @@ public class RutaEnvironment {
   /**
    * Import all the types from a package that are available at runtime.
    *
-   * @param packageName Package to load.
-   * @param alias Alias of the package. Null or empty string to use no alias.
+   * @param packageName
+   *          Package to load.
+   * @param alias
+   *          Alias of the package. Null or empty string to use no alias.
    */
   public void importPackage(String packageName, String alias) {
     List<String> aliases = packageImports.get(packageName);
@@ -517,27 +557,37 @@ public class RutaEnvironment {
       packageImports.put(packageName, aliases);
     }
 
-    aliases.add(alias == null? "" : alias);
+    aliases.add(alias == null ? "" : alias);
   }
 
   public RutaWordList getWordList(String list) {
     RutaWordList result = wordLists.get(list);
     if (result == null) {
-      ResourceLoader resourceLoader = new 
RutaResourceLoader(getResourcePaths());
-      Resource resource = resourceLoader.getResource(list);
-      if (resource.exists()) {
-        try {
-          if (list.endsWith("mtwl")) {
-            wordLists.put(list, new MultiTreeWordList(resource));
-          } else {
-            wordLists.put(list, new TreeWordList(resource));
+      if (list.endsWith("txt") || list.endsWith("mtwl")) {
+        ResourceLoader resourceLoader = new 
RutaResourceLoader(getResourcePaths());
+        Resource resource = resourceLoader.getResource(list);
+        if (resource.exists()) {
+          try {
+            if (list.endsWith("mtwl")) {
+              wordLists.put(list, new MultiTreeWordList(resource));
+            } else {
+              wordLists.put(list, new TreeWordList(resource));
+            }
+          } catch (IOException e) {
+            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
+                    "Error reading word list" + list, e);
           }
-        } catch (IOException e) {
-          Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
-                  "Error reading word list" + list, e);
+        } else {
+          Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Can't 
find " + list + "!");
         }
       } else {
-        Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Can't 
find " + list + "!");
+        try {
+          RutaWordList rutaTable = (RutaWordList) 
owner.getContext().getResourceObject(list);
+          wordLists.put(list, rutaTable);
+        } catch (ResourceAccessException e) {
+          Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
+                  "Can't find external resource table" + list, e);
+        }
       }
     }
 
@@ -547,17 +597,28 @@ public class RutaEnvironment {
   public RutaTable getWordTable(String table) {
     RutaTable result = tables.get(table);
     if (result == null) {
-      ResourceLoader resourceLoader = new 
RutaResourceLoader(getResourcePaths());
-      Resource resource = resourceLoader.getResource(table);
-      if (resource.exists()) {
+      if (table.endsWith("csv")) {
+        ResourceLoader resourceLoader = new 
RutaResourceLoader(getResourcePaths());
+        Resource resource = resourceLoader.getResource(table);
+        if (resource.exists()) {
+          try {
+            tables.put(table, new CSVTable(resource));
+          } catch (IOException e) {
+            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
+                    "Error reading csv table " + table, e);
+          }
+        } else {
+          Logger.getLogger(this.getClass().getName())
+                  .log(Level.SEVERE, "Can't find " + table + "!");
+        }
+      } else {
         try {
-          tables.put(table, new CSVTable(resource));
-        } catch (IOException e) {
+          RutaTable rutaTable = (RutaTable) 
owner.getContext().getResourceObject(table);
+          tables.put(table, rutaTable);
+        } catch (ResourceAccessException e) {
           Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
-                  "Error reading csv table " + table, e);
+                  "Can't find external resource table" + table, e);
         }
-      } else {
-        Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Can't 
find " + table + "!");
       }
     }
 
@@ -632,7 +693,7 @@ public class RutaEnvironment {
   public boolean isVariableOfType(String name, String type) {
     return ownsVariableOfType(name, type)
             || (owner.getParent() != null && owner.getParent().getEnvironment()
-            .isVariableOfType(name, type));
+                    .isVariableOfType(name, type));
   }
 
   public Class<?> getVariableType(String name) {
@@ -800,13 +861,13 @@ public class RutaEnvironment {
   }
 
   public ResourceManager getResourceManager() {
-    if(resourceManager != null) {
+    if (resourceManager != null) {
       return resourceManager;
     } else {
       RutaBlock parent = owner.getParent();
-      if(parent != null) {
+      if (parent != null) {
         return parent.getEnvironment().getResourceManager();
-      } 
+      }
     }
     // at least return default resource manager
     return UIMAFramework.newDefaultResourceManager();

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptBlock.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptBlock.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptBlock.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptBlock.java
 Thu Oct 30 13:26:41 2014
@@ -35,7 +35,7 @@ public class RutaScriptBlock extends Rut
 
   public RutaScriptBlock(String id, RutaRule rule, List<RutaStatement> 
elements, RutaBlock parent,
           String defaultNamespace) {
-    super(id, rule, elements, parent, defaultNamespace);
+    super(id, rule, elements, parent, defaultNamespace, parent != null ? 
parent.getContext() : null);
   }
 
   @Override

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptFactory.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptFactory.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptFactory.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaScriptFactory.java
 Thu Oct 30 13:26:41 2014
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.TreeMap;
 
 import org.antlr.runtime.Token;
+import org.apache.uima.UimaContext;
 import org.apache.uima.ruta.action.AbstractRutaAction;
 import org.apache.uima.ruta.condition.AbstractRutaCondition;
 import org.apache.uima.ruta.expression.IRutaExpression;
@@ -59,6 +60,8 @@ public class RutaScriptFactory {
 
   private int idCounter = 0;
 
+  private UimaContext context;
+
   public RutaScriptFactory() {
     super();
   }
@@ -104,6 +107,7 @@ public class RutaScriptFactory {
     container.setContainer(createRule);
 
     result.setRule(createRule);
+    result.setContext(context);
     return result;
   }
 
@@ -192,8 +196,8 @@ public class RutaScriptFactory {
     return new RegExpRule(null, null, idCounter++, env);
   }
 
-  public List<RuleElement> processConjunctRules(List<RuleElement> reList,
-          List<Token> conList, RuleElementContainer container, RutaBlock env) {
+  public List<RuleElement> processConjunctRules(List<RuleElement> reList, 
List<Token> conList,
+          RuleElementContainer container, RutaBlock env) {
     boolean isConjunct = false;
     for (Token token : conList) {
       if (token != null) {
@@ -224,8 +228,8 @@ public class RutaScriptFactory {
       }
     }
     List<RuleElement> elements = new ArrayList<RuleElement>();
-    
-    ConjunctRulesRuleElement cr = new ConjunctRulesRuleElement(null, 
container, env); 
+
+    ConjunctRulesRuleElement cr = new ConjunctRulesRuleElement(null, 
container, env);
     for (List<RuleElement> each : map.values()) {
       ComposedRuleElement cre = createComposedRuleElement(each, null, null, 
null, cr, env);
       for (RuleElement ruleElement : each) {
@@ -240,4 +244,12 @@ public class RutaScriptFactory {
     return result;
   }
 
+  public UimaContext getContext() {
+    return context;
+  }
+
+  public void setContext(UimaContext context) {
+    this.context = context;
+  }
+
 }

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
 Thu Oct 30 13:26:41 2014
@@ -440,6 +440,7 @@ public class RutaEngine extends JCasAnno
       this.context = aContext;
 
       factory = new RutaExternalFactory();
+      factory.setContext(aContext);
       engineLoader = new RutaEngineLoader();
       verbalizer = new RutaVerbalizer();
 
@@ -922,6 +923,7 @@ public class RutaEngine extends JCasAnno
     RutaLexer lexer = new RutaLexer(st);
     CommonTokenStream tokens = new CommonTokenStream(lexer);
     RutaParser parser = new RutaParser(tokens);
+    parser.setContext(context);
     parser.setExternalFactory(factory);
     parser.setResourcePaths(resourcePaths);
     parser.setResourceManager(resourceManager);
@@ -944,6 +946,7 @@ public class RutaEngine extends JCasAnno
     CommonTokenStream tokens = new CommonTokenStream(lexer);
     RutaParser parser = new RutaParser(tokens);
     parser.setExternalFactory(factory);
+    parser.setContext(context);
     parser.setResourcePaths(resourcePaths);
     String name = scriptLocation;
     if (scriptLocation.indexOf("/") != -1) {

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java?rev=1635493&r1=1635492&r2=1635493&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
 Thu Oct 30 13:26:41 2014
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.antlr.runtime.Token;
+import org.apache.uima.UimaContext;
 import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.action.AbstractRutaAction;
 import org.apache.uima.ruta.condition.AbstractRutaCondition;
@@ -49,6 +50,8 @@ public class RutaExternalFactory {
 
   private Map<String, IRutaBlockExtension> blockExtensions;
 
+  private UimaContext context;
+
   public RutaExternalFactory() {
     super();
     conditionExtensions = new HashMap<String, IRutaConditionExtension>();
@@ -128,18 +131,19 @@ public class RutaExternalFactory {
 
   public RutaBlock createExternalBlock(Token type, List<RutaExpression> args, 
RutaBlock env)
           throws RutaParseException {
-               if(type == null) {
-                 return null;
-               }
-               String t = type.getText();
-               IRutaBlockExtension extension = blockExtensions.get(t);
-               if(extension != null) {
-                 return extension.createBlock(t, args, env);
-               }
-               return null;
-       }
-  
-  
+    if (type == null) {
+      return null;
+    }
+    String t = type.getText();
+    IRutaBlockExtension extension = blockExtensions.get(t);
+    if (extension != null) {
+      RutaBlock rutaBlock = extension.createBlock(t, args, env);
+      rutaBlock.setContext(context);
+      return rutaBlock;
+    }
+    return null;
+  }
+
   public void addExtension(String id, IRutaExtension extension) {
     if (extension instanceof IRutaActionExtension) {
       addActionExtension(id, (IRutaActionExtension) extension);
@@ -181,7 +185,7 @@ public class RutaExternalFactory {
   public void addTypeFunctionExtension(String id, IRutaTypeFunctionExtension 
extension) {
     typeFunctionExtensions.put(id, extension);
   }
-  
+
   public void addBlockExtension(String id, IRutaBlockExtension extension) {
     blockExtensions.put(id, extension);
   }
@@ -196,7 +200,8 @@ public class RutaExternalFactory {
     return numberFunctionExtensions;
   }
 
-  public void setNumberFunctionExtensions(Map<String, 
IRutaNumberFunctionExtension> numberFunctionExtensions) {
+  public void setNumberFunctionExtensions(
+          Map<String, IRutaNumberFunctionExtension> numberFunctionExtensions) {
     this.numberFunctionExtensions = numberFunctionExtensions;
   }
 
@@ -204,7 +209,8 @@ public class RutaExternalFactory {
     return stringFunctionExtensions;
   }
 
-  public void setStringFunctionExtensions(Map<String, 
IRutaStringFunctionExtension> stringFunctionExtensions) {
+  public void setStringFunctionExtensions(
+          Map<String, IRutaStringFunctionExtension> stringFunctionExtensions) {
     this.stringFunctionExtensions = stringFunctionExtensions;
   }
 
@@ -212,15 +218,17 @@ public class RutaExternalFactory {
     return booleanFunctionExtensions;
   }
 
-  public void setBooleanFunctionExtensions(Map<String, 
IRutaBooleanFunctionExtension> booleanFunctionExtensions) {
+  public void setBooleanFunctionExtensions(
+          Map<String, IRutaBooleanFunctionExtension> 
booleanFunctionExtensions) {
     this.booleanFunctionExtensions = booleanFunctionExtensions;
   }
 
   public Map<String, IRutaTypeFunctionExtension> getTypeFunctionExtensions() {
     return typeFunctionExtensions;
-  }  
-  
-  public void setTypeFunctionExtensions(Map<String, 
IRutaTypeFunctionExtension> typeFunctionExtensions) {
+  }
+
+  public void setTypeFunctionExtensions(
+          Map<String, IRutaTypeFunctionExtension> typeFunctionExtensions) {
     this.typeFunctionExtensions = typeFunctionExtensions;
   }
 
@@ -239,7 +247,7 @@ public class RutaExternalFactory {
   public void setConditionExtensions(Map<String, IRutaConditionExtension> 
conditionExtensions) {
     this.conditionExtensions = conditionExtensions;
   }
-  
+
   public Map<String, IRutaBlockExtension> getBlockExtensions() {
     return blockExtensions;
   }
@@ -248,5 +256,12 @@ public class RutaExternalFactory {
     this.blockExtensions = blockExtensions;
   }
 
+  public UimaContext getContext() {
+    return context;
+  }
+
+  public void setContext(UimaContext context) {
+    this.context = context;
+  }
 
 }


Reply via email to