Search in sources :

Example 16 with DataType

use of org.apache.airavata.model.application.io.DataType in project airavata by apache.

the class EndifNode method portTypeChanged.

/**
 * @see org.apache.airavata.workflow.model.graph.system.SystemNode#portTypeChanged(org.apache.airavata.workflow.model.graph.system.SystemDataPort)
 */
@Override
protected void portTypeChanged(SystemDataPort port) throws GraphException {
    super.portTypeChanged(port);
    List<DataPort> inputPorts = getInputPorts();
    List<DataPort> outputPorts = getOutputPorts();
    int size = outputPorts.size();
    Kind kind = port.getKind();
    int index;
    if (kind == Kind.DATA_IN) {
        index = inputPorts.indexOf(port) % size;
    } else if (kind == Kind.DATA_OUT) {
        index = outputPorts.indexOf(port);
    } else {
        throw new WorkflowRuntimeException();
    }
    DataPort inputPort1 = inputPorts.get(index);
    DataPort inputPort2 = inputPorts.get(size + index);
    DataPort outputPort = outputPorts.get(index);
    DataType inputType1 = inputPort1.getType();
    DataType inputType2 = inputPort2.getType();
    DataType outputType = outputPort.getType();
    DataType portType = port.getType();
    if (portType == null || portType.equals(WSConstants.XSD_ANY_TYPE)) {
        // Do nothing
        return;
    }
    if (port == inputPort1) {
        // input1 -> input2
        if (inputType2.equals(WSConstants.XSD_ANY_TYPE)) {
            inputPort2.copyType(port);
        } else if (inputType2.equals(portType)) {
        // Do nothing.
        } else {
            String message = "The type of input " + index + " (" + inputType1 + ") of " + getID() + " must be same as the type of input " + (index + size) + " (" + inputType2 + ").";
            throw new GraphException(message);
        }
        // input1 -> output
        if (outputType.equals(WSConstants.XSD_ANY_TYPE)) {
            outputPort.copyType(port);
        } else if (outputType.equals(portType)) {
        // Do nothing.
        } else {
            String message = "The type of input " + index + " (" + inputType1 + ") of " + getID() + " must be same as the type of output " + index + " (" + outputType + ").";
            throw new GraphException(message);
        }
    } else if (port == inputPort2) {
        // input2 -> input1
        if (inputType1.equals(WSConstants.XSD_ANY_TYPE)) {
            inputPort1.copyType(port);
        } else if (inputType1.equals(portType)) {
        // Do nothing.
        } else {
            String message = "The type of input " + index + " (" + inputType1 + ") of " + getID() + " must be same as the type of input " + (index + size) + " (" + inputType2 + ").";
            throw new GraphException(message);
        }
        // input2 -> output
        if (outputType.equals(WSConstants.XSD_ANY_TYPE)) {
            outputPort.copyType(port);
        } else if (outputType.equals(portType)) {
        // Do nothing.
        } else {
            String message = "The type of input " + (index + size) + " (" + inputType2 + ") of " + getID() + " must be same as the type of output " + index + " (" + outputType + ").";
            throw new GraphException(message);
        }
    } else if (port == outputPort) {
        // output -> input1
        if (inputType1.equals(WSConstants.XSD_ANY_TYPE)) {
            inputPort1.copyType(port);
        } else if (inputType1.equals(portType)) {
        // Do nothing.
        } else {
            String message = "The type of input " + index + " (" + inputType1 + ") of " + getID() + " must be same as the type of output " + index + " (" + outputType + ").";
            throw new GraphException(message);
        }
        // output -> input2
        if (inputType2.equals(WSConstants.XSD_ANY_TYPE)) {
            inputPort2.copyType(port);
        } else if (inputType2.equals(portType)) {
        // Do nothing.
        } else {
            String message = "The type of input " + (index + size) + " (" + inputType2 + ") of " + getID() + " must be same as the type of input " + index + " (" + outputType + ").";
            throw new GraphException(message);
        }
    } else {
        throw new WorkflowRuntimeException();
    }
}
Also used : DataPort(org.apache.airavata.workflow.model.graph.DataPort) ComponentDataPort(org.apache.airavata.workflow.model.component.ComponentDataPort) GraphException(org.apache.airavata.workflow.model.graph.GraphException) Kind(org.apache.airavata.workflow.model.graph.Port.Kind) DataType(org.apache.airavata.model.application.io.DataType) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)

Example 17 with DataType

use of org.apache.airavata.model.application.io.DataType in project airavata by apache.

the class SystemDataPort method copyType.

/**
 * @param port
 * @param arrayIncrement
 * @throws GraphException
 */
public void copyType(DataPort port, int arrayIncrement) throws GraphException {
    DataType newType = port.getType();
    if (this.type != newType) {
        this.type = newType;
        if (port instanceof WSPort) {
            WSPort wsPort = (WSPort) port;
            this.wsComponentPort = wsPort.getComponentPort();
            this.arrayDimension = 0;
        } else if (port instanceof SystemDataPort) {
            SystemDataPort systemPort = (SystemDataPort) port;
            this.wsComponentPort = systemPort.getWSComponentPort();
            this.arrayDimension = systemPort.getArrayDimension() + arrayIncrement;
        }
        // propagate to other ports of this node.
        getNode().portTypeChanged(this);
        // propagate to the connected ports.
        Kind kind = getKind();
        for (DataEdge edge : getEdges()) {
            if (kind == Kind.DATA_IN) {
                DataPort fromPort = edge.getFromPort();
                fromPort.copyType(this);
            } else if (kind == Kind.DATA_OUT) {
                DataPort toPort = edge.getToPort();
                toPort.copyType(this);
            } else {
                throw new WorkflowRuntimeException();
            }
        }
    }
}
Also used : WSPort(org.apache.airavata.workflow.model.graph.ws.WSPort) DataPort(org.apache.airavata.workflow.model.graph.DataPort) DataEdge(org.apache.airavata.workflow.model.graph.DataEdge) DataType(org.apache.airavata.model.application.io.DataType) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)

Example 18 with DataType

use of org.apache.airavata.model.application.io.DataType in project airavata by apache.

the class DifferedInputNode method getParameterType.

/**
 * Returns the type of the parameter
 *
 * @return The type of the parameter (e.g. string, int)
 */
@Override
public DataType getParameterType() {
    List<DataEdge> edges = getEdges();
    DataType parameterType = super.getParameterType();
    if (parameterType == null && getEdges().size() > 0) {
        // This happens when the graph XML doesn't have parameterType.
        DataEdge edge = edges.get(0);
        DataPort toPort = edge.getToPort();
        parameterType = toPort.getType();
    }
    return parameterType;
}
Also used : DataPort(org.apache.airavata.workflow.model.graph.DataPort) DataEdge(org.apache.airavata.workflow.model.graph.DataEdge) DataType(org.apache.airavata.model.application.io.DataType)

Aggregations

DataType (org.apache.airavata.model.application.io.DataType)18 DataPort (org.apache.airavata.workflow.model.graph.DataPort)13 WorkflowRuntimeException (org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)10 DataEdge (org.apache.airavata.workflow.model.graph.DataEdge)10 ComponentDataPort (org.apache.airavata.workflow.model.component.ComponentDataPort)6 GraphException (org.apache.airavata.workflow.model.graph.GraphException)6 Port (org.apache.airavata.workflow.model.graph.Port)6 WSPort (org.apache.airavata.workflow.model.graph.ws.WSPort)5 Kind (org.apache.airavata.workflow.model.graph.Port.Kind)4 EPRPort (org.apache.airavata.workflow.model.graph.EPRPort)3 WSComponentPort (org.apache.airavata.workflow.model.component.ws.WSComponentPort)2 Edge (org.apache.airavata.workflow.model.graph.Edge)2 List (java.util.List)1 TaskException (org.apache.airavata.gfac.core.task.TaskException)1 InputDataObjectType (org.apache.airavata.model.application.io.InputDataObjectType)1 OutputDataObjectType (org.apache.airavata.model.application.io.OutputDataObjectType)1 NodeImpl (org.apache.airavata.workflow.model.graph.impl.NodeImpl)1 EndForEachNode (org.apache.airavata.workflow.model.graph.system.EndForEachNode)1 ForEachNode (org.apache.airavata.workflow.model.graph.system.ForEachNode)1 TException (org.apache.thrift.TException)1