/* * 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.core.invocation; import java.lang.reflect.Method; import java.util.List; import org.apache.tuscany.sca.runtime.RuntimeWire; import org.apache.tuscany.sca.runtime.EndpointReference; import org.apache.tuscany.sca.interfacedef.InterfaceContract; import org.apache.tuscany.sca.interfacedef.Interface; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.assembly.Service; import org.apache.tuscany.sca.assembly.Consumer; /** * Class which provides methods which assist in the invocation of Consumer methods * @author MikeEdwards * */ public class ConsumerInvokerHelper { /** * Returns the name of the Consumer operation for a given event type * @param Args - the parameters for the method to invoke * @param wire - the runtime wire involved in the invocation * @return - the name of the operation - null if no corresponding operation can be found */ public static String returnConsumerOperation( Object[] Args, RuntimeWire wire ) { if( isTargetConsumer( wire ) ) { Consumer consumer = getTargetConsumer( wire ); String eventType = getEventType( Args[0] ); if( consumer != null ) { return consumer.getOperationByEventType(eventType); } // end if } // end if return null; } // end returnConsumerMethod /** * Find the event type associated with the argument * @param arg - the argument * @return a String containing the event type */ static String getEventType( Object arg ) { Class clazz = arg.getClass(); String name = clazz.getCanonicalName(); // Deal with the case where the argument is some XML holder class (need to look for top level child // object with some "real class" // Check if the class is marked with an EventType org.osoa.sca.annotations.EventType eventType = clazz.getAnnotation(org.osoa.sca.annotations.EventType.class); if (eventType != null) { return eventType.name(); } else { return name; }// end if } // end getEventType /** * For a wire target that is a consumer, returns the Consumer object * @param wire - the wire * @return a Consumer if the wire targets a consumer - otherwise null */ static Consumer getTargetConsumer( RuntimeWire wire ) { return ((Service)wire.getTarget().getContract()).getConsumer(); } /** * Determines whether the target of a wire is a Consumer * @param wire - a runtime wire * @return - true if the target of the wire is a Consumer, false otherwise */ static boolean isTargetConsumer( RuntimeWire wire ) { Service service = (Service)wire.getTarget().getContract(); return service.isConsumer(); } // end isTargetConsumer } // end class ConsumerInvokerHelper