blob: 807fa834696e0dc888e3192d12e074b511da09a1 [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.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import junit.framework.TestCase;
import org.apache.uima.UIMAFramework;
import org.apache.uima.cas.ArrayFS;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.impl.CASImpl;
import org.apache.uima.cas.impl.XCASDeserializer;
import org.apache.uima.cas_data.impl.CasComparer;
import org.apache.uima.resource.metadata.FsIndexDescription;
import org.apache.uima.resource.metadata.TypeDescription;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.resource.metadata.impl.TypePriorities_impl;
import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
import org.apache.uima.test.junit_extension.JUnitExtension;
/**
*
*/
public class CasCopierTest extends TestCase {
private TypeSystemDescription typeSystem;
private FsIndexDescription[] indexes;
protected void setUp() throws Exception {
File typeSystemFile1 = JUnitExtension.getFile("ExampleCas/testTypeSystem.xml");
File indexesFile = JUnitExtension.getFile("ExampleCas/testIndexes.xml");
typeSystem = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(typeSystemFile1));
indexes = UIMAFramework.getXMLParser().parseFsIndexCollection(new XMLInputSource(indexesFile))
.getFsIndexes();
}
public void testCopyCas() throws Exception {
// create a source CAS by deserializing from XCAS
CAS srcCas = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(), indexes);
InputStream serCasStream = new FileInputStream(JUnitExtension.getFile("ExampleCas/multiSofaCas.xml"));
XCASDeserializer.deserialize(serCasStream, srcCas);
serCasStream.close();
// create a destination CAS
CAS destCas = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(), indexes);
// do the copy
CasCopier.copyCas(srcCas, destCas, true);
//XCASSerializer.serialize(destCas, System.out);
// verify copy
CasComparer.assertEquals(srcCas, destCas);
//try with type systems are not identical (dest. a superset of src.)
TypeSystemDescription additionalTypes = new TypeSystemDescription_impl();
TypeDescription fooType = additionalTypes.addType("test.Foo", "Test Type", "uima.tcas.Annotation");
fooType.addFeature("bar", "Test Feature", "uima.cas.String");
ArrayList destTypeSystems = new ArrayList();
destTypeSystems.add(additionalTypes);
destTypeSystems.add(typeSystem);
CAS destCas2 = CasCreationUtils.createCas(destTypeSystems);
CasCopier.copyCas(srcCas, destCas2, true);
CasComparer.assertEquals(srcCas, destCas);
//try with base CAS rather than initial view
CAS srcCasBase = ((CASImpl)srcCas).getBaseCAS();
destCas.reset();
CAS destCasBase = ((CASImpl)destCas).getBaseCAS();
CasCopier.copyCas(srcCasBase, destCasBase, true);
CasComparer.assertEquals(srcCasBase, destCasBase);
}
public void testCopyCasView() throws Exception {
// create a source CAS by deserializing from XCAS
CAS srcCas = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(), indexes);
InputStream serCasStream = new FileInputStream(JUnitExtension.getFile("ExampleCas/cas.xml"));
XCASDeserializer.deserialize(serCasStream, srcCas);
serCasStream.close();
// create a destination CAS
CAS destCas = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(), indexes);
// do the copy
CasCopier copier = new CasCopier(srcCas, destCas);
copier.copyCasView(srcCas, true);
// verify copy
CasComparer.assertEquals(srcCas, destCas);
}
public void testCopyFs() throws Exception {
// create a source CAS by deserializing from XCAS
CAS srcCas = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(), indexes);
InputStream serCasStream = new FileInputStream(JUnitExtension.getFile("ExampleCas/cas.xml"));
XCASDeserializer.deserialize(serCasStream, srcCas);
serCasStream.close();
// create a destination CAS and the CasCopier instance
CAS destCas = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(), indexes);
CasCopier copier = new CasCopier(srcCas, destCas);
// set sofa data in destination CAS (this is not copied automtically)
destCas.setDocumentText(srcCas.getDocumentText());
// copy an Annotation
Iterator annotIter = srcCas.getAnnotationIndex().iterator();
FeatureStructure annot = (FeatureStructure) annotIter.next();
FeatureStructure copy = copier.copyFs(annot);
// verify copy
CasComparer.assertEquals(annot, copy);
// copy a Relation (which will have references)
Iterator relationIter = srcCas.getIndexRepository().getIndex("testRelationIndex").iterator();
FeatureStructure relFS = (FeatureStructure) relationIter.next();
FeatureStructure relCopy = copier.copyFs(relFS);
// verify copy
CasComparer.assertEquals(relFS, relCopy);
//test null array element
ArrayFS arrFS = srcCas.createArrayFS(3);
arrFS.set(0, annot);
arrFS.set(1, null);
arrFS.set(2, relFS);
FeatureStructure copyArrFS = copier.copyFs(arrFS);
CasComparer.assertEquals(arrFS, copyArrFS);
}
}