Package com.betfair.cougar.transformations

Source Code of com.betfair.cougar.transformations.CougarTransformations

/*
* Copyright 2013, The Sporting Exchange Limited
*
* Licensed 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 com.betfair.cougar.transformations;

import com.betfair.cougar.transformations.manglers.CommonTypesMangler;
import com.betfair.cougar.transformations.manglers.ResponseToSimpleResponseMangler;
import com.betfair.cougar.transformations.manglers.SimpleTypeMangler;
import com.betfair.cougar.transformations.validators.DataTypeValidator;
import com.betfair.cougar.transformations.validators.ExceptionValidator;
import com.betfair.cougar.transformations.validators.MapsValidator;
import com.betfair.cougar.transformations.validators.NameClashValidator;
import com.betfair.cougar.transformations.validators.OperationValidator;
import com.betfair.cougar.transformations.validators.ParameterNameValidator;
import com.betfair.cougar.transformations.validators.RequestParameterValidator;
import com.betfair.cougar.transformations.validators.UnknownDataTypeValidator;
import com.betfair.cougar.transformations.validators.ValidValuesValidator;
import com.betfair.cougar.codegen.DocumentMangler;
import com.betfair.cougar.codegen.NodeExcluder;
import com.betfair.cougar.codegen.Transformation;
import static com.betfair.cougar.codegen.Transformation.OutputDomain;
import com.betfair.cougar.codegen.Transformations;
import com.betfair.cougar.codegen.Validator;
import org.w3c.dom.Node;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;

public class CougarTransformations implements Transformations{
    protected List<Transformation> transformations = new ArrayList<Transformation>();
    protected List<Validator> validations = new ArrayList<Validator>();
    protected List<DocumentMangler> manglers = new ArrayList<DocumentMangler>();

    private static final NodeExcluder VoidResponseExcluder = new NodeExcluder() {
        public boolean exclude(XPath xp, Node node) {
            try {
                final XPathExpression expr = xp.compile("parameters/simpleResponse/@type");
                final String result = (String)expr.evaluate(node, XPathConstants.STRING);
                return result.equals("void");
            } catch (XPathExpressionException ex) {
                throw new RuntimeException(ex);
            }
        }
    };

    public CougarTransformations() {
        super();
        Transformation[] definitions = new Transformation[] {
                //directory name should not  contain / at the end
                new Transformation("interface.ftl", "/interface", "${package}/${majorVersion}", "${name}Service.java", false, false, OutputDomain.Server),
                new Transformation("asyncServiceInterface.ftl", "/interface", "${package}/${majorVersion}", "${name}AsyncService.java", false, false, OutputDomain.Server),
                new Transformation("serviceDefinition.ftl", "/interface", "${package}/${majorVersion}", "${name}ServiceDefinition.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("serviceExecutableResolver.ftl", "/interface", "${package}/${majorVersion}", "${name}ServiceExecutableResolver.java", false, false, OutputDomain.Server),
                new Transformation("syncServiceExecutableResolver.ftl", "/interface", "${package}/${majorVersion}", "${name}SyncServiceExecutableResolver.java", false, false, OutputDomain.Server),
                new Transformation("client.ftl", "/interface", "${package}/${majorVersion}", "${name}Client.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("client-impl.ftl", "/interface", "${package}/${majorVersion}", "${name}ClientImpl.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("clientExecutableResolver.ftl", "/interface", "${package}/${majorVersion}", "${name}ClientExecutableResolver.java", false, false, OutputDomain.Client),

                new Transformation("clientFactory.ftl", "/interface", "${package}/${majorVersion}", "${name}ClientFactory.java", false, false, OutputDomain.Client),
                new Transformation("clientSyncServiceImpl.ftl", "/interface", "${package}/${majorVersion}", "${name}SyncClientImpl.java", false, false, OutputDomain.Client_and_Server),

                new Transformation("clientSyncServiceInterface.ftl", "/interface", "${package}/${majorVersion}", "${name}SyncClient.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("dataType.ftl", "/interface/dataType", "${package}/${majorVersion}/to", "${name}.java", true, false, OutputDomain.Client_and_Server),
                new Transformation("dataTypeDelegate.ftl", "/interface/dataType", "${package}/${majorVersion}/to", "${name}Delegate.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("events/event.ftl", "/interface/event", "${package}/${majorVersion}/events", "${name}.java", true, false, OutputDomain.Client_and_Server),
                new Transformation("events/jmsServiceBindingDescriptor.ftl", "/interface", "${package}/${majorVersion}/events", "${name}JMSServiceBindingDescriptor.java", true, false, OutputDomain.Client_and_Server),
                new Transformation("exception.ftl", "/interface/exceptionType", "${package}/${majorVersion}/exception", "${name}.java",false, false, OutputDomain.Client_and_Server),
                new Transformation("exceptionFactory.ftl", "/interface", "${package}/${majorVersion}/exception", "${name}ExceptionFactory.java",false, false, OutputDomain.Client_and_Server),
                new Transformation("enum.ftl", "//parameter/validValues", "${package}/${majorVersion}/enumerations", "${name}Enum.java",true, true, OutputDomain.Client_and_Server),
                new Transformation("wrappedValueEnum.ftl", "//simpleResponse/validValues", "${package}/${majorVersion}/enumerations", "${name}WrappedValueEnum.java",true, false, OutputDomain.Client_and_Server),
                new Transformation("wrappedValueEnum.ftl", "//response/validValues", "${package}/${majorVersion}/enumerations", "${name}WrappedValueEnum.java",true, false, OutputDomain.Client_and_Server),
                new Transformation("simpleTypeEnum.ftl", "/interface/simpleType/validValues", "${package}/${majorVersion}/enumerations", "${name}.java",true, false, OutputDomain.Client_and_Server),
                new Transformation("jsonrpc/jsonRpcServiceBindingDescriptor.ftl", "/interface", "${package}/${majorVersion}/jsonrpc", "${name}JsonRpcServiceBindingDescriptor.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("rescript/requestDataType.ftl", "/interface/operation", "${package}/${majorVersion}/rescript", "${name}Request.java", true, false, OutputDomain.Client_and_Server),
                new Transformation("rescript/responseDataType.ftl", "/interface/operation", "${package}/${majorVersion}/rescript", "${name}Response.java", true, false, OutputDomain.Client_and_Server, VoidResponseExcluder),
                new Transformation("rescript/rescriptServiceBindingDescriptor.ftl", "/interface", "${package}/${majorVersion}/rescript", "${name}RescriptServiceBindingDescriptor.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("SOAP/soapServiceBindingDescriptor.ftl", "/interface", "${package}/${majorVersion}/soap", "${name}SoapServiceBindingDescriptor.java", false, false, OutputDomain.Client_and_Server),
                new Transformation("socket/socketServiceBindingDescriptor.ftl", "/interface", "${package}/${majorVersion}/socket", "${name}SocketServiceBindingDescriptor.java", false, false, OutputDomain.Client_and_Server),

                new Transformation("connectedDataType.ftl", "/interface/dataType", "interface:/interface", "${package}/${majorVersion}/co", "${name}CO.java", false, false, OutputDomain.Client_and_Server, null),
                new Transformation("serverConnectedDataType.ftl", "/interface/dataType", "interface:/interface", "${package}/${majorVersion}/co/server", "${name}ServerCO.java", false, false, OutputDomain.Server, null),
                new Transformation("clientConnectedDataType.ftl", "/interface/dataType", "interface:/interface", "${package}/${majorVersion}/co/client", "${name}ClientCO.java", false, false, OutputDomain.Client, null)
        };
        transformations.addAll(Arrays.asList(definitions));

  
        validations.add(new DataTypeValidator());
        validations.add(new OperationValidator());
        validations.add(new ExceptionValidator());
        validations.add(new ValidValuesValidator());
        validations.add(new RequestParameterValidator());
        validations.add(new NameClashValidator());
        validations.add(new MapsValidator());
        validations.add(new UnknownDataTypeValidator());
        validations.add(new ParameterNameValidator());
       
        manglers.add(new CommonTypesMangler());
        manglers.add(new SimpleTypeMangler());
        manglers.add(new ResponseToSimpleResponseMangler());
    }

    @Override
    public List<Transformation> getTransformations() {
        return transformations;
    }

  @Override
  public List<Validator> getPreValidations() {
    return validations;
  }

  @Override
  public List<DocumentMangler> getManglers() {
    return manglers;
  }

}
TOP

Related Classes of com.betfair.cougar.transformations.CougarTransformations

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.