summaryrefslogtreecommitdiffstats
path: root/sandbox/event/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ConsumerInvokerHelper.java
diff options
context:
space:
mode:
authoredwardsmj <edwardsmj@13f79535-47bb-0310-9956-ffa450edef68>2008-11-06 17:00:16 +0000
committeredwardsmj <edwardsmj@13f79535-47bb-0310-9956-ffa450edef68>2008-11-06 17:00:16 +0000
commitebd2a0edbe3564d1a81ccc7535337a22ff3acb14 (patch)
tree503cd87dea4c29ec88f3e91c3cef14a932afb841 /sandbox/event/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ConsumerInvokerHelper.java
parent71685ad6511eaaccaa444f62bad1882b5b2d07d2 (diff)
Changes to enable consumers and producers to be connected via binding.sca
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@711909 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--sandbox/event/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ConsumerInvokerHelper.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/sandbox/event/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ConsumerInvokerHelper.java b/sandbox/event/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ConsumerInvokerHelper.java
new file mode 100644
index 0000000000..f83a66d44d
--- /dev/null
+++ b/sandbox/event/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ConsumerInvokerHelper.java
@@ -0,0 +1,97 @@
+/*
+ * 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