blob: 8f622ec643ccc40fe94bff8f552acd89bf2cf204 [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.deployment.impl;
import org.apache.uima.UIMAFramework;
import org.apache.uima.aae.deployment.AEDeploymentConstants;
import org.apache.uima.aae.deployment.AsyncAEErrorConfiguration;
import org.apache.uima.aae.deployment.AsyncAggregateErrorConfiguration;
import org.apache.uima.aae.deployment.AsyncPrimitiveErrorConfiguration;
import org.apache.uima.aae.deployment.RemoteAEDeploymentMetaData;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.metadata.Import;
import org.apache.uima.resource.metadata.impl.MetaDataObject_impl;
import org.apache.uima.resource.metadata.impl.XmlizationInfo;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLParser;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
/**
*
*
*/
public class RemoteAEDeploymentMetaData_Impl extends DeploymentMetaData_Impl
implements RemoteAEDeploymentMetaData, AEDeploymentConstants
{
private static final long serialVersionUID = -6028698292841920067L;
protected int casMultiplierPoolSize = DEFAULT_CAS_MULTIPLIER_POOL_SIZE;
protected int initialFsHeapSize = DEFAULT_CAS_INITIAL_HEAP_SIZE;
protected InputQueue inputQueue = new InputQueue_Impl();
protected String replyQueueLocation = null; // DEFAULT_REPLY_QUEUE_LOCATION; // NOT defined
protected int remoteReplyQueueScaleout = -1; // DEFAULT_CONCURRENT_CONSUMERS; // NOT defined
protected String serializerMethod = "xmi"; // NOT defined
protected AsyncAEErrorConfiguration errorConfiguration;
protected ResourceSpecifier resourceSpecifier;
protected Import importedAE; // import by location|name of AE descriptor
/*************************************************************************/
/**
*
*/
public RemoteAEDeploymentMetaData_Impl() {
}
public boolean isSet (int i) {
return i != UNDEFINED_INT;
}
public ResourceSpecifier getResourceSpecifier () {
return resourceSpecifier;
}
public void setResourceSpecifier (ResourceSpecifier rs,
ResourceManager aResourceManager, boolean recursive) throws InvalidXMLException {
resourceSpecifier = rs;
}
/* (non-Javadoc)
* @see org.apache.uima.resource.metadata.impl.MetaDataObject_impl#buildFromXMLElement(org.w3c.dom.Element, org.apache.uima.util.XMLParser, org.apache.uima.util.XMLParser.ParsingOptions)
*/
public void buildFromXMLElement (Element aElement, XMLParser aParser, XMLParser.ParsingOptions aOptions)
throws InvalidXMLException
{
String val;
// Check for "key" and "remoteReplyQueueScaleout" attributes
NamedNodeMap map = aElement.getAttributes();
if (map != null) {
for (int i=0; i<map.getLength(); ++i) {
Node item = map.item(i);
String name = item.getNodeName();
val = item.getNodeValue();
if (val == null) {
val = "";
} else {
val = val.trim();
}
if (AEDeploymentConstants.TAG_ATTR_KEY.equalsIgnoreCase(name)) {
// Set "key = ..." attribute
setKey(val);
} else if (AEDeploymentConstants.TAG_ATTR_REMOTE_REPLYQUEUE_SCALEOUT.equalsIgnoreCase(name)) {
// "remoteReplyQueueScaleout" attribute
try {
int n = Integer.parseInt(val);
if (n > 0) {
setRemoteReplyQueueScaleout(n);
} else {
throw new InvalidXMLException(InvalidXMLException.INVALID_ELEMENT_TEXT,
new Object[] { n, TAG_ATTR_REMOTE_REPLYQUEUE_SCALEOUT });
}
} catch (NumberFormatException e) {
throw new InvalidXMLException(InvalidXMLException.UNKNOWN_ELEMENT,
new Object[] { TAG_ATTR_REMOTE_REPLYQUEUE_SCALEOUT }, e);
}
} else {
throw new InvalidXMLException(InvalidXMLException.UNKNOWN_ELEMENT,
new Object[]{name});
}
}
}
NodeList childNodes = aElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node curNode = childNodes.item(i);
if (curNode instanceof Element) {
Element elem = (Element)curNode;
if (TAG_INPUT_QUEUE.equalsIgnoreCase(elem.getTagName())) {
// inputQueue.setEndPoint(elem.getAttribute(TAG_ATTR_END_POINT));
// inputQueue.setBrokerURL(elem.getAttribute(TAG_ATTR_BROKER_URL));
checkAndSetInputQueueAttributes(elem);
} else if (AEDeploymentConstants.TAG_CAS_MULTIPLIER.equalsIgnoreCase(elem.getTagName())) {
// Get "poolSize" attribute
int n;
val = DDParserUtil.checkAndGetAttributeValue(TAG_CAS_MULTIPLIER, TAG_ATTR_POOL_SIZE, elem, true);
if (val == null || val.trim().length() == 0) {
n = 0;
} else {
try {
n = Integer.parseInt(val);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new InvalidXMLException(InvalidXMLException.UNKNOWN_ELEMENT,
new Object[] { TAG_ATTR_POOL_SIZE }, e);
}
}
setCasMultiplierPoolSize(n);
// Check for Optional "initialFsHeapSize"
val = DDParserUtil.checkAndGetAttributeValue(TAG_CAS_MULTIPLIER, TAG_ATTR_INIT_SIZE_OF_CAS_HEAP, elem, false);
if (val != null && val.trim().length() > 0) {
try {
initialFsHeapSize = Integer.parseInt(val);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new InvalidXMLException(InvalidXMLException.UNKNOWN_ELEMENT,
new Object[] { TAG_ATTR_INIT_SIZE_OF_CAS_HEAP }, e);
}
}
} else if (TAG_REPLY_QUEUE.equalsIgnoreCase(elem.getTagName())) {
val = DDParserUtil.checkAndGetAttributeValue(TAG_REPLY_QUEUE, TAG_ATTR_LOCATION, elem, false);
if (val != null && val.trim().length() > 0) {
val = val.trim();
if ( /*val.equalsIgnoreCase("local") ||*/ val.equalsIgnoreCase("remote")) {
setReplyQueueLocation(val);
} else {
throw new InvalidXMLException(InvalidXMLException.INVALID_ELEMENT_TEXT,
new Object[] {val, TAG_ATTR_LOCATION });
}
}
} else if (TAG_SERIALIZER.equalsIgnoreCase(elem.getTagName())) {
// setSerializerMethod(elem.getAttribute(TAG_ATTR_METHOD));
setSerializerMethod(DDParserUtil.checkAndGetAttributeValue(TAG_SERIALIZER, TAG_ATTR_METHOD, elem, true));
} else if (TAG_ASYNC_AGGREGATE_ERROR_CONFIGURATION.equalsIgnoreCase(elem.getTagName())) {
errorConfiguration = (AsyncAggregateErrorConfiguration) aParser.buildObject(elem, aOptions);
errorConfiguration.sParentObject(this);
} else {
throw new InvalidXMLException(
InvalidXMLException.UNKNOWN_ELEMENT,
new Object[]{elem.getTagName()});
}
}
} // for
// Create Error Config if not specified
if (errorConfiguration == null) {
errorConfiguration = (AsyncAEErrorConfiguration) UIMAFramework
.getResourceSpecifierFactory().createObject(AsyncAggregateErrorConfiguration.class);
setErrorConfiguration(errorConfiguration);
errorConfiguration.sParentObject(this);
}
}
/**
* Check and set the attributes of Input Queue
*
* @param aElement
* @throws InvalidXMLException
* @return void
*/
protected void checkAndSetInputQueueAttributes (Element aElement) throws InvalidXMLException {
// Check for "key" and "async" attributes
NamedNodeMap map = aElement.getAttributes();
if (map != null) {
for (int i=0; i<map.getLength(); ++i) {
Node item = map.item(i);
String name = item.getNodeName();
String val = item.getNodeValue();
if (val == null) {
val = "";
} else {
val = val.trim();
}
if (AEDeploymentConstants.TAG_ATTR_END_POINT.equalsIgnoreCase(name)) {
// set "endpoint = ..." attribute
inputQueue.setEndPoint(val);
} else if (AEDeploymentConstants.TAG_ATTR_BROKER_URL.equalsIgnoreCase(name)) {
// set "brokerURL =" attribute
inputQueue.setBrokerURL(val);
} else {
throw new InvalidXMLException(InvalidXMLException.UNKNOWN_ELEMENT,
new Object[]{name});
}
}
}
// Check for missing attributes
if (inputQueue.getEndPoint() == null) {
throw new InvalidXMLException(InvalidXMLException.ELEMENT_NOT_FOUND,
new Object[]{AEDeploymentConstants.TAG_ATTR_END_POINT, AEDeploymentConstants.TAG_INPUT_QUEUE});
}
if (inputQueue.getBrokerURL() == null) {
throw new InvalidXMLException(InvalidXMLException.ELEMENT_NOT_FOUND,
new Object[]{AEDeploymentConstants.TAG_ATTR_BROKER_URL, AEDeploymentConstants.TAG_INPUT_QUEUE});
}
}
public void toXML(ContentHandler aContentHandler, boolean aWriteDefaultNamespaceAttribute)
throws SAXException
{
// <TAG_REMOTE_DELEGATE key= >
AttributesImpl attrs = new AttributesImpl();
if (getKey() != null && getKey().trim().length() > 0) {
attrs.addAttribute("", TAG_ATTR_KEY, AEDeploymentConstants.TAG_ATTR_KEY, null, getKey());
}
if (remoteReplyQueueScaleout > 0) {
attrs.addAttribute("", TAG_ATTR_REMOTE_REPLYQUEUE_SCALEOUT, TAG_ATTR_REMOTE_REPLYQUEUE_SCALEOUT,
null, "" + remoteReplyQueueScaleout);
}
aContentHandler.startElement("", TAG_REMOTE_DELEGATE,
TAG_REMOTE_DELEGATE, attrs);
attrs.clear();
// <casMultiplier poolSize="5"/> <!-- req | omit-->
if (AEDeploymentDescription_Impl.isCASMultiplier(getResourceSpecifier())) {
if (getCasMultiplierPoolSize() != UNDEFINED_INT) {
attrs.addAttribute("", TAG_ATTR_POOL_SIZE, TAG_ATTR_POOL_SIZE,
null, "" + getCasMultiplierPoolSize());
attrs.addAttribute("", TAG_ATTR_INIT_SIZE_OF_CAS_HEAP, TAG_ATTR_INIT_SIZE_OF_CAS_HEAP,
null, ""+initialFsHeapSize);
aContentHandler.startElement("", TAG_CAS_MULTIPLIER, TAG_CAS_MULTIPLIER, attrs);
aContentHandler.endElement("", "", TAG_CAS_MULTIPLIER);
attrs.clear();
}
}
// <inputQueue ... />
if (inputQueue != null) {
attrs.addAttribute("", TAG_ATTR_BROKER_URL, TAG_ATTR_BROKER_URL,
null, inputQueue.getBrokerURL());
attrs.addAttribute("", TAG_ATTR_END_POINT, TAG_ATTR_END_POINT,
null, inputQueue.getEndPoint());
aContentHandler.startElement("",
TAG_INPUT_QUEUE, TAG_INPUT_QUEUE, attrs);
aContentHandler.endElement("", "", TAG_INPUT_QUEUE);
attrs.clear();
}
// <replyQueue location="[local|remote]"/> <!-- optional -->
// Note: location="local" is NO longer support. Will be warned by DDE
if (replyQueueLocation != null) {
attrs.addAttribute("", TAG_ATTR_LOCATION, TAG_ATTR_LOCATION,
null, replyQueueLocation);
aContentHandler.startElement("",
TAG_REPLY_QUEUE, TAG_REPLY_QUEUE, attrs);
aContentHandler.endElement("", "", TAG_REPLY_QUEUE);
attrs.clear();
}
// <serializer method="xmi"/> <!-- optional -->
if (getSerializerMethod() != null) {
attrs.addAttribute("", TAG_ATTR_METHOD, TAG_ATTR_METHOD,
null, getSerializerMethod());
aContentHandler.startElement("",
TAG_SERIALIZER, TAG_SERIALIZER, attrs);
aContentHandler.endElement("", "", TAG_SERIALIZER);
attrs.clear();
}
// <asyncAggregateErrorConfiguration .../> <!-- optional -->
if (errorConfiguration != null) {
errorConfiguration.toXML(aContentHandler, aWriteDefaultNamespaceAttribute);
}
// </TAG_REMOTE_DELEGATE>
aContentHandler.endElement("", "", TAG_REMOTE_DELEGATE);
}
@Override
protected XmlizationInfo getXmlizationInfo() {
return new XmlizationInfo(null, null);
}
/*************************************************************************/
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#getCasMultiplierPoolSize()
*/
public int getCasMultiplierPoolSize() {
return casMultiplierPoolSize;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#setCasMultiplierPoolSize(int)
*/
public void setCasMultiplierPoolSize(int casMultiplierPoolSize) {
this.casMultiplierPoolSize = casMultiplierPoolSize;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#getErrorConfiguration()
*/
public AsyncAEErrorConfiguration getAsyncAEErrorConfiguration() {
return errorConfiguration;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#setErrorConfiguration(com.ibm.uima.aae.deployment.impl.AsyncAggregateErrorConfiguration_Impl)
*/
public void setErrorConfiguration(AsyncAEErrorConfiguration errorConfiguration) {
this.errorConfiguration = errorConfiguration;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#getReplyQueueLocation()
*/
public String getReplyQueueLocation() {
return replyQueueLocation;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#setReplyQueueLocation(java.lang.String)
*/
public void setReplyQueueLocation(String replyQueueLocation) {
this.replyQueueLocation = replyQueueLocation;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#getSerializerMethod()
*/
public String getSerializerMethod() {
return serializerMethod;
}
/* (non-Javadoc)
* @see com.ibm.uima.aae.deployment.impl.RemoteAEDeploymentMetaData#setSerializerMethod(java.lang.String)
*/
public void setSerializerMethod(String serializerMethod) {
this.serializerMethod = serializerMethod;
}
/**
* @return the inputQueue
*/
public InputQueue getInputQueue() {
return inputQueue;
}
/**
* @param inputQueue the inputQueue to set
*/
public void setInputQueue(InputQueue inputQueue) {
this.inputQueue = inputQueue;
}
/**
* @return the importedAE
*/
public Import getImportedAE() {
return importedAE;
}
/**
* @param importedAE the importedAE to set
*/
public void setImportedAE(Import importedAE) {
this.importedAE = importedAE;
}
/**
* @return the initialFsHeapSize
*/
public int getInitialFsHeapSize() {
return initialFsHeapSize;
}
/**
* @param initialFsHeapSize the initialFsHeapSize to set
*/
public void setInitialFsHeapSize(int initialFsHeapSize) {
this.initialFsHeapSize = initialFsHeapSize;
}
public int getRemoteReplyQueueScaleout() {
return remoteReplyQueueScaleout;
}
public void setRemoteReplyQueueScaleout(int concurrentConsumers) {
remoteReplyQueueScaleout = concurrentConsumers;
}
}