blob: 5c9328169bff0ca5d57c9f270bfc5967fdae8305 [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.adapter.vinci.util;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.w3c.dom.Document;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import org.apache.uima.UIMAFramework;
import org.apache.uima.util.Level;
/**
* Instance of this class handles parsing of the xml descriptor files. It also retrieves values of
* the named attributes of the named elements.
*
*
*
*/
public class Descriptor extends DefaultHandler {
private String serviceName = "";
private int instanceCount = 0;
private String resourceSpecifierPath = "";
private String filterString = "";
private String namingServiceHost = "localhost";
private int serverSocketTimeout = 300000; // 5 minute timeout on the service socket
private int threadPoolMinSize = 1;
private int threadPoolMaxSize = 20;
/**
* Constructor responsible for parsing the descriptor file named in filePath.
*
* @param Fully
* qualified path the xml descriptor.
*/
public Descriptor(String filePath) {
try {
parse(filePath);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private Document parse(String configFile) {
Document doc = null;
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
// Create the builder and parse the file
SAXParser parser = factory.newSAXParser();
parser.parse(configFile, this);
UIMAFramework.getLogger().log(Level.CONFIG, "Resource::" + getResourceSpecifierPath());
UIMAFramework.getLogger().log(Level.CONFIG, "Instance Count::" + getInstanceCount());
UIMAFramework.getLogger().log(Level.CONFIG, "Service Name::" + getServiceName());
UIMAFramework.getLogger().log(Level.CONFIG, "Filter String::" + getFilterString());
UIMAFramework.getLogger().log(Level.CONFIG, "Naming Service Host::" + getNamingServiceHost());
UIMAFramework.getLogger().log(Level.CONFIG,
"Server Socket Timeout::" + getServerSocketTimeout());
} catch (Exception ex) {
ex.printStackTrace();
}
return doc;
}
private String getAttribute(String attrName, Attributes attribs) {
String attributeValue = null;
// Add all attributes to the Attribute container
for (int i = 0; attribs != null && i < attribs.getLength(); i++) {
String attributeName = getName(attribs.getLocalName(i), attribs.getQName(i));
if (attrName.equals(attributeName)) {
attributeValue = attribs.getValue(i);
}
}
return attributeValue;
}
private String getName(String s1, String s2) {
if (s1 == null || "".equals(s1))
return s2;
else
return s1;
}
public void startElement(String uri, String localName, String qName, Attributes attribs) {
String elementName = getName(localName, qName);
// if next element is complex, push a new instance on the stack
// if element has attributes, set them in the new instance
if (elementName.equals("service")) {
setServiceName(getAttribute("name", attribs));
} else if (elementName.equals("parameter")) {
String att = getAttribute("name", attribs);
String value = getAttribute("value", attribs);
if ("resourceSpecifierPath".equals(att)) {
setResourceSpecifierPath(value);
} else if ("filterString".equals(att)) {
setFilterString(value);
} else if ("numInstances".equals(att)) {
try {
setInstanceCount(Integer.parseInt(value));
} catch (NumberFormatException nbe) {
setInstanceCount(1);
}
} else if ("serverSocketTimeout".equals(att)) {
try {
setServerSocketTimeout(Integer.parseInt(value));
} catch (NumberFormatException nbe) {
setServerSocketTimeout(300000); // Default is 5 minutes
}
} else if ("namingServiceHost".equals(att)) {
try {
setNamingServiceHost(value);
} catch (NumberFormatException nbe) {
setNamingServiceHost("localhost");
}
} else if ("threadPoolMinSize".equals(att)) {
try {
setThreadPoolMinSize(Integer.parseInt(value));
} catch (NumberFormatException nbe) {
setThreadPoolMinSize(1);
}
} else if ("threadPoolMaxSize".equals(att)) {
try {
setThreadPoolMaxSize(Integer.parseInt(value));
} catch (NumberFormatException nbe) {
setThreadPoolMaxSize(20);
}
}
}
// if none of the above, it is an unexpected element. we ignore these for now
}
public int getThreadPoolMaxSize() {
return threadPoolMaxSize;
}
public void setThreadPoolMaxSize(int threadPoolMaxSize) {
this.threadPoolMaxSize = threadPoolMaxSize;
}
public int getThreadPoolMinSize() {
return threadPoolMinSize;
}
public void setThreadPoolMinSize(int threadPoolMinSize) {
this.threadPoolMinSize = threadPoolMinSize;
}
/**
* Returns the instanceCount.
*
* @return int
*/
public int getInstanceCount() {
return instanceCount;
}
/**
* Returns the resourceSpecifierPath.
*
* @return String
*/
public String getResourceSpecifierPath() {
return resourceSpecifierPath;
}
/**
* Returns the serviceName.
*
* @return String
*/
public String getServiceName() {
return serviceName;
}
/**
* Sets the instanceCount.
*
* @param instanceCount
* The instanceCount to set
*/
public void setInstanceCount(int instanceCount) {
this.instanceCount = instanceCount;
}
/**
* Sets the resourceSpecifierPath.
*
* @param resourceSpecifierPath
* The resourceSpecifierPath to set
*/
public void setResourceSpecifierPath(String resourceSpecifierPath) {
this.resourceSpecifierPath = resourceSpecifierPath;
}
/**
* Sets the serviceName.
*
* @param serviceName
* The serviceName to set
*/
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
/**
* Returns the filterString.
*
* @return String
*/
public String getFilterString() {
return filterString;
}
/**
* Sets the filterString.
*
* @param filterString
* The filterString to set
*/
public void setFilterString(String filterString) {
this.filterString = filterString;
}
public String getNamingServiceHost() {
return namingServiceHost;
}
public void setNamingServiceHost(String namingServiceHost) {
this.namingServiceHost = namingServiceHost;
}
public int getServerSocketTimeout() {
return serverSocketTimeout;
}
public void setServerSocketTimeout(int serverSocketTimeout) {
this.serverSocketTimeout = serverSocketTimeout;
}
}