001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.mts.std;
028:
029: import java.io.FileWriter;
030: import java.io.PrintWriter;
031: import java.net.URI;
032:
033: import org.cougaar.core.mts.MessageAddress;
034: import org.cougaar.core.mts.MessageAttributes;
035: import org.cougaar.mts.base.ReceiveLink;
036: import org.cougaar.mts.base.ReceiveLinkDelegateImplBase;
037: import org.cougaar.mts.base.MisdeliveredMessageException;
038: import org.cougaar.mts.base.CommFailureException;
039: import org.cougaar.mts.base.UnregisteredNameException;
040: import org.cougaar.mts.base.NameLookupException;
041: import org.cougaar.mts.base.MessageDeliverer;
042: import org.cougaar.mts.base.MessageDelivererDelegateImplBase;
043: import org.cougaar.mts.base.DestinationLink;
044: import org.cougaar.mts.base.DestinationLinkDelegateImplBase;
045: import org.cougaar.mts.base.DestinationQueue;
046: import org.cougaar.mts.base.DestinationQueueDelegateImplBase;
047: import org.cougaar.mts.base.SendQueue;
048: import org.cougaar.mts.base.SendQueueDelegateImplBase;
049: import org.cougaar.mts.base.NameSupport;
050: import org.cougaar.mts.base.NameSupportDelegateImplBase;
051: import org.cougaar.mts.base.Router;
052: import org.cougaar.mts.base.RouterDelegateImplBase;
053: import org.cougaar.mts.base.StandardAspect;
054:
055: /**
056: * This demonstration Aspect provides a simple trace of a message as
057: * it passes through the various stages of the message transport
058: * subsystem.
059: */
060: public class TraceAspect extends StandardAspect {
061:
062: // logging support
063: private PrintWriter logStream = null;
064:
065: public TraceAspect() {
066: }
067:
068: private PrintWriter getLog() {
069: if (logStream == null) {
070: try {
071: String id = getRegistry().getIdentifier();
072: logStream = new PrintWriter(
073: new FileWriter(id + ".cml"), true);
074: } catch (Exception e) {
075: if (loggingService.isErrorEnabled())
076: loggingService
077: .error(
078: "Logging required but not possible - exiting",
079: e);
080: System.exit(1);
081: }
082: }
083: return logStream;
084: }
085:
086: protected void log(String key, String info) {
087: String id = getRegistry().getIdentifier();
088: String cleanInfo = info.replace('\n', '_');
089: getLog().println(
090: id + "\t" + System.currentTimeMillis() + "\t" + key
091: + "\t" + cleanInfo);
092: }
093:
094: public Object getDelegate(Object delegate, Class type) {
095: if (type == SendQueue.class) {
096: return new SendQueueDelegate((SendQueue) delegate);
097: } else if (type == Router.class) {
098: return new RouterDelegate((Router) delegate);
099: } else if (type == DestinationQueue.class) {
100: return new DestinationQueueDelegate(
101: (DestinationQueue) delegate);
102: } else if (type == DestinationLink.class) {
103: return new DestinationLinkDelegate(
104: (DestinationLink) delegate);
105: } else if (type == MessageDeliverer.class) {
106: return new MessageDelivererDelegate(
107: (MessageDeliverer) delegate);
108: } else if (type == ReceiveLink.class) {
109: return new ReceiveLinkDelegate((ReceiveLink) delegate);
110: } else if (type == NameSupport.class) {
111: return new NameSupportDelegate((NameSupport) delegate);
112: } else {
113: return null;
114: }
115: }
116:
117: public class NameSupportDelegate extends
118: NameSupportDelegateImplBase {
119:
120: public NameSupportDelegate(NameSupport nameSupport) {
121: super (nameSupport);
122: }
123:
124: public MessageAddress getNodeMessageAddress() {
125: return super .getNodeMessageAddress();
126: }
127:
128: public void registerAgentInNameServer(URI reference,
129: MessageAddress addr, String protocol) {
130: log("NameSupport", "Register Agent " + addr + " "
131: + reference);
132: super .registerAgentInNameServer(reference, addr, protocol);
133: }
134:
135: public void unregisterAgentInNameServer(URI reference,
136: MessageAddress addr, String protocol) {
137: log("NameSupport", "Unregister Agent " + addr + " "
138: + reference);
139: super
140: .unregisterAgentInNameServer(reference, addr,
141: protocol);
142: }
143:
144: public URI lookupAddressInNameServer(MessageAddress address,
145: String protocol) {
146: URI res = super
147: .lookupAddressInNameServer(address, protocol);
148: log("NameSupport", "Lookup of " + address + " returned "
149: + res);
150: return res;
151: }
152:
153: }
154:
155: public class SendQueueDelegate extends SendQueueDelegateImplBase {
156: public SendQueueDelegate(SendQueue queue) {
157: super (queue);
158: }
159:
160: public void sendMessage(AttributedMessage message) {
161: log("SendQueue", message.toString() + " (" + this .size()
162: + ")");
163: super .sendMessage(message);
164: }
165: }
166:
167: public class RouterDelegate extends RouterDelegateImplBase {
168: public RouterDelegate(Router router) {
169: super (router);
170: }
171:
172: public void routeMessage(AttributedMessage message) {
173: log("Router", message.getTarget().toString());
174: super .routeMessage(message);
175: }
176:
177: }
178:
179: public class DestinationQueueDelegate extends
180: DestinationQueueDelegateImplBase {
181: public DestinationQueueDelegate(DestinationQueue queue) {
182: super (queue);
183: }
184:
185: public void holdMessage(AttributedMessage message) {
186: log("DestinationQueue", message.toString());
187: super .holdMessage(message);
188: }
189:
190: public void dispatchNextMessage(AttributedMessage message) {
191: log("DestinationQueue dispatch", message.toString());
192: super .dispatchNextMessage(message);
193: }
194:
195: }
196:
197: public class DestinationLinkDelegate extends
198: DestinationLinkDelegateImplBase {
199: public DestinationLinkDelegate(DestinationLink link) {
200: super (link);
201: }
202:
203: public MessageAttributes forwardMessage(
204: AttributedMessage message)
205: throws UnregisteredNameException, NameLookupException,
206: CommFailureException, MisdeliveredMessageException
207:
208: {
209: log("DestinationLink", message.toString());
210: return super .forwardMessage(message);
211: }
212:
213: }
214:
215: public class MessageDelivererDelegate extends
216: MessageDelivererDelegateImplBase {
217: public MessageDelivererDelegate(MessageDeliverer deliverer) {
218: super (deliverer);
219: }
220:
221: public MessageAttributes deliverMessage(
222: AttributedMessage message, MessageAddress dest)
223: throws MisdeliveredMessageException {
224: log("MessageDeliverer", message.toString());
225: return super .deliverMessage(message, dest);
226: }
227:
228: }
229:
230: public class ReceiveLinkDelegate extends
231: ReceiveLinkDelegateImplBase {
232: public ReceiveLinkDelegate(ReceiveLink link) {
233: super (link);
234: }
235:
236: public MessageAttributes deliverMessage(
237: AttributedMessage message) {
238: log("ReceiveLink", message.toString());
239: return super.deliverMessage(message);
240: }
241:
242: }
243: }
|