Package org.apache.tuscany.sca.builder.impl

Source Code of org.apache.tuscany.sca.builder.impl.EndpointBuilderImpl

/*
* 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.builder.impl;

import java.util.List;

import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.assembly.Endpoint;
import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.builder.BuilderContext;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.monitor.Monitor;

/**
* creates endpoint models for component services.
*/
public class EndpointBuilderImpl implements CompositeBuilder {
    private static final String BUILDER_VALIDATION_BUNDLE = "org.apache.tuscany.sca.builder.builder-validation-messages";
   
    private AssemblyFactory assemblyFactory;

    public EndpointBuilderImpl(ExtensionPointRegistry registry) {
        FactoryExtensionPoint modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class);
        this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
    }

    /**
     * Create endpoint models for all component services.
     *
     * @param composite - the top-level composite to build the models for
     * @param definitions
     * @param monitor - a Monitor for logging errors
     */
    public Composite build(Composite composite, BuilderContext context) throws CompositeBuilderException {

        processComponentServices(composite, context);
        return composite;

    }

    private void processComponentServices(Composite composite, BuilderContext context) {

        Monitor monitor = context.getMonitor();
       
        for (Component component : composite.getComponents()) {

            try {
                monitor.pushContext("Component: " + component.getName().toString());
   
                // recurse for composite implementations
                Implementation implementation = component.getImplementation();
                if (implementation instanceof Composite) {
                    processComponentServices((Composite)implementation, context);
                }
   
                // create an endpoint for each component service binding
                for (ComponentService service : component.getServices()) {
                    try {
                        monitor.pushContext("Service: " + service.getName());
                       
                        //verify JAX-WS async assertions as in JavaCAA section 11.1
                        List<Operation> asyncOperations = null;
                        try {
                            asyncOperations = (List<Operation>) service.getInterfaceContract().getInterface().getAttributes().get("JAXWS-ASYNC-OPERATIONS");
                        }catch(Exception e) {
                            //ignore
                        }
                       
                        if(asyncOperations != null) {
                            if( ! asyncOperations.isEmpty()) {
       
                                //error JCA100006
       
                                //FIXME create a java validation message resource bundle
                                Monitor.error(monitor,
                                              this,
                                              BUILDER_VALIDATION_BUNDLE,
                                              "JaxWSClientAsyncMethodsNotAllowed",
                                              service,
                                              service.getName());                 
                            }
                        }
       
                        // We maintain all endpoints at the right level now
                        // but endpoints for promoting services must point down
                        // to the services they promote. This is not actually done
                        // until the wire is created though in order that the
                        // uri is calculated correctly
                        // Callback endpoints may not be added here in the case that the
                        // forward reference is not yet resolved.
                        for (Binding binding : service.getBindings()) {
                            Endpoint endpoint = assemblyFactory.createEndpoint();
                            endpoint.setComponent(component);
                            endpoint.setService(service);
                            endpoint.setBinding(binding);
                            endpoint.setUnresolved(false);
                            service.getEndpoints().add(endpoint);
                        } // end for
                    } finally {
                        monitor.popContext();
                    }                  
                }
            } finally {
                monitor.popContext();
            }                 
        }
    }

    public String getID() {
        return "org.apache.tuscany.sca.assembly.builder.EndpointBuilder";
    }
}
TOP

Related Classes of org.apache.tuscany.sca.builder.impl.EndpointBuilderImpl

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.