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.core.mobility.service;
028:
029: import java.io.IOException;
030: import java.io.ObjectInputStream;
031: import java.io.ObjectOutputStream;
032: import java.io.Serializable;
033: import org.cougaar.core.component.ComponentDescription;
034: import org.cougaar.core.mobility.AbstractTicket;
035: import org.cougaar.core.mobility.MoveTicket;
036: import org.cougaar.core.persist.PersistenceInputStream;
037: import org.cougaar.core.persist.PersistenceOutputStream;
038:
039: /**
040: * Package-private ticket to transfer an agent between nodes.
041: */
042: final class TransferTicket extends AbstractTicket implements
043: Serializable {
044:
045: private final MoveTicket moveTicket;
046: private final ComponentDescription desc;
047: private Object state;
048:
049: public TransferTicket(MoveTicket moveTicket,
050: ComponentDescription desc, Object state) {
051: this .moveTicket = moveTicket;
052: this .desc = desc;
053: this .state = state;
054: }
055:
056: public MoveTicket getMoveTicket() {
057: return moveTicket;
058: }
059:
060: public ComponentDescription getComponentDescription() {
061: return desc;
062: }
063:
064: public Object getState() {
065: return state;
066: }
067:
068: public void clearState() {
069: // force GC
070: state = null;
071: }
072:
073: private void writeObject(ObjectOutputStream stream)
074: throws IOException {
075: stream.defaultWriteObject();
076: if (stream instanceof PersistenceOutputStream) {
077: // don't persist state!
078: } else {
079: stream.writeObject(state);
080: }
081: }
082:
083: private void readObject(ObjectInputStream stream)
084: throws ClassNotFoundException, IOException {
085: stream.defaultReadObject();
086: if (stream instanceof PersistenceInputStream) {
087: // don't try reading state
088: } else {
089: state = stream.readObject();
090: }
091: }
092:
093: public int hashCode() {
094: return moveTicket.hashCode();
095: }
096:
097: public boolean equals(Object o) {
098: if (o == this ) {
099: return true;
100: } else if (!(o instanceof TransferTicket)) {
101: return false;
102: } else {
103: TransferTicket t = (TransferTicket) o;
104: return moveTicket.equals(t.moveTicket);
105: }
106: }
107:
108: public String toString() {
109: return "Node-to-Node transfer of " + moveTicket;
110: }
111: }
|