1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2000,2008 Oracle. All rights reserved. 5 * 6 * $Id: TupleSerialMarshalledBinding.java,v 12.8 2008/02/07 17:12:25 mark Exp $ 7 */ 8 9package com.sleepycat.bind.serial; 10 11import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity; 12import com.sleepycat.bind.tuple.TupleInput; 13import 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 */ 31public 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} 93