001: /*
002: * <copyright>
003: *
004: * Copyright 2002-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.servicediscovery.transaction;
028:
029: import java.util.Collection;
030:
031: import org.cougaar.core.mts.MessageAddress;
032: import org.cougaar.core.relay.Relay;
033: import org.cougaar.planning.ldm.asset.Asset;
034: import org.cougaar.planning.ldm.plan.Preference;
035: import org.cougaar.servicediscovery.SDFactory;
036: import org.cougaar.servicediscovery.description.ServiceContract;
037: import org.cougaar.servicediscovery.description.ServiceRequest;
038: import org.cougaar.util.log.Logger;
039: import org.cougaar.util.log.Logging;
040:
041: /**
042: * Relay used to request command chain lineage
043: **/
044: public class ServiceContractRelayImpl extends RelayAdapter implements
045: ClientServiceContractRelay, ProviderServiceContractRelay {
046: private static Logger myLogger = Logging
047: .getLogger(ServiceContractRelay.class);
048:
049: private String myProviderName;
050: private ServiceContract myServiceContract;
051: private ServiceRequest myServiceRequest;
052:
053: private transient String myToString = null;
054:
055: public ServiceContractRelayImpl() {
056: super ();
057: }
058:
059: public ServiceContractRelayImpl(ServiceRequest request) {
060: super ();
061: setServiceRequest(request);
062: }
063:
064: /**
065: * Gets the name of the Agent from whom the service is requested
066: *
067: * @return String Name of the agent
068: */
069: public String getProviderName() {
070: return myProviderName;
071: }
072:
073: /**
074: * Returns the service contract provided by the provider agent
075: *
076: * @return ServiceContract service contract as specified by the provider
077: * agent.
078: */
079: public ServiceContract getServiceContract() {
080: return myServiceContract;
081: }
082:
083: /**
084: * Sets the service contract as specified by the provider and
085: * return true. Caller responsible for verifying compatibility.
086: *
087: * @param serviceContract ServiceContract as specified by the provider
088: */
089: public void setServiceContract(ServiceContract serviceContract) {
090: myServiceContract = serviceContract;
091: myToString = null;
092: }
093:
094: /**
095: * Returns the provider asset from the ServiceContract
096: *
097: * @return Asset provider asset as specified by the ServiceContract
098: * agent.
099: */
100: public Asset getProvider() {
101: if (getServiceContract() != null) {
102: return getServiceContract().getProvider();
103: } else {
104: return null;
105: }
106: }
107:
108: /**
109: * Returns the service request from the client
110: *
111: * @return ServiceRequest service request as specified by the client
112: * agent.
113: */
114: public ServiceRequest getServiceRequest() {
115: return myServiceRequest;
116: }
117:
118: /**
119: * Sets the service request (request should be only be set by the client)
120: *
121: * @param serviceRequest ServiceRequest as specified by the client
122: */
123: public void setServiceRequest(ServiceRequest serviceRequest) {
124: myServiceRequest = serviceRequest;
125: myToString = null;
126: }
127:
128: /**
129: * Returns the client asset from the ServiceRequest
130: *
131: * @return Asset client asset as specified by the ServiceRequest
132: * agent.
133: */
134: public Asset getClient() {
135: if (getServiceRequest() != null) {
136: return getServiceRequest().getClient();
137: } else {
138: return null;
139: }
140: }
141:
142: /**
143: * Add a target message address.
144: * @param target the address of the target agent.
145: **/
146: public void addTarget(MessageAddress target) {
147: if ((myTargetSet != null) && (myTargetSet.size() > 0)) {
148: myLogger.error("Attempt to set multiple targets.");
149: return;
150: }
151:
152: super .addTarget(target);
153:
154: myProviderName = target.toString();
155: }
156:
157: /**
158: * Set the response that was sent from a target. For LP use only.
159: * This implementation assumes that response is always different.
160: * or used.
161: **/
162: public int updateResponse(MessageAddress target, Object response) {
163: ServiceContractRelay serviceContractRelay = (ServiceContractRelay) response;
164:
165: setServiceContract(serviceContractRelay.getServiceContract());
166:
167: return Relay.RESPONSE_CHANGE;
168: }
169:
170: // Relay.Target:
171:
172: public Object getResponse() {
173: return (myServiceContract != null ? this : null);
174: }
175:
176: public String toString() {
177: if (myToString == null) {
178: myToString = getClass().getName() + ": Provider= "
179: + getProviderName() + ", serviceRequest = "
180: + getServiceRequest() + ", serviceContract = "
181: + getServiceContract() + ", UID =<" + getUID()
182: + ">";
183: }
184:
185: return myToString;
186: }
187:
188: /* Assume all changes are meaningful.
189: */
190: protected boolean contentChanged(RelayAdapter content) {
191: ServiceContractRelay serviceContractRelay = (ServiceContractRelay) content;
192:
193: setServiceRequest(serviceContractRelay.getServiceRequest());
194:
195: return true;
196: }
197:
198: }
|