/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2000, 2010 Oracle and/or its affiliates. All rights reserved.
*
*/
package com.sleepycat.bind.tuple;
/**
* 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.
*
*
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.
*
* @author Mark Hayes
*/
public class TupleTupleMarshalledKeyCreator
extends TupleTupleKeyCreator {
private String keyName;
private TupleTupleMarshalledBinding binding;
/**
* Creates a tuple-tuple marshalled key creator.
*
* @param binding is the binding used for the tuple-tuple entity.
*
* @param keyName is 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;
}
// javadoc is inherited
public boolean createSecondaryKey(TupleInput primaryKeyInput,
TupleInput dataInput,
TupleOutput indexKeyOutput) {
/* The primary key is unmarshalled before marshalling the index key, to
* account for cases where the index key includes fields taken from the
* primary key.
*/
E entity = binding.entryToObject(primaryKeyInput, dataInput);
return entity.marshalSecondaryKey(keyName, indexKeyOutput);
}
// javadoc is inherited
public boolean nullifyForeignKey(TupleInput dataInput,
TupleOutput dataOutput) {
E entity = binding.entryToObject(null, dataInput);
if (entity.nullifyForeignKey(keyName)) {
binding.objectToData(entity, dataOutput);
return true;
} else {
return false;
}
}
}