001: /*
002: * <copyright>
003: *
004: * Copyright 2001-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.pizza.relay;
028:
029: import org.cougaar.core.mts.MessageAddress;
030: import org.cougaar.core.persist.NotPersistable;
031: import org.cougaar.core.relay.Relay;
032: import org.cougaar.core.util.UID;
033: import org.cougaar.core.util.UniqueObject;
034:
035: /**
036: * A target-side {@link Relay}. It has a slot for the query (from the sender) and the
037: * local response.
038: * <p/>
039: * The target relay has just a source address, and no target address, so that the
040: * relay won't be (re)propagated at the target agent.
041: * <p/>
042: * An alternative would be to have the relay implement both source and
043: * target interfaces, but this could lead to endless pinging in this case
044: * where the target address is an ABA broadcast to all members of the
045: * community (as in this pizza app).
046: * <p/>
047: * In contrast, {@link org.cougaar.core.relay.SimpleRelayImpl} which
048: * implements both source and target.
049: */
050: public class RSVPRelayTarget implements Relay.Target, UniqueObject {
051: private final MessageAddress source; // Who do we respond to?
052: private final Object query; // What info did they send to us?
053: private Object response; // Our response, an RSVPReply for the pizza app
054: private final UID uid;
055:
056: public RSVPRelayTarget(UID uid, MessageAddress source, Object query) {
057: this .uid = uid;
058: this .source = source;
059: this .query = query;
060: }
061:
062: /**
063: * Get Relay sender.
064: *
065: * Relay.Target implementation.
066: *
067: * @return source (sender or inviter) address
068: */
069: public MessageAddress getSource() {
070: return source;
071: }
072:
073: /**
074: * Specify the reply to the invite.
075: * @param response - reply to relay (should be an RSVPReply object)
076: */
077: public void setResponse(Object response) {
078: this .response = response;
079: }
080:
081: /**
082: * Used by the RelayLP to get the response to send back the the Relay sender.
083: * Relay.Target implementation
084: * @return reply to relay
085: */
086: public Object getResponse() {
087: return response;
088: }
089:
090: /**
091: * This is important so that if there are multiple relays, the RSVP
092: * plugin can know which to examine.
093: *
094: * @return query - the type of invitation
095: */
096: public Object getQuery() {
097: return query;
098: }
099:
100: /**
101: * Used by the RelayLP to update the query from the Relay sender. Not used in our application.
102: * Relay.Target implementation
103: *
104: * @return Relay.NO_CHANGE - content doesn't need to be updated, only the
105: * response
106: */
107: public int updateContent(Object newContent, Token token) {
108: // Content is never updated in the pizza app
109: // Another application could have Alice change details about the party,
110: // so send new relay content out. This method would be
111: // used by the RelayLP to propogate that change out to her invitees.
112: return Relay.NO_CHANGE;
113: }
114:
115: /**
116: * Implemented for UniqueObject interface.
117: * @return the UID of this UniqueObject.
118: **/
119: public UID getUID() {
120: return uid;
121: }
122:
123: /**
124: * Implemented for UniqueObject interface.
125: * Does nothing - not allowed to reset UID.
126: **/
127: public void setUID(UID uid) {
128: }
129:
130: public String toString() {
131: return "RSVPRelayTarget : " + " source=" + getSource()
132: + " query=" + getQuery() + " response=" + getResponse();
133: }
134: }
|