All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tuscany.sca.interfacedef.impl.OperationImpl Maven / Gradle / Ivy

There is a newer version: 2.0.1
Show newest version
/*
 * 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.tuscany.sca.interfacedef.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.xml.namespace.QName;

import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.ParameterMode;
import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.apache.tuscany.sca.policy.ExtensionType;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.PolicySet;

/**
 * Represents an operation on a service interface.
 *
 * @version $Rev: 1061531 $ $Date: 2011-01-20 23:34:57 +0200 (Thu, 20 Jan 2011) $
 * @tuscany.spi.extension.inheritfrom
 */
public class OperationImpl implements Operation {

    private String name;
    private boolean unresolved;    
    private DataType> inputType;
    private List faultTypes;
    private Interface interfaze;
    private List parameterModes = new ArrayList();
    private boolean nonBlocking;
    private boolean wrapperStyle;
    private WrapperInfo wrapper;
    private boolean dynamic;

    private Map attributes = new ConcurrentHashMap();

    private Map>> faultBeans;

    private List applicablePolicySets = new ArrayList();
    private List policySets = new ArrayList();
    private List requiredIntents = new ArrayList();
    private ExtensionType type;
    private DataType> outputType;
    private boolean hasArrayWrappedOutput;

    /**
     * @param name
     */
    public OperationImpl() {
        inputType = new DataTypeImpl>(IDL_INPUT, Object[].class, new ArrayList());
        outputType = new DataTypeImpl>(IDL_OUTPUT, Object[].class, new ArrayList());
        faultTypes = new ArrayList();
        faultBeans = new HashMap>>();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isUnresolved() {
        return unresolved;
    }

    public void setUnresolved(boolean undefined) {
        this.unresolved = undefined;
    }

    /**
     * @return the faultTypes
     */
    public List getFaultTypes() {
        return faultTypes;
    }

    /**
     * @param faultTypes the faultTypes to set
     */
    public void setFaultTypes(List faultTypes) {
        this.faultTypes = faultTypes;
    }

    /**
     * @return the inputType
     */
    public DataType> getInputType() {
        return inputType;
    }

    /**
     * @param inputType the inputType to set
     */
    public void setInputType(DataType> inputType) {
        this.inputType = inputType;
    }

    /**
     * @return the outputType
     */
    public DataType> getOutputType() {
        return this.outputType;
    }     


    /**
     * @param outputType the outputType to set
     */
    public void setOutputType(DataType> outputType) {
        this.outputType = outputType;
    }

    /**
     * @return the interface
     */
    public Interface getInterface() {
        return interfaze;
    }

    /**
     * @param interfaze the interface to set
     */
    public void setInterface(Interface interfaze) {
        this.interfaze = interfaze;
    }

    /**
     * @return the nonBlocking
     */
    public boolean isNonBlocking() {
        return nonBlocking;
    }

    /**
     * @param nonBlocking the nonBlocking to set
     */
    public void setNonBlocking(boolean nonBlocking) {
        this.nonBlocking = nonBlocking;
    }

    /**
     * @return the wrapperInfo
     */
    public WrapperInfo getWrapper() {
        return wrapper;
    }

    /**
     * @param wrapperInfo the wrapperInfo to set
     */
    public void setWrapper(WrapperInfo wrapperInfo) {
        this.wrapper = wrapperInfo;
    }

    /**
     * @return the wrapperStyle
     */
    public boolean isWrapperStyle() {
        return wrapperStyle;
    }

    /**
     * @param wrapperStyle the wrapperStyle to set
     */
    public void setWrapperStyle(boolean wrapperStyle) {
        this.wrapperStyle = wrapperStyle;
    }

    public String getDataBinding() {
        return wrapper != null ? wrapper.getDataBinding() : null;
    }

    public void setDataBinding(String dataBinding) {
        if (wrapper != null) {
            wrapper.setDataBinding(dataBinding);
        }
    }

    public boolean isDynamic() {
        return dynamic;
    }

    public void setDynamic(boolean b) {
        this.dynamic = b;
    }

    public Map>> getFaultBeans() {
        return faultBeans;
    }

    public void setFaultBeans(Map>> faultBeans) {
        this.faultBeans = faultBeans;
    }

    @Override
    public OperationImpl clone() throws CloneNotSupportedException {
        OperationImpl copy = (OperationImpl) super.clone();

        final List clonedFaultTypes = new ArrayList(this.faultTypes.size());
        for (DataType t : this.faultTypes) {
            clonedFaultTypes.add((DataType) t.clone());
        }
        copy.faultTypes = clonedFaultTypes;

        List clonedLogicalTypes = new ArrayList();
        for (DataType t : inputType.getLogical()) {
            DataType type = (DataType) t.clone();
            clonedLogicalTypes.add(type);
        }
        DataType> clonedInputType =
            new DataTypeImpl>(inputType.getPhysical(), clonedLogicalTypes);
        clonedInputType.setDataBinding(inputType.getDataBinding());
        copy.inputType = clonedInputType;

        if ( outputType != null ) {
            List clonedLogicalOutputTypes = new ArrayList();
            for ( DataType t : outputType.getLogical()) {
                if ( t == null ) {
                    clonedLogicalOutputTypes.add(null);
                } else {
                    DataType type = (DataType) t.clone();
                    clonedLogicalOutputTypes.add(type);
                }
            }
            DataType> clonedOutputType = 
                new DataTypeImpl>(outputType.getPhysical(), clonedLogicalOutputTypes);
            clonedOutputType.setDataBinding(outputType.getDataBinding());
            copy.outputType = clonedOutputType;    
        }

        copy.attributes = new ConcurrentHashMap();
        copy.attributes.putAll(attributes);

        // [rfeng] We need to clone the wrapper as it holds the databinding information
        if (wrapper != null) {
            copy.wrapper = (WrapperInfo)wrapper.clone();
        }

        return copy;
    }

    public List getApplicablePolicySets() {
        return applicablePolicySets;
    }

    public List getPolicySets() {
        return policySets;
    }

    public List getRequiredIntents() {
        return requiredIntents;
    }

    public ExtensionType getExtensionType() {
        return type;
    }

    public void setExtensionType(ExtensionType type) {
        this.type = type;
    }

    public Map getAttributes() {
        return attributes;
    }

    /**
     * Indicates if this operation is an async server style of operation
     * @return true if the operation is async server style
     */
    public boolean isAsyncServer() {
        return false;
    }

    public List getParameterModes() {
        return this.parameterModes;
    }

    public boolean hasArrayWrappedOutput() {
        return this.hasArrayWrappedOutput;
    }

    public void setHasArrayWrappedOutput(boolean value) {
        this.hasArrayWrappedOutput = value;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy