001: /*
002: * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
003: * notice. All rights reserved.
004: */
005: package com.tc.l2.context;
006:
007: import com.tc.async.api.Sink;
008: import com.tc.bytes.TCByteBuffer;
009: import com.tc.net.groups.NodeID;
010: import com.tc.object.ObjectID;
011: import com.tc.object.dna.impl.ObjectStringSerializer;
012: import com.tc.objectserver.api.ObjectManagerLookupResults;
013: import com.tc.objectserver.context.ObjectManagerResultsContext;
014: import com.tc.util.Assert;
015:
016: import java.util.Collections;
017: import java.util.HashMap;
018: import java.util.HashSet;
019: import java.util.Map;
020: import java.util.Set;
021:
022: public class ManagedObjectSyncContext implements
023: ObjectManagerResultsContext {
024:
025: private final NodeID nodeID;
026: private final Set oids;
027: private final boolean more;
028: private final Sink nextSink;
029: private final Map rootsMap;
030:
031: private ObjectManagerLookupResults result;
032: private TCByteBuffer[] dnas;
033: private int dnaCount;
034: private ObjectStringSerializer serializer;
035: private long sequenceID;
036:
037: public ManagedObjectSyncContext(NodeID nodeID, Set oids,
038: boolean more, Sink sink) {
039: this .nodeID = nodeID;
040: this .oids = oids;
041: this .more = more;
042: this .nextSink = sink;
043: this .rootsMap = Collections.EMPTY_MAP;
044: }
045:
046: public ManagedObjectSyncContext(NodeID nodeID, HashMap rootsMap,
047: boolean more, Sink sink) {
048: this .nodeID = nodeID;
049: this .oids = new HashSet(rootsMap.values());
050: this .more = more;
051: this .nextSink = sink;
052: this .rootsMap = rootsMap;
053: }
054:
055: public void setResults(ObjectManagerLookupResults results) {
056: this .result = results;
057: nextSink.add(this );
058: }
059:
060: public Set getLookupIDs() {
061: return oids;
062: }
063:
064: public Map getRootsMap() {
065: return rootsMap;
066: }
067:
068: public Map getObjects() {
069: Assert.assertNotNull(result);
070: return result.getObjects();
071: }
072:
073: public void setDehydratedBytes(TCByteBuffer[] buffers, int count,
074: ObjectStringSerializer os) {
075: this .dnas = buffers;
076: this .dnaCount = count;
077: this .serializer = os;
078: }
079:
080: public NodeID getNodeID() {
081: return nodeID;
082: }
083:
084: public ObjectStringSerializer getObjectSerializer() {
085: Assert.assertNotNull(serializer);
086: return serializer;
087: }
088:
089: public TCByteBuffer[] getSerializedDNAs() {
090: Assert.assertNotNull(dnas);
091: return dnas;
092: }
093:
094: public int getDNACount() {
095: Assert.assertTrue(dnaCount > 0);
096: return dnaCount;
097: }
098:
099: public boolean hasMore() {
100: return more;
101: }
102:
103: public Set getNewObjectIDs() {
104: return Collections.EMPTY_SET;
105: }
106:
107: public void setSequenceID(long nextSequence) {
108: this .sequenceID = nextSequence;
109: }
110:
111: public long getSequenceID() {
112: Assert.assertTrue(this .sequenceID > 0);
113: return this .sequenceID;
114: }
115:
116: public void missingObject(ObjectID oid) {
117: throw new AssertionError("Syncing missing Object : " + oid
118: + " " + this );
119: }
120:
121: public String toString() {
122: return "ManagedObjectSyncContext [" + nodeID + " , oids = "
123: + oids + " , rootsMap = " + rootsMap + " , more = "
124: + more + "]";
125: }
126:
127: }
|