blob: bf54412350f9ae9c4364be42b548289e84031787 [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.tools.internal.uima.util;
import org.apache.uima.ResourceSpecifierFactory;
import org.apache.uima.UIMAFramework;
import org.apache.uima.aae.deployment.AEDeploymentConstants;
import org.apache.uima.aae.deployment.AEDeploymentMetaData;
import org.apache.uima.aae.deployment.AsyncAEErrorConfiguration;
import org.apache.uima.aae.deployment.RemoteAEDeploymentMetaData;
import org.apache.uima.aae.deployment.impl.AsyncAggregateErrorConfiguration_Impl;
import org.apache.uima.aae.deployment.impl.AsyncPrimitiveErrorConfiguration_Impl;
import org.apache.uima.aae.deployment.impl.DeploymentMetaData_Impl;
import org.apache.uima.aae.deployment.impl.GetMetadataErrors_Impl;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
import org.apache.uima.resource.metadata.Import;
import org.apache.uima.resource.metadata.OperationalProperties;
import org.apache.uima.util.InvalidXMLException;
public class AETreeBuilder {
static public Import createImport(String descriptor, boolean byLocation) {
Import imp = (Import) UIMAFramework.getResourceSpecifierFactory().createObject(Import.class);
if (byLocation) {
imp.setLocation(descriptor);
} else {
imp.setName(descriptor);
}
return imp;
}
/**
* Create AEDeploymentMetaData from RemoteAEDeploymentMetaData
*
* @param remoteMetaData
* @return
* @return AEDeploymentMetaData
*/
static public AEDeploymentMetaData createAEDeploymentMetaData(
RemoteAEDeploymentMetaData remoteMetaData) {
ResourceSpecifierFactory factory = UIMAFramework.getResourceSpecifierFactory();
AEDeploymentMetaData metaData = (AEDeploymentMetaData) factory
.createObject(AEDeploymentMetaData.class);
metaData.setParent(remoteMetaData.getParent());
metaData.setKey(remoteMetaData.getKey());
try {
metaData.setResourceSpecifier(remoteMetaData.getResourceSpecifier(), null, false);
} catch (InvalidXMLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Need to call AFTER metaData.setResourceSpecifier
metaData.setCasMultiplierPoolSize(remoteMetaData.getCasMultiplierPoolSize());
// Clone AsyncAggregateErrorConfiguration
metaData.setAsyncAEErrorConfiguration((AsyncAEErrorConfiguration) remoteMetaData
.getAsyncAEErrorConfiguration().clone());
// Set TimeOut for Delegate
metaData.getAsyncAEErrorConfiguration().getGetMetadataErrors().setTimeout(AEDeploymentConstants.DEFAULT_GETMETADATA_NO_TIMEOUT);
return metaData;
}
/**
* Create RemoteAEDeploymentMetaData from AEDeploymentMetaData
*
* @param metaData
* @return
* @return RemoteAEDeploymentMetaData
*/
static public RemoteAEDeploymentMetaData createRemoteAEDeploymentMetaData(
AEDeploymentMetaData metaData) {
ResourceSpecifierFactory factory = UIMAFramework.getResourceSpecifierFactory();
RemoteAEDeploymentMetaData remoteMetaData = (RemoteAEDeploymentMetaData) factory
.createObject(RemoteAEDeploymentMetaData.class);
remoteMetaData.setParent(metaData.getParent());
remoteMetaData.setKey(metaData.getKey());
remoteMetaData.setCasMultiplierPoolSize(metaData.getCasMultiplierPoolSize());
remoteMetaData.setRemoteReplyQueueScaleout(-1);
try {
remoteMetaData.setResourceSpecifier(metaData.getResourceSpecifier(), null, false);
} catch (InvalidXMLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Clone OR Create a new AsyncAggregateErrorConfiguration
AsyncAEErrorConfiguration aggErrorConfig = null;
AsyncAEErrorConfiguration errorConfig = metaData.getAsyncAEErrorConfiguration();
if (errorConfig instanceof AsyncAggregateErrorConfiguration_Impl) {
// Clone
aggErrorConfig = errorConfig.clone();
} else {
// Create a new AsyncAggregateErrorConfiguration
aggErrorConfig = new AsyncAggregateErrorConfiguration_Impl();
aggErrorConfig.setGetMetadataErrors(new GetMetadataErrors_Impl(errorConfig));
aggErrorConfig.setProcessCasErrors(errorConfig.getProcessCasErrors().clone(aggErrorConfig));
aggErrorConfig.setCollectionProcessCompleteErrors(errorConfig
.getCollectionProcessCompleteErrors().clone(aggErrorConfig));
}
remoteMetaData.setErrorConfiguration(aggErrorConfig);
errorConfig.sParentObject((DeploymentMetaData_Impl)remoteMetaData);
// Set TimeOut for Remote
aggErrorConfig.getGetMetadataErrors().setTimeout(AEDeploymentConstants.DEFAULT_GETMETADATA_TIMEOUT);
return remoteMetaData;
}
// static public DDObject createDeploymentTree(AEDeploymentDescription dd) {
// try {
// ResourceSpecifier root = dd.getAeService().getTopAnalysisEngineDescription();
// } catch (InvalidXMLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// return null;
// }
/* static public DDObject createDeploymentTree(String key, AnalysisEngineDescription root) {
if (root == null) {
return null;
}
if (root.isPrimitive()) {
return new DDObject(new DDModel(key, root));
}
DDParent tree = new DDParent(new DDModel(key, root));
try {
Map map = root.getDelegateAnalysisEngineSpecifiers();
for (Object obj : map.entrySet()) {
Map.Entry entry = (Map.Entry) obj;
// Trace.err("key: " + entry.getKey() + " ; " + entry.getValue().getClass().getName());
DDObject node = buildAnalysisEngineTree((String) entry.getKey(), (ResourceSpecifier) entry
.getValue());
tree.add(node);
}
} catch (InvalidXMLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return tree;
}
static public DDObject buildAnalysisEngineTree(String key, ResourceSpecifier root) {
DDObject rootNode = null;
if (root instanceof AnalysisEngineDescription) {
AnalysisEngineDescription ae = (AnalysisEngineDescription) root;
if (!ae.isPrimitive()) {
rootNode = new DDParent(new DDModel(key, root));
try {
Map map = ae.getDelegateAnalysisEngineSpecifiers();
for (Object obj : map.entrySet()) {
Map.Entry entry = (Map.Entry) obj;
// Trace.err("key: " + entry.getKey() + " ; " + entry.getValue().getClass().getName());
DDObject node = buildAnalysisEngineTree((String) entry.getKey(),
(ResourceSpecifier) entry.getValue());
((DDParent) rootNode).add(node);
}
} catch (InvalidXMLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
rootNode = new DDObject(new DDModel(key, root));
}
} else {
Trace.err("root: " + root.getClass().getName());
}
return rootNode;
}
*/
// static public void dumpDeploymentTree(DDObject root, int level) {
// for (int i = 0; i < level; ++i) {
// System.out.print("---- ");
// }
// System.out.println(root.getModel().getLabel());
//
// // Has chidren ?
// if (root instanceof DDParent && ((DDParent) root).getChildCount() > 0) {
// List<DDObject> list = ((DDParent) root).getChildren();
// for (DDObject ddo : list) {
// dumpDeploymentTree(ddo, level + 1);
// }
// }
// }
/** ********************************************************************** */
/*
static public BaseTNode createAETree(IFile file, String topDescriptor) {
String dir = FileUtil.getDirectoryFromIFile(file);
Trace.err("topDescriptor: " + topDescriptor);
XMLizable xmlizable = null;
try {
xmlizable = UimaXmlParsingUtil.parseUimaXmlDescriptor(dir + topDescriptor);
} catch (InvalidXMLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
if (xmlizable instanceof AnalysisEngineDescription) {
AnalysisEngineDescription ae = (AnalysisEngineDescription) xmlizable;
String key = ae.getAnalysisEngineMetaData().getName().trim();
BaseTNode rootNode = buildAETree(key.length() == 0 ? "root" : key, ae);
return rootNode;
} else {
Trace.err("xmlizable: " + xmlizable.getClass().getName());
}
return null;
}
static public BaseTNode buildAETree(String key, ResourceSpecifier root) {
BaseTNode rootNode = new BaseTNode(key, root);
if (root instanceof AnalysisEngineDescription) {
AnalysisEngineDescription ae = (AnalysisEngineDescription) root;
if (!ae.isPrimitive()) {
try {
Map map = ae.getDelegateAnalysisEngineSpecifiers();
for (Object obj : map.entrySet()) {
Map.Entry entry = (Map.Entry) obj;
// Trace.err("key: " + entry.getKey() + " ; " + entry.getValue().getClass().getName());
BaseTNode node = buildAETree((String) entry.getKey(), (ResourceSpecifier) entry
.getValue());
rootNode.addChild(node);
}
} catch (InvalidXMLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else {
Trace.err("root: " + root.getClass().getName());
}
return rootNode;
}
static public void dumpAETree(BaseTNode rootNode, int level) {
for (int i = 0; i < level; ++i) {
System.out.print("---- ");
}
System.out.println(rootNode.getLabel());
// Has chidren ?
if (rootNode.getChildrenList() == null) {
return;
}
for (BaseTNode node : (List<BaseTNode>) rootNode.getChildrenList()) {
dumpAETree(node, level + 1);
}
}
static public void dumpUimaAETree(AnalysisEngineDescription root, int level) {
for (int i = 0; i < level; ++i) {
System.out.print("---- ");
}
System.out.println(root.getAnalysisEngineMetaData().getName());
// Has chidren ?
if (root.isPrimitive()) {
return;
}
// for (AnalysisEngineDescription aed: root.getDelegateAnalysisEngineSpecifiers()) {
// dumpAETree(node, level+1);
// }
}
*/
/** ********************************************************************** */
static public boolean isCASMultiplier(AnalysisEngineDescription ae) {
return isCASMultiplier(ae.getAnalysisEngineMetaData());
}
static public boolean isCASMultiplier(AnalysisEngineMetaData meta) {
OperationalProperties op = meta.getOperationalProperties();
if (op != null) {
return op.getOutputsNewCASes();
}
return false;
}
}