/* * Copyright 2012 * Ubiquitous Knowledge Processing (UKP) Lab and FG Language Technology * Technische Universität Darmstadt * * Licensed 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 de.tudarmstadt.ukp.clarin.webanno.brat.ajax.controller; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.uima.cas.CAS; import org.apache.uima.collection.CollectionReader; import org.apache.uima.fit.factory.CollectionReaderFactory; import org.apache.uima.fit.factory.JCasFactory; import org.apache.uima.jcas.JCas; import org.junit.Test; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import de.tudarmstadt.ukp.clarin.webanno.api.AnnotationSchemaService; import de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst; import de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorState; import de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorStateImpl; import de.tudarmstadt.ukp.clarin.webanno.api.annotation.util.WebAnnoCasUtil; import de.tudarmstadt.ukp.clarin.webanno.brat.message.GetCollectionInformationResponse; import de.tudarmstadt.ukp.clarin.webanno.brat.message.GetDocumentResponse; import de.tudarmstadt.ukp.clarin.webanno.brat.render.BratRenderer; import de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer; import de.tudarmstadt.ukp.clarin.webanno.model.Mode; import de.tudarmstadt.ukp.clarin.webanno.model.Project; import de.tudarmstadt.ukp.clarin.webanno.model.Tag; import de.tudarmstadt.ukp.clarin.webanno.model.TagSet; import de.tudarmstadt.ukp.clarin.webanno.support.JSONUtil; import de.tudarmstadt.ukp.clarin.webanno.tcf.TcfReader; import junit.framework.TestCase; /** * Test case for generating Brat Json data for getcollection and getcollection actions */ public class CasToBratJsonTest extends TestCase { /* * @Resource(name = "annotationService") private AnnotationService annotationService; * * @Resource(name = "jsonConverter") private MappingJacksonHttpMessageConverter jsonConverter; */ @Resource(name = "annotationService") private static AnnotationSchemaService annotationService; private Logger LOG = LoggerFactory.getLogger(getClass()); /** * generate BRAT JSON for the collection informations * * @throws IOException if an I/O error occurs. */ @Test public void testGenerateBratJsonGetCollection() throws IOException { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); String jsonFilePath = "target/test-output/output_cas_to_json_collection.json"; GetCollectionInformationResponse collectionInformation = new GetCollectionInformationResponse(); List<AnnotationLayer> layerList = new ArrayList<AnnotationLayer>(); AnnotationLayer layer = new AnnotationLayer(); layer.setDescription("span annoattion"); layer.setName("pos"); layer.setType(WebAnnoConst.SPAN_TYPE); TagSet tagset = new TagSet(); tagset.setDescription("pos"); tagset.setLanguage("de"); tagset.setName("STTS"); Tag tag = new Tag(); tag.setDescription("noun"); tag.setName("NN"); tag.setTagSet(tagset); layerList.add(layer); collectionInformation.addCollection("/Collection1/"); collectionInformation.addCollection("/Collection2/"); collectionInformation.addCollection("/Collection3/"); collectionInformation.addDocument("/Collection1/doc1"); collectionInformation.addDocument("/Collection2/doc1"); collectionInformation.addDocument("/Collection3/doc1"); collectionInformation.addDocument("/Collection1/doc2"); collectionInformation.addDocument("/Collection2/doc2"); collectionInformation.addDocument("/Collection3/doc2"); collectionInformation.setSearchConfig(new ArrayList<String[]>()); List<String> tagSetNames = new ArrayList<String>(); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.POS); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.DEPENDENCY); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.NAMEDENTITY); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.COREFERENCE); tagSetNames .add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.COREFRELTYPE); JSONUtil.generatePrettyJson(jsonConverter, collectionInformation, new File(jsonFilePath)); String reference = FileUtils.readFileToString(new File( "src/test/resources/output_cas_to_json_collection_expected.json"), "UTF-8"); String actual = FileUtils.readFileToString(new File( "target/test-output/output_cas_to_json_collection.json"), "UTF-8"); assertEquals(reference, actual); } /** * generate brat JSON data for the document */ @Test public void testGenerateBratJsonGetDocument() throws Exception { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); String jsonFilePath = "target/test-output/output_cas_to_json_document.json"; InputStream is = null; JCas jCas = null; try { // is = new // FileInputStream("src/test/resources/tcf04-karin-wl.xml"); String path = "src/test/resources/"; String file = "tcf04-karin-wl.xml"; CAS cas = JCasFactory.createJCas().getCas(); CollectionReader reader = CollectionReaderFactory.createReader( TcfReader.class, TcfReader.PARAM_SOURCE_LOCATION, path, TcfReader.PARAM_PATTERNS, new String[] { "[+]" + file }); if (!reader.hasNext()) { throw new FileNotFoundException("Annotation file [" + file + "] not found in [" + path + "]"); } reader.getNext(cas); jCas = cas.getJCas(); } catch (FileNotFoundException ex) { LOG.info("The file specified not found " + ex.getCause(), ex); } catch (Exception ex) { LOG.info("Unable to process", ex); } List<String> tagSetNames = new ArrayList<String>(); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.POS); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.DEPENDENCY); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.NAMEDENTITY); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.COREFERENCE); tagSetNames.add(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.COREFRELTYPE); AnnotatorState bratannotatorModel = new AnnotatorStateImpl(Mode.ANNOTATION); bratannotatorModel.getPreferences().setWindowSize(10); bratannotatorModel.setFirstVisibleSentence(WebAnnoCasUtil.getFirstSentence(jCas)); Project project = new Project(); bratannotatorModel.setProject(project); GetDocumentResponse response = new GetDocumentResponse(); response.setText(jCas.getDocumentText()); BratRenderer.renderTokenAndSentence(jCas, response, bratannotatorModel); /* for (AnnotationLayer layer : bratannotatorModel.getAnnotationLayers()) { getAdapter(layer, annotationService).render(jCas, annotationService.listAnnotationFeature(layer), response, bratannotatorModel); }*/ JSONUtil.generatePrettyJson(jsonConverter, response, new File(jsonFilePath)); String reference = FileUtils.readFileToString(new File( "src/test/resources/output_cas_to_json_document_expected.json"), "UTF-8"); String actual = FileUtils.readFileToString(new File( "target/test-output/output_cas_to_json_document.json"), "UTF-8"); assertEquals(reference, actual); } }