Repository: airavata Updated Branches: refs/heads/develop 67a9f643d -> c3064689d
http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PostJobCommandsImpl.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PostJobCommandsImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PostJobCommandsImpl.java deleted file mode 100644 index 3dd4bdc..0000000 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PostJobCommandsImpl.java +++ /dev/null @@ -1,254 +0,0 @@ -/** - * - * 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. - */ -/* - * XML Type: postJobCommands - * Namespace: http://airavata.apache.org/gfac/core/2012/12 - * Java type: org.apache.airavata.gfac.core.x2012.x12.PostJobCommands - * - * Automatically generated - do not modify. - */ -package org.apache.airavata.gfac.core.x2012.x12.impl; -/** - * An XML postJobCommands(@http://airavata.apache.org/gfac/core/2012/12). - * - * This is a complex type. - */ -public class PostJobCommandsImpl extends org.apache.xmlbeans.impl.values.XmlComplexContentImpl implements org.apache.airavata.gfac.core.x2012.x12.PostJobCommands -{ - private static final long serialVersionUID = 1L; - - public PostJobCommandsImpl(org.apache.xmlbeans.SchemaType sType) - { - super(sType); - } - - private static final javax.xml.namespace.QName COMMAND$0 = - new javax.xml.namespace.QName("http://airavata.apache.org/gfac/core/2012/12", "command"); - - - /** - * Gets array of all "command" elements - */ - public java.lang.String[] getCommandArray() - { - synchronized (monitor()) - { - check_orphaned(); - java.util.List targetList = new java.util.ArrayList(); - get_store().find_all_element_users(COMMAND$0, targetList); - java.lang.String[] result = new java.lang.String[targetList.size()]; - for (int i = 0, len = targetList.size() ; i < len ; i++) - result[i] = ((org.apache.xmlbeans.SimpleValue)targetList.get(i)).getStringValue(); - return result; - } - } - - /** - * Gets ith "command" element - */ - public java.lang.String getCommandArray(int i) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = null; - target = (org.apache.xmlbeans.SimpleValue)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - return target.getStringValue(); - } - } - - /** - * Gets (as xml) array of all "command" elements - */ - public org.apache.xmlbeans.XmlString[] xgetCommandArray() - { - synchronized (monitor()) - { - check_orphaned(); - java.util.List targetList = new java.util.ArrayList(); - get_store().find_all_element_users(COMMAND$0, targetList); - org.apache.xmlbeans.XmlString[] result = new org.apache.xmlbeans.XmlString[targetList.size()]; - targetList.toArray(result); - return result; - } - } - - /** - * Gets (as xml) ith "command" element - */ - public org.apache.xmlbeans.XmlString xgetCommandArray(int i) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - return (org.apache.xmlbeans.XmlString)target; - } - } - - /** - * Returns number of "command" element - */ - public int sizeOfCommandArray() - { - synchronized (monitor()) - { - check_orphaned(); - return get_store().count_elements(COMMAND$0); - } - } - - /** - * Sets array of all "command" element - */ - public void setCommandArray(java.lang.String[] commandArray) - { - synchronized (monitor()) - { - check_orphaned(); - arraySetterHelper(commandArray, COMMAND$0); - } - } - - /** - * Sets ith "command" element - */ - public void setCommandArray(int i, java.lang.String command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = null; - target = (org.apache.xmlbeans.SimpleValue)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - target.setStringValue(command); - } - } - - /** - * Sets (as xml) array of all "command" element - */ - public void xsetCommandArray(org.apache.xmlbeans.XmlString[]commandArray) - { - synchronized (monitor()) - { - check_orphaned(); - arraySetterHelper(commandArray, COMMAND$0); - } - } - - /** - * Sets (as xml) ith "command" element - */ - public void xsetCommandArray(int i, org.apache.xmlbeans.XmlString command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - target.set(command); - } - } - - /** - * Inserts the value as the ith "command" element - */ - public void insertCommand(int i, java.lang.String command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = - (org.apache.xmlbeans.SimpleValue)get_store().insert_element_user(COMMAND$0, i); - target.setStringValue(command); - } - } - - /** - * Appends the value as the last "command" element - */ - public void addCommand(java.lang.String command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = null; - target = (org.apache.xmlbeans.SimpleValue)get_store().add_element_user(COMMAND$0); - target.setStringValue(command); - } - } - - /** - * Inserts and returns a new empty value (as xml) as the ith "command" element - */ - public org.apache.xmlbeans.XmlString insertNewCommand(int i) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().insert_element_user(COMMAND$0, i); - return target; - } - } - - /** - * Appends and returns a new empty value (as xml) as the last "command" element - */ - public org.apache.xmlbeans.XmlString addNewCommand() - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().add_element_user(COMMAND$0); - return target; - } - } - - /** - * Removes the ith "command" element - */ - public void removeCommand(int i) - { - synchronized (monitor()) - { - check_orphaned(); - get_store().remove_element(COMMAND$0, i); - } - } -} http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PreJobCommandsImpl.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PreJobCommandsImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PreJobCommandsImpl.java deleted file mode 100644 index 41e535a..0000000 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/x2012/x12/impl/PreJobCommandsImpl.java +++ /dev/null @@ -1,254 +0,0 @@ -/** - * - * 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. - */ -/* - * XML Type: preJobCommands - * Namespace: http://airavata.apache.org/gfac/core/2012/12 - * Java type: org.apache.airavata.gfac.core.x2012.x12.PreJobCommands - * - * Automatically generated - do not modify. - */ -package org.apache.airavata.gfac.core.x2012.x12.impl; -/** - * An XML preJobCommands(@http://airavata.apache.org/gfac/core/2012/12). - * - * This is a complex type. - */ -public class PreJobCommandsImpl extends org.apache.xmlbeans.impl.values.XmlComplexContentImpl implements org.apache.airavata.gfac.core.x2012.x12.PreJobCommands -{ - private static final long serialVersionUID = 1L; - - public PreJobCommandsImpl(org.apache.xmlbeans.SchemaType sType) - { - super(sType); - } - - private static final javax.xml.namespace.QName COMMAND$0 = - new javax.xml.namespace.QName("http://airavata.apache.org/gfac/core/2012/12", "command"); - - - /** - * Gets array of all "command" elements - */ - public java.lang.String[] getCommandArray() - { - synchronized (monitor()) - { - check_orphaned(); - java.util.List targetList = new java.util.ArrayList(); - get_store().find_all_element_users(COMMAND$0, targetList); - java.lang.String[] result = new java.lang.String[targetList.size()]; - for (int i = 0, len = targetList.size() ; i < len ; i++) - result[i] = ((org.apache.xmlbeans.SimpleValue)targetList.get(i)).getStringValue(); - return result; - } - } - - /** - * Gets ith "command" element - */ - public java.lang.String getCommandArray(int i) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = null; - target = (org.apache.xmlbeans.SimpleValue)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - return target.getStringValue(); - } - } - - /** - * Gets (as xml) array of all "command" elements - */ - public org.apache.xmlbeans.XmlString[] xgetCommandArray() - { - synchronized (monitor()) - { - check_orphaned(); - java.util.List targetList = new java.util.ArrayList(); - get_store().find_all_element_users(COMMAND$0, targetList); - org.apache.xmlbeans.XmlString[] result = new org.apache.xmlbeans.XmlString[targetList.size()]; - targetList.toArray(result); - return result; - } - } - - /** - * Gets (as xml) ith "command" element - */ - public org.apache.xmlbeans.XmlString xgetCommandArray(int i) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - return (org.apache.xmlbeans.XmlString)target; - } - } - - /** - * Returns number of "command" element - */ - public int sizeOfCommandArray() - { - synchronized (monitor()) - { - check_orphaned(); - return get_store().count_elements(COMMAND$0); - } - } - - /** - * Sets array of all "command" element - */ - public void setCommandArray(java.lang.String[] commandArray) - { - synchronized (monitor()) - { - check_orphaned(); - arraySetterHelper(commandArray, COMMAND$0); - } - } - - /** - * Sets ith "command" element - */ - public void setCommandArray(int i, java.lang.String command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = null; - target = (org.apache.xmlbeans.SimpleValue)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - target.setStringValue(command); - } - } - - /** - * Sets (as xml) array of all "command" element - */ - public void xsetCommandArray(org.apache.xmlbeans.XmlString[]commandArray) - { - synchronized (monitor()) - { - check_orphaned(); - arraySetterHelper(commandArray, COMMAND$0); - } - } - - /** - * Sets (as xml) ith "command" element - */ - public void xsetCommandArray(int i, org.apache.xmlbeans.XmlString command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().find_element_user(COMMAND$0, i); - if (target == null) - { - throw new IndexOutOfBoundsException(); - } - target.set(command); - } - } - - /** - * Inserts the value as the ith "command" element - */ - public void insertCommand(int i, java.lang.String command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = - (org.apache.xmlbeans.SimpleValue)get_store().insert_element_user(COMMAND$0, i); - target.setStringValue(command); - } - } - - /** - * Appends the value as the last "command" element - */ - public void addCommand(java.lang.String command) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.SimpleValue target = null; - target = (org.apache.xmlbeans.SimpleValue)get_store().add_element_user(COMMAND$0); - target.setStringValue(command); - } - } - - /** - * Inserts and returns a new empty value (as xml) as the ith "command" element - */ - public org.apache.xmlbeans.XmlString insertNewCommand(int i) - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().insert_element_user(COMMAND$0, i); - return target; - } - } - - /** - * Appends and returns a new empty value (as xml) as the last "command" element - */ - public org.apache.xmlbeans.XmlString addNewCommand() - { - synchronized (monitor()) - { - check_orphaned(); - org.apache.xmlbeans.XmlString target = null; - target = (org.apache.xmlbeans.XmlString)get_store().add_element_user(COMMAND$0); - return target; - } - } - - /** - * Removes the ith "command" element - */ - public void removeCommand(int i) - { - synchronized (monitor()) - { - check_orphaned(); - get_store().remove_element(COMMAND$0, i); - } - } -} http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java index 4aaf93b..a808ad3 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java @@ -196,21 +196,20 @@ public abstract class Factory { } switch (resourceJobManager.getResourceJobManagerType()) { - case PBS: - return new PBSJobConfiguration("PBSTemplate.xslt", ".pbs", resourceJobManager.getJobManagerBinPath(), + return new PBSJobConfiguration("PBS_Groovy.template", ".pbs", resourceJobManager.getJobManagerBinPath(), resourceJobManager.getJobManagerCommands(), outputParser); case SLURM: - return new SlurmJobConfiguration("SLURMTemplate.xslt", ".slurm", resourceJobManager + return new SlurmJobConfiguration("SLURM_Groovy.template", ".slurm", resourceJobManager .getJobManagerBinPath(), resourceJobManager.getJobManagerCommands(), outputParser); case LSF: - return new LSFJobConfiguration("LSFTemplate.xslt", ".lsf", resourceJobManager.getJobManagerBinPath(), + return new LSFJobConfiguration("LSF_Groovy.template", ".lsf", resourceJobManager.getJobManagerBinPath(), resourceJobManager.getJobManagerCommands(), outputParser); case UGE: - return new UGEJobConfiguration("UGETemplate.xslt", ".pbs", resourceJobManager.getJobManagerBinPath(), + return new UGEJobConfiguration("UGE_Groovy.template", ".pbs", resourceJobManager.getJobManagerBinPath(), resourceJobManager.getJobManagerCommands(), outputParser); case FORK: - return new ForkJobConfiguration("ForkTemplate.xslt", ".sh", resourceJobManager.getJobManagerBinPath(), + return new ForkJobConfiguration("FORK_Groovy.template", ".sh", resourceJobManager.getJobManagerBinPath(), resourceJobManager.getJobManagerCommands(), outputParser); default: return null; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/ForkOutputParser.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/ForkOutputParser.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/ForkOutputParser.java index b99db30..076bdba 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/ForkOutputParser.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/ForkOutputParser.java @@ -22,7 +22,6 @@ package org.apache.airavata.gfac.impl.job; import org.apache.airavata.common.utils.AiravataUtils; -import org.apache.airavata.gfac.core.JobDescriptor; import org.apache.airavata.gfac.core.SSHApiException; import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.model.status.JobStatus; @@ -33,10 +32,6 @@ import java.util.Map; public class ForkOutputParser implements OutputParser { private static final Logger log = LoggerFactory.getLogger(ForkOutputParser.class); - @Override - public void parseSingleJob(JobDescriptor descriptor, String rawOutput) throws SSHApiException { - log.info(rawOutput); - } @Override public String parseJobSubmission(String rawOutput) throws SSHApiException { http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/LSFOutputParser.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/LSFOutputParser.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/LSFOutputParser.java index bb0ae46..7c86ffc 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/LSFOutputParser.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/LSFOutputParser.java @@ -20,9 +20,8 @@ */ package org.apache.airavata.gfac.impl.job; -import org.apache.airavata.gfac.core.JobDescriptor; -import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.gfac.core.SSHApiException; +import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.model.status.JobState; import org.apache.airavata.model.status.JobStatus; import org.slf4j.Logger; @@ -39,13 +38,6 @@ public class LSFOutputParser implements OutputParser { private final static Logger logger = LoggerFactory.getLogger(LSFOutputParser.class); @Override - public void parseSingleJob(JobDescriptor jobDescriptor, String rawOutput) throws SSHApiException { - logger.debug(rawOutput); - //todo we need to implement this but we are not using it airavata runtime - // if someone is using the gsissh as a tool this will be useful to get a descriptive information about a single job - } - - @Override public String parseJobSubmission(String rawOutput) throws SSHApiException { logger.debug(rawOutput); return rawOutput.substring(rawOutput.indexOf("<")+1,rawOutput.indexOf(">")); http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/PBSOutputParser.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/PBSOutputParser.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/PBSOutputParser.java index 7f97a68..d7d52ee 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/PBSOutputParser.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/PBSOutputParser.java @@ -20,10 +20,8 @@ */ package org.apache.airavata.gfac.impl.job; -import org.apache.airavata.gfac.core.JobDescriptor; -import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.gfac.core.SSHApiException; -import org.apache.airavata.model.status.JobState; +import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.model.status.JobStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,92 +35,6 @@ import java.util.regex.Pattern; public class PBSOutputParser implements OutputParser { private static final Logger log = LoggerFactory.getLogger(PBSOutputParser.class); - public void parseSingleJob(JobDescriptor jobDescriptor, String rawOutput) { - log.debug(rawOutput); - String[] info = rawOutput.split("\n"); - String[] line; - for (int i = 0; i < info.length; i++) { - if (info[i].contains("=")) { - line = info[i].split("=", 2); - } else { - line = info[i].split(":", 2); - } - if (line.length >= 2) { - String header = line[0].trim(); - log.debug("Header = " + header); - String value = line[1].trim(); - log.debug("value = " + value); - - if (header.equals("Variable_List")) { - while (info[i + 1].startsWith("\t")) { - value += info[i + 1]; - i++; - } - value = value.replaceAll("\t", ""); - jobDescriptor.setVariableList(value); - } else if ("Job Id".equals(header)) { - jobDescriptor.setJobID(value); - } else if ("Job_Name".equals(header)) { - jobDescriptor.setJobName(value); - } else if ("Account_Name".equals(header)) { - jobDescriptor.setAcountString(value); - } else if ("job_state".equals(header)) { - jobDescriptor.setStatus(value); - } else if ("Job_Owner".equals(header)) { - jobDescriptor.setOwner(value); - } else if ("resources_used.cput".equals(header)) { - jobDescriptor.setUsedCPUTime(value); - } else if ("resources_used.mem".equals(header)) { - jobDescriptor.setUsedMemory(value); - } else if ("resources_used.walltime".equals(header)) { - jobDescriptor.setEllapsedTime(value); - } else if ("job_state".equals(header)) { - jobDescriptor.setStatus(value); - } else if ("queue".equals(header)) - jobDescriptor.setQueueName(value); - else if ("ctime".equals(header)) { - jobDescriptor.setCTime(value); - } else if ("qtime".equals(header)) { - jobDescriptor.setQTime(value); - } else if ("mtime".equals(header)) { - jobDescriptor.setMTime(value); - } else if ("start_time".equals(header)) { - jobDescriptor.setSTime(value); - } else if ("comp_time".equals(header)) { - jobDescriptor.setCompTime(value); - } else if ("exec_host".equals(header)) { - jobDescriptor.setExecuteNode(value); - } else if ("Output_Path".equals(header)) { - if (info[i + 1].contains("=") || info[i + 1].contains(":")) - jobDescriptor.setStandardOutFile(value); - else { - jobDescriptor.setStandardOutFile(value + info[i + 1].trim()); - i++; - } - } else if ("Error_Path".equals(header)) { - if (info[i + 1].contains("=") || info[i + 1].contains(":")) - jobDescriptor.setStandardErrorFile(value); - else { - String st = info[i + 1].trim(); - jobDescriptor.setStandardErrorFile(value + st); - i++; - } - - } else if ("submit_args".equals(header)) { - while (i + 1 < info.length) { - if (info[i + 1].startsWith("\t")) { - value += info[i + 1]; - i++; - } else - break; - } - value = value.replaceAll("\t", ""); - jobDescriptor.setSubmitArgs(value); - } - } - } - } - public String parseJobSubmission(String rawOutput) { log.debug(rawOutput); String jobId = rawOutput; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/SlurmOutputParser.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/SlurmOutputParser.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/SlurmOutputParser.java index dff0a9b..e94afc5 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/SlurmOutputParser.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/SlurmOutputParser.java @@ -20,9 +20,8 @@ */ package org.apache.airavata.gfac.impl.job; -import org.apache.airavata.gfac.core.JobDescriptor; -import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.gfac.core.SSHApiException; +import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.model.status.JobState; import org.apache.airavata.model.status.JobStatus; import org.slf4j.Logger; @@ -40,64 +39,6 @@ public class SlurmOutputParser implements OutputParser { public static final String STATUS = "status"; public static final String JOBID = "jobId"; - public void parseSingleJob(JobDescriptor descriptor, String rawOutput) throws SSHApiException { - log.info(rawOutput); - String[] info = rawOutput.split("\n"); - String lastString = info[info.length - 1]; - if (lastString.contains("JOB ID")) { - // because there's no state - descriptor.setStatus("U"); - } else { - int column = 0; - System.out.println(lastString); - for (String each : lastString.split(" ")) { - if (each.trim().isEmpty()) { - continue; - } else { - switch (column) { - case 0: - descriptor.setJobID(each); - column++; - break; - case 1: - descriptor.setPartition(each); - column++; - break; - case 2: - descriptor.setJobName(each); - column++; - break; - case 3: - descriptor.setUserName(each); - column++; - break; - case 4: - descriptor.setStatus(each); - column++; - break; - case 5: - descriptor.setUsedCPUTime(each); - column++; - break; - case 6: - try { - int nodes = Integer.parseInt(each); - descriptor.setNodes(nodes); - }catch (Exception e){ - log.error("Node count read from command output is not an integer !!!"); - } - column++; - break; - case 7: - descriptor.setNodeList(each); - column++; - break; - } - } - } - } - - } /** * This can be used to parseSingleJob the outpu of sbatch and extrac the jobID from the content http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/UGEOutputParser.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/UGEOutputParser.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/UGEOutputParser.java index 1c39258..31a70db 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/UGEOutputParser.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/job/UGEOutputParser.java @@ -20,9 +20,8 @@ */ package org.apache.airavata.gfac.impl.job; -import org.apache.airavata.gfac.core.JobDescriptor; -import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.gfac.core.SSHApiException; +import org.apache.airavata.gfac.core.cluster.OutputParser; import org.apache.airavata.model.status.JobState; import org.apache.airavata.model.status.JobStatus; import org.slf4j.Logger; @@ -38,92 +37,6 @@ public class UGEOutputParser implements OutputParser { private static final Logger log = LoggerFactory.getLogger(PBSOutputParser.class); public static final String JOB_ID = "jobId"; - public void parseSingleJob(JobDescriptor jobDescriptor, String rawOutput) { - log.debug(rawOutput); - String[] info = rawOutput.split("\n"); - String[] line; - for (int i = 0; i < info.length; i++) { - if (info[i].contains("=")) { - line = info[i].split("=", 2); - } else { - line = info[i].split(":", 2); - } - if (line.length >= 2) { - String header = line[0].trim(); - log.debug("Header = " + header); - String value = line[1].trim(); - log.debug("value = " + value); - - if (header.equals("Variable_List")) { - while (info[i + 1].startsWith("\t")) { - value += info[i + 1]; - i++; - } - value = value.replaceAll("\t", ""); - jobDescriptor.setVariableList(value); - } else if ("Job Id".equals(header)) { - jobDescriptor.setJobID(value); - } else if ("Job_Name".equals(header)) { - jobDescriptor.setJobName(value); - } else if ("Account_Name".equals(header)) { - jobDescriptor.setAcountString(value); - } else if ("job_state".equals(header)) { - jobDescriptor.setStatus(value); - } else if ("Job_Owner".equals(header)) { - jobDescriptor.setOwner(value); - } else if ("resources_used.cput".equals(header)) { - jobDescriptor.setUsedCPUTime(value); - } else if ("resources_used.mem".equals(header)) { - jobDescriptor.setUsedMemory(value); - } else if ("resources_used.walltime".equals(header)) { - jobDescriptor.setEllapsedTime(value); - } else if ("job_state".equals(header)) { - jobDescriptor.setStatus(value); - } else if ("queue".equals(header)) - jobDescriptor.setQueueName(value); - else if ("ctime".equals(header)) { - jobDescriptor.setCTime(value); - } else if ("qtime".equals(header)) { - jobDescriptor.setQTime(value); - } else if ("mtime".equals(header)) { - jobDescriptor.setMTime(value); - } else if ("start_time".equals(header)) { - jobDescriptor.setSTime(value); - } else if ("comp_time".equals(header)) { - jobDescriptor.setCompTime(value); - } else if ("exec_host".equals(header)) { - jobDescriptor.setExecuteNode(value); - } else if ("Output_Path".equals(header)) { - if (info[i + 1].contains("=") || info[i + 1].contains(":")) - jobDescriptor.setStandardOutFile(value); - else { - jobDescriptor.setStandardOutFile(value + info[i + 1].trim()); - i++; - } - } else if ("Error_Path".equals(header)) { - if (info[i + 1].contains("=") || info[i + 1].contains(":")) - jobDescriptor.setStandardErrorFile(value); - else { - String st = info[i + 1].trim(); - jobDescriptor.setStandardErrorFile(value + st); - i++; - } - - } else if ("submit_args".equals(header)) { - while (i + 1 < info.length) { - if (info[i + 1].startsWith("\t")) { - value += info[i + 1]; - i++; - } else - break; - } - value = value.replaceAll("\t", ""); - jobDescriptor.setSubmitArgs(value); - } - } - } - } - public String parseJobSubmission(String rawOutput) { log.debug(rawOutput); if (rawOutput != null && !rawOutput.isEmpty() && !isJobSubmissionFailed(rawOutput)) { http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java index a131ef5..cabb77f 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java @@ -72,15 +72,15 @@ public class DefaultJobSubmissionTask implements JobSubmissionTask { JobModel jobModel = processContext.getJobModel(); jobModel.setTaskId(taskContext.getTaskId()); RemoteCluster remoteCluster = processContext.getJobSubmissionRemoteCluster(); - JobDescriptor jobDescriptor = GFacUtils.createJobDescriptor(processContext,taskContext); - jobModel.setJobName(jobDescriptor.getJobName()); - ResourceJobManager resourceJobManager = GFacUtils.getResourceJobManager(processContext); + GroovyMap groovyMap = GFacUtils.creatGroovyMap(processContext,taskContext); + jobModel.setJobName(groovyMap.get(Script.JOB_NAME).toString()); + ResourceJobManager resourceJobManager = GFacUtils.getResourceJobManager(processContext); JobManagerConfiguration jConfig = null; if (resourceJobManager != null) { jConfig = Factory.getJobManagerConfiguration(resourceJobManager); } JobStatus jobStatus = new JobStatus(); - File jobFile = GFacUtils.createJobFile(taskContext, jobDescriptor, jConfig); + File jobFile = GFacUtils.createJobFile(groovyMap, taskContext, jConfig); if (jobFile != null && jobFile.exists()) { jobModel.setJobDescription(FileUtils.readFileToString(jobFile)); JobSubmissionOutput jobSubmissionOutput = remoteCluster.submitBatchJob(jobFile.getPath(), http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/ForkJobSubmissionTask.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/ForkJobSubmissionTask.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/ForkJobSubmissionTask.java index b57b68d..e231cb9 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/ForkJobSubmissionTask.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/ForkJobSubmissionTask.java @@ -64,15 +64,15 @@ public class ForkJobSubmissionTask implements JobSubmissionTask { JobModel jobModel = processContext.getJobModel(); jobModel.setTaskId(taskContext.getTaskId()); RemoteCluster remoteCluster = processContext.getJobSubmissionRemoteCluster(); - JobDescriptor jobDescriptor = GFacUtils.createJobDescriptor(processContext, taskContext); - jobModel.setJobName(jobDescriptor.getJobName()); + GroovyMap groovyMap = GFacUtils.creatGroovyMap(processContext, taskContext); + jobModel.setJobName(groovyMap.get(Script.JOB_NAME).toString()); ResourceJobManager resourceJobManager = GFacUtils.getResourceJobManager(processContext); JobManagerConfiguration jConfig = null; if (resourceJobManager != null) { jConfig = Factory.getJobManagerConfiguration(resourceJobManager); } JobStatus jobStatus = new JobStatus(); - File jobFile = GFacUtils.createJobFile(taskContext, jobDescriptor, jConfig); + File jobFile = GFacUtils.createJobFile(groovyMap, taskContext, jConfig); if (jobFile != null && jobFile.exists()) { jobModel.setJobDescription(FileUtils.readFileToString(jobFile)); JobSubmissionOutput jobSubmissionOutput = remoteCluster.submitBatchJob(jobFile.getPath(), http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java index d37d322..eaa446e 100644 --- a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java +++ b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java @@ -36,7 +36,6 @@ import org.apache.airavata.model.messaging.event.*; import org.apache.airavata.model.process.ProcessModel; import org.apache.airavata.model.status.ExperimentState; import org.apache.airavata.model.status.ProcessState; -import org.apache.airavata.model.status.ProcessStatus; import org.apache.airavata.model.util.ExperimentModelUtil; import org.apache.airavata.model.experiment.*; import org.apache.airavata.orchestrator.cpi.OrchestratorService; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/invoker/MsgBoxWsaResponsesCorrelator.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/invoker/MsgBoxWsaResponsesCorrelator.java b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/invoker/MsgBoxWsaResponsesCorrelator.java index cab3462..7705ffc 100644 --- a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/invoker/MsgBoxWsaResponsesCorrelator.java +++ b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/invoker/MsgBoxWsaResponsesCorrelator.java @@ -20,7 +20,7 @@ //*/ //package org.apache.airavata.workflow.engine.invoker; // -//import org.apache.airavata.common.utils.XMLUtil; +//import org.apache.airavata.workflow.core.XMLUtil; //import org.apache.airavata.wsmg.msgbox.client.MsgBoxClient; //import org.apache.axiom.om.OMElement; //import org.apache.axis2.addressing.EndpointReference; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/component/ws/WSComponentApplication.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/component/ws/WSComponentApplication.java b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/component/ws/WSComponentApplication.java index 22d5ded..fedf248 100644 --- a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/component/ws/WSComponentApplication.java +++ b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/component/ws/WSComponentApplication.java @@ -38,7 +38,6 @@ import javax.xml.bind.annotation.XmlType; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.apache.airavata.common.utils.WSConstants; import org.apache.airavata.common.utils.XMLUtil; import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription; import org.apache.airavata.model.application.io.DataType; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/BPELScript.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/BPELScript.java b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/BPELScript.java index 9063207..8cc8f21 100644 --- a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/BPELScript.java +++ b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/BPELScript.java @@ -28,8 +28,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; -import org.apache.airavata.common.utils.StringUtil; -import org.apache.airavata.common.utils.WSConstants; import org.apache.airavata.common.utils.XMLUtil; import org.apache.airavata.workflow.model.component.ComponentPort; import org.apache.airavata.workflow.model.component.ws.WSComponent; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/WorkflowWSDL.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/WorkflowWSDL.java b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/WorkflowWSDL.java index 7f6ea22..010761d 100644 --- a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/WorkflowWSDL.java +++ b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/gpel/script/WorkflowWSDL.java @@ -26,7 +26,6 @@ import java.util.List; import javax.xml.namespace.QName; import org.apache.airavata.common.exception.AiravataException; -import org.apache.airavata.workflow.model.exceptions.UtilsException; import org.apache.airavata.common.utils.WSConstants; import org.apache.airavata.common.utils.XMLUtil; import org.apache.airavata.workflow.model.component.ws.WSComponentPort; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/wf/Workflow.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/wf/Workflow.java b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/wf/Workflow.java index 5a87a97..3dc8daa 100644 --- a/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/wf/Workflow.java +++ b/modules/workflow-model/workflow-model-core/src/main/java/org/apache/airavata/workflow/model/wf/Workflow.java @@ -38,7 +38,6 @@ import javax.xml.namespace.QName; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import org.apache.airavata.common.exception.AiravataException; -import org.apache.airavata.workflow.model.exceptions.UtilsException; import org.apache.airavata.common.utils.JSONUtil; import org.apache.airavata.common.utils.XMLUtil; import org.apache.airavata.workflow.model.component.Component; http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow/workflow-core/pom.xml ---------------------------------------------------------------------- diff --git a/modules/workflow/workflow-core/pom.xml b/modules/workflow/workflow-core/pom.xml index 63e8230..a386824 100644 --- a/modules/workflow/workflow-core/pom.xml +++ b/modules/workflow/workflow-core/pom.xml @@ -63,7 +63,16 @@ <artifactId>guava</artifactId> <version>18.0</version> </dependency> - + <dependency> + <groupId>xerces</groupId> + <artifactId>xercesImpl</artifactId> + <version>2.9.1</version> + </dependency> + <dependency> + <groupId>org.apache.xmlbeans</groupId> + <artifactId>xmlbeans</artifactId> + <version>${xmlbeans.version}</version> + </dependency> <!--test--> <dependency> <groupId>junit</groupId> http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XMLUtil.java ---------------------------------------------------------------------- diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XMLUtil.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XMLUtil.java new file mode 100644 index 0000000..90562da --- /dev/null +++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XMLUtil.java @@ -0,0 +1,587 @@ +/* + * + * 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.airavata.workflow.core; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.io.StringWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.airavata.common.exception.AiravataException; +import org.apache.airavata.common.utils.IOUtil; +import org.apache.xmlbeans.XmlError; +import org.apache.xmlbeans.XmlObject; +import org.apache.xmlbeans.XmlOptions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Text; +import org.xml.sax.SAXException; +import org.xmlpull.infoset.XmlDocument; +import org.xmlpull.infoset.XmlElement; +import org.xmlpull.infoset.XmlNamespace; +import org.xmlpull.mxp1.MXParserFactory; +import org.xmlpull.mxp1_serializer.MXSerializer; + +public class XMLUtil { + + /** + * The XML builder for XPP5 + */ + public static final org.xmlpull.infoset.XmlInfosetBuilder BUILDER = org.xmlpull.infoset.XmlInfosetBuilder + .newInstance(); + + /** + * The XML builder for XPP3. + */ + public static final org.xmlpull.v1.builder.XmlInfosetBuilder BUILDER3 = org.xmlpull.v1.builder.XmlInfosetBuilder + .newInstance(new MXParserFactory()); + + private static final Logger logger = LoggerFactory.getLogger(XMLUtil.class); + + private final static String PROPERTY_SERIALIZER_INDENTATION = "http://xmlpull.org/v1/doc/properties.html#serializer-indentation"; + + private final static String INDENT = " "; + + /** + * Parses a specified string and returns the XmlElement (XPP3). + * + * @param string + * @return The XmlElement (XPP3) parsed. + */ + public static org.xmlpull.v1.builder.XmlElement stringToXmlElement3(String string) { + return BUILDER3.parseFragmentFromReader(new StringReader(string)); + } + + /** + * Parses a specified string and returns the XmlElement (XPP5). + * + * @param string + * @return The XmlElement (XPP5) parsed. + */ + public static org.xmlpull.infoset.XmlElement stringToXmlElement(String string) { + XmlDocument document = BUILDER.parseString(string); + org.xmlpull.infoset.XmlElement element = document.getDocumentElement(); + return element; + } + + /** + * Converts a specified XmlElement (XPP3) to the XmlElement (XPP5). + * + * @param element + * @return The XmlElement (XPP5) converted. + */ + public static org.xmlpull.infoset.XmlElement xmlElement3ToXmlElement5(org.xmlpull.v1.builder.XmlElement element) { + String string = xmlElementToString(element); + return stringToXmlElement(string); + } + + /** + * Converts a specified XmlElement (XPP5) to the XmlElement (XPP3). + * + * @param element + * @return The XmlElement (XPP3) converted. + */ + public static org.xmlpull.v1.builder.XmlElement xmlElement5ToXmlElement3(org.xmlpull.infoset.XmlElement element) { + String string = xmlElementToString(element); + return stringToXmlElement3(string); + } + + /** + * Returns the XML string of a specified XmlElement. + * + * @param element + * The specified XmlElement + * @return The XML string + */ + public static String xmlElementToString(org.xmlpull.v1.builder.XmlElement element) { + MXSerializer serializer = new MXSerializer(); + StringWriter writer = new StringWriter(); + serializer.setOutput(writer); + serializer.setProperty(PROPERTY_SERIALIZER_INDENTATION, INDENT); + BUILDER3.serialize(element, serializer); + String xmlText = writer.toString(); + return xmlText; + } + + /** + * Returns the XML string as a specified XmlElement (XPP5). + * + * @param element + * The specified XmlElement + * @return The XML string + */ + public static String xmlElementToString(org.xmlpull.infoset.XmlElement element) { + String string; + if (element == null) { + string = ""; + } else { + string = BUILDER.serializeToStringPretty(element); + } + return string; + } + + /** + * Converts a specified XPP5 XML element to a DOM element under a specified document. + * + * @param xppElement + * @param document + * @return The converted DOM element. + */ + public static Element xppElementToDomElement(org.xmlpull.infoset.XmlElement xppElement, Document document) { + Element domElement = document.createElement(xppElement.getName()); + + for (org.xmlpull.infoset.XmlNamespace namespace : xppElement.namespaces()) { + logger.debug("namespace: " + namespace); + } + + for (org.xmlpull.infoset.XmlAttribute attribute : xppElement.attributes()) { + domElement.setAttribute(attribute.getName(), attribute.getValue()); + } + + for (Object object : xppElement.children()) { + if (object instanceof org.xmlpull.infoset.XmlElement) { + domElement.appendChild(xppElementToDomElement((org.xmlpull.infoset.XmlElement) object, document)); + } else if (object instanceof String) { + Text text = document.createTextNode((String) object); + domElement.appendChild(text); + } else { + logger.debug("object.getClass(): " + object.getClass()); + } + } + return domElement; + } + +// /** +// * @param definitions3 +// * @return The WsdlDefinitions (XSUL5) +// */ +// @Deprecated +// public static xsul5.wsdl.WsdlDefinitions wsdlDefinitions3ToWsdlDefintions5(xsul.wsdl.WsdlDefinitions definitions3) { +// return WSDLUtil.wsdlDefinitions3ToWsdlDefintions5(definitions3); +// } +// +// /** +// * @param definitions5 +// * @return The WsdlDefinitions (XSUL3) +// */ +// @Deprecated +// public static xsul.wsdl.WsdlDefinitions wsdlDefinitions5ToWsdlDefintions3(xsul5.wsdl.WsdlDefinitions definitions5) { +// return WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(definitions5); +// } + + /** + * Converts a specified XPP3 XML element to a DOM element under a specified document. + * + * @param xppElement + * @param document + * @return The converted DOM element. + */ + public static Element xppElementToDomElement(org.xmlpull.v1.builder.XmlElement xppElement, Document document) { + Element domElement = document.createElement(xppElement.getName()); + + Iterator nsIt = xppElement.namespaces(); + while (nsIt.hasNext()) { + org.xmlpull.v1.builder.XmlNamespace namespace = (org.xmlpull.v1.builder.XmlNamespace) nsIt.next(); + logger.debug("namespace: " + namespace); + // TODO + } + + Iterator attrIt = xppElement.attributes(); + while (attrIt.hasNext()) { + org.xmlpull.v1.builder.XmlAttribute attribute = (org.xmlpull.v1.builder.XmlAttribute) attrIt.next(); + // TODO namespace + domElement.setAttribute(attribute.getName(), attribute.getValue()); + } + + Iterator elementIt = xppElement.children(); + while (elementIt.hasNext()) { + Object object = elementIt.next(); + if (object instanceof org.xmlpull.v1.builder.XmlElement) { + domElement.appendChild(xppElementToDomElement((org.xmlpull.v1.builder.XmlElement) object, document)); + } else if (object instanceof String) { + Text text = document.createTextNode((String) object); + domElement.appendChild(text); + } else { + logger.debug("object.getClass(): " + object.getClass()); + } + } + return domElement; + } + + /** + * @param element + * @return The cloned XmlElement. + */ + public static org.xmlpull.infoset.XmlElement deepClone(org.xmlpull.infoset.XmlElement element) + throws AiravataException { + try { + XmlElement clonedElement = element.clone(); + clonedElement.setParent(null); + return clonedElement; + } catch (CloneNotSupportedException e) { + // This should not happen because we don't put any special Objects. + throw new AiravataException(e.getMessage(), e); + } + } + + /** + * Saves a specified XmlElement to a specified file. + * + * @param element + * @param file + * @throws IOException + */ + public static void saveXML(org.xmlpull.infoset.XmlElement element, File file) throws IOException { + XmlDocument document = BUILDER.newDocument(); + document.setDocumentElement(element); + String xmlText = BUILDER.serializeToStringPretty(document); + IOUtil.writeToFile(xmlText, file); + } + + /** + * Saves a specified XmlElement to a specified file. + * + * @param element + * @param file + * @throws IOException + */ + public static void saveXML(org.xmlpull.v1.builder.XmlElement element, File file) throws IOException { + saveXML(xmlElement3ToXmlElement5(element), file); + } + + /** + * @param file + * @return The XmlElement in the document. + * @throws IOException + */ + public static org.xmlpull.infoset.XmlElement loadXML(InputStream stream) throws IOException { + String xmlText = IOUtil.readToString(stream); + XmlDocument document = BUILDER.parseString(xmlText); + return document.getDocumentElement(); + } + + /** + * @param file + * @return The XmlElement in the document. + * @throws IOException + */ + public static org.xmlpull.infoset.XmlElement loadXML(File file) throws IOException { + return loadXML(new FileInputStream(file)); + } + + /** + * @param string + * @return true if the specified string is XML, false otherwise + */ + public static boolean isXML(String string) { + try { + stringToXmlElement(string); + return true; + } catch (RuntimeException e) { + return false; + } + } + + /** + * Validates a specified XmlObject along with logging errors if any. + * + * @param xmlObject + */ + public static void validate(XmlObject xmlObject) throws AiravataException { + XmlOptions validateOptions = new XmlOptions(); + ArrayList errorList = new ArrayList(); + validateOptions.setErrorListener(errorList); + + boolean isValid = xmlObject.validate(validateOptions); + if (isValid) { + // Valid + return; + } + + // Error + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < errorList.size(); i++) { + XmlError error = (XmlError) errorList.get(i); + logger.warn("Message: " + error.getMessage()); + logger.warn("Location of invalid XML: " + error.getCursorLocation().xmlText()); + stringBuilder.append("Message:" + error.getMessage()); + stringBuilder.append("Location of invalid XML: " + error.getCursorLocation().xmlText()); + } + throw new AiravataException(stringBuilder.toString()); + } + + /** + * Returns the local part of a specified QName. + * + * @param qname + * the specified QName in string, e.g. ns:value + * @return the local part of the QName, e.g. value + */ + public static String getLocalPartOfQName(String qname) { + int index = qname.indexOf(':'); + if (index < 0) { + return qname; + } else { + return qname.substring(index + 1); + } + } + + /** + * Returns the prefix of a specified QName. + * + * @param qname + * the specified QName in string, e.g. ns:value + * @return the prefix of the QName, e.g. ns + */ + public static String getPrefixOfQName(String qname) { + int index = qname.indexOf(':'); + if (index < 0) { + return null; + } else { + return qname.substring(0, index); + } + } + + /** + * @param prefixCandidate + * @param uri + * @param alwaysUseSuffix + * @param element + * @return The namespace found or declared. + */ + public static XmlNamespace declareNamespaceIfNecessary(String prefixCandidate, String uri, boolean alwaysUseSuffix, + XmlElement element) { + XmlNamespace namespace = element.lookupNamespaceByName(uri); + if (namespace == null) { + return declareNamespace(prefixCandidate, uri, alwaysUseSuffix, element); + } else { + return namespace; + } + } + + /** + * @param prefixCandidate + * @param uri + * @param alwaysUseSuffix + * @param element + * @return The namespace declared. + */ + public static XmlNamespace declareNamespace(String prefixCandidate, String uri, boolean alwaysUseSuffix, + XmlElement element) { + if (prefixCandidate == null || prefixCandidate.length() == 0) { + prefixCandidate = "a"; + } + String prefix = prefixCandidate; + if (alwaysUseSuffix) { + prefix += "0"; + } + if (element.lookupNamespaceByPrefix(prefix) != null) { + int i = 1; + prefix = prefixCandidate + i; + while (element.lookupNamespaceByPrefix(prefix) != null) { + i++; + } + } + XmlNamespace namespace = element.declareNamespace(prefix, uri); + return namespace; + } + + /** + * + * @param xml + * @param name + */ + public static void removeElements(XmlElement xml, String name) { + + Iterable<XmlElement> removeElements = xml.elements(null, name); + LinkedList<XmlElement> removeList = new LinkedList<XmlElement>(); + for (XmlElement xmlElement : removeElements) { + removeList.add(xmlElement); + } + for (XmlElement xmlElement : removeList) { + xml.removeChild(xmlElement); + } + Iterable children = xml.children(); + for (Object object : children) { + if (object instanceof XmlElement) { + XmlElement element = (XmlElement) object; + removeElements(element, name); + } + } + } + + /** + * @param url + * @return Document + */ + public static Document retrievalXMLDocFromUrl(String url) { + try { + URL xmlUrl = new URL(url); + InputStream in = xmlUrl.openStream(); + Document ret = null; + DocumentBuilderFactory domFactory; + DocumentBuilder builder; + + domFactory = DocumentBuilderFactory.newInstance(); + domFactory.setValidating(false); + domFactory.setNamespaceAware(false); + builder = domFactory.newDocumentBuilder(); + + ret = builder.parse(in); + + return ret; + } catch (MalformedURLException e) { + logger.error(e.getMessage(), e); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } catch (ParserConfigurationException e) { + logger.error(e.getMessage(), e); + } catch (SAXException e) { + logger.error(e.getMessage(), e); + } + + return null; + } + + /** + * @param url + * @return Document + */ + public static Document retrievalXMLDocForParse(String url) { + try { + URL xmlUrl = new URL(url); + InputStream in = xmlUrl.openStream(); + DocumentBuilderFactory xmlFact = DocumentBuilderFactory.newInstance(); + xmlFact.setNamespaceAware(true); + DocumentBuilder builder = xmlFact.newDocumentBuilder(); + Document doc = builder.parse(in); + + return doc; + } catch (MalformedURLException e) { + logger.error("Malformed URL", e); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } catch (ParserConfigurationException e) { + logger.error(e.getMessage(), e); + } catch (SAXException e) { + logger.error(e.getMessage(), e); + } + + return null; + } + + public static boolean isEqual(XmlElement elem1, XmlElement elem2) throws Exception { + + if (elem1 == null && elem2 == null) { + return true; + } else if (elem1 == null) { + return false; + } else if (elem2 == null) { + return false; + } + + if (!elem1.getName().equals(elem2.getName())) { + return false; + } else { + // now check if children are the same + Iterator children1 = elem1.children().iterator(); + Iterator children2 = elem2.children().iterator(); + + //check first ones for string + Object child1 = null; + Object child2 = null; + if (children1.hasNext() && children2.hasNext()) { + child1 = children1.next(); + child2 = children2.next(); + + if (!children1.hasNext() && !children2.hasNext()) { + //only one node could be string could be xmlelement + return compareObjs(child1, child2); + } else { + //get new iterators + + List<XmlElement> elemSet1 = getXmlElementsOnly(elem1.children().iterator()); + List<XmlElement> elemSet2 = getXmlElementsOnly(elem2.children().iterator()); + + if(elemSet1.size() != elemSet2.size()){ + return false; + } + for(int i =0; i< elemSet1.size(); ++i){ + if(!isEqual(elemSet1.get(i), elemSet2.get(i))){ + return false; + } + } + return true; + } + + + }else { + //no internal element + + return true; + } + } + + + } + + + + private static List<XmlElement> getXmlElementsOnly(Iterator itr){ + LinkedList<XmlElement> list = new LinkedList<XmlElement>(); + while(itr.hasNext()){ + Object obj = itr.next(); + if(obj instanceof XmlElement){ + list.add((XmlElement) obj); + } + } + return list; + } + + + + private static boolean compareObjs(Object child1, Object child2) throws Exception { + if (child1 instanceof String && child2 instanceof String) { + return child1.equals(child2); + + + } else if (child1 instanceof XmlElement && child2 instanceof XmlElement) { + return isEqual((XmlElement) child1, (XmlElement) child2); + } else { + return false; + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XmlFormatter.java ---------------------------------------------------------------------- diff --git a/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XmlFormatter.java b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XmlFormatter.java new file mode 100644 index 0000000..d23e9b4 --- /dev/null +++ b/modules/workflow/workflow-core/src/main/java/org/apache/airavata/workflow/core/XmlFormatter.java @@ -0,0 +1,82 @@ +/* + * + * 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.airavata.workflow.core; + +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.xml.serialize.OutputFormat; +import org.apache.xml.serialize.XMLSerializer; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +/** + * Pretty-prints xml, supplied as a string. + * <p/> + * eg. <code> + * String formattedXml = new XmlFormatter().format("<tag><nested>hello</nested></tag>"); + * </code> + */ +public class XmlFormatter { + + /** + * @param unformattedXml + * @return formattedXml + */ + public static String format(String unformattedXml) { + try { + final Document document = parseXmlFile(unformattedXml); + OutputFormat format = new OutputFormat(document); + format.setLineWidth(65); + format.setIndenting(true); + format.setIndent(2); + Writer out = new StringWriter(); + XMLSerializer serializer = new XMLSerializer(out, format); + serializer.serialize(document); + return out.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static Document parseXmlFile(String in) { + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(in)); + return db.parse(is); + } catch (ParserConfigurationException e) { + throw new RuntimeException(e); + } catch (SAXException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/XMLUtilTest.java ---------------------------------------------------------------------- diff --git a/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/XMLUtilTest.java b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/XMLUtilTest.java new file mode 100644 index 0000000..c1ad0b7 --- /dev/null +++ b/modules/workflow/workflow-core/src/test/java/org/apache/airavata/workflow/core/XMLUtilTest.java @@ -0,0 +1,56 @@ +/* + * + * 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.airavata.workflow.core; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class XMLUtilTest { + private final static Logger logger = LoggerFactory.getLogger(XMLUtilTest.class); + + @Test + public void isXMLTest(){ + String xml = "<test>testing</test>"; + org.junit.Assert.assertTrue(XMLUtil.isXML(xml)); + org.junit.Assert.assertFalse(XMLUtil.isXML("NonXMLString")); + } + + @Test + public void isEqualTest(){ + String xml1 = "<test><inner>innerValue</inner></test>"; + String xml2 = "<test><inner>innerValue</inner></test>"; + String xml3 = "<test1><inner>innerValue</inner></test1>"; + try { + org.junit.Assert.assertTrue(XMLUtil.isEqual(XMLUtil.stringToXmlElement(xml1), XMLUtil.stringToXmlElement(xml2))); + org.junit.Assert.assertFalse(XMLUtil.isEqual(XMLUtil.stringToXmlElement(xml1), XMLUtil.stringToXmlElement(xml3))); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + @Test + public void getQNameTest(){ + String qname = "ns1:a"; + org.junit.Assert.assertEquals("a",XMLUtil.getLocalPartOfQName(qname)); + org.junit.Assert.assertEquals("ns1",XMLUtil.getPrefixOfQName(qname)); + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/c3064689/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index a65df09..7f7bca6 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,9 @@ <surefire.version>2.18.1</surefire.version> <junit.version>4.12</junit.version> <curator.version>2.8.0</curator.version> +<!--remove xmlbeans version --> <xmlbeans.version>2.5.0</xmlbeans.version> + <groovy.version>2.4.7</groovy.version> <xpp3.version>1.1.6</xpp3.version> <xpp5.version>1.2.8</xpp5.version> <xsul.version>2.10.7</xsul.version>
