blob: 6653e61db6e6067996b1277e3ed47e533d1fb7bd [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.workflow.structs;
//JDK imports
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Properties;
//OODT imports
import org.apache.oodt.cas.metadata.Metadata;
import org.apache.oodt.cas.resource.structs.JobInput;
import org.apache.oodt.cas.workflow.util.XmlRpcStructFactory;
/**
* @author mattmann
* @version $Revision$
*
* <p>
* {@link JobInput} for a {@link WorkflowTask}. This class will be instantiated
* by the Resource Manager when it receives a {@link TaskJob}. The class
* consists of three important pieces of information:
*
* <ul>
* <li>Static {@link WorkflowTaskConfiguration}</li>
* <li>Dynamic Task {@link Metadata}</li>
* <li>The name of the {@link WorkflowTaskInstance} class</li>
* </ul>
* </p>.
*/
public class TaskJobInput implements JobInput {
/* static task config */
private WorkflowTaskConfiguration taskConfig = null;
/* dynamic task metadata */
private Metadata dynMetadata = null;
/* our job id */
private String id = null;
/* the name of the workflow task instance to instantiate
* against this input
*/
private String workflowTaskInstanceClassName = null;
/**
* Default Constructor.
*/
public TaskJobInput() {
taskConfig = new WorkflowTaskConfiguration();
dynMetadata = new Metadata();
}
/*
* (non-Javadoc)
*
* @see org.apache.oodt.cas.resource.structs.JobInput#getId()
*/
public String getId() {
return id;
}
/*
* (non-Javadoc)
*
* @see org.apache.oodt.cas.resource.util.XmlRpcWriteable#read(java.lang.Object)
*/
public void read(Object in) {
if (!(in instanceof Hashtable)) {
return;
}
Hashtable inHash = (Hashtable) in;
this.taskConfig = XmlRpcStructFactory
.getWorkflowTaskConfigurationFromXmlRpc((Hashtable) inHash
.get("task.config"));
this.dynMetadata.addMetadata((Hashtable) inHash.get("task.metadata"));
this.workflowTaskInstanceClassName = (String)inHash.get("task.instance.class");
}
/*
* (non-Javadoc)
*
* @see org.apache.oodt.cas.resource.util.XmlRpcWriteable#write()
*/
public Object write() {
// need to create a hashtable with the task metadata and the task config
Hashtable outHash = new Hashtable();
outHash.put("task.config", XmlRpcStructFactory
.getXmlRpcWorkflowTaskConfiguration(this.taskConfig));
outHash.put("task.metadata", this.dynMetadata.getHashtable());
outHash.put("task.instance.class", this.workflowTaskInstanceClassName);
return outHash;
}
public Metadata getDynMetadata() {
return dynMetadata;
}
public void setDynMetadata(Metadata dynMetadata) {
this.dynMetadata = dynMetadata;
}
public WorkflowTaskConfiguration getTaskConfig() {
return taskConfig;
}
public void setTaskConfig(WorkflowTaskConfiguration taskConfig) {
this.taskConfig = taskConfig;
}
public void setId(String id) {
this.id = id;
}
public String getWorkflowTaskInstanceClassName() {
return workflowTaskInstanceClassName;
}
public void setWorkflowTaskInstanceClassName(
String workflowTaskInstanceClassName) {
this.workflowTaskInstanceClassName = workflowTaskInstanceClassName;
}
/*
* (non-Javadoc)
*
* @see org.apache.oodt.cas.resource.util.Configurable#configure(java.util.Properties)
*/
public void configure(Properties props) {
// looking for dyn.metadata.file
// looking for static.config.file
String staticConfigFile = props.getProperty("static.config.file");
String dynMetadataFile = props.getProperty("dyn.metadata.file");
if (staticConfigFile != null) {
try {
this.taskConfig.getProperties().load(
new FileInputStream(new File(staticConfigFile)));
} catch (RuntimeException ex) {
throw ex;
} catch (Exception ignore) {
}
}
if (dynMetadataFile != null) {
InputStream in = null;
try {
this.dynMetadata = new Metadata();
Properties fileProps = new Properties();
in = new BufferedInputStream(new FileInputStream(new File(dynMetadataFile)));
fileProps.load(in);
for (Object key: fileProps.keySet()){
String keyStr = (String)key;
this.dynMetadata.addMetadata(keyStr, fileProps.getProperty(keyStr));
}
} catch (RuntimeException ex) {
throw ex;
} catch (Exception ignore) {
} finally {
if (in != null) try {
in.close();
} catch (IOException ignore) {}
}
}
}
}