package com.sleepycat.bind.tuple; import de.ovgu.cide.jakutil.*; /** * A marshalling interface implemented by entity classes that represent keys as * tuples. Since <code>MarshalledTupleKeyEntity</code> objects are * instantiated using Java deserialization, no particular constructor is * required by classes that implement this interface. * <p> * Note that a marshalled tuple key extractor is somewhat less efficient than a * non-marshalled key tuple extractor because more conversions are needed. A * marshalled key extractor must convert the entry to an object in order to * extract the key fields, while an unmarshalled key extractor does not. * </p> * @author Mark Hayes * @see TupleTupleMarshalledBinding * @see com.sleepycat.bind.serial.TupleSerialMarshalledBinding */ public interface MarshalledTupleKeyEntity { /** * Extracts the entity's primary key and writes it to the key output. * @param keyOutputis the output tuple. */ void marshalPrimaryKey( TupleOutput keyOutput); /** * Completes construction of the entity by setting its primary key from the * stored primary key. * @param keyInputis the input tuple. */ void unmarshalPrimaryKey( TupleInput keyInput); /** * Extracts the entity's secondary key and writes it to the key output. * @param keyNameidentifies the secondary key. * @param keyOutputis the output tuple. * @return true if a key was created, or false to indicate that the key is * not present. */ boolean marshalSecondaryKey( String keyName, TupleOutput keyOutput); /** * Clears the entity's secondary key fields for the given key name. * <p> * The specified index key should be changed by this method such that{@link #marshalSecondaryKey} for the same key name will return false. * Other fields in the data object should remain unchanged. * </p> * <!-- begin JE only --> * <p> * If {@link com.sleepycat.je.ForeignKeyDeleteAction#NULLIFY} was specified * when opening the secondary database, this method is called when the * entity for this foreign key is deleted. If NULLIFY was not specified, * this method will not be called and may always return false. * </p> * <!-- end JE only --> * @param keyNameidentifies the secondary key. * @return true if the key was cleared, or false to indicate that the key is * not present and no change is necessary. */ boolean nullifyForeignKey( String keyName); }