}
}
getLogger().debug3("Looking for global parameters from scheduler variables");
Variable_set globalVariables = spooler.create_variable_set();
globalVariables.merge(spooler.variables());
globalVariables.merge(spooler_task.params());
if (globalVariables.value("global_configuration_params")!=null && globalVariables.value("global_configuration_params").length()>0){
String globalFile = globalVariables.value("global_configuration_params");
getLogger().debug3("Reading global parameters from "+globalFile);
SOSXMLXPath globalXPath = new SOSXMLXPath(globalFile);
NodeList globalParams = globalXPath.selectNodeList("//params/param");
for (int i=0; i<globalParams.getLength(); i++) {
Node node = globalParams.item(i);
if (node.getNodeName().equalsIgnoreCase("param")) {
NamedNodeMap nodeMap = node.getAttributes();
boolean hidden = false;
if (nodeMap.getNamedItem("hidden")!=null && nodeMap.getNamedItem("hidden").getNodeValue().equalsIgnoreCase("true")) hidden = true;
if (nodeMap != null && nodeMap.getNamedItem("name") != null) {
String value="";
if (nodeMap.getNamedItem("value") != null) {
value = nodeMap.getNamedItem("value").getNodeValue();
} else {
NodeList children = node.getChildNodes();
for (int j=0; j<children.getLength(); j++) {
Node item = children.item(j);
switch (item.getNodeType())
{
case Node.TEXT_NODE:
case Node.CDATA_SECTION_NODE:
value += item.getNodeValue();
}
}
}
if (hidden){
this.getLogger().debug3(".. configuration parameter [" + nodeMap.getNamedItem("name").getNodeValue() + "]: *****");
}else{
this.getLogger().debug3(".. configuration parameter [" + nodeMap.getNamedItem("name").getNodeValue() + "]: " + value);
}
globalVariables.set_var(nodeMap.getNamedItem("name").getNodeValue(), value);
// set additional environment variables for parameters of this state
if (globalEnv || nodeMap.getNamedItem("env") != null) {
if (nodeMap.getNamedItem("env") != null) env = nodeMap.getNamedItem("env").getNodeValue();
boolean setEnv = globalEnv || (env.equalsIgnoreCase("yes") || env.equals("1") || env.equalsIgnoreCase("on") || env.equalsIgnoreCase("true"));
if (setEnv) {
if (this.additional_envvars == null) this.additional_envvars = new TreeMap();
this.additional_envvars.put(nodeMap.getNamedItem("name").getNodeValue(), value);
}
}
}
}
}
//globalParams
}
String[] parameterNames = spooler_task.order().params().names().split(";");
Pattern paramPattern = Pattern.compile("(?m)^.*\\$\\{.*\\}.*$");
int metaTrials=0;
while (metaTrials<=1){
for(int i=0; i<parameterNames.length; i++) {// iterate over parameters and try to substitute
String currParam = String.valueOf ( spooler_task.order().params().value(parameterNames[i]) );
//if ( currParam != null && currParam.matches("^.*\\$\\{.*\\}.*$")) {
if ( currParam != null && paramPattern.matcher(currParam).find()) {
boolean parameterFound = false;
boolean globalParameterFound = false;
boolean envFound = false;
boolean additionalEnvFound = false;
String parameterValue = spooler_task.order().params().value(parameterNames[i]);
int trials=0;
while (parameterValue.indexOf("${") != -1 && trials <= 1) {
this.getLogger().debug6("substitution trials: " + trials + " --> " + parameterValue);
for(int j=0; j<parameterNames.length; j++) {// iterate over other parameters and try to replace
this.getLogger().debug9("parameterNames[j]=" + parameterNames[j] + " -->" + contains(parameterValue,"${" + parameterNames[j] + "}", false));
if (!parameterNames[i].equals(parameterNames[j]) && (contains(parameterValue,"${" + parameterNames[j].toUpperCase() + "}",false) || contains(parameterValue,"${basename:" + parameterNames[j] + "}",false) || contains(parameterValue,"${file_content:" + parameterNames[j] + "}",false))) {
String jParameterValue = spooler_task.order().params().value(parameterNames[j]);
if (parameterValue.indexOf("${basename:"+parameterNames[j]+"}") != -1) {
parameterValue = myReplaceAll(parameterValue,"(?i)\\$\\{basename:" + parameterNames[j] + "\\}", new File(spooler_task.order().params().value(parameterNames[j])).getName().replaceAll("[\\\\]", "\\\\\\\\"));
parameterFound = true;
trials=0;
} else if(parameterValue.indexOf("${file_content:"+parameterNames[j]+"}") != -1){
if (jParameterValue.indexOf("${") != -1){
getLogger().debug9("file_content parameter still contains other parameters.");
metaTrials=0;
}else{
File contentFile = new File(spooler_task.order().params().value(parameterNames[j]));
String fileContent = "";
try{
fileContent = SOSFile.readFile(contentFile);
} catch(Exception e){
getLogger().warn("Failed to read file: "+contentFile.getAbsolutePath());
}
parameterValue = myReplaceAll(parameterValue,"(?i)\\$\\{file_content:" + parameterNames[j] + "\\}", fileContent.replaceAll("[\\\\]", "\\\\\\\\"));
parameterFound = true;
trials=0;
}
} else {
parameterValue = myReplaceAll(parameterValue,"(?i)\\$\\{" + parameterNames[j] + "\\}", spooler_task.order().params().value(parameterNames[j]).replaceAll("[\\\\]", "\\\\\\\\"));
parameterFound = true;
trials=0;
}
}
}
trials++;
}
if (globalVariables.count()>0){
String[] globalNames = globalVariables.names().split(";");
for (int j = 0; j < globalNames.length; j++) {
String globalName = globalNames[j];
String jParameterValue = globalVariables.value(globalName);
this.getLogger().debug9("globalNames[j]=" + globalNames[j] + " -->" + contains(parameterValue,"${" + globalNames[j] + "}", false));
if ((contains(parameterValue,"${" + globalName.toUpperCase() + "}",false) || contains(parameterValue,"${basename:" + globalName + "}",false) || contains(parameterValue,"${file_content:" + globalName + "}",false))) {
if (parameterValue.indexOf("${basename:") != -1) {
parameterValue = myReplaceAll(parameterValue,"(?i)\\$\\{basename:" + globalName + "\\}", new File(globalVariables.value(globalName)).getName().replaceAll("[\\\\]", "\\\\\\\\"));
} else if(parameterValue.indexOf("${file_content:"+globalName+"}") != -1){
if (jParameterValue.indexOf("${") != -1){
getLogger().debug9("file_content parameter still contains other parameters.");
metaTrials=0;
}else{
File contentFile = new File(globalVariables.value(globalName));
String fileContent = "";
try{
fileContent = SOSFile.readFile(contentFile);
} catch(Exception e){
getLogger().warn("Failed to read file: "+contentFile.getAbsolutePath());
}
parameterValue = myReplaceAll(parameterValue,"(?i)\\$\\{file_content:" + globalName + "\\}", fileContent.replaceAll("[\\\\]", "\\\\\\\\"));
}
} else {
parameterValue = myReplaceAll(parameterValue,"(?i)\\$\\{" + globalName + "\\}", globalVariables.value(globalName).replaceAll("[\\\\]", "\\\\\\\\"));
}
globalParameterFound = true;
}
}