in src/utils/runAECpp.cpp [354:477]
void process (AnalysisEngine * pEngine, CAS * cas, std::string in, std::string outfn) {
cout << endl << "ThreadId: " << apr_os_thread_current() << " runAECpp::processing " << in << " " << out << endl;
try {
if (xcasInput != textFormat) {
/* initialize from an xcas or xmicas */
// cout << "runAECpp::processing xml file " << in << endl;
XMLCh* native = XMLString::transcode(in.c_str());
LocalFileInputSource fileIS(native);
XMLString::release(&native);
if (xcasInput == xcasFormat) {
XCASDeserializer::deserialize(fileIS, *cas);
} else {
XmiDeserializer::deserialize(fileIS, *cas, lenient);
}
} else {
/* read as text file and set document text of default view */
FILE * pFile = fopen(in.c_str(),"rb");
int filesize;
if (pFile == NULL) {
cerr << "RunAECpp: Error reading file " << in << endl;
exit(-1);
}
/* allocate buffer for file contents */
struct stat fstat;
stat(in.c_str(), &fstat);
filesize = fstat.st_size;
char * pBuffer = new char[filesize+1];
if (pBuffer == NULL) {
cerr << "RunAECpp: Error allocating buffer to hold contents of file " << in << endl;
exit(-1);
}
/* read the file */
size_t numread = fread(pBuffer,1,filesize,pFile);
fclose(pFile);
/* convert to unicode and set tcas document text*/
icu::UnicodeString ustrInputText(pBuffer, (int32_t)numread, "utf-8");
cas->setDocumentText(UnicodeStringRef(ustrInputText));
delete[] pBuffer;
}
// Is the input a tcas?
if (!useSofa && cas->isBackwardCompatibleCas()) {
useSofa = true;
sofaName = CAS::NAME_DEFAULT_TEXT_SOFA;
}
// Is a specific Sofa view specified?
if (useSofa) {
/* process the specified TCAS */
SofaFS mySofa = cas->getSofa(pEngine->getAnnotatorContext().mapToSofaID(sofaName));
if (!mySofa.isValid()) {
cerr << "runAECpp:" << endl
<< " Specified Sofa named " << sofaName
<< " not found in the input file" << endl;
exit(99);
}
CASIterator casIter = pEngine->processAndOutputNewCASes(*cas->getView(mySofa));
int i=0;
while (casIter.hasNext()) {
i++;
CAS & outCas = casIter.next();
//write out xmi
if (outfn.length() > 0) {
writeXmi(outCas, i, in, outfn);
}
//release the CAS
pEngine->getAnnotatorContext().releaseCAS(outCas);
cout << "runAECpp::processing new Cas " << i << endl;
}
} else {
/* process the CAS */
CASIterator casIter = ((AnalysisEngine*)pEngine)->processAndOutputNewCASes(*cas);
int i=0;
while (casIter.hasNext()) {
i++;
CAS & outCas = casIter.next();
//write out xmi
if (outfn.length() > 0) {
writeXmi(outCas, i, in, outfn);
}
//release CAS
pEngine->getAnnotatorContext().releaseCAS(outCas);
cout << "runAECpp::processing new Cas " << i << endl;
}
}
if (outfn.length() > 0) {
util::Filename infile((TCHAR*) in.c_str());
outfn.append("/");
outfn.append(infile.getName());
//open a file stream for output xmi
ofstream file;
file.open (outfn.c_str(), ios::out | ios::binary);
if ( !file ) {
cerr << "runAECpp: Error opening output xmi: " << outfn.c_str() << endl;
exit(99);
}
//serialize the input cas
cout << "runAECpp::processing write out xmi " << outfn << endl;
XmiWriter writer(*cas, true);
writer.write(file);
file.close();
}
} catch (Exception e) {
ErrorInfo errInfo = e.getErrorInfo();
cerr << "runAECPP::Error " << errInfo.getErrorId() << " " << errInfo.getMessage() << endl;
cerr << errInfo << endl;
}
}