// Add an FS with an array of existing annotations in another view
int nToks = 3;
ArrayFS array = newView2.createArrayFS(nToks);
Type thingType = newCas2.getTypeSystem().getType("org.apache.uima.testTypeSystem.Thing");
FSIterator thingIter = newCas2.getAnnotationIndex(thingType).iterator();
for (int i = 0; i < nToks; ++i)
array.set(i, (FeatureStructure)thingIter.next());
Type annotArrayTestType = newView2.getTypeSystem().getType("org.apache.uima.testTypeSystem.AnnotationArrayTest");
Feature annotArrayFeat = annotArrayTestType.getFeatureByBaseName("arrayOfAnnotations");
AnnotationFS fsArrayTestAnno = newView2.createAnnotation(annotArrayTestType, 13, 27);
fsArrayTestAnno.setFeatureValue(annotArrayFeat,array);
newView2.addFsToIndexes(fsArrayTestAnno);
// re-serialize each new CAS back to XMI, keeping consistent ids
String newSerCas1 = serialize(newCas1, deserSharedData1, marker1);
String newSerCas2 = serialize(newCas2, deserSharedData2, marker2);
// merge the two XMI CASes back into the original CAS
// the shared data will be reset and recreated if not using deltaCas
if (useDeltas) {
deserialize(newSerCas1, cas, serSharedData, false, maxOutgoingXmiId);
} else {
deserialize(newSerCas1, cas, serSharedData, false, -1);
}
assertEquals(numAnnotations + 2, cas.getAnnotationIndex().size());
deserialize(newSerCas2, cas, serSharedData, false, maxOutgoingXmiId);
assertEquals(numAnnotations + 5, cas.getAnnotationIndex().size());
assertEquals(docText, cas.getDocumentText());
// Serialize/deserialize again in case merge created duplicate ids
String newSerCasMerged = serialize(cas, serSharedData);
deserialize(newSerCasMerged, cas, serSharedData, false, -1);
//check covered text of annotations
FSIterator iter = cas.getAnnotationIndex().iterator();
while (iter.hasNext()) {
AnnotationFS annot = (AnnotationFS)iter.next();
assertEquals(cas.getDocumentText().substring(
annot.getBegin(), annot.getEnd()), annot.getCoveredText());
}
//check Owner annotation we created to test link across merge boundary
iter = cas.getAnnotationIndex(ownerType).iterator();
while (iter.hasNext()) {
AnnotationFS
annot = (AnnotationFS)iter.next();
String componentId = annot.getStringValue(componentIdFeat);
if ("XCasDeserializerTest".equals(componentId)) {
FeatureStructure targetRelArgs = annot.getFeatureValue(argsFeat);
AnnotationFS targetDomain = (AnnotationFS)targetRelArgs.getFeatureValue(domainFeat);
assertEquals(60, targetDomain.getBegin());
assertEquals(70, targetDomain.getEnd());
AnnotationFS targetRange = (AnnotationFS)targetRelArgs.getFeatureValue(rangeFeat);
assertEquals(orgBegin, targetRange.getBegin());
assertEquals(orgEnd, targetRange.getEnd());
}
}
//check Sofas
CAS targetView1 = cas.getView("newSofa1");
assertEquals(sofaText1, targetView1.getDocumentText());
CAS targetView2 = cas.getView("newSofa2");
assertEquals(sofaText2, targetView2.getDocumentText());
AnnotationFS targetAnnot1 = (AnnotationFS)
targetView1.getAnnotationIndex(orgType).iterator().get();
assertEquals(annotText, targetAnnot1.getCoveredText());
AnnotationFS targetAnnot2 = (AnnotationFS)
targetView2.getAnnotationIndex(orgType).iterator().get();
assertEquals(annotText, targetAnnot2.getCoveredText());
assertTrue(targetView1.getSofa().getSofaRef() !=
targetView2.getSofa().getSofaRef());
CAS checkPreexistingView = cas.getView("preexistingView");
assertEquals(preexistingViewText, checkPreexistingView.getDocumentText());
Type personType = cas.getTypeSystem().getType("org.apache.uima.testTypeSystem.Person");
AnnotationFS targetAnnot3 = (AnnotationFS)
checkPreexistingView.getAnnotationIndex(personType).iterator().get();
assertEquals("John Smith", targetAnnot3.getCoveredText());
// Check the FS with an array of pre-existing FSs
iter = targetView2.getAnnotationIndex(annotArrayTestType).iterator();
componentIdFeat = thingType.getFeatureByBaseName("componentId");
while (iter.hasNext()) {
AnnotationFS annot = (AnnotationFS)iter.next();
ArrayFS fsArray = (ArrayFS)annot.getFeatureValue(annotArrayFeat);
assertTrue(fsArray.size() == 3);
for (int i = 0; i < fsArray.size(); ++i) {
AnnotationFS refAnno = (AnnotationFS)fsArray.get(i);
assertEquals(thingType.getName(), refAnno.getType().getName());