Package org.apache.airavata.xbaya.workflow

Source Code of org.apache.airavata.xbaya.workflow.WorkflowClient

/*
*
* 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.xbaya.workflow;

import java.net.URI;
import java.util.Map;

import org.apache.airavata.xbaya.XBayaEngine;
import org.apache.airavata.xbaya.XBayaRuntimeException;
import org.apache.airavata.xbaya.component.ComponentException;
import org.apache.airavata.xbaya.event.EventProducer;
import org.apache.airavata.xbaya.gpel.script.BPELScript;
import org.apache.airavata.xbaya.gpel.script.BPELScriptType;
import org.apache.airavata.xbaya.graph.GraphException;
import org.apache.airavata.xbaya.security.UserX509Credential;
import org.apache.airavata.xbaya.wf.Workflow;
import org.gpel.client.GcInstance;
import org.gpel.client.GcSearchList;
import org.gpel.client.GpelClient;
import org.gpel.client.security.GpelUserX509Credential;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import xsul5.wsdl.WsdlDefinitions;

public abstract class WorkflowClient extends EventProducer {
    /**
     * Either workflow template or workflow instance
     */
    public enum WorkflowType {
        /**
         * Workflow template
         */
        TEMPLATE,

        /**
         * Workflow instance
         */
        INSTANCE
    }

    protected static final String PROCESS_WSDL_TYTLE = "process.wsdl";

    protected static final String PROCESS_GPEL_TITLE = "process.gpel";

    protected static final String PNG_MIME_TYPE = "image/png";

    protected static final String GRAPH_MIME_TYPE = "application/x-xbaya+xml";

    protected final static Logger logger = LoggerFactory.getLogger(WorkflowClient.class);

    protected URI engineURL;

    String xregistryURL;

    // ===========================================================================
    // Concrete Methods
    // ===========================================================================

    /**
     * @param engineURL
     * @throws WorkflowEngineException
     */
    public void setEngineURL(URI engineURL) throws WorkflowEngineException {
        this.engineURL = engineURL;
        connect();
    }

    /**
     * @return The URL of the GPEL Engine.
     */
    public URI getEngineURL() {
        return this.engineURL;
    }

    /**
     * Generates a BPEL process.
     *
     * @param workflow
     * @throws org.apache.airavata.xbaya.graph.GraphException
     *
     */
    public static void createScript(Workflow workflow) throws GraphException {
        // Generate a BPEL process.
        BPELScript script = new BPELScript(workflow);
        script.create(BPELScriptType.GPEL);
        workflow.setGpelProcess(script.getGpelProcess());
        workflow.setWorkflowWSDL(script.getWorkflowWSDL().getWsdlDefinitions());
    }

    /**
     * Deploys a workflow to the GPEL Engine.
     *
     * @param workflow
     * @param redeploy
     * @return The workflow template ID.
     * @throws GraphException
     * @throws WorkflowEngineException
     */
    public URI createScriptAndDeploy(Workflow workflow, boolean redeploy) throws GraphException,
            WorkflowEngineException {
        logger.debug("Entering: " + workflow.toString());

        // Generate a BPEL process.
        createScript(workflow);

        return deploy(workflow, redeploy);
    }

    /**
     * Loads a workflow with s specified workflow template ID.
     *
     * @param templateID
     *            The workflow template ID.
     * @return The workflow loaded
     * @throws GraphException
     * @throws WorkflowEngineException
     * @throws org.apache.airavata.xbaya.component.ComponentException
     *
     */
    public Workflow load(URI templateID) throws GraphException, WorkflowEngineException, ComponentException {
        // Don't delete this method because the portal uses it.
        return load(templateID, WorkflowType.TEMPLATE);
    }

    /**
     * Returns the List of GcSearchResult.
     * <p/>
     * This method returns the first 100 matches.
     *
     * @return The List of GcSearchResult.
     * @throws WorkflowEngineException
     */
    public GcSearchList list() throws WorkflowEngineException {
        return list(100, WorkflowType.TEMPLATE);
    }

    /**
     * @param workflow
     * @param dscURL
     * @return The instance of workflow
     * @throws WorkflowEngineException
     * @throws ComponentException
     * @throws GraphException
     */
    public GcInstance instantiate(Workflow workflow, URI dscURL) throws WorkflowEngineException, ComponentException,
            GraphException {
        return instantiate(workflow, dscURL, null);
    }

    /**
     * @return True if the connection is secure; false otherwise.
     */
    public boolean isSecure() {
        return true;
        // return SecurityUtil.isSecureService(this.engineURL);
    }

    /**
     * Checks if the client is connected to the BPEL engine.
     *
     * @return true if the client is connected to the BPEL engine; false otherwise.
     */
    protected synchronized boolean isConnected() {
        throw new XBayaRuntimeException("Critical Error: Called a unsupported API");
    }

    // ===========================================================================
    // Abstract Methods
    // ===========================================================================

    /**
     * @param userX509Credential
     * @throws WorkflowEngineException
     */
    public abstract void setUserX509Credential(UserX509Credential userX509Credential) throws WorkflowEngineException;

    /**
     * @param workflow
     * @param redeploy
     * @return The workflow template ID.
     * @throws WorkflowEngineException
     */
    public abstract URI deploy(Workflow workflow, boolean redeploy) throws WorkflowEngineException;

    /**
     * @param id
     * @param workflowType
     * @return The workflow loaded
     * @throws GraphException
     * @throws WorkflowEngineException
     * @throws ComponentException
     */
    public abstract Workflow load(URI id, WorkflowType workflowType) throws GraphException, WorkflowEngineException,
            ComponentException;

    /**
     * Returns the List of GcSearchResult.
     *
     * @param maxNum
     *            The maximum number of results
     * @param type
     * @return The List of GcSearchResult.
     * @throws WorkflowEngineException
     */
    @SuppressWarnings("boxing")
    public abstract GcSearchList list(int maxNum, WorkflowType type) throws WorkflowEngineException;

    /**
     * @param workflow
     *            The workflow to instantiate.
     * @param dscURL
     *            The URL of the DSC.
     * @param name
     *            The name that becomes a part of the workflow instance name.
     * @return The instance of workflow
     * @throws WorkflowEngineException
     * @throws ComponentException
     * @throws GraphException
     */
    public abstract GcInstance instantiate(Workflow workflow, URI dscURL, String name) throws WorkflowEngineException,
            ComponentException, GraphException;

    /**
     * Instantiate a specified workflow.
     * <p/>
     * The workflow must have been dployed.
     *
     * @param workflow
     * @param wsdlMap
     *            Map<partnerLinkName, CWSDL>
     * @return The workflow instance.
     * @throws WorkflowEngineException
     * @Deprecated This one doesn't support hierarchical workflows. Use instantiate(workflow, dscURL) instead.
     */
    @Deprecated
    public abstract GcInstance instantiate(Workflow workflow, Map<String, WsdlDefinitions> wsdlMap)
            throws WorkflowEngineException;

    /**
     * Starts the workflow instance.
     * <p/>
     * The AWSDLs in workflow must have been modified to CWSDLs.
     *
     * @param instance
     * @return The WSDL of the workflow.
     * @throws WorkflowEngineException
     */
    public abstract WsdlDefinitions start(final GcInstance instance) throws WorkflowEngineException;

    public abstract void connect() throws WorkflowEngineException;

    public abstract void setXRegistryUrl(URI xRegistryURL);

    public abstract void setXBayaEngine(XBayaEngine xBayaEngine);

}
TOP

Related Classes of org.apache.airavata.xbaya.workflow.WorkflowClient

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.