You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2012/06/07 00:32:47 UTC
svn commit: r1347183 - in /uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/analysis_engine/asb/impl/
main/java/org/apache/uima/analysis_engine/impl/
test/java/org/apache/uima/analysis_engine/impl/
test/resources/TextAnalysisEngineImplTest/
Author: burn
Date: Wed Jun 6 22:32:46 2012
New Revision: 1347183
URL: http://svn.apache.org/viewvc?rev=1347183&view=rev
Log:
[UIMA-2418] Use LinkedHashMap to hold the delegates in an aggregate to preserve their declaration order. Added a JUnit test.
Added:
uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineManagementImpl.java
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/TestAnnotator2.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java?rev=1347183&r1=1347182&r2=1347183&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java Wed Jun 6 22:32:46 2012
@@ -23,6 +23,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -89,7 +90,7 @@ public class ASB_impl extends Resource_I
* Map from String key to delegate AnalysisEngine for all component AnalysisEngines within this
* ASB.
*/
- private Map<String, AnalysisEngine> mComponentAnalysisEngineMap = new HashMap<String, AnalysisEngine>();
+ private Map<String, AnalysisEngine> mComponentAnalysisEngineMap = new LinkedHashMap<String, AnalysisEngine>();
/**
* Map from String key to delegate AnalysisEngineMetaData for all component AnalysisEngines within
@@ -101,7 +102,7 @@ public class ASB_impl extends Resource_I
/**
* Map from String key to component (AnalysisEngine or FlowController) metadata.
*/
- private Map<String, ProcessingResourceMetaData> mAllComponentMetaDataMap = new HashMap<String, ProcessingResourceMetaData>();
+ private Map<String, ProcessingResourceMetaData> mAllComponentMetaDataMap = new LinkedHashMap<String, ProcessingResourceMetaData>();
/**
* Initialization parameters passed to this ASB's initialize method. They will be passed along to
@@ -272,7 +273,7 @@ public class ASB_impl extends Resource_I
initFlowController(aFlowControllerDeclaration, aParentContext, aAggregateMetadata);
// initialize the AllComponentMetaData map to include AEs plus the FlowController
- mAllComponentMetaDataMap = new HashMap<String, ProcessingResourceMetaData>(mComponentAnalysisEngineMetaDataMap);
+ mAllComponentMetaDataMap = new LinkedHashMap<String, ProcessingResourceMetaData>(mComponentAnalysisEngineMetaDataMap);
mAllComponentMetaDataMap.put(aFlowControllerDeclaration.getKey(), mFlowControllerContainer
.getProcessingResourceMetaData());
mAllComponentMetaDataMap = Collections.unmodifiableMap(mAllComponentMetaDataMap);
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java?rev=1347183&r1=1347182&r2=1347183&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_impl.java Wed Jun 6 22:32:46 2012
@@ -28,6 +28,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -102,9 +103,9 @@ public class AnalysisEngineDescription_i
private FlowControllerDeclaration mFlowControllerDeclaration;
- private Map<String, ResourceSpecifier> mDelegateAnalysisEngineSpecifiers = new HashMap<String, ResourceSpecifier>();
+ private Map<String, ResourceSpecifier> mDelegateAnalysisEngineSpecifiers = new LinkedHashMap<String, ResourceSpecifier>();
- private Map<String, MetaDataObject> mDelegateAnalysisEngineSpecifiersWithImports = new HashMap<String, MetaDataObject>();
+ private Map<String, MetaDataObject> mDelegateAnalysisEngineSpecifiersWithImports = new LinkedHashMap<String, MetaDataObject>();
private Map<String, Import> mProcessedImports = new HashMap<String, Import>();
@@ -218,7 +219,7 @@ public class AnalysisEngineDescription_i
aResourceManager = UIMAFramework.newDefaultResourceManager();
}
resolveImports(aResourceManager);
- Map<String, ResourceSpecifier> map = new HashMap<String, ResourceSpecifier>(mDelegateAnalysisEngineSpecifiers);
+ Map<String, ResourceSpecifier> map = new LinkedHashMap<String, ResourceSpecifier>(mDelegateAnalysisEngineSpecifiers);
if (getFlowControllerDeclaration() != null) {
map.put(getFlowControllerDeclaration().getKey(), getFlowControllerDeclaration()
.getSpecifier());
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineManagementImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineManagementImpl.java?rev=1347183&r1=1347182&r2=1347183&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineManagementImpl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AnalysisEngineManagementImpl.java Wed Jun 6 22:32:46 2012
@@ -21,9 +21,9 @@ package org.apache.uima.analysis_engine.
import java.text.DecimalFormat;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
@@ -70,7 +70,7 @@ public class AnalysisEngineManagementImp
private long serviceCallTime;
- private Map<String, AnalysisEngineManagement> components = new HashMap<String, AnalysisEngineManagement>();
+ private Map<String, AnalysisEngineManagement> components = new LinkedHashMap<String, AnalysisEngineManagement>();
private String uniqueMBeanName;
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java?rev=1347183&r1=1347182&r2=1347183&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java Wed Jun 6 22:32:46 2012
@@ -19,6 +19,7 @@
package org.apache.uima.analysis_engine.impl;
+import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -60,6 +61,7 @@ import org.apache.uima.cas.text.Annotati
import org.apache.uima.resource.Resource;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceManager;
+import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.impl.URISpecifier_impl;
import org.apache.uima.resource.metadata.AllowedValue;
import org.apache.uima.resource.metadata.Capability;
@@ -86,8 +88,11 @@ import org.apache.uima.util.InvalidXMLEx
import org.apache.uima.util.Level;
import org.apache.uima.util.Settings;
import org.apache.uima.util.XMLInputSource;
+import org.apache.uima.util.XMLParser;
+import org.apache.uima.util.XMLSerializer;
import org.apache.uima.util.impl.ProcessTrace_impl;
import org.apache.uima.util.impl.Settings_impl;
+import org.xml.sax.ContentHandler;
/**
* Tests the TextAnalysisEngine_impl class.
@@ -1487,5 +1492,38 @@ public class AnalysisEngine_implTest ext
}
}
+ public void testManyDelegates() throws Exception {
+ // Test that an aggregate can be copied preserving all comments and ordering of delegates
+ XMLParser.ParsingOptions parsingOptions = new XMLParser.ParsingOptions(false);
+ parsingOptions.preserveComments = true;
+ XMLParser parser = UIMAFramework.getXMLParser();
+ File inFile = JUnitExtension.getFile("TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml");
+ AnalysisEngineDescription desc = parser.parseAnalysisEngineDescription(new XMLInputSource(inFile), parsingOptions);
+
+ // Write out descriptor
+ File cloneFile = new File(inFile.getParentFile(), "CopyOfAggregateWithManyDelegates.xml");
+ BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(cloneFile));
+ XMLSerializer xmlSerializer = new XMLSerializer(true);
+ xmlSerializer.setOutputStream(os);
+ xmlSerializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+ ContentHandler contentHandler = xmlSerializer.getContentHandler();
+ contentHandler.startDocument();
+ desc.toXML(contentHandler, true);
+ contentHandler.endDocument();
+ os.close();
+ assertEquals(inFile.length(), cloneFile.length());
+
+ // Initialize all delegates and check the initialization order (should be declaration order)
+ TestAnnotator2.allContexts = "";
+ UIMAFramework.produceAnalysisEngine(desc);
+ assertEquals("D/C/B/A/F/E/", TestAnnotator2.allContexts);
+
+ // Check that copying aggregate preserved the order of the delegates
+ desc = parser.parseAnalysisEngineDescription(new XMLInputSource(cloneFile), parsingOptions);
+ TestAnnotator2.allContexts = "";
+ UIMAFramework.produceAnalysisEngine(desc);
+ assertEquals("D/C/B/A/F/E/", TestAnnotator2.allContexts);
+ cloneFile.delete();
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/TestAnnotator2.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/TestAnnotator2.java?rev=1347183&r1=1347182&r2=1347183&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/TestAnnotator2.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/TestAnnotator2.java Wed Jun 6 22:32:46 2012
@@ -40,7 +40,7 @@ import org.apache.uima.util.impl.Setting
*
*/
public class TestAnnotator2 extends CasAnnotator_ImplBase {
- // Process method saves information to these static fields,
+ // Initialize and process methods save information to these static fields,
// which are queried by the unit test.
public static String lastDocument;
@@ -48,6 +48,8 @@ public class TestAnnotator2 extends CasA
public static boolean typeSystemInitCalled;
+ public static String allContexts = "";
+
public static synchronized String getLastDocument() {
return lastDocument;
}
@@ -93,6 +95,8 @@ public class TestAnnotator2 extends CasA
Assert.fail(e.toString());
}
}
+ // Used to check initialization order by testManyDelegates
+ allContexts = allContexts + contextName.substring(1);
}
public void typeSystemInit(TypeSystem aTypeSystem) {
Added: uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml?rev=1347183&view=auto
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml (added)
+++ uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml Wed Jun 6 22:32:46 2012
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- * 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. * -->
+<!-- -->
+<!-- Note: Multi-line comments cause problems on Windows as the -->
+<!-- internal LFs are not expanded back to CR/LF on output. -->
+<!-- -->
+<!-- Descriptor for testing the editing and copying of an aggregate. -->
+<!-- -->
+<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
+ <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+ <primitive>false</primitive>
+ <!-- Test that order of declarations is preserved when re-written -->
+ <delegateAnalysisEngineSpecifiers>
+ <delegateAnalysisEngine key="D">
+ <import location="TestPrimitiveTae2.xml"/>
+ </delegateAnalysisEngine>
+ <delegateAnalysisEngine key="C">
+ <import location="TestPrimitiveTae2.xml"/>
+ </delegateAnalysisEngine>
+ <delegateAnalysisEngine key="B">
+ <import location="TestPrimitiveTae2.xml"/>
+ </delegateAnalysisEngine>
+ <delegateAnalysisEngine key="A">
+ <import location="TestPrimitiveTae2.xml"/>
+ </delegateAnalysisEngine>
+ <delegateAnalysisEngine key="F">
+ <import location="TestPrimitiveTae2.xml"/>
+ </delegateAnalysisEngine>
+ <delegateAnalysisEngine key="E">
+ <import location="TestPrimitiveTae2.xml"/>
+ </delegateAnalysisEngine>
+ </delegateAnalysisEngineSpecifiers>
+ <!-- The above declaration order should be preserved when the UIMA APIs are used to parse and -->
+ <!-- serialize back to disk -->
+ <analysisEngineMetaData>
+ <name>AggregateWithManyDelegates</name>
+ <description/>
+ <version>1.0</version>
+ <vendor/>
+ <configurationParameters/>
+ <configurationParameterSettings/>
+ <flowConstraints>
+ <fixedFlow>
+ <node>A</node>
+ <node>B</node>
+ <node>C</node>
+ <node>D</node>
+ <node>E</node>
+ <node>F</node>
+ </fixedFlow>
+ </flowConstraints>
+ <fsIndexCollection/>
+ <capabilities>
+ <capability>
+ <inputs/>
+ <outputs/>
+ <languagesSupported/>
+ </capability>
+ </capabilities>
+ <operationalProperties>
+ <modifiesCas>true</modifiesCas>
+ <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
+ <outputsNewCASes>false</outputsNewCASes>
+ </operationalProperties>
+ </analysisEngineMetaData>
+ <resourceManagerConfiguration/>
+</analysisEngineDescription>
\ No newline at end of file