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 2015/03/22 16:07:59 UTC
svn commit: r1668386 - in /uima/ruta/trunk:
ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/
ruta-core/src/main/java/org/apache/uima/ruta/descriptor/ ruta-ep-engine/
ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/
ruta-ep-ide/sr...
Author: pkluegl
Date: Sun Mar 22 15:07:59 2015
New Revision: 1668386
URL: http://svn.apache.org/r1668386
Log:
UIMA-3327
- moved and renamed descriptor building
Added:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaBuildOptions.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorInformation.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/StringTriple.java
Removed:
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/DescriptorManager.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuildOptions.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaSimpleBuilder.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/StringTriple.java
Modified:
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
uima/ruta/trunk/ruta-ep-engine/pom.xml
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaModuleDeclaration.java
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=1668386&r1=1668385&r2=1668386&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 Sun Mar 22 15:07:59 2015
@@ -54,6 +54,7 @@ import org.apache.uima.resource.metadata
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.UimaContext;
+import org.apache.uima.ruta.descriptor.*;
import org.apache.uima.ruta.action.AbstractRutaAction;
import org.apache.uima.ruta.action.ActionFactory;
import org.apache.uima.ruta.condition.AbstractRutaCondition;
@@ -102,6 +103,18 @@ private String namespace;
private String moduleName;
private ResourceManager resourceManager;
private UimaContext context;
+
+private RutaDescriptorInformation descInfo;
+
+
+public void setDescriptorInformation(RutaDescriptorInformation descInfo) {
+ this.descInfo = descInfo;
+}
+
+public RutaDescriptorInformation getDescriptorInformation() {
+ return descInfo;
+}
+
public void setResourceManager(ResourceManager resourceManager) {
this.resourceManager = resourceManager;
}
@@ -205,7 +218,8 @@ public void setExternalFactory(RutaExter
if (!type.contains(".")) {
resolvedType = namespace + "." + moduleName + "." + type;
}
- parent.getEnvironment().declareType(resolvedType);
+ parent.getEnvironment().declareType(resolvedType);
+
}
public boolean isType(RutaBlock parent, String type) {
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaBuildOptions.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaBuildOptions.java?rev=1668386&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaBuildOptions.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaBuildOptions.java Sun Mar 22 15:07:59 2015
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.descriptor;
+
+import java.util.List;
+
+public class RutaBuildOptions {
+
+ private final List<String> language;
+
+ private final List<String> engines;
+
+ private boolean importByName = false;
+
+ private boolean resolveImports = false;
+
+ private boolean errorOnDuplicateShortNames;
+
+ public RutaBuildOptions(List<String> language, List<String> engines) {
+ super();
+ this.language = language;
+ this.engines = engines;
+ }
+
+ public List<String> getLanguage() {
+ return language;
+ }
+
+ public List<String> getEngines() {
+ return engines;
+ }
+
+ public void setImportByName(boolean importByName) {
+ this.importByName = importByName;
+ }
+
+ public boolean isImportByName() {
+ return importByName;
+ }
+
+ public void setResolveImports(boolean resolveImports) {
+ this.resolveImports = resolveImports;
+ }
+
+ public boolean isResolveImports() {
+ return resolveImports;
+ }
+
+ public void setErrorOnDuplicateShortNames(boolean error) {
+ this.errorOnDuplicateShortNames = error;
+ }
+
+ public boolean isErrorOnDuplicateShortNames() {
+ return errorOnDuplicateShortNames;
+ }
+
+}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java?rev=1668386&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorBuilder.java Sun Mar 22 15:07:59 2015
@@ -0,0 +1,505 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.descriptor;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.uima.ResourceSpecifierFactory;
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.TypeSystem;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.resource.ResourceManager;
+import org.apache.uima.resource.impl.ResourceManager_impl;
+import org.apache.uima.resource.metadata.Capability;
+import org.apache.uima.resource.metadata.ConfigurationParameterSettings;
+import org.apache.uima.resource.metadata.FsIndexDescription;
+import org.apache.uima.resource.metadata.Import;
+import org.apache.uima.resource.metadata.TypeDescription;
+import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.apache.uima.resource.metadata.impl.Import_impl;
+import org.apache.uima.ruta.UIMAConstants;
+import org.apache.uima.ruta.engine.RutaEngine;
+import org.apache.uima.util.CasCreationUtils;
+import org.apache.uima.util.InvalidXMLException;
+import org.apache.uima.util.XMLInputSource;
+import org.apache.uima.util.XMLSerializer;
+import org.apache.uima.util.XMLizable;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+public class RutaDescriptorBuilder {
+
+ private static ResourceSpecifierFactory uimaFactory = UIMAFramework.getResourceSpecifierFactory();
+
+ private TypeSystemDescription typeSystemDescription;
+
+ private AnalysisEngineDescription analysisEngineDescription;
+
+ private final String defaultTypeSystem;
+
+ private ResourceManager rm;
+
+ public RutaDescriptorBuilder(String defaultTypeSystem, String defaultEngine)
+ throws InvalidXMLException, IOException {
+ super();
+ this.defaultTypeSystem = defaultTypeSystem;
+ initialize(defaultEngine);
+ }
+
+ private void initialize(String defaultEngine) throws InvalidXMLException, IOException {
+ typeSystemDescription = uimaFactory.createTypeSystemDescription();
+ analysisEngineDescription = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
+ new XMLInputSource(new File(defaultEngine)));
+
+ }
+
+ public void build(RutaDescriptorInformation desc, String typeSystemOutput, String engineOutput,
+ RutaBuildOptions option, String mainScript, String[] scriptPaths, String[] enginePaths,
+ ClassLoader classloader) throws SAXException, InvalidXMLException,
+ IOException, ResourceInitializationException, URISyntaxException {
+
+ rm = new ResourceManager_impl(classloader);
+ String dataPath = "";
+ for (String string : enginePaths) {
+ dataPath += string + File.pathSeparator;
+ }
+ rm.setDataPath(dataPath);
+
+ Map<String, String> typeNameMap = new HashMap<String, String>();
+ Capability capability = uimaFactory.createCapability();
+ // String defaultTypeSystem2 = defaultTypeSystem.replaceAll("/", "\\\\");
+ File defaultTypeSystemFile = new File(defaultTypeSystem);
+ if (!defaultTypeSystemFile.exists()) {
+ System.out.println("Does not exist: " + defaultTypeSystemFile.getName());
+ }
+ TypeSystemDescription initialTypeSystem = UIMAFramework.getXMLParser()
+ .parseTypeSystemDescription(new XMLInputSource(defaultTypeSystemFile));
+ CAS cas = CasCreationUtils.createCas(initialTypeSystem, null, new FsIndexDescription[0]);
+ fillTypeNameMap(typeNameMap, cas.getTypeSystem());
+ cas.release();
+ List<TypeSystemDescription> toInclude = new ArrayList<TypeSystemDescription>();
+ List<Import> importList = new ArrayList<Import>();
+ Import_impl import_impl = new Import_impl();
+ if (option.isImportByName()) {
+ String name = initialTypeSystem.getName();
+ import_impl.setName(name);
+ } else if (option.isResolveImports()) {
+ String absoluteLocation = initialTypeSystem.getSourceUrlString();
+ import_impl.setLocation(absoluteLocation);
+ } else {
+ String relativeLocation = getRelativeLocation(defaultTypeSystemFile.toURI(),
+ typeSystemOutput);
+ import_impl.setLocation(relativeLocation);
+ }
+ importList.add(import_impl);
+ for (String eachName : desc.getImportedTypeSystems()) {
+ String locate = RutaEngine.locate(eachName, enginePaths, ".xml");
+ URL url = null;
+ boolean include = false;
+ if (locate != null) {
+ File file = new File(locate);
+ url = file.toURI().toURL();
+ }
+ if (url == null) {
+ url = checkImportExistence(eachName, "xml", classloader);
+ include = true;
+ if (url == null) {
+ throw new FileNotFoundException("Build process can't find " + eachName + " in "
+ + mainScript);
+ }
+ }
+ TypeSystemDescription each = getTypeSystemDescriptor(url, option);
+ if (each != null) {
+ fillTypeNameMap(typeNameMap, each);
+ if (include) {
+ // need to include the complete type system because an import is not possible
+ each.resolveImports(rm);
+ toInclude.add(each);
+ } else {
+ import_impl = new Import_impl();
+ if (option.isImportByName()) {
+ import_impl.setName(eachName);
+ } else if (option.isResolveImports()) {
+ String absoluteLocation = each.getSourceUrlString();
+ import_impl.setLocation(absoluteLocation);
+ } else {
+ String relativeLocation = getRelativeLocation(url.toURI(), typeSystemOutput);
+ File parentFile = new File(typeSystemOutput).getParentFile();
+ File targetFile = new File(parentFile, relativeLocation);
+ boolean ableToFindFile = targetFile.exists();
+ if (!ableToFindFile) {
+ // hotfix for different partitions making trouble for the relative path
+ import_impl.setName(eachName);
+ } else {
+ import_impl.setLocation(relativeLocation);
+ }
+ }
+ importList.add(import_impl);
+ }
+ } else {
+ throw new FileNotFoundException("Build process can't find " + eachName + " in "
+ + mainScript);
+ }
+ }
+ for (String eachName : desc.getImportedScripts()) {
+ // TODO
+ String locate = RutaEngine.locate(eachName, enginePaths, "TypeSystem.xml");
+ File file = new File(locate);
+ URL url = file.toURI().toURL();
+ TypeSystemDescription each = getTypeSystemDescriptor(url, option);
+ if (each != null) {
+ fillTypeNameMap(typeNameMap, each);
+ import_impl = new Import_impl();
+ if (option.isImportByName()) {
+ import_impl.setName(eachName + "TypeSystem");
+ } else if (option.isResolveImports()) {
+ String absoluteLocation = each.getSourceUrlString();
+ import_impl.setLocation(absoluteLocation);
+ } else {
+ String relativeLocation = getRelativeLocation(file.toURI(), typeSystemOutput);
+ import_impl.setLocation(relativeLocation);
+ }
+ importList.add(import_impl);
+ } else {
+ throw new FileNotFoundException("Build process can't find " + eachName + " in "
+ + mainScript);
+ }
+ }
+ typeSystemDescription = CasCreationUtils.mergeTypeSystems(toInclude, rm);
+ Import[] newImports = importList.toArray(new Import[0]);
+ typeSystemDescription.setImports(newImports);
+ if (option.isResolveImports()) {
+ typeSystemDescription.resolveImports(rm);
+ }
+
+ // TODO hotfixes: where do I get the final types??
+ Set<String> finalTypes = new HashSet<String>();
+ finalTypes.addAll(Arrays.asList(new String[] { "uima.cas.Boolean", "uima.cas.Byte",
+ "uima.cas.Short", "uima.cas.Integer", "uima.cas.Long", "uima.cas.Float", "uima.cas.Double",
+ "uima.cas.BooleanArray", "uima.cas.ByteArray", "uima.cas.ShortArray",
+ "uima.cas.IntegerArray", "uima.cas.LongArray", "uima.cas.FloatArray",
+ "uima.cas.DoubleArray", "uima.cas.StringArray", "uima.cas.FSArray" }));
+
+ int typeIndex = 0;
+ for (String eachType : desc.getTypeShortNames()) {
+ StringTriple typeTriple = desc.getTypeTriples().get(typeIndex);
+ typeTriple = resolveType(typeTriple, typeNameMap, mainScript);
+ if (typeSystemDescription.getType(typeTriple.getName()) != null) {
+ continue;
+ }
+ if (!finalTypes.contains(typeTriple.getParent())) {
+ TypeDescription newType = typeSystemDescription.addType(typeTriple.getName(),
+ typeTriple.getDescription(), typeTriple.getParent());
+ capability.addInputType(typeTriple.getName(), false);
+ capability.addOutputType(typeTriple.getName(), false);
+ Collection<StringTriple> collection = desc.getFeatures().get(eachType);
+ if (collection != null) {
+ for (StringTriple eachFeature : collection) {
+ eachFeature = resolveFeature(eachFeature, typeNameMap);
+ newType.addFeature(eachFeature.getName(), eachFeature.getDescription(),
+ eachFeature.getParent());
+ // capability.addInputFeature(eachFeature.getName());
+ // capability.addOutputFeature(eachFeature.getName());
+ }
+ }
+ }
+ typeIndex++;
+ }
+
+ Set<String> names = new HashSet<String>();
+ Collection<TypeDescription> types = new HashSet<TypeDescription>();
+ for (TypeDescription each : typeSystemDescription.getTypes()) {
+ String name = each.getName();
+ if (!names.contains(name)) {
+ names.add(name);
+ types.add(each);
+ }
+ }
+
+ File typeSystemFile = getFile(typeSystemOutput);
+ TypeDescription[] presentTypes = typeSystemDescription.getTypes();
+
+ types.addAll(Arrays.asList(presentTypes));
+ typeSystemDescription.setTypes(types.toArray(new TypeDescription[0]));
+ typeSystemDescription.setName(mainScript + "TypeSystem");
+ typeSystemDescription.setSourceUrl(typeSystemFile.toURI().toURL());
+ TypeSystemDescription aets = uimaFactory.createTypeSystemDescription();
+ import_impl = new Import_impl();
+ if (option.isImportByName()) {
+ import_impl.setName(typeSystemDescription.getName());
+ } else {
+ String relativeLocation = getRelativeLocation(new File(engineOutput).toURI(), typeSystemOutput);
+ import_impl.setLocation(relativeLocation);
+ }
+
+ File engineFile = configureEngine(desc, engineOutput, option, mainScript, scriptPaths,
+ enginePaths, capability, import_impl, aets);
+
+ toFile(typeSystemDescription, typeSystemFile);
+ toFile(analysisEngineDescription, engineFile);
+ }
+
+ private void fillTypeNameMap(Map<String, String> typeNameMap, TypeSystem typeSystem) {
+ Iterator<Type> typeIterator = typeSystem.getTypeIterator();
+ while (typeIterator.hasNext()) {
+ Type type = (Type) typeIterator.next();
+ String shortName = type.getShortName();
+ String name = type.getName();
+ typeNameMap.put(shortName, name);
+ }
+ }
+
+ private boolean fillTypeNameMap(Map<String, String> typeNameMap, TypeSystemDescription desc) {
+ boolean contained = false;
+ for (TypeDescription each : desc.getTypes()) {
+ String name = each.getName();
+ int lastIndexOf = name.lastIndexOf(".");
+ String shortName = name.substring(lastIndexOf + 1, name.length());
+ typeNameMap.put(shortName, name);
+ }
+ return contained;
+ }
+
+ private StringTriple resolveFeature(StringTriple eachFeature, Map<String, String> types) {
+ String parent = eachFeature.getParent();
+ String name = eachFeature.getName();
+ parent = translate(parent);
+ if (parent.indexOf(".") == -1 && types.containsKey(parent)) {
+ parent = types.get(parent);
+ }
+ return new StringTriple(name, eachFeature.getDescription(), parent);
+ }
+
+ private StringTriple resolveType(StringTriple typeTriple, Map<String, String> types,
+ String packageName) {
+ String parent = typeTriple.getParent();
+ String name = typeTriple.getName();
+ if (parent == null) {
+ parent = "uima.tcas.Annotation";
+ }
+ parent = translate(parent);
+ name = translate(name);
+ if (parent.indexOf(".") == -1 && types.containsKey(parent)) {
+ parent = types.get(parent);
+ }
+ if (name.indexOf(".") == -1) {
+ if (types.containsKey(name)) {
+ name = types.get(name);
+ } else {
+ name = packageName + "." + name;
+ }
+ }
+ int lastIndexOf = name.lastIndexOf(".");
+ String shortName = name.substring(lastIndexOf + 1, name.length());
+ types.put(shortName, name);
+ return new StringTriple(name, typeTriple.getDescription(), parent);
+ }
+
+ private String translate(String name) {
+ if (name == null) {
+ return null;
+ }
+ if (name.equals("Annotation")) {
+ return "uima.tcas.Annotation";
+ } else if (name.equals("STRING")) {
+ return UIMAConstants.TYPE_STRING;
+ } else if (name.equals("INT")) {
+ return UIMAConstants.TYPE_INTEGER;
+ } else if (name.equals("DOUBLE")) {
+ return UIMAConstants.TYPE_DOUBLE;
+ } else if (name.equals("FLOAT")) {
+ return UIMAConstants.TYPE_FLOAT;
+ } else if (name.equals("BOOLEAN")) {
+ return UIMAConstants.TYPE_BOOLEAN;
+ } else if (name.equals("TYPE")) {
+ return UIMAConstants.TYPE_STRING;
+ }
+ return name;
+ }
+
+ private File configureEngine(RutaDescriptorInformation desc, String engineOutput,
+ RutaBuildOptions option, String mainScript, String[] scriptPaths,
+ String[] descriptorPaths, Capability capability, Import_impl import_impl,
+ TypeSystemDescription aets) throws MalformedURLException {
+ aets.setImports(new Import[] { import_impl });
+ analysisEngineDescription.getAnalysisEngineMetaData().setTypeSystem(aets);
+ File file = getFile(engineOutput);
+ analysisEngineDescription.setSourceUrl(file.toURI().toURL());
+
+ if (!desc.getTypeShortNames().isEmpty()) {
+ Capability[] capabilities = analysisEngineDescription.getAnalysisEngineMetaData()
+ .getCapabilities();
+ Capability[] newArray = new Capability[capabilities.length + 1];
+ System.arraycopy(capabilities, 0, newArray, 0, capabilities.length);
+ newArray[capabilities.length] = capability;
+ analysisEngineDescription.getAnalysisEngineMetaData().setCapabilities(newArray);
+ }
+
+ analysisEngineDescription.getAnalysisEngineMetaData().getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_MAIN_SCRIPT, mainScript);
+ analysisEngineDescription.getAnalysisEngineMetaData().getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_SCRIPT_PATHS, scriptPaths);
+ analysisEngineDescription.getAnalysisEngineMetaData().getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_DESCRIPTOR_PATHS, descriptorPaths);
+ String[] parameterValue = (String[]) analysisEngineDescription.getAnalysisEngineMetaData()
+ .getConfigurationParameterSettings().getParameterValue(RutaEngine.PARAM_RESOURCE_PATHS);
+ Set<String> resourceLocations = new HashSet<String>();
+
+ if (parameterValue != null && parameterValue.length != 0) {
+ resourceLocations.addAll(Arrays.asList(parameterValue));
+ }
+ for (String string : descriptorPaths) {
+ File descDir = new File(string);
+ File defaultResourceDir = new File(descDir.getParent(),
+ "resources");
+ resourceLocations.add(defaultResourceDir.getAbsolutePath());
+ }
+ analysisEngineDescription
+ .getAnalysisEngineMetaData()
+ .getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_RESOURCE_PATHS,
+ resourceLocations.toArray(new String[0]));
+
+ String[] additionalScriptsArray = desc.getImportedScripts().toArray(new String[] {});
+ analysisEngineDescription.getAnalysisEngineMetaData().getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_ADDITIONAL_SCRIPTS, additionalScriptsArray);
+
+ String[] additionalEnginesArray = desc.getImportedEngines().toArray(new String[] {});
+ analysisEngineDescription.getAnalysisEngineMetaData().getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_ADDITIONAL_ENGINES, additionalEnginesArray);
+
+ String[] additionalUimafitEnginesArray = desc.getImportedUimafitEngines().toArray(
+ new String[] {});
+ analysisEngineDescription
+ .getAnalysisEngineMetaData()
+ .getConfigurationParameterSettings()
+ .setParameterValue(RutaEngine.PARAM_ADDITIONAL_UIMAFIT_ENGINES,
+ additionalUimafitEnginesArray);
+
+ analysisEngineDescription.getAnalysisEngineMetaData().setTypeSystem(typeSystemDescription);
+
+ configureExtensions(option);
+ return file;
+ }
+
+ private String getRelativeLocation(URI target, String base) {
+ Path basePath = Paths.get(base);
+ if( !basePath.toFile().isDirectory()) {
+ basePath = basePath.getParent();
+ }
+ Path targetPath;
+ targetPath = Paths.get(target);
+ Path relativePath = basePath.relativize(targetPath);
+ return relativePath.toString();
+ }
+
+ private void configureExtensions(RutaBuildOptions options) {
+ ConfigurationParameterSettings configurationParameterSettings = analysisEngineDescription
+ .getAnalysisEngineMetaData().getConfigurationParameterSettings();
+
+ List<String> languageExtensions = options.getLanguage();
+
+ String[] extensions = (String[]) configurationParameterSettings
+ .getParameterValue(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS);
+ String[] loaders = (String[]) configurationParameterSettings
+ .getParameterValue(RutaEngine.PARAM_ADDITIONAL_ENGINE_LOADERS);
+
+ List<String> es = new ArrayList<String>();
+ List<String> ls = new ArrayList<String>();
+ if(extensions != null) {
+ es.addAll(Arrays.asList(extensions));
+ }
+ es.addAll(languageExtensions);
+ if(loaders != null) {
+ ls.addAll(Arrays.asList(loaders));
+ }
+ ls.addAll(options.getEngines());
+
+ configurationParameterSettings.setParameterValue(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS, es.toArray(new String[0]));
+ configurationParameterSettings
+ .setParameterValue(RutaEngine.PARAM_ADDITIONAL_ENGINE_LOADERS, ls.toArray(new String[0]));
+ }
+
+ private TypeSystemDescription getTypeSystemDescriptor(URL url, RutaBuildOptions option)
+ throws InvalidXMLException, IOException {
+ TypeSystemDescription tsdesc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
+ new XMLInputSource(url));
+ if (option.isResolveImports()) {
+ tsdesc.resolveImports(rm);
+ }
+ return tsdesc;
+ }
+
+ private File getFile(String location) {
+ return new File(location);
+ }
+
+ private void toFile(XMLizable desc, File destination) throws SAXException, FileNotFoundException {
+ destination.getParentFile().mkdirs();
+ OutputStream out = new FileOutputStream(destination);
+ XMLSerializer sax = new XMLSerializer(out);
+ ContentHandler ch = sax.getContentHandler();
+ ch.startDocument();
+ desc.toXML(ch);
+ ch.endDocument();
+ }
+
+ public static URL checkImportExistence(String candidate, String extension, ClassLoader classloader)
+ throws IOException {
+ String p = candidate.replaceAll("[.]", "/");
+ p += "." + extension;
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(
+ classloader);
+ String prefix = "classpath*:";
+ String pattern = prefix + p;
+ Resource[] resources = resolver.getResources(pattern);
+ if (resources == null || resources.length == 0) {
+ return null;
+ } else {
+ Resource resource = resources[0];
+ URL url = resource.getURL();
+ return url;
+ }
+ }
+}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorInformation.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorInformation.java?rev=1668386&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorInformation.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/RutaDescriptorInformation.java Sun Mar 22 15:07:59 2015
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.descriptor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+public class RutaDescriptorInformation {
+
+ private static final boolean CONVERT = false;
+
+ private List<String> typeShortNames;
+
+ private List<StringTriple> typeTriples;
+
+ private Collection<String> importedTypeSystems;
+
+ private Map<String, Collection<StringTriple>> features;
+
+ private Collection<String> importedScripts;
+
+ private Collection<String> importedEngines;
+
+ private Collection<String> importedUimafitEngines;
+
+ public RutaDescriptorInformation() {
+ super();
+ typeShortNames = new ArrayList<String>();
+ typeTriples = new ArrayList<StringTriple>();
+ importedTypeSystems = new HashSet<String>();
+ importedScripts = new HashSet<String>();
+ importedEngines = new HashSet<String>();
+ importedUimafitEngines = new HashSet<String>();
+ features = new HashMap<String, Collection<StringTriple>>();
+ }
+
+ public void addType(String name, String description, String parent) {
+ if (parent == null) {
+ parent = "uima.tcas.Annotation";
+ }
+ typeShortNames.add(name);
+ typeTriples.add(new StringTriple(name, description, parent));
+ }
+
+ public void addFeature(String type, String name, String description, String parent) {
+ Collection<StringTriple> list = features.get(type);
+ if (list == null) {
+ list = new ArrayList<StringTriple>();
+ features.put(type, list);
+ }
+ list.add(new StringTriple(name, description, parent));
+ }
+
+ public void addScript(String name, boolean convert) {
+ if (convert) {
+ name = name.replaceAll("[.]", "/");
+ }
+ importedScripts.add(name);
+ }
+
+ public void addEngine(String name, boolean convert) {
+ if (convert) {
+ name = name.replaceAll("[.]", "/");
+ }
+ importedEngines.add(name);
+ }
+
+ public void addUimafitEngine(String name) {
+ importedUimafitEngines.add(name);
+ }
+
+ public void addTypeSystem(String name, boolean convert) {
+ if (convert) {
+ name = name.replaceAll("[.]", "/");
+ }
+ importedTypeSystems.add(name);
+ }
+
+ public void addScript(String name) {
+ addScript(name, CONVERT);
+ }
+
+ public void addEngine(String name) {
+ addEngine(name, CONVERT);
+ }
+
+ public void addTypeSystem(String name) {
+ addTypeSystem(name, CONVERT);
+ }
+
+ public List<String> getTypeShortNames() {
+ return typeShortNames;
+ }
+
+ public List<StringTriple> getTypeTriples() {
+ return typeTriples;
+ }
+
+ public Map<String, Collection<StringTriple>> getFeatures() {
+ return features;
+ }
+
+ public Collection<String> getImportedTypeSystems() {
+ return importedTypeSystems;
+ }
+
+ public Collection<String> getImportedScripts() {
+ return importedScripts;
+ }
+
+ public Collection<String> getImportedEngines() {
+ return importedEngines;
+ }
+
+ public Collection<String> getImportedUimafitEngines() {
+ return importedUimafitEngines;
+ }
+
+}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/StringTriple.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/StringTriple.java?rev=1668386&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/StringTriple.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/descriptor/StringTriple.java Sun Mar 22 15:07:59 2015
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.descriptor;
+
+public class StringTriple {
+
+ private final String name;
+
+ private final String description;
+
+ private final String parent;
+
+ public StringTriple(String name, String description, String parent) {
+ super();
+ this.name = name;
+ this.description = description;
+ this.parent = parent;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getParent() {
+ return parent;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this)
+ return true;
+ if (!(obj instanceof StringTriple)) {
+ return false;
+ }
+ StringTriple t = (StringTriple) obj;
+ return name.equals(t.getName()) && parent.equals(t.getParent());
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode() + parent.hashCode() * 37;
+ }
+}
Modified: uima/ruta/trunk/ruta-ep-engine/pom.xml
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-engine/pom.xml?rev=1668386&r1=1668385&r2=1668386&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-engine/pom.xml (original)
+++ uima/ruta/trunk/ruta-ep-engine/pom.xml Sun Mar 22 15:07:59 2015
@@ -214,6 +214,7 @@ licensed under the Common Public License
org.apache.uima.ruta.action,
org.apache.uima.ruta.condition,
org.apache.uima.ruta.constraint,
+ org.apache.uima.ruta.descriptor,
org.apache.uima.ruta.engine,
org.apache.uima.ruta.expression,
org.apache.uima.ruta.expression.bool,
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1668386&r1=1668385&r2=1668386&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Sun Mar 22 15:07:59 2015
@@ -57,8 +57,9 @@ import org.eclipse.dltk.ast.expressions.
import org.eclipse.dltk.ast.references.VariableReference;
import org.eclipse.dltk.ast.statements.Statement;
+import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
+
import org.apache.uima.ruta.ide.core.extensions.RutaExternalFactory;
-import org.apache.uima.ruta.ide.core.builder.DescriptorManager;
import org.apache.uima.ruta.ide.parser.ast.ActionFactory;
import org.apache.uima.ruta.ide.parser.ast.ComponentDeclaration;
import org.apache.uima.ruta.ide.parser.ast.ComponentReference;
@@ -89,7 +90,7 @@ import org.apache.uima.ruta.ide.parser.a
private Collection<String> knownExternalBlocks = new ArrayList();
public int length;
public DLTKTokenConverter converter;
- public DescriptorManager descriptor;
+ public RutaDescriptorInformation descriptor;
private int level = 0;
private RutaExternalFactory external = new RutaExternalFactory();
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java?rev=1668386&r1=1668385&r2=1668386&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java Sun Mar 22 15:07:59 2015
@@ -27,6 +27,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.uima.ruta.descriptor.RutaBuildOptions;
+import org.apache.uima.ruta.descriptor.RutaDescriptorBuilder;
+import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.extensions.IEngineLoader;
import org.apache.uima.ruta.extensions.IRutaActionExtension;
@@ -130,7 +133,7 @@ public class RutaBuilder extends Abstrac
List<IPath> result = new ArrayList<IPath>();
if (moduleDeclaration instanceof RutaModuleDeclaration) {
RutaModuleDeclaration tmmd = (RutaModuleDeclaration) moduleDeclaration;
- DescriptorManager sm = tmmd.descriptorInfo;
+ RutaDescriptorInformation sm = tmmd.descriptorInfo;
IPath pathToModule = sourceModule.getResource().getLocation();
String elementName = RutaProjectUtils.getModuleName(pathToModule);
@@ -199,11 +202,11 @@ public class RutaBuilder extends Abstrac
}
private void build(String basicTypesystem, String basicEngine, String typeSystemDest,
- String engineDest, DescriptorManager sm, String mainScript, String[] scriptPaths,
+ String engineDest, RutaDescriptorInformation sm, String mainScript, String[] scriptPaths,
String[] enginePaths, ClassLoader classloader) {
- RutaSimpleBuilder builder = null;
+ RutaDescriptorBuilder builder = null;
try {
- builder = new RutaSimpleBuilder(basicTypesystem, basicEngine);
+ builder = new RutaDescriptorBuilder(basicTypesystem, basicEngine);
} catch (Exception e) {
DLTKCore.error(e.getMessage(), e);
if (DLTKCore.DEBUG_PARSER) {
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java?rev=1668386&r1=1668385&r2=1668386&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java Sun Mar 22 15:07:59 2015
@@ -30,13 +30,13 @@ import org.antlr.runtime.ANTLRStringStre
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.Token;
+import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.extensions.IRutaBlockExtension;
import org.apache.uima.ruta.ide.core.IRutaKeywords;
import org.apache.uima.ruta.ide.core.RutaExtensionManager;
import org.apache.uima.ruta.ide.core.RutaKeywords;
import org.apache.uima.ruta.ide.core.RutaKeywordsManager;
-import org.apache.uima.ruta.ide.core.builder.DescriptorManager;
import org.apache.uima.ruta.ide.parser.ast.RutaModuleDeclaration;
import org.apache.uima.ruta.parser.RutaLexer;
import org.eclipse.dltk.ast.parser.AbstractSourceParser;
@@ -130,7 +130,7 @@ public class RutaSourceParser extends Ab
parser.converter = new DLTKTokenConverter(content.toCharArray());
parser.reporter = new DLTKRutaErrorReporter(parser.converter, problemReporter, parser);
- parser.descriptor = new DescriptorManager();
+ parser.descriptor = new RutaDescriptorInformation();
moduleDeclaration.descriptorInfo = parser.descriptor;
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaModuleDeclaration.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaModuleDeclaration.java?rev=1668386&r1=1668385&r2=1668386&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaModuleDeclaration.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaModuleDeclaration.java Sun Mar 22 15:07:59 2015
@@ -19,12 +19,12 @@
package org.apache.uima.ruta.ide.parser.ast;
-import org.apache.uima.ruta.ide.core.builder.DescriptorManager;
+import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
public class RutaModuleDeclaration extends ModuleDeclaration {
- public DescriptorManager descriptorInfo;
+ public RutaDescriptorInformation descriptorInfo;
public RutaModuleDeclaration(int sourceLength) {
super(sourceLength);