Package org.apache.airavata.gfac.core.utils

Source Code of org.apache.airavata.gfac.core.utils.GFacUtils

/*
*
* 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.gfac.core.utils;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.*;

import org.apache.airavata.client.api.AiravataAPI;
import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
import org.apache.airavata.common.utils.StringUtil;
import org.apache.airavata.commons.gfac.type.ActualParameter;
import org.apache.airavata.gfac.Constants;
import org.apache.airavata.gfac.ExecutionMode;
import org.apache.airavata.gfac.GFacConfiguration;
import org.apache.airavata.gfac.GFacException;
import org.apache.airavata.gfac.core.context.JobExecutionContext;
import org.apache.airavata.model.workspace.experiment.*;
import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory;
import org.apache.airavata.registry.api.workflow.ApplicationJob;
import org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
import org.apache.airavata.registry.cpi.ChildDataType;
import org.apache.airavata.registry.cpi.CompositeIdentifier;
import org.apache.airavata.registry.cpi.Registry;
import org.apache.airavata.schemas.gfac.*;
import org.apache.axiom.om.OMElement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class GFacUtils {
    private final static Logger log = LoggerFactory.getLogger(GFacUtils.class);

    private GFacUtils() {
    }

    /**
     * Read data from inputStream and convert it to String.
     *
     * @param in
     * @return String read from inputStream
     * @throws java.io.IOException
     */
    public static String readFromStream(InputStream in) throws IOException {
        try {
            StringBuffer wsdlStr = new StringBuffer();

            int read;

            byte[] buf = new byte[1024];
            while ((read = in.read(buf)) > 0) {
                wsdlStr.append(new String(buf, 0, read));
            }
            return wsdlStr.toString();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    log.warn("Cannot close InputStream: " + in.getClass().getName(), e);
                }
            }
        }
    }

    /**
     * this can be used to do framework opertaions specific to different modes
     * @param jobExecutionContext
     * @return
     */
    public static boolean isSynchronousMode(JobExecutionContext jobExecutionContext){
        GFacConfiguration gFacConfiguration = jobExecutionContext.getGFacConfiguration();
        if(ExecutionMode.ASYNCHRONOUS.equals(gFacConfiguration.getExecutionMode())){
            return false;
        }
        return true;
    }
    public static String readFileToString(String file) throws FileNotFoundException, IOException {
        BufferedReader instream = null;
        try {

            instream = new BufferedReader(new FileReader(file));
            StringBuffer buff = new StringBuffer();
            String temp = null;
            while ((temp = instream.readLine()) != null) {
                buff.append(temp);
                buff.append(Constants.NEWLINE);
            }
            return buff.toString();
        } finally {
            if (instream != null) {
                try {
                    instream.close();
                } catch (IOException e) {
                    log.warn("Cannot close FileinputStream", e);
                }
            }
        }
    }

    public static boolean isLocalHost(String appHost) throws UnknownHostException {
        String localHost = InetAddress.getLocalHost().getCanonicalHostName();
        return (localHost.equals(appHost) || Constants.LOCALHOST.equals(appHost) || Constants._127_0_0_1
                .equals(appHost));
    }

    public static String createUniqueNameForService(String serviceName) {
        String date = new Date().toString();
        date = date.replaceAll(" ", "_");
        date = date.replaceAll(":", "_");
        return serviceName + "_" + date + "_" + UUID.randomUUID();
    }





    public static String createGsiftpURIAsString(String host, String localPath) throws URISyntaxException {
        StringBuffer buf = new StringBuffer();
        if (!host.startsWith("gsiftp://"))
            buf.append("gsiftp://");
        buf.append(host);
        if (!host.endsWith("/"))
            buf.append("/");
        buf.append(localPath);
        return buf.toString();
    }

    public static ActualParameter getInputActualParameter(Parameter parameter, DataObjectType element) {
        ActualParameter actualParameter = new ActualParameter();
        if ("String".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StringParameterType.type);
            if (!"".equals(element.getValue())) {
                ((StringParameterType) actualParameter.getType()).setValue(element.getValue());
            else {
                ((StringParameterType) actualParameter.getType()).setValue("");
            }
        } else if ("Double".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(DoubleParameterType.type);
            if (!"".equals(element.getValue())) {
                ((DoubleParameterType) actualParameter.getType()).setValue(new Double(element.getValue()));
            }
        } else if ("Integer".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(IntegerParameterType.type);
            if (!"".equals(element.getValue())) {
                ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(element.getValue()));
            }
        } else if ("Float".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FloatParameterType.type);
            if (!"".equals(element.getValue())) {
                ((FloatParameterType) actualParameter.getType()).setValue(new Float(element.getValue()));
            }
        } else if ("Boolean".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(BooleanParameterType.type);
            if (!"".equals(element.getValue())) {
                ((BooleanParameterType) actualParameter.getType()).setValue(new Boolean(element.getValue()));
            }
        } else if ("File".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FileParameterType.type);
            if (!"".equals(element.getValue())) {
                ((FileParameterType) actualParameter.getType()).setValue(element.getValue());
            }
        } else if ("URI".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(URIParameterType.type);
            if (!"".equals(element.getValue())) {
                ((URIParameterType) actualParameter.getType()).setValue(element.getValue());
            } else {
                ((URIParameterType) actualParameter.getType()).setValue("");
            }

        } else if ("StdOut".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StdOutParameterType.type);
            if (!"".equals(element.getValue())) {
                ((StdOutParameterType) actualParameter.getType()).setValue(element.getValue());
            } else {
                ((StdOutParameterType) actualParameter.getType()).setValue("");
            }

        }
        else if ("StdErr".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StdErrParameterType.type);
            if (!"".equals(element.getValue())) {
                ((StdErrParameterType) actualParameter.getType()).setValue(element.getValue());
            } else {
                ((StdErrParameterType) actualParameter.getType()).setValue("");
            }

        }
        return actualParameter;
    }
    public static ActualParameter getInputActualParameter(Parameter parameter, OMElement element) {
        OMElement innerelement = null;
        ActualParameter actualParameter = new ActualParameter();
        if ("String".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StringParameterType.type);
            if (!"".equals(element.getText())) {
                ((StringParameterType) actualParameter.getType()).setValue(element.getText());
            } else if (element.getChildrenWithLocalName("value").hasNext()) {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                ((StringParameterType) actualParameter.getType()).setValue(innerelement.getText());
            } else {
                ((StringParameterType) actualParameter.getType()).setValue("");
            }
        } else if ("Double".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(DoubleParameterType.type);
            if (!"".equals(element.getText())) {
                ((DoubleParameterType) actualParameter.getType()).setValue(new Double(innerelement.getText()));
            } else {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                ((DoubleParameterType) actualParameter.getType()).setValue(new Double(innerelement.getText()));
            }
        } else if ("Integer".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(IntegerParameterType.type);
            if (!"".equals(element.getText())) {
                ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(element.getText()));
            } else {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(innerelement.getText()));
            }
        } else if ("Float".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FloatParameterType.type);
            if (!"".equals(element.getText())) {
                ((FloatParameterType) actualParameter.getType()).setValue(new Float(element.getText()));
            } else {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                ((FloatParameterType) actualParameter.getType()).setValue(new Float(innerelement.getText()));
            }
        } else if ("Boolean".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(BooleanParameterType.type);
            if (!"".equals(element.getText())) {
                ((BooleanParameterType) actualParameter.getType()).setValue(new Boolean(element.getText()));
            } else {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                ((BooleanParameterType) actualParameter.getType()).setValue(Boolean.parseBoolean(innerelement.getText()));
            }
        } else if ("File".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FileParameterType.type);
            if (!"".equals(element.getText())) {
                ((FileParameterType) actualParameter.getType()).setValue(element.getText());
            } else {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                ((FileParameterType) actualParameter.getType()).setValue(innerelement.getText());
            }
        } else if ("URI".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(URIParameterType.type);
            if (!"".equals(element.getText())) {
                ((URIParameterType) actualParameter.getType()).setValue(element.getText());
            } else if (element.getChildrenWithLocalName("value").hasNext()) {
                innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
                System.out.println(actualParameter.getType().toString());
                log.debug(actualParameter.getType().toString());
                ((URIParameterType) actualParameter.getType()).setValue(innerelement.getText());
            } else {
                ((URIParameterType) actualParameter.getType()).setValue("");
            }
        } else if ("StringArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StringArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((StringArrayType) actualParameter.getType()).insertValue(i++, arrayValue);
                }
            } else {
                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((StringArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
                }
            }
        } else if ("DoubleArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(DoubleArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((DoubleArrayType) actualParameter.getType()).insertValue(i++, new Double(arrayValue));
                }
            } else {
                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((DoubleArrayType) actualParameter.getType()).insertValue(i++, new Double(innerelement.getText()));
                }
            }

        } else if ("IntegerArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(IntegerArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((IntegerArrayType) actualParameter.getType()).insertValue(i++, new Integer(arrayValue));
                }
            } else {
                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((IntegerArrayType) actualParameter.getType()).insertValue(i++, new Integer(innerelement.getText()));
                }
            }
        } else if ("FloatArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FloatArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((FloatArrayType) actualParameter.getType()).insertValue(i++, new Float(arrayValue));
                }
            } else {

                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((FloatArrayType) actualParameter.getType()).insertValue(i++, new Float(innerelement.getText()));
                }
            }
        } else if ("BooleanArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(BooleanArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((BooleanArrayType) actualParameter.getType()).insertValue(i++, new Boolean(arrayValue));
                }
            } else {

                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((BooleanArrayType) actualParameter.getType()).insertValue(i++, new Boolean(innerelement.getText()));
                }
            }
        } else if ("FileArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FileArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((FileArrayType) actualParameter.getType()).insertValue(i++, arrayValue);
                }
            } else {

                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((FileArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
                }
            }
        } else if ("URIArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(URIArrayType.type);
            Iterator value = element.getChildrenWithLocalName("value");
            int i = 0;
            if (!"".equals(element.getText())) {
                String[] list = StringUtil.getElementsFromString(element.getText());
                for (String arrayValue : list) {
                    ((URIArrayType) actualParameter.getType()).insertValue(i++, arrayValue);
                }
            } else {

                while (value.hasNext()) {
                    innerelement = (OMElement) value.next();
                    ((URIArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
                }
            }
        }
        return actualParameter;
    }

    public static ActualParameter getInputActualParameter(Parameter parameter, String inputVal) throws GFacException{
        OMElement innerelement = null;
        ActualParameter actualParameter = new ActualParameter();
        if ("String".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StringParameterType.type);
            ((StringParameterType) actualParameter.getType()).setValue(inputVal);
        } else if ("Double".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(DoubleParameterType.type);
            ((DoubleParameterType) actualParameter.getType()).setValue(new Double(inputVal));
        } else if ("Integer".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(IntegerParameterType.type);
            ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(inputVal));
        } else if ("Float".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FloatParameterType.type);
            ((FloatParameterType) actualParameter.getType()).setValue(new Float(inputVal));
        } else if ("Boolean".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(BooleanParameterType.type);
            ((BooleanParameterType) actualParameter.getType()).setValue(new Boolean(inputVal));
        } else if ("File".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FileParameterType.type);
            ((FileParameterType) actualParameter.getType()).setValue(inputVal);
        } else if ("URI".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(URIParameterType.type);
            ((URIParameterType) actualParameter.getType()).setValue(inputVal);
        } else if ("StringArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(StringArrayType.type);
            Iterator iterator = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (iterator.hasNext()) {
                innerelement = (OMElement) iterator.next();
                ((StringArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
            }
        } else if ("DoubleArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(DoubleArrayType.type);
            Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (value.hasNext()) {
                innerelement = (OMElement) value.next();
                ((DoubleArrayType) actualParameter.getType()).insertValue(i++, new Double(innerelement.getText()));
            }
        } else if ("IntegerArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(IntegerArrayType.type);
            Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (value.hasNext()) {
                innerelement = (OMElement) value.next();
                ((IntegerArrayType) actualParameter.getType()).insertValue(i++, new Integer(innerelement.getText()));
            }
        } else if ("FloatArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FloatArrayType.type);
            Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (value.hasNext()) {
                innerelement = (OMElement) value.next();
                ((FloatArrayType) actualParameter.getType()).insertValue(i++, new Float(innerelement.getText()));
            }
        } else if ("BooleanArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(BooleanArrayType.type);
            Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (value.hasNext()) {
                innerelement = (OMElement) value.next();
                ((BooleanArrayType) actualParameter.getType()).insertValue(i++, new Boolean(innerelement.getText()));
            }
        } else if ("FileArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(FileArrayType.type);
            Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (value.hasNext()) {
                innerelement = (OMElement) value.next();
                ((FileArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
            }
        } else if ("URIArray".equals(parameter.getParameterType().getName())) {
            actualParameter = new ActualParameter(URIArrayType.type);
            Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
            int i = 0;
            while (value.hasNext()) {
                innerelement = (OMElement) value.next();
                ((URIArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
            }
        } else{
            throw new GFacException("Input parameters are not configured properly ");
        }
        return actualParameter;
    }


    public static ApplicationJob createApplicationJob(
            JobExecutionContext jobExecutionContext) {
        ApplicationJob appJob = new ApplicationJob();
        appJob.setExperimentId((String) jobExecutionContext.getProperty(Constants.PROP_TOPIC));
        appJob.setWorkflowExecutionId(appJob.getExperimentId());
        appJob.setNodeId((String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_NODE_ID));
        appJob.setServiceDescriptionId(jobExecutionContext.getApplicationContext().getServiceDescription().getType().getName());
        appJob.setHostDescriptionId(jobExecutionContext.getApplicationContext().getHostDescription().getType().getHostName());
        appJob.setApplicationDescriptionId(jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription().getType().getApplicationName().getStringValue());
        return appJob;
    }

    public static void updateApplicationJobStatusUpdateTime(JobExecutionContext context, String jobId, Date statusUpdateTime) {
        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
        try {
            airavataAPI.getProvenanceManager().updateApplicationJobStatusUpdateTime(jobId, statusUpdateTime);
        } catch (AiravataAPIInvocationException e) {
            log.error("Error in updating application job status time " + statusUpdateTime.toString() + " for job Id " + jobId + "!!!", e);
        }
    }

    public static void updateApplicationJobStatus(JobExecutionContext context, String jobId, ApplicationJobStatus status, Date statusUpdateTime) {
        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
        try {
            airavataAPI.getProvenanceManager().updateApplicationJobStatus(jobId, status, statusUpdateTime);
        } catch (AiravataAPIInvocationException e) {
            log.error("Error in updating application job status " + status.toString() + " for job Id " + jobId + "!!!", e);
        }
    }

    /**
     * Gets the job ids given experiment id.
     *
     * @param context      The job execution context.
     * @param experimentId The experiment id.
     * @return List of job ids relevant to given experiment id.
     */
    public static List<ApplicationJob> getJobIds(JobExecutionContext context, String experimentId) {

        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
        try {
            return airavataAPI.getProvenanceManager().getApplicationJobs(experimentId, null, null);
        } catch (AiravataAPIInvocationException e) {
            log.error("Error retrieving application jobs for experiment id " + experimentId, e);
        }

        return new ArrayList<ApplicationJob>(0);
    }

    /**
     * Gets the job ids given experiment id and workflow id.
     *
     * @param context      The job execution context.
     * @param experimentId The experiment id.
     * @param workflowId   The workflow id
     * @return List of job ids relevant to given experiment id and workflow id.
     */
    public static List<ApplicationJob> getJobIds(JobExecutionContext context, String experimentId, String workflowId) {

        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
        try {
            return airavataAPI.getProvenanceManager().getApplicationJobs(experimentId, workflowId, null);
        } catch (AiravataAPIInvocationException e) {
            log.error("Error retrieving application jobs for experiment id " + experimentId, " workflow id " +
                    workflowId, e);
        }

        return new ArrayList<ApplicationJob>(0);
    }

    /**
     * Gets the job ids given experiment id and workflow id.
     *
     * @param context      The job execution context.
     * @param experimentId The experiment id.
     * @param workflowId   The workflow id
     * @return List of job ids relevant to given experiment id and workflow id.
     */
    public static List<ApplicationJob> getJobIds(JobExecutionContext context, String experimentId,
                                                 String workflowId, String nodeId) {

        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
        try {
            return airavataAPI.getProvenanceManager().getApplicationJobs(experimentId, workflowId, nodeId);
        } catch (AiravataAPIInvocationException e) {
            log.error("Error retrieving application jobs for experiment id " + experimentId, " workflow id " +
                    workflowId, e);
        }

        return new ArrayList<ApplicationJob>(0);
    }

    /*public static RequestData getRequestData(Properties configurationProperties) {

        RequestData requestData = new RequestData();

        requestData.setMyProxyServerUrl(configurationProperties.getProperty(Constants.MYPROXY_SERVER));
        requestData.setMyProxyUserName(configurationProperties.getProperty(Constants.MYPROXY_USER));
        requestData.setMyProxyPassword(configurationProperties.getProperty(Constants.MYPROXY_PASS));

        int lifeTime;
        String sLife = configurationProperties.getProperty(Constants.MYPROXY_LIFE);
        if (sLife != null) {
            lifeTime = Integer.parseInt(sLife);
            requestData.setMyProxyLifeTime(lifeTime);
        } else {
            log.info("The configuration does not specify a default life time");
        }



    }
*/


    public static void recordApplicationJob(JobExecutionContext context, ApplicationJob job) {
        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
        try {
            airavataAPI.getProvenanceManager().addApplicationJob(job);
        } catch (AiravataAPIInvocationException e) {
            log.error("Error in persisting application job data for application job " + job.getJobId() + "!!!", e);
        }
    }
    public static void saveJobStatus(JobExecutionContext jobExecutionContext, JobDetails details, JobState state) throws GFacException {
    try {
      Registry registry = jobExecutionContext.getRegistry();
      JobStatus status = new JobStatus();
      status.setJobState(state);
          details.setJobStatus(status);
      registry.add(ChildDataType.JOB_DETAIL,details, new CompositeIdentifier(jobExecutionContext.getTaskData().getTaskID(), details.getJobID()));
    } catch (Exception e) {
      throw new GFacException("Error persisting job status" + e.getLocalizedMessage(),e);
    }
  }

    public static void updateJobStatus(JobExecutionContext jobExecutionContext,JobDetails details, JobState state) throws GFacException {
    try {
            Registry registry = jobExecutionContext.getRegistry();
      JobStatus status = new JobStatus();
      status.setJobState(state);
      status.setTimeOfStateChange(Calendar.getInstance().getTimeInMillis());
          details.setJobStatus(status);
      registry.update(org.apache.airavata.registry.cpi.RegistryModelType.JOB_DETAIL, details, details.getJobID());
    } catch (Exception e) {
      throw new GFacException("Error persisting job status" + e.getLocalizedMessage(),e);
    }
  }
    public static void saveErrorDetails(JobExecutionContext jobExecutionContext, String errorMessage, CorrectiveAction action, ErrorCategory errorCatogory) throws GFacException {
      try {
      Registry registry = RegistryFactory.getDefaultRegistry();
    ErrorDetails details = new ErrorDetails();
      details.setActualErrorMessage(errorMessage);
      details.setCorrectiveAction(action);
      details.setActionableGroup(ActionableGroup.GATEWAYS_ADMINS);
      details.setCreationTime(Calendar.getInstance().getTimeInMillis());
      details.setErrorCategory(errorCatogory);
      registry.add(ChildDataType.ERROR_DETAIL, details, jobExecutionContext.getTaskData().getTaskID());
      } catch (Exception e) {
      throw new GFacException("Error persisting job status" + e.getLocalizedMessage(),e);
    }
    }


    public static Map<String, Object> getMessageContext(List<DataObjectType> experimentData,
                                                        Parameter[] parameters) throws GFacException {
        HashMap<String, Object> stringObjectHashMap = new HashMap<String, Object>();
        Map<String,DataObjectType> map = new HashMap<String,DataObjectType>();
        for(DataObjectType objectType : experimentData){
          map.put(objectType.getKey(), objectType);
        }
        for (int i = 0; i < parameters.length; i++) {
          DataObjectType input = map.get(parameters[i].getParameterName());
            if (input != null) {
                stringObjectHashMap.put(parameters[i].getParameterName(), GFacUtils.getInputActualParameter(parameters[i], input));
            } else {
                throw new GFacException("Error finding the parameter: parameter Name" + parameters[i].getParameterName());
            }
        }
        return stringObjectHashMap;
    }


}
TOP

Related Classes of org.apache.airavata.gfac.core.utils.GFacUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.