blob: 908c83b90f9a384affb6060fe665f12597140cba [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.oodt.cas.resource.util;
//JDK imports
import java.net.URL;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import java.util.logging.Logger;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
//OODT imports
import org.apache.oodt.commons.xml.XMLUtils;
import org.apache.oodt.cas.metadata.util.PathUtils;
import org.apache.oodt.cas.resource.structs.Job;
import org.apache.oodt.cas.resource.structs.JobInput;
import org.apache.oodt.cas.resource.structs.JobSpec;
import org.apache.oodt.cas.resource.structs.ResourceNode;
/**
* @author woollard
* @author bfoster
* @version $Revsion$
*
* <p>
* A class for constructing Resource Manager objects from XML {@link Node}s and
* {@link Element}s.
* </p>
*/
public final class XmlStructFactory {
/* our log stream */
public static Logger LOG = Logger.getLogger(XmlStructFactory.class
.getName());
private XmlStructFactory() throws InstantiationException {
throw new InstantiationException(
"Don't instantiate XML Struct Factories!");
}
public static ResourceNode getNodes(Node node) {
Element resourceNodeRoot = (Element) node;
String id = null;
URL ip = null;
int capacity = 0;
try {
id = resourceNodeRoot.getAttribute("nodeId");
ip = new URL(Boolean.parseBoolean(resourceNodeRoot
.getAttribute("envReplace")) ? PathUtils
.doDynamicReplacement(resourceNodeRoot.getAttribute("ip"))
: resourceNodeRoot.getAttribute("ip"));
capacity = new Integer(resourceNodeRoot.getAttribute("capacity"))
.intValue();
} catch (Exception e) {
e.printStackTrace();
}
ResourceNode resource = new ResourceNode(id, ip, capacity);
return resource;
}
public static List getQueueAssignment(Node node) {
Vector queues = new Vector();
Element resourceNodeRoot = (Element) node;
Element queueElem = XMLUtils
.getFirstElement("queues", resourceNodeRoot);
NodeList queueList = queueElem.getElementsByTagName("queue");
if (queueList != null && queueList.getLength() > 0) {
for (int i = 0; i < queueList.getLength(); i++) {
Element queueElement = (Element) queueList.item(i);
String queueId = queueElement.getAttribute("name");
queues.add(queueId);
}
}
return queues;
}
public static JobSpec getJobSpec(Node node) {
Element jobNodeElem = (Element) node;
String jobId = jobNodeElem.getAttribute("id");
String jobName = jobNodeElem.getAttribute("name");
Element instClassElem = XMLUtils.getFirstElement("instanceClass",
jobNodeElem);
String instClass = instClassElem.getAttribute("name");
String queue = XMLUtils.getElementText("queue", jobNodeElem);
Integer load = new Integer(Integer.parseInt(XMLUtils.getElementText(
"load", jobNodeElem)));
Element inputClass = XMLUtils
.getFirstElement("inputClass", jobNodeElem);
String inputClassName = inputClass.getAttribute("name");
// now read the properties defined, if any
Element propertiesOuterRoot = XMLUtils.getFirstElement("properties",
inputClass);
Properties inputConfigProps = null;
if (propertiesOuterRoot != null) {
inputConfigProps = new Properties();
NodeList propNodeList = propertiesOuterRoot
.getElementsByTagName("property");
if (propNodeList != null && propNodeList.getLength() > 0) {
for (int i = 0; i < propNodeList.getLength(); i++) {
Element propElem = (Element) propNodeList.item(i);
String propName = propElem.getAttribute("name");
String propValue = propElem.getAttribute("value");
if (propName != null && propValue != null) {
inputConfigProps.setProperty(propName, propValue);
}
}
}
}
Job job = new Job();
job.setId(jobId);
job.setName(jobName);
job.setJobInstanceClassName(instClass);
job.setJobInputClassName(inputClassName);
job.setQueueName(queue);
job.setLoadValue(load);
JobInput in = GenericResourceManagerObjectFactory
.getJobInputFromClassName(inputClassName);
if (inputConfigProps != null) {
in.configure(inputConfigProps);
}
JobSpec spec = new JobSpec(in, job);
return spec;
}
}