001: /*
002: * <copyright>
003: *
004: * Copyright 2001-2004 Mobile Intelligence Corp
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.community;
028:
029: import java.util.Collections;
030: import java.util.HashSet;
031: import java.util.Iterator;
032: import java.util.Set;
033:
034: import org.cougaar.core.mts.MessageAddress;
035: import org.cougaar.core.relay.Relay;
036: import org.cougaar.core.service.community.CommunityResponseListener;
037: import org.cougaar.core.util.UID;
038:
039: /**
040: * Generic wrapper for blackboard objects to be sent to remote agents
041: * using Realay.
042: */
043:
044: public class RelayAdapter implements Relay.Source {
045: protected Set interestedAgents = Collections
046: .synchronizedSet(new HashSet());
047: protected Set myTargetSet = new HashSet();
048: MessageAddress source;
049: Object content;
050: UID myUID;
051: Object resp;
052: transient CommunityResponseListener crl;
053:
054: public RelayAdapter(MessageAddress source, Object content, UID uid) {
055: this .source = source;
056: this .content = content;
057: this .myUID = uid;
058: }
059:
060: public Object getContent() {
061: return content;
062: }
063:
064: /*
065: * Get a factory for creating the target.
066: */
067: public TargetFactory getTargetFactory() {
068: return null;
069: }
070:
071: public Object getResponse() {
072: return resp;
073: }
074:
075: /*
076: * Set the response that was sent from a target.
077: */
078: public int updateResponse(MessageAddress target, Object response) {
079: this .resp = response;
080: return Relay.RESPONSE_CHANGE;
081: }
082:
083: /**
084: * Get all the addresses of the target agents to which this Relay
085: * should be sent.
086: * @return Set of MessageAddress objects
087: **/
088: public Set getTargets() {
089: if (myTargetSet == null) {
090: return Collections.EMPTY_SET;
091: } else {
092: return Collections.unmodifiableSet(myTargetSet);
093: }
094: }
095:
096: /**
097: * Add a target destination.
098: * @param target MessageAddress of agent to add to targets
099: **/
100: public void addTarget(MessageAddress target) {
101: if (myTargetSet != null) {
102: myTargetSet.add(target);
103: }
104: }
105:
106: public Set getInterestedAgents() {
107: return interestedAgents;
108: }
109:
110: public UID getUID() {
111: return myUID;
112: }
113:
114: /* set the UID of a UniqueObject. This should only be done by
115: * an LDM factory. Will throw a RuntimeException if
116: * the UID was already set.
117: */
118:
119: public void setUID(UID uid) {
120: if (myUID != null) {
121: RuntimeException rt = new RuntimeException(
122: "Attempt to call setUID() more than once.");
123: throw rt;
124: }
125: myUID = uid;
126: }
127:
128: public void setCommunityResponseListener(
129: CommunityResponseListener crl) {
130: this .crl = crl;
131: }
132:
133: public CommunityResponseListener getCommunityResponseListener() {
134: return crl;
135: }
136:
137: public static String targetsToString(Relay.Source rs) {
138: StringBuffer sb = new StringBuffer("[");
139: if (rs != null) {
140: for (Iterator it = rs.getTargets().iterator(); it.hasNext();) {
141: MessageAddress addr = (MessageAddress) it.next();
142: if (addr != null) {
143: sb.append(addr.toString());
144: if (it.hasNext())
145: sb.append(",");
146: }
147: }
148: }
149: sb.append("]");
150: return sb.toString();
151: }
152:
153: public String toString() {
154: return "RelayAdapter:" + " uid=" + myUID + " source=" + source
155: + " content=" + content + " targets="
156: + targetsToString(this);
157: }
158:
159: }
|