blob: a100ea2daf1c07abbd2fc2d963754334feeccd49 [file] [log] [blame]
/*
* 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.util;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.uima.UIMAFramework;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.Feature;
import org.apache.uima.cas.Type;
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.cas.admin.CASFactory;
import org.apache.uima.cas.admin.CASMgr;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.resource.metadata.FsIndexCollection;
import org.apache.uima.resource.metadata.FsIndexDescription;
import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
import org.apache.uima.resource.metadata.TypeDescription;
import org.apache.uima.resource.metadata.TypePriorities;
import org.apache.uima.resource.metadata.TypePriorityList;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.resource.metadata.impl.ConfigurationParameter_impl;
import org.apache.uima.resource.metadata.impl.FsIndexCollection_impl;
import org.apache.uima.resource.metadata.impl.FsIndexDescription_impl;
import org.apache.uima.resource.metadata.impl.TypePriorities_impl;
import org.apache.uima.resource.metadata.impl.TypePriorityList_impl;
import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
import org.apache.uima.test.junit_extension.JUnitExtension;
public class CasCreationUtilsTest extends TestCase {
/**
* Constructor for CasCreationUtilsTest.
*
* @param arg0
*/
public CasCreationUtilsTest(String arg0) {
super(arg0);
}
public void testMergeTypeSystems() throws Exception {
try {
TypeSystemDescription ts1desc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(JUnitExtension.getFile("CasCreationUtilsTest/TypeSystem1.xml")));
Assert.assertEquals(1, ts1desc.getType("Type1").getFeatures().length);
Assert.assertEquals(1, ts1desc.getType("Type2").getFeatures().length);
Assert.assertEquals(1, ts1desc.getType("Type3").getFeatures().length);
TypeSystemDescription ts2desc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(JUnitExtension.getFile("CasCreationUtilsTest/TypeSystem2.xml")));
Assert.assertEquals(1, ts2desc.getType("Type1").getFeatures().length);
Assert.assertEquals(1, ts2desc.getType("Type2").getFeatures().length);
ArrayList<TypeSystemDescription> tsList = new ArrayList<TypeSystemDescription>();
tsList.add(ts1desc);
tsList.add(ts2desc);
Map typesWithMergedFeatures = new HashMap();
TypeSystemDescription merged = CasCreationUtils.mergeTypeSystems(tsList, UIMAFramework
.newDefaultResourceManager(), typesWithMergedFeatures);
Assert.assertEquals(2, merged.getType("Type1").getFeatures().length);
Assert.assertEquals(2, merged.getType("Type2").getFeatures().length);
Assert.assertEquals(1, merged.getType("Type3").getFeatures().length);
assertEquals(2, typesWithMergedFeatures.size());
assertTrue(typesWithMergedFeatures.containsKey("Type1"));
assertTrue(typesWithMergedFeatures.containsKey("Type2"));
// make sure one-arg version doesn't fail
CasCreationUtils.mergeTypeSystems(tsList);
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testMergeTypeSystemElementType() throws Exception {
try {
TypeSystemDescription ts1desc = UIMAFramework.getXMLParser()
.parseTypeSystemDescription(
new XMLInputSource(JUnitExtension
.getFile("CasCreationUtilsTest/TypeSystemMergeBase.xml")));
checkMergeTypeSystem(ts1desc, "TypeSystemMergeWrongElementType1.xml",
ResourceInitializationException.INCOMPATIBLE_ELEMENT_RANGE_TYPES);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeWrongElementType2.xml",
ResourceInitializationException.INCOMPATIBLE_ELEMENT_RANGE_TYPES);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeWrongMultiRef1.xml",
ResourceInitializationException.INCOMPATIBLE_MULTI_REFS);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeWrongMultiRef2.xml",
ResourceInitializationException.INCOMPATIBLE_MULTI_REFS);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeWrongMultiRef3.xml",
ResourceInitializationException.INCOMPATIBLE_MULTI_REFS);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeOkMultiRef.xml", null);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeNoElementType.xml", null);
checkMergeTypeSystem(ts1desc, "typeSystemMergeTopElementType.xml", null);
checkMergeTypeSystem(ts1desc, "TypeSystemMergeWrongElementTypeWithNone.xml",
ResourceInitializationException.INCOMPATIBLE_ELEMENT_RANGE_TYPES);
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
private void checkMergeTypeSystem(TypeSystemDescription ts1desc, String typeFile, String msgKey)
throws Exception {
try {
TypeSystemDescription ts2desc = UIMAFramework
.getXMLParser()
.parseTypeSystemDescription(
new XMLInputSource(
JUnitExtension
.getFile("CasCreationUtilsTest/" + typeFile)));
List<TypeSystemDescription> tsList = new ArrayList<TypeSystemDescription>();
tsList.add(ts1desc);
tsList.add(ts2desc);
boolean rightExceptionThrown = (null != msgKey) ? false : true;
try {
CasCreationUtils.mergeTypeSystems(
tsList, UIMAFramework.newDefaultResourceManager(), new HashMap());
} catch (ResourceInitializationException rie) {
rightExceptionThrown = (null != msgKey) && rie.hasMessageKey(msgKey);
}
assertTrue(rightExceptionThrown);
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testMergeTypeSystemsWithDifferentSupertypes() throws Exception {
try {
TypeSystemDescription ts1desc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(JUnitExtension.getFile("CasCreationUtilsTest/SupertypeMergeTest1.xml")));
assertEquals("uima.tcas.Annotation", ts1desc.getType("uima.test.Sub").getSupertypeName());
TypeSystemDescription ts2desc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(JUnitExtension.getFile("CasCreationUtilsTest/SupertypeMergeTest2.xml")));
assertEquals("uima.test.Super", ts2desc.getType("uima.test.Sub").getSupertypeName());
List<TypeSystemDescription> tsList = new ArrayList<TypeSystemDescription>();
tsList.add(ts1desc);
tsList.add(ts2desc);
TypeSystemDescription merged = CasCreationUtils.mergeTypeSystems(tsList, UIMAFramework
.newDefaultResourceManager());
assertEquals("uima.test.Super", merged.getType("uima.test.Sub").getSupertypeName());
// try merging in the other order - bug UIMA-826 was an order dependency in the behavior of
// this kind of merging
tsList = new ArrayList<TypeSystemDescription>();
tsList.add(ts2desc);
tsList.add(ts1desc);
merged = CasCreationUtils.mergeTypeSystems(tsList, UIMAFramework
.newDefaultResourceManager());
assertEquals("uima.test.Super", merged.getType("uima.test.Sub").getSupertypeName());
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testAggregateWithImports() throws Exception {
try {
String pathSep = System.getProperty("path.separator");
ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
resMgr.setDataPath(JUnitExtension.getFile("TypeSystemDescriptionImplTest/dataPathDir")
.getAbsolutePath()
+ pathSep
+ JUnitExtension.getFile("TypePrioritiesImplTest/dataPathDir").getAbsolutePath()
+ pathSep
+ JUnitExtension.getFile("FsIndexCollectionImplTest/dataPathDir").getAbsolutePath());
File taeDescriptorWithImport = JUnitExtension
.getFile("CasCreationUtilsTest/AggregateTaeWithImports.xml");
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
new XMLInputSource(taeDescriptorWithImport));
ArrayList<AnalysisEngineDescription> mdList = new ArrayList<AnalysisEngineDescription>();
mdList.add(desc);
CAS tcas = CasCreationUtils.createCas(mdList, UIMAFramework
.getDefaultPerformanceTuningProperties(), resMgr);
// check that imports were resolved correctly
assertNotNull(tcas.getTypeSystem().getType("DocumentStructure"));
assertNotNull(tcas.getTypeSystem().getType("NamedEntity"));
assertNotNull(tcas.getTypeSystem().getType("TestType3"));
assertNotNull(tcas.getTypeSystem().getType("Sentence"));
assertNotNull(tcas.getIndexRepository().getIndex("TestIndex"));
assertNotNull(tcas.getIndexRepository().getIndex("ReverseAnnotationIndex"));
assertNotNull(tcas.getIndexRepository().getIndex("DocumentStructureIndex"));
// Check elementType and multipleReferencesAllowed for array feature
Feature arrayFeat = tcas.getTypeSystem().getFeatureByFullName("Paragraph:sentences");
assertNotNull(arrayFeat);
assertFalse(arrayFeat.isMultipleReferencesAllowed());
Type sentenceArrayType = arrayFeat.getRange();
assertNotNull(sentenceArrayType);
assertTrue(sentenceArrayType.isArray());
assertEquals(tcas.getTypeSystem().getType("Sentence"), sentenceArrayType.getComponentType());
Feature arrayFeat2 = tcas.getTypeSystem().getFeatureByFullName(
"Paragraph:testMultiRefAllowedFeature");
assertNotNull(arrayFeat2);
assertTrue(arrayFeat2.isMultipleReferencesAllowed());
// test imports aren't resolved more than once
Object spec1 = desc.getDelegateAnalysisEngineSpecifiers().get("Annotator1");
assertNotNull(spec1);
Object spec2 = desc.getDelegateAnalysisEngineSpecifiers().get("Annotator1");
assertTrue(spec1 == spec2);
// test removal
desc.getDelegateAnalysisEngineSpecifiersWithImports().remove("Annotator1");
assertTrue(desc.getDelegateAnalysisEngineSpecifiers().isEmpty());
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testMergeDelegateAnalysisEngineTypeSystems() throws Exception {
try {
File descFile = JUnitExtension
.getFile("TextAnalysisEngineImplTest/AggregateTaeForMergeTest.xml");
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
new XMLInputSource(descFile));
Map mergedTypes = new HashMap();
TypeSystemDescription typeSys = CasCreationUtils.mergeDelegateAnalysisEngineTypeSystems(desc,
UIMAFramework.newDefaultResourceManager(), mergedTypes);
// test results of merge
Assert.assertEquals(8, typeSys.getTypes().length);
TypeDescription type0 = typeSys.getType("NamedEntity");
Assert.assertNotNull(type0);
Assert.assertEquals("uima.tcas.Annotation", type0.getSupertypeName());
Assert.assertEquals(1, type0.getFeatures().length);
TypeDescription type1 = typeSys.getType("Person");
Assert.assertNotNull(type1);
Assert.assertEquals("NamedEntity", type1.getSupertypeName());
Assert.assertEquals(1, type1.getFeatures().length);
TypeDescription type2 = typeSys.getType("Place");
Assert.assertNotNull(type2);
Assert.assertEquals("NamedEntity", type2.getSupertypeName());
Assert.assertEquals(3, type2.getFeatures().length);
TypeDescription type3 = typeSys.getType("Org");
Assert.assertNotNull(type3);
Assert.assertEquals("uima.tcas.Annotation", type3.getSupertypeName());
Assert.assertEquals(0, type3.getFeatures().length);
TypeDescription type4 = typeSys.getType("DocumentStructure");
Assert.assertNotNull(type4);
Assert.assertEquals("uima.tcas.Annotation", type4.getSupertypeName());
Assert.assertEquals(0, type4.getFeatures().length);
TypeDescription type5 = typeSys.getType("Paragraph");
Assert.assertNotNull(type5);
Assert.assertEquals("DocumentStructure", type5.getSupertypeName());
Assert.assertEquals(0, type5.getFeatures().length);
TypeDescription type6 = typeSys.getType("Sentence");
Assert.assertNotNull(type6);
Assert.assertEquals("DocumentStructure", type6.getSupertypeName());
Assert.assertEquals(0, type6.getFeatures().length);
TypeDescription type7 = typeSys.getType("test.flowController.Test");
Assert.assertNotNull(type7);
Assert.assertEquals("uima.tcas.Annotation", type7.getSupertypeName());
Assert.assertEquals(1, type7.getFeatures().length);
// Place has merged features, Person has different supertype
assertEquals(2, mergedTypes.size());
assertTrue(mergedTypes.containsKey("Place"));
assertTrue(mergedTypes.containsKey("Person"));
// make sure one-arg version doesn't fail
CasCreationUtils.mergeDelegateAnalysisEngineTypeSystems(desc);
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testMergeDelegateAnalysisEngineTypePriorities() throws Exception {
try {
File descFile = JUnitExtension
.getFile("TextAnalysisEngineImplTest/AggregateTaeForMergeTest.xml");
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
new XMLInputSource(descFile));
TypePriorities pri = CasCreationUtils.mergeDelegateAnalysisEngineTypePriorities(desc);
// test results of merge
Assert.assertNotNull(pri);
TypePriorityList[] priLists = pri.getPriorityLists();
Assert.assertEquals(3, priLists.length);
String[] list0 = priLists[0].getTypes();
String[] list1 = priLists[1].getTypes();
String[] list2 = priLists[2].getTypes();
// order of the three lists is not defined
Assert.assertTrue((list0.length == 2 && list1.length == 2 && list2.length == 3)
|| (list0.length == 2 && list1.length == 3 && list2.length == 2)
|| (list0.length == 3 && list1.length == 2 && list2.length == 2));
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testMergeDelegateAnalysisEngineFsIndexCollections() throws Exception {
try {
File descFile = JUnitExtension
.getFile("TextAnalysisEngineImplTest/AggregateTaeForMergeTest.xml");
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
new XMLInputSource(descFile));
FsIndexCollection indexColl = CasCreationUtils
.mergeDelegateAnalysisEngineFsIndexCollections(desc);
// test results of merge
FsIndexDescription[] indexes = indexColl.getFsIndexes();
Assert.assertEquals(3, indexes.length);
// order of indexes is not defined
String label0 = indexes[0].getLabel();
String label1 = indexes[1].getLabel();
String label2 = indexes[2].getLabel();
Assert.assertTrue(label0.equals("DocStructIndex") || label1.equals("DocStructIndex")
|| label2.equals("DocStructIndex"));
Assert.assertTrue(label0.equals("PlaceIndex") || label1.equals("PlaceIndex")
|| label2.equals("PlaceIndex"));
Assert.assertTrue(label0.equals("FlowControllerTestIndex")
|| label1.equals("FlowControllerTestIndex")
|| label2.equals("FlowControllerTestIndex"));
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testSetupTypeSystem() throws Exception {
try {
// test that duplicate feature names on supertype and subtype works
// regardless of the order in which the types appear in the TypeSystemDescription
TypeSystemDescription tsd1 = new TypeSystemDescription_impl();
TypeDescription supertype = tsd1.addType("test.Super", "", "uima.cas.TOP");
supertype.addFeature("testfeat", "", "uima.cas.Integer");
TypeDescription subtype = tsd1.addType("test.Sub", "", "test.Super");
subtype.addFeature("testfeat", "", "uima.cas.Integer");
CASMgr casMgr = CASFactory.createCAS();
CasCreationUtils.setupTypeSystem(casMgr, tsd1);
assertNotNull(casMgr.getTypeSystemMgr().getType("test.Super")
.getFeatureByBaseName("testfeat"));
TypeSystemDescription tsd2 = new TypeSystemDescription_impl();
tsd2.setTypes(new TypeDescription[] { subtype, supertype });
casMgr = CASFactory.createCAS();
CasCreationUtils.setupTypeSystem(casMgr, tsd2);
assertNotNull(casMgr.getTypeSystemMgr().getType("test.Super")
.getFeatureByBaseName("testfeat"));
} catch (ResourceInitializationException e) {
JUnitExtension.handleException(e);
}
}
public void testCreateCasCollectionPropertiesResourceManager() throws Exception {
try {
// parse an AE descriptor
File taeDescriptorWithImport = JUnitExtension
.getFile("CasCreationUtilsTest/TaeWithImports.xml");
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
new XMLInputSource(taeDescriptorWithImport));
// create Resource Manager & set data path - necessary to resolve imports
ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
String pathSep = System.getProperty("path.separator");
resMgr.setDataPath(JUnitExtension.getFile("TypeSystemDescriptionImplTest/dataPathDir")
.getAbsolutePath()
+ pathSep
+ JUnitExtension.getFile("TypePrioritiesImplTest/dataPathDir").getAbsolutePath()
+ pathSep
+ JUnitExtension.getFile("FsIndexCollectionImplTest/dataPathDir").getAbsolutePath());
// call method
ArrayList<AnalysisEngineDescription> descList = new ArrayList<AnalysisEngineDescription>();
descList.add(desc);
CAS cas = CasCreationUtils.createCas(descList, UIMAFramework
.getDefaultPerformanceTuningProperties(), resMgr);
// check that imports were resolved correctly
assertNotNull(cas.getTypeSystem().getType("DocumentStructure"));
assertNotNull(cas.getTypeSystem().getType("NamedEntity"));
assertNotNull(cas.getTypeSystem().getType("TestType3"));
assertNotNull(cas.getIndexRepository().getIndex("TestIndex"));
assertNotNull(cas.getIndexRepository().getIndex("ReverseAnnotationIndex"));
assertNotNull(cas.getIndexRepository().getIndex("DocumentStructureIndex"));
// check of type priority
AnnotationFS fs1 = cas.createAnnotation(cas.getTypeSystem().getType("Paragraph"), 0, 1);
AnnotationFS fs2 = cas.createAnnotation(cas.getTypeSystem().getType("Sentence"), 0, 1);
assertTrue(cas.getAnnotationIndex().compare(fs1, fs2) < 0);
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testCreateCasCollection() throws Exception {
try {
// create two Type System description objects
TypeSystemDescription tsd1 = new TypeSystemDescription_impl();
TypeDescription supertype = tsd1.addType("test.Super", "", "uima.tcas.Annotation");
supertype.addFeature("testfeat", "", "uima.cas.Integer");
TypeDescription subtype = tsd1.addType("test.Sub", "", "test.Super");
subtype.addFeature("testfeat", "", "uima.cas.Integer");
TypeSystemDescription tsd2 = new TypeSystemDescription_impl();
TypeDescription fooType = tsd1.addType("test.Foo", "", "uima.cas.TOP");
fooType.addFeature("bar", "", "uima.cas.String");
// create index and priorities descriptions
FsIndexCollection indexes = new FsIndexCollection_impl();
FsIndexDescription index = new FsIndexDescription_impl();
index.setLabel("MyIndex");
index.setTypeName("test.Foo");
index.setKind(FsIndexDescription.KIND_BAG);
indexes.addFsIndex(index);
TypePriorities priorities = new TypePriorities_impl();
TypePriorityList priList = new TypePriorityList_impl();
priList.addType("test.Foo");
priList.addType("test.Sub");
priList.addType("test.Super");
priorities.addPriorityList(priList);
// create a CAS containing all these definitions
ArrayList descList = new ArrayList();
descList.add(tsd1);
descList.add(tsd2);
descList.add(indexes);
descList.add(priorities);
CAS cas = CasCreationUtils.createCas(descList);
// check that type system has been installed
TypeSystem ts = cas.getTypeSystem();
Type supertypeHandle = ts.getType(supertype.getName());
assertNotNull(supertypeHandle);
assertNotNull(supertypeHandle.getFeatureByBaseName("testfeat"));
Type subtypeHandle = ts.getType(subtype.getName());
assertNotNull(subtypeHandle);
assertNotNull(subtypeHandle.getFeatureByBaseName("testfeat"));
Type fooTypeHandle = ts.getType(fooType.getName());
assertNotNull(fooTypeHandle);
assertNotNull(fooTypeHandle.getFeatureByBaseName("bar"));
// check that index exists
assertNotNull(cas.getIndexRepository().getIndex("MyIndex"));
// test that priorities work
cas.createFS(supertypeHandle);
cas.createFS(subtypeHandle);
FSIterator iter = cas.getAnnotationIndex().iterator();
while (iter.isValid()) {
if (iter.get().getType() == subtypeHandle) // expected
break;
if (iter.get().getType() == supertypeHandle) // unexpected
fail();
iter.moveToNext();
}
// test that passing an invalid object causes an error
descList.add(new ConfigurationParameter_impl());
try {
CasCreationUtils.createCas(descList);
fail();
} catch (ResourceInitializationException e) {
// expected
}
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testCreateCasTypeSystemDescription() throws Exception {
try {
//parse type system description
TypeSystemDescription tsDesc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(JUnitExtension.getFile("CasCreationUtilsTest/SupertypeMergeTestMaster.xml")));
// call method
CAS cas = CasCreationUtils.createCas(tsDesc, null, null);
//check that imports were resolved and supertype merged properly
Type subType = cas.getTypeSystem().getType("uima.test.Sub");
assertNotNull(subType);
Type superType = cas.getTypeSystem().getType("uima.test.Super");
assertNotNull(superType);
assertTrue(cas.getTypeSystem().subsumes(superType,subType));
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testMergeDelegateAnalysisEngineMetaData() throws Exception {
try {
File descFile = JUnitExtension
.getFile("TextAnalysisEngineImplTest/AggregateTaeForMergeTest.xml");
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
new XMLInputSource(descFile));
Map mergedTypes = new HashMap();
ProcessingResourceMetaData mergedMetaData = CasCreationUtils
.mergeDelegateAnalysisEngineMetaData(desc, UIMAFramework.newDefaultResourceManager(),
mergedTypes, null);
TypeSystemDescription typeSys = mergedMetaData.getTypeSystem();
TypePriorities pri = mergedMetaData.getTypePriorities();
FsIndexCollection indexColl = mergedMetaData.getFsIndexCollection();
// test results of merge
// Type System
Assert.assertEquals(8, typeSys.getTypes().length);
TypeDescription type0 = typeSys.getType("NamedEntity");
Assert.assertNotNull(type0);
Assert.assertEquals("uima.tcas.Annotation", type0.getSupertypeName());
Assert.assertEquals(1, type0.getFeatures().length);
TypeDescription type1 = typeSys.getType("Person");
Assert.assertNotNull(type1);
Assert.assertEquals("NamedEntity", type1.getSupertypeName());
Assert.assertEquals(1, type1.getFeatures().length);
TypeDescription type2 = typeSys.getType("Place");
Assert.assertNotNull(type2);
Assert.assertEquals("NamedEntity", type2.getSupertypeName());
Assert.assertEquals(3, type2.getFeatures().length);
TypeDescription type3 = typeSys.getType("Org");
Assert.assertNotNull(type3);
Assert.assertEquals("uima.tcas.Annotation", type3.getSupertypeName());
Assert.assertEquals(0, type3.getFeatures().length);
TypeDescription type4 = typeSys.getType("DocumentStructure");
Assert.assertNotNull(type4);
Assert.assertEquals("uima.tcas.Annotation", type4.getSupertypeName());
Assert.assertEquals(0, type4.getFeatures().length);
TypeDescription type5 = typeSys.getType("Paragraph");
Assert.assertNotNull(type5);
Assert.assertEquals("DocumentStructure", type5.getSupertypeName());
Assert.assertEquals(0, type5.getFeatures().length);
TypeDescription type6 = typeSys.getType("Sentence");
Assert.assertNotNull(type6);
Assert.assertEquals("DocumentStructure", type6.getSupertypeName());
Assert.assertEquals(0, type6.getFeatures().length);
TypeDescription type7 = typeSys.getType("test.flowController.Test");
Assert.assertNotNull(type7);
Assert.assertEquals("uima.tcas.Annotation", type7.getSupertypeName());
Assert.assertEquals(1, type7.getFeatures().length);
// Place has merged features, Person has different supertype
assertEquals(2, mergedTypes.size());
assertTrue(mergedTypes.containsKey("Place"));
assertTrue(mergedTypes.containsKey("Person"));
// Type Priorities
Assert.assertNotNull(pri);
TypePriorityList[] priLists = pri.getPriorityLists();
Assert.assertEquals(3, priLists.length);
String[] list0 = priLists[0].getTypes();
String[] list1 = priLists[1].getTypes();
String[] list2 = priLists[2].getTypes();
// order of the three lists is not defined
Assert.assertTrue((list0.length == 2 && list1.length == 2 && list2.length == 3)
|| (list0.length == 2 && list1.length == 3 && list2.length == 2)
|| (list0.length == 3 && list1.length == 2 && list2.length == 2));
// Indexes
FsIndexDescription[] indexes = indexColl.getFsIndexes();
Assert.assertEquals(3, indexes.length);
// order of indexes is not defined
String label0 = indexes[0].getLabel();
String label1 = indexes[1].getLabel();
String label2 = indexes[2].getLabel();
Assert.assertTrue(label0.equals("DocStructIndex") || label1.equals("DocStructIndex")
|| label2.equals("DocStructIndex"));
Assert.assertTrue(label0.equals("PlaceIndex") || label1.equals("PlaceIndex")
|| label2.equals("PlaceIndex"));
Assert.assertTrue(label0.equals("FlowControllerTestIndex")
|| label1.equals("FlowControllerTestIndex")
|| label2.equals("FlowControllerTestIndex"));
// Now test case where aggregate contains a remote, and we want to do the
// merge of the non-remote delegates and report the failure. (This example
// also happens to use import-by-name so we need to set the data path.)
ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
String pathSep = System.getProperty("path.separator");
resMgr.setDataPath(JUnitExtension.getFile("TypeSystemDescriptionImplTest/dataPathDir")
.getAbsolutePath()
+ pathSep
+ JUnitExtension.getFile("TypePrioritiesImplTest/dataPathDir").getAbsolutePath()
+ pathSep
+ JUnitExtension.getFile("FsIndexCollectionImplTest/dataPathDir").getAbsolutePath());
File descFile2 = JUnitExtension
.getFile("CasCreationUtilsTest/AggregateTaeWithSoapDelegate.xml");
AnalysisEngineDescription desc2 = UIMAFramework.getXMLParser()
.parseAnalysisEngineDescription(new XMLInputSource(descFile2));
Map mergedTypes2 = new HashMap();
Map failedRemotes = new HashMap();
ProcessingResourceMetaData mergedMetaData2 = CasCreationUtils
.mergeDelegateAnalysisEngineMetaData(desc2, resMgr,
mergedTypes2, failedRemotes);
assertTrue(failedRemotes.containsKey("/RemoteDelegate"));
((Exception)failedRemotes.get("/RemoteDelegate")).printStackTrace();
assertTrue(mergedMetaData2.getTypeSystem().getTypes().length > 0);
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
}