//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.consumers;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import org.apache.uima.UIMAException;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.DocumentAnnotation;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.common.io.Files;
import uk.gov.dstl.baleen.types.metadata.Metadata;
import uk.gov.dstl.baleen.uima.testing.JCasSingleton;
import uk.gov.dstl.baleen.uima.utils.TypeSystemSingleton;
/**
*
*/
public class MoveSourceFileTest {
private static final String MOVED_DOCUMENT_LOCATION = "movedDocumentLocation";
private static final String BALEEN_TXT = "baleen.txt";
private File sourceFolder;
private JCas jCas;
@Before
public void beforeTest() throws UIMAException{
sourceFolder = Files.createTempDir();
jCas = JCasSingleton.getJCasInstance();
}
@After
public void afterTest(){
sourceFolder.delete();
}
@Test
public void testMove() throws Exception{
File destinationFolder = Files.createTempDir();
AnalysisEngine consumer = AnalysisEngineFactory.createEngine(MoveSourceFile.class, TypeSystemSingleton.getTypeSystemDescriptionInstance(), MoveSourceFile.PARAM_DESTINATION, destinationFolder.getPath());
File f = new File(sourceFolder, BALEEN_TXT);
if(!f.exists())
f.createNewFile();
File f2 = new File(destinationFolder, BALEEN_TXT);
assertEquals(false, f2.exists());
DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs();
da.setSourceUri(f.getPath());
consumer.process(jCas);
assertEquals(false, f.exists());
assertEquals(true, f2.exists());
Metadata md = JCasUtil.selectByIndex(jCas, Metadata.class, 0);
assertNotNull(md);
assertEquals(MOVED_DOCUMENT_LOCATION, md.getKey());
assertEquals(f2.getPath(), md.getValue());
f2.delete();
destinationFolder.delete();
}
@Test
public void testMoveNoType() throws Exception{
File destinationFolder = Files.createTempDir();
AnalysisEngine consumer = AnalysisEngineFactory.createEngine(MoveSourceFile.class, TypeSystemSingleton.getTypeSystemDescriptionInstance(), MoveSourceFile.PARAM_DESTINATION, destinationFolder.getPath(), MoveSourceFile.PARAM_SPLIT, true);
File f = new File(sourceFolder, BALEEN_TXT);
if(!f.exists())
f.createNewFile();
File f2 = new File(destinationFolder, BALEEN_TXT);
assertEquals(false, f2.exists());
DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs();
da.setSourceUri(f.getPath());
consumer.process(jCas);
assertEquals(false, f.exists());
assertEquals(true, f2.exists());
Metadata md = JCasUtil.selectByIndex(jCas, Metadata.class, 0);
assertNotNull(md);
assertEquals(MOVED_DOCUMENT_LOCATION, md.getKey());
assertEquals(f2.getPath(), md.getValue());
f2.delete();
destinationFolder.delete();
}
@Test
public void testMoveType() throws Exception{
File destinationFolder = Files.createTempDir();
AnalysisEngine consumer = AnalysisEngineFactory.createEngine(MoveSourceFile.class, TypeSystemSingleton.getTypeSystemDescriptionInstance(), MoveSourceFile.PARAM_DESTINATION, destinationFolder.getPath(), MoveSourceFile.PARAM_SPLIT, true);
File f = new File(sourceFolder, BALEEN_TXT);
if(!f.exists())
f.createNewFile();
File f2 = new File(destinationFolder, BALEEN_TXT);
File typeFolder = new File(destinationFolder, "test");
File f3 = new File(typeFolder, BALEEN_TXT);
assertEquals(false, f2.exists());
DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs();
da.setSourceUri(f.getPath());
da.setDocType("test");
consumer.process(jCas);
assertEquals(false, f.exists());
assertEquals(false, f2.exists());
assertEquals(true, f3.exists());
Metadata md = JCasUtil.selectByIndex(jCas, Metadata.class, 0);
assertNotNull(md);
assertEquals(MOVED_DOCUMENT_LOCATION, md.getKey());
assertEquals(f3.getPath(), md.getValue());
f3.delete();
typeFolder.delete();
destinationFolder.delete();
}
@Test
public void testMoveDuplicate() throws Exception{
File destinationFolder = Files.createTempDir();
AnalysisEngine consumer = AnalysisEngineFactory.createEngine(MoveSourceFile.class, TypeSystemSingleton.getTypeSystemDescriptionInstance(), MoveSourceFile.PARAM_DESTINATION, destinationFolder.getPath());
File f = new File(sourceFolder, BALEEN_TXT);
if(!f.exists())
f.createNewFile();
File f2 = new File(destinationFolder, BALEEN_TXT);
File f3 = new File(destinationFolder, "baleen.txt.1");
assertEquals(false, f2.exists());
assertEquals(false, f3.exists());
DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs();
da.setSourceUri(f.getPath());
consumer.process(jCas);
Metadata mdOriginal = JCasUtil.selectByIndex(jCas, Metadata.class, 0);
assertNotNull(mdOriginal);
assertEquals(MOVED_DOCUMENT_LOCATION, mdOriginal.getKey());
assertEquals(f2.getPath(), mdOriginal.getValue());
jCas.reset();
da = (DocumentAnnotation) jCas.getDocumentAnnotationFs();
da.setSourceUri(f.getPath());
f.createNewFile();
consumer.process(jCas);
Metadata mdDuplicate = JCasUtil.selectByIndex(jCas, Metadata.class, 0);
assertNotNull(mdDuplicate);
assertEquals(MOVED_DOCUMENT_LOCATION, mdDuplicate.getKey());
assertEquals(f3.getPath(), mdDuplicate.getValue());
assertEquals(false, f.exists());
assertEquals(true, f2.exists());
assertEquals(true, f3.exists());
f2.delete();
f3.delete();
destinationFolder.delete();
}
@Test
public void testDelete() throws Exception{
AnalysisEngine consumer = AnalysisEngineFactory.createEngine(MoveSourceFile.class, TypeSystemSingleton.getTypeSystemDescriptionInstance());
File f = new File(sourceFolder, BALEEN_TXT);
assertEquals(false, f.exists());
f.createNewFile();
assertEquals(true, f.exists());
DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs();
da.setSourceUri(f.getPath());
consumer.process(jCas);
Metadata md = JCasUtil.selectByIndex(jCas, Metadata.class, 0);
assertNotNull(md);
assertEquals(MOVED_DOCUMENT_LOCATION, md.getKey());
assertEquals("deleted", md.getValue());
assertEquals(false, f.exists());
}
}