blob: 9f042e7f6a039bb38ee792983d0f34471987eee2 [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.aae;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.uima.UIMAFramework;
import org.apache.uima.aae.controller.AnalysisEngineController;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.cas.impl.Serialization;
import org.apache.uima.cas.impl.XmiCasDeserializer;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.resource.metadata.Import;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.resource.metadata.impl.Import_impl;
import org.apache.uima.util.CasCreationUtils;
import org.apache.uima.util.Level;
import org.apache.uima.util.XMLInputSource;
import org.apache.uima.util.XMLParser;
public class WarmUpDataProvider {
InputChannel inputChannel;
AnalysisEngineController controller;
private String inputFileName;
private FileInputStream fis;
private ZipInputStream zis;
private ZipEntry nextEntry;
private int docSeq;
private boolean readingXmiFormat;
private TypeSystem inputTS;
private static final Class<?> CLASS_NAME = WarmUpDataProvider.class;
public static void main(String[] args) {
try {
WarmUpDataProvider wdp = new WarmUpDataProvider(args[0]);
System.out.println("Got it initialized");
while (wdp.hasNext() ) {
System.out.println("Got next CAS");
}
System.out.println("done");
} catch( Exception e) {
e.printStackTrace();
}
}
public WarmUpDataProvider(String inputFileName) throws IOException {
this.inputFileName = inputFileName;
Import_impl theImport = new Import_impl();
theImport.setSuffix(".zip");
if ( !inputFileName.endsWith(".zip")) {
theImport.setName(inputFileName);
this.inputFileName = resolveToAbsolutePath(theImport);
// strip 'file:' from the begining
this.inputFileName = this.inputFileName.substring(this.inputFileName.indexOf(':')+1);
}
fis = new FileInputStream(new File(this.inputFileName));
zis = new ZipInputStream(new BufferedInputStream(fis, 1024 * 100));
docSeq = 0;
}
private String resolveToAbsolutePath(Import theImport) {
ResourceManager resourceManager = UIMAFramework.newDefaultResourceManager();
try {
return theImport.findAbsoluteUrl(resourceManager).toExternalForm();
} catch (Exception e) {
if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.WARNING)) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, WarmUpDataProvider.class.getName(),
"resolveToAbsolutePath", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE, "UIMAEE_exception__WARNING", e);
}
return "ERROR converting import by name to absolute path";
}
}
public boolean hasNext() throws AnalysisEngineProcessException {
try {
nextEntry = zis.getNextEntry();
} catch (IOException e) {
throw new AnalysisEngineProcessException(e);
}
return (nextEntry != null) ? true : false;
}
public CAS next(CAS cas) throws Exception {
if (0 == docSeq) {
if (nextEntry.getName().equals("typesystem.xml")) {
getTypesystem();
readingXmiFormat = false;
} else {
readingXmiFormat = true;
}
} else {
if (nextEntry.getName().equals("typesystem.xml")) {
throw new AnalysisEngineProcessException(new RuntimeException(
"typesystem.xml entry found in the middle of input zipfile " + inputFileName));
}
}
byte[] buff = new byte[10000];
int bytesread;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
while (-1 != (bytesread = zis.read(buff))) {
baos.write(buff, 0, bytesread);
}
ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());
if (readingXmiFormat) {
XmiCasDeserializer.deserialize(bis, cas, true);
} else {
Serialization.deserializeCAS(cas, bis, inputTS, null);
}
} catch (Exception e) {
throw new AnalysisEngineProcessException(e);
}
docSeq++;
return cas;
}
private void getTypesystem() throws AnalysisEngineProcessException {
byte[] buff = new byte[10000];
int bytesread;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
while (-1 != (bytesread = zis.read(buff))) {
baos.write(buff, 0, bytesread);
}
ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());
// Get XML parser from framework
XMLParser xmlParser = UIMAFramework.getXMLParser();
// Parse type system descriptor
TypeSystemDescription tsDesc = xmlParser
.parseTypeSystemDescription(new XMLInputSource((InputStream) bis, null));
// Use type system description to create CAS and get the type system
// object
inputTS = CasCreationUtils.createCas(tsDesc, null, null).getTypeSystem();
// advance to first input CAS
nextEntry = zis.getNextEntry();
} catch (Exception e) {
throw new AnalysisEngineProcessException(e);
}
}
}