package com.sleepycat.bind.serial; import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity; import com.sleepycat.bind.tuple.TupleInput; import com.sleepycat.bind.tuple.TupleOutput; import de.ovgu.cide.jakutil.*; /** * A concrete key creator that works in conjunction with a {@link TupleSerialMarshalledBinding}. This key creator works by calling the methods * of the {@link MarshalledTupleKeyEntity} interface to create and clear the * index key fields. * @author Mark Hayes */ public class TupleSerialMarshalledKeyCreator extends TupleSerialKeyCreator { private TupleSerialMarshalledBinding binding; private String keyName; /** * Creates a tuple-serial marshalled key creator. * @param bindingis the binding used for the tuple-serial entity. * @param keyNameis the key name passed to the {@link MarshalledTupleKeyEntity#marshalSecondaryKey} method to * identify the index key. */ public TupleSerialMarshalledKeyCreator( TupleSerialMarshalledBinding binding, String keyName){ super(binding.dataBinding); this.binding=binding; this.keyName=keyName; if (dataBinding == null) { throw new NullPointerException("dataBinding may not be null"); } } public boolean createSecondaryKey( TupleInput primaryKeyInput, Object dataInput, TupleOutput indexKeyOutput){ MarshalledTupleKeyEntity entity=(MarshalledTupleKeyEntity)binding.entryToObject(primaryKeyInput,dataInput); return entity.marshalSecondaryKey(keyName,indexKeyOutput); } public Object nullifyForeignKey( Object dataInput){ MarshalledTupleKeyEntity entity=(MarshalledTupleKeyEntity)binding.entryToObject(null,dataInput); return entity.nullifyForeignKey(keyName) ? dataInput : null; } }