You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2016/08/01 14:46:01 UTC

svn commit: r1754760 - in /uima/uimafit/trunk/uimafit-core: ./ src/main/java/org/apache/uima/fit/descriptor/ src/main/java/org/apache/uima/fit/factory/ src/test/java/org/apache/uima/fit/factory/ src/test/java/org/apache/uima/fit/factory/testAes/ src/te...

Author: rec
Date: Mon Aug  1 14:46:01 2016
New Revision: 1754760

URL: http://svn.apache.org/viewvc?rev=1754760&view=rev
Log:
[UIMA-5034] Add support for language capabilities

Added:
    uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/descriptor/LanguageCapability.java   (with props)
    uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/testAes/SerializationTestAnnotator.java   (with props)
    uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml   (with props)
Modified:
    uima/uimafit/trunk/uimafit-core/pom.xml
    uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java
    uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryTest.java

Modified: uima/uimafit/trunk/uimafit-core/pom.xml
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/pom.xml?rev=1754760&r1=1754759&r2=1754760&view=diff
==============================================================================
--- uima/uimafit/trunk/uimafit-core/pom.xml (original)
+++ uima/uimafit/trunk/uimafit-core/pom.xml Mon Aug  1 14:46:01 2016
@@ -165,6 +165,7 @@
 									<exclude>src/test/resources/data/docs/test.xmi</exclude>
 									<exclude>src/test/resources/data/reference/JCasBuilderTest.dump</exclude>
 									<exclude>src/test/resources/data/reference/test.xmi.dump</exclude>
+                                    <exclude>src/test/resources/data/reference/SerializationTestAnnotator.xml</exclude>
 									<!-- These configuration files cannot bear a license header -->
 									<exclude>src/test/resources/META-INF/org.apache.uima.fit/fsindexes.txt</exclude>
 									<exclude>src/test/resources/META-INF/org.apache.uima.fit/typepriorities.txt</exclude>

Added: uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/descriptor/LanguageCapability.java
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/descriptor/LanguageCapability.java?rev=1754760&view=auto
==============================================================================
--- uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/descriptor/LanguageCapability.java (added)
+++ uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/descriptor/LanguageCapability.java Mon Aug  1 14:46:01 2016
@@ -0,0 +1,49 @@
+/*
+ * 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.fit.descriptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Provides information on the languages supported by a component.
+ * 
+ * <pre><code>
+ * {@literal @}LanguageCapability(languages = { "en", "de" })
+ * </code></pre>
+ */
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface LanguageCapability {
+  /**
+   * The languages supported by this component.
+   * 
+   * @return the supported languages
+   */
+  String[] value() default NO_DEFAULT_VALUE;
+
+  /**
+   * Provides the default value for the inputs and the outputs that tells the CapabilityFactory that
+   * no value has been given to the inputs or outputs elements.
+   */
+  public static final String NO_DEFAULT_VALUE = "org.apache.uima.fit.descriptor.LanguageCapability.NO_DEFAULT_VALUE";
+}

Propchange: uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/descriptor/LanguageCapability.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java?rev=1754760&r1=1754759&r2=1754760&view=diff
==============================================================================
--- uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java (original)
+++ uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java Mon Aug  1 14:46:01 2016
@@ -23,6 +23,7 @@ import java.util.List;
 
 import org.apache.uima.analysis_engine.TypeOrFeature;
 import org.apache.uima.analysis_engine.impl.TypeOrFeature_impl;
+import org.apache.uima.fit.descriptor.LanguageCapability;
 import org.apache.uima.fit.descriptor.SofaCapability;
 import org.apache.uima.fit.descriptor.TypeCapability;
 import org.apache.uima.fit.internal.ReflectionUtil;
@@ -52,6 +53,16 @@ public final class CapabilityFactory {
 
     Capability capability = new Capability_impl();
 
+    if (ReflectionUtil.isAnnotationPresent(componentClass, LanguageCapability.class)) {
+      LanguageCapability annotation = ReflectionUtil.getAnnotation(componentClass,
+              LanguageCapability.class);
+      String[] languages = annotation.value();
+      if (languages.length == 1 && languages[0].equals(LanguageCapability.NO_DEFAULT_VALUE)) {
+        languages = new String[0];
+      }
+      capability.setLanguagesSupported(languages);
+    }
+    
     if (ReflectionUtil.isAnnotationPresent(componentClass, SofaCapability.class)) {
       SofaCapability annotation = ReflectionUtil.getAnnotation(componentClass, SofaCapability.class);
       String[] inputSofas = annotation.inputSofas();

Modified: uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryTest.java
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryTest.java?rev=1754760&r1=1754759&r2=1754760&view=diff
==============================================================================
--- uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryTest.java (original)
+++ uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/AnalysisEngineFactoryTest.java Mon Aug  1 14:46:01 2016
@@ -29,12 +29,15 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.uima.UIMAException;
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.analysis_component.AnalysisComponent;
@@ -54,6 +57,7 @@ import org.apache.uima.fit.factory.testA
 import org.apache.uima.fit.factory.testAes.Annotator3;
 import org.apache.uima.fit.factory.testAes.Annotator4;
 import org.apache.uima.fit.factory.testAes.ParameterizedAE;
+import org.apache.uima.fit.factory.testAes.SerializationTestAnnotator;
 import org.apache.uima.fit.factory.testAes.ViewNames;
 import org.apache.uima.fit.pipeline.SimplePipeline;
 import org.apache.uima.fit.type.Sentence;
@@ -538,4 +542,21 @@ public class AnalysisEngineFactoryTest e
     assertArrayEquals(expected.getPriorityLists()[0].getTypes(),
             actual.getPriorityLists()[0].getTypes());
   }
+  
+  @Test
+  public void serializeComponent() throws Exception {
+    File reference = new File("src/test/resources/data/reference/SerializationTestAnnotator.xml");
+    
+    File target = new File("target/test-output/AnalysisEngineFactoryTest/SerializationTestAnnotator.xml");
+    target.getParentFile().mkdirs();
+    
+    AnalysisEngineDescription desc = createEngineDescription(SerializationTestAnnotator.class);
+    try (OutputStream os = new FileOutputStream(target)) {
+      desc.toXML(os);
+    }
+    
+    String actual = FileUtils.readFileToString(target, "UTF-8");
+    String expected = FileUtils.readFileToString(reference, "UTF-8");
+    assertEquals(expected, actual);
+  }
 }

Added: uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/testAes/SerializationTestAnnotator.java
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/testAes/SerializationTestAnnotator.java?rev=1754760&view=auto
==============================================================================
--- uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/testAes/SerializationTestAnnotator.java (added)
+++ uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/testAes/SerializationTestAnnotator.java Mon Aug  1 14:46:01 2016
@@ -0,0 +1,38 @@
+/*
+ * 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.fit.factory.testAes;
+
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.fit.component.JCasAnnotator_ImplBase;
+import org.apache.uima.fit.descriptor.LanguageCapability;
+import org.apache.uima.fit.descriptor.SofaCapability;
+import org.apache.uima.jcas.JCas;
+
+/**
+ * Used to test if metadata gets correctly serialized to XML.
+ */
+@LanguageCapability({"en", "de"})
+@SofaCapability(inputSofas = "input1", outputSofas = "output1")
+public class SerializationTestAnnotator extends JCasAnnotator_ImplBase {
+
+  @Override
+  public void process(JCas jCas) throws AnalysisEngineProcessException {
+    // Nothing to do
+  }
+}

Propchange: uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/factory/testAes/SerializationTestAnnotator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml?rev=1754760&view=auto
==============================================================================
--- uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml (added)
+++ uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml Mon Aug  1 14:46:01 2016
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+    <primitive>true</primitive>
+    <annotatorImplementationName>org.apache.uima.fit.factory.testAes.SerializationTestAnnotator</annotatorImplementationName>
+    <analysisEngineMetaData>
+        <name>org.apache.uima.fit.factory.testAes.SerializationTestAnnotator</name>
+        <description>Descriptor automatically generated by uimaFIT</description>
+        <version>unknown</version>
+        <vendor>org.apache.uima.fit.factory.testAes</vendor>
+        <configurationParameters/>
+        <configurationParameterSettings/>
+        <typeSystemDescription>
+            <types>
+                <typeDescription>
+                    <name>org.apache.uima.fit.type.AnalyzedText</name>
+                    <description/>
+                    <supertypeName>uima.tcas.Annotation</supertypeName>
+                    <features>
+                        <featureDescription>
+                            <name>text</name>
+                            <description/>
+                            <rangeTypeName>uima.cas.String</rangeTypeName>
+                        </featureDescription>
+                    </features>
+                </typeDescription>
+                <typeDescription>
+                    <name>org.apache.uima.fit.type.Sentence</name>
+                    <description/>
+                    <supertypeName>uima.tcas.Annotation</supertypeName>
+                </typeDescription>
+                <typeDescription>
+                    <name>org.apache.uima.fit.type.Token</name>
+                    <description/>
+                    <supertypeName>uima.tcas.Annotation</supertypeName>
+                    <features>
+                        <featureDescription>
+                            <name>pos</name>
+                            <description/>
+                            <rangeTypeName>uima.cas.String</rangeTypeName>
+                        </featureDescription>
+                        <featureDescription>
+                            <name>stem</name>
+                            <description/>
+                            <rangeTypeName>uima.cas.String</rangeTypeName>
+                        </featureDescription>
+                    </features>
+                </typeDescription>
+            </types>
+        </typeSystemDescription>
+        <typePriorities>
+            <priorityList>
+                <type>org.apache.uima.fit.type.Sentence</type>
+                <type>org.apache.uima.fit.type.Token</type>
+            </priorityList>
+        </typePriorities>
+        <fsIndexCollection>
+            <fsIndexes>
+                <fsIndexDescription>
+                    <label>Automatically Scanned Index</label>
+                    <typeName>org.apache.uima.fit.type.Token</typeName>
+                    <kind>sorted</kind>
+                    <keys>
+                        <fsIndexKey>
+                            <featureName>begin</featureName>
+                            <comparator>reverse</comparator>
+                        </fsIndexKey>
+                        <fsIndexKey>
+                            <featureName>end</featureName>
+                            <comparator>standard</comparator>
+                        </fsIndexKey>
+                    </keys>
+                </fsIndexDescription>
+            </fsIndexes>
+        </fsIndexCollection>
+        <capabilities>
+            <capability>
+                <inputs/>
+                <outputs/>
+                <inputSofas>
+                    <sofaName>input1</sofaName>
+                </inputSofas>
+                <outputSofas>
+                    <sofaName>output1</sofaName>
+                </outputSofas>
+                <languagesSupported>
+                    <language>en</language>
+                    <language>de</language>
+                </languagesSupported>
+            </capability>
+        </capabilities>
+        <operationalProperties>
+            <modifiesCas>true</modifiesCas>
+            <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
+            <outputsNewCASes>false</outputsNewCASes>
+        </operationalProperties>
+    </analysisEngineMetaData>
+</analysisEngineDescription>

Propchange: uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: uima/uimafit/trunk/uimafit-core/src/test/resources/data/reference/SerializationTestAnnotator.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml