summaryrefslogtreecommitdiffstats
path: root/sandbox/ant/sca/branches/2.0-M2/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeWire.java
blob: 7366d511aec932f0896cf29e53df8de1a42fc900 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * 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.runtime;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.apache.tuscany.sca.assembly.EndpointReference2;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Message;

/**
 * The runtime wire interface that connects a component reference to a 
 *  component service (or an external service) over the selected binding
 * 
 * @version $Rev$ $Date$
 */
public interface RuntimeWire extends Cloneable {

    
    // =================================================================
    // TODO - EPR - remove the following three methods when we have
    //        changes the rest of the instructure over to using EndpointReference2
    //        and EndpointReference2 throughout
    /**
     * Get the source of the wire
     * 
     * @return The end point reference of the source
     */
    EndpointReference getSource();

    /**
     * Get the target of the wire
     * 
     * @return The end point reference of the target
     */
    EndpointReference getTarget();

    /**
     * Rebind the runtime wire with the given target
     * @param target The target endpoint reference
     */
    void setTarget(EndpointReference target);
    
    //==================================================================
    
    /**
     * return the endpoint reference that configured this wire
     * 
     * @return the endpoint reference that configured this wire 
     */
    EndpointReference2 getEndpointReference();
    
    /**
     * Force the invocation chains to be rebuilt
     */
    void rebuild();

    /**
     * Returns the invocation chains for service operations associated with the
     * wire
     * 
     * @return the invocation chains for service operations associated with the
     *         wire
     */
    List<InvocationChain> getInvocationChains();
    
    /**
     * Lookup the invocation chain by operation
     * @param operation The operation
     * @return The invocation chain for the given operation
     */
    InvocationChain getInvocationChain(Operation operation);
    
    /**
     * Get the invocation chain for the binding-specific handling
     * @return
     */
    InvocationChain getBindingInvocationChain();
    
    /**
     * This invoke method assumes that the binding invocation chain is in force
     * and that there will be an operation selector element there to
     * determine which operation to call     
     * @param msg The message
     * @return The result
     * @throws InvocationTargetException
     */
    Object invoke(Message msg) throws InvocationTargetException;    
    
    /**
     * Invoke an operation with given arguments
     * @param operation The operation
     * @param args The arguments
     * @return The result
     * @throws InvocationTargetException
     */
    Object invoke(Operation operation, Object[] args) throws InvocationTargetException;

    /**
     * Invoke an operation with a context message
     * @param operation The operation
     * @param msg The message
     * @return The result
     * @throws InvocationTargetException
     */
    Object invoke(Operation operation, Message msg) throws InvocationTargetException;

    /**
     * @return a clone of the runtime wire
     * @throws CloneNotSupportedException
     */
    Object clone() throws CloneNotSupportedException;
}