KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sleepycat > bind > serial > TupleSerialMarshalledBinding


1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2000,2006 Oracle. All rights reserved.
5  *
6  * $Id: TupleSerialMarshalledBinding.java,v 1.23 2006/10/30 21:14:08 bostic Exp $
7  */

8
9 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 JavaDoc 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 JavaDoc entryToObject(TupleInput tupleInput, Object JavaDoc 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 JavaDoc 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 JavaDoc objectToData(Object JavaDoc 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 }
93
Popular Tags