package com.sleepycat.bind.tuple; import de.ovgu.cide.jakutil.*; /** * A concrete key creator that works in conjunction with a {@link TupleTupleMarshalledBinding}. This key creator works by calling the methods * of the {@link MarshalledTupleKeyEntity} interface to create and clear the * index key. * <p> * Note that a marshalled tuple key creator is somewhat less efficient than a * non-marshalled key tuple creator because more conversions are needed. A * marshalled key creator must convert the entry to an object in order to create * the key, while an unmarshalled key creator does not. * </p> * @author Mark Hayes */ public class TupleTupleMarshalledKeyCreator extends TupleTupleKeyCreator { private String keyName; private TupleTupleMarshalledBinding binding; /** * Creates a tuple-tuple marshalled key creator. * @param bindingis the binding used for the tuple-tuple entity. * @param keyNameis the key name passed to the {@link MarshalledTupleKeyEntity#marshalSecondaryKey} method to * identify the index key. */ public TupleTupleMarshalledKeyCreator( TupleTupleMarshalledBinding binding, String keyName){ this.binding=binding; this.keyName=keyName; } public boolean createSecondaryKey( TupleInput primaryKeyInput, TupleInput dataInput, TupleOutput indexKeyOutput){ MarshalledTupleKeyEntity entity=(MarshalledTupleKeyEntity)binding.entryToObject(primaryKeyInput,dataInput); return entity.marshalSecondaryKey(keyName,indexKeyOutput); } public boolean nullifyForeignKey( TupleInput dataInput, TupleOutput dataOutput){ MarshalledTupleKeyEntity entity=(MarshalledTupleKeyEntity)binding.entryToObject(null,dataInput); if (entity.nullifyForeignKey(keyName)) { binding.objectToData(entity,dataOutput); return true; } else { return false; } } }