01: /*-
02: * See the file LICENSE for redistribution information.
03: *
04: * Copyright (c) 2000,2008 Oracle. All rights reserved.
05: *
06: * $Id: TupleSerialMarshalledBinding.java,v 1.23.2.3 2008/01/07 15:14:06 cwl Exp $
07: */
08:
09: package com.sleepycat.bind.serial;
10:
11: import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity;
12: import com.sleepycat.bind.tuple.TupleInput;
13: import com.sleepycat.bind.tuple.TupleOutput;
14:
15: /**
16: * A concrete <code>TupleSerialBinding</code> that delegates to the
17: * <code>MarshalledTupleKeyEntity</code> interface of the entity class.
18: *
19: * <p>The {@link MarshalledTupleKeyEntity} interface must be implemented by the
20: * entity class to convert between the key/data entry and entity object.</p>
21: *
22: * <p> The binding is "tricky" in that it uses the entity class for both the
23: * stored data entry and the combined entity object. To do this, the entity's
24: * key field(s) are transient and are set by the binding after the data object
25: * has been deserialized. This avoids the use of a "data" class completely.
26: * </p>
27: *
28: * @author Mark Hayes
29: * @see MarshalledTupleKeyEntity
30: */
31: public class TupleSerialMarshalledBinding extends TupleSerialBinding {
32:
33: /**
34: * Creates a tuple-serial marshalled binding object.
35: *
36: * @param classCatalog is the catalog to hold shared class information and
37: * for a database should be a {@link StoredClassCatalog}.
38: *
39: * @param baseClass is the base class for serialized objects stored using
40: * this binding -- all objects using this binding must be an instance of
41: * this class.
42: */
43: public TupleSerialMarshalledBinding(ClassCatalog classCatalog,
44: Class baseClass) {
45:
46: this (new SerialBinding(classCatalog, baseClass));
47: }
48:
49: /**
50: * Creates a tuple-serial marshalled binding object.
51: *
52: * @param dataBinding is the binding used for serializing and deserializing
53: * the entity object.
54: */
55: public TupleSerialMarshalledBinding(SerialBinding dataBinding) {
56:
57: super (dataBinding);
58: }
59:
60: // javadoc is inherited
61: public Object entryToObject(TupleInput tupleInput, Object javaInput) {
62:
63: /* Creates the entity by combining the stored key and data.
64: * This "tricky" binding returns the stored data as the entity, but
65: * first it sets the transient key fields from the stored key.
66: */
67: MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity) javaInput;
68:
69: if (tupleInput != null) { // may be null if not used by key extractor
70: entity.unmarshalPrimaryKey(tupleInput);
71: }
72: return entity;
73: }
74:
75: // javadoc is inherited
76: public void objectToKey(Object object, TupleOutput output) {
77:
78: /* Creates the stored key from the entity.
79: */
80: MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity) object;
81: entity.marshalPrimaryKey(output);
82: }
83:
84: // javadoc is inherited
85: public Object objectToData(Object object) {
86:
87: /* Returns the entity as the stored data. There is nothing to do here
88: * since the entity's key fields are transient.
89: */
90: return object;
91: }
92: }
|