001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.activemq.transport.mock;
018
019 import java.io.IOException;
020 import java.net.URI;
021 import org.apache.activemq.transport.DefaultTransportListener;
022 import org.apache.activemq.transport.FutureResponse;
023 import org.apache.activemq.transport.ResponseCallback;
024 import org.apache.activemq.transport.Transport;
025 import org.apache.activemq.transport.TransportFilter;
026 import org.apache.activemq.transport.TransportListener;
027
028 /**
029 *
030 */
031 public class MockTransport extends DefaultTransportListener implements Transport {
032
033 protected Transport next;
034 protected TransportListener transportListener;
035
036 public MockTransport(Transport next) {
037 this.next = next;
038 }
039
040 /**
041 */
042 public synchronized void setTransportListener(TransportListener channelListener) {
043 this.transportListener = channelListener;
044 if (channelListener == null) {
045 getNext().setTransportListener(null);
046 } else {
047 getNext().setTransportListener(this);
048 }
049 }
050
051 /**
052 * @see org.apache.activemq.Service#start()
053 * @throws IOException if the next channel has not been set.
054 */
055 public void start() throws Exception {
056 if (getNext() == null) {
057 throw new IOException("The next channel has not been set.");
058 }
059 if (transportListener == null) {
060 throw new IOException("The command listener has not been set.");
061 }
062 getNext().start();
063 }
064
065 /**
066 * @see org.apache.activemq.Service#stop()
067 */
068 public void stop() throws Exception {
069 getNext().stop();
070 }
071
072 @Override
073 public void onCommand(Object command) {
074 getTransportListener().onCommand(command);
075 }
076
077 /**
078 * @return Returns the getNext().
079 */
080 public synchronized Transport getNext() {
081 return next;
082 }
083
084 /**
085 * @return Returns the packetListener.
086 */
087 public synchronized TransportListener getTransportListener() {
088 return transportListener;
089 }
090
091 @Override
092 public String toString() {
093 return getNext().toString();
094 }
095
096 public void oneway(Object command) throws IOException {
097 getNext().oneway(command);
098 }
099
100 public FutureResponse asyncRequest(Object command, ResponseCallback responseCallback) throws IOException {
101 return getNext().asyncRequest(command, null);
102 }
103
104 public Object request(Object command) throws IOException {
105 return getNext().request(command);
106 }
107
108 public Object request(Object command, int timeout) throws IOException {
109 return getNext().request(command, timeout);
110 }
111
112 @Override
113 public void onException(IOException error) {
114 getTransportListener().onException(error);
115 }
116
117 public <T> T narrow(Class<T> target) {
118 if (target.isAssignableFrom(getClass())) {
119 return target.cast(this);
120 }
121 return getNext().narrow(target);
122 }
123
124 public synchronized void setNext(Transport next) {
125 this.next = next;
126 }
127
128 public void install(TransportFilter filter) {
129 filter.setTransportListener(this);
130 getNext().setTransportListener(filter);
131 setNext(filter);
132 }
133
134 public String getRemoteAddress() {
135 return getNext().getRemoteAddress();
136 }
137
138 /**
139 * @see org.apache.activemq.transport.Transport#isFaultTolerant()
140 */
141 public boolean isFaultTolerant() {
142 return getNext().isFaultTolerant();
143 }
144
145 public boolean isDisposed() {
146 return getNext().isDisposed();
147 }
148
149 public boolean isConnected() {
150 return getNext().isConnected();
151 }
152
153 public void reconnect(URI uri) throws IOException {
154 getNext().reconnect(uri);
155 }
156
157 public int getReceiveCounter() {
158 return getNext().getReceiveCounter();
159 }
160
161
162 public boolean isReconnectSupported() {
163 return getNext().isReconnectSupported();
164 }
165
166 public boolean isUpdateURIsSupported() {
167 return getNext().isUpdateURIsSupported();
168 }
169 public void updateURIs(boolean reblance,URI[] uris) throws IOException {
170 getNext().updateURIs(reblance,uris);
171 }
172 }