com.sleepycat.bind.tuple.TupleTupleMarshalledBinding Maven / Gradle / Ivy
The newest version!
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.bind.tuple;
import com.sleepycat.util.RuntimeExceptionWrapper;
/**
* A concrete TupleTupleBinding
that delegates to the
* MarshalledTupleEntry
and
* MarshalledTupleKeyEntity
interfaces of the entity class.
*
* This class calls the methods of the {@link MarshalledTupleEntry}
* interface to convert between the data entry and entity object. It calls the
* methods of the {@link MarshalledTupleKeyEntity} interface to convert between
* the key entry and the entity object. These two interfaces must both be
* implemented by the entity class.
*
* @author Mark Hayes
*/
public class TupleTupleMarshalledBinding
extends TupleTupleBinding {
private Class cls;
/**
* Creates a tuple-tuple marshalled binding object.
*
* The given class is used to instantiate entity objects using {@link
* Class#newInstance}, and therefore must be a public class and have a
* public no-arguments constructor. It must also implement the {@link
* MarshalledTupleEntry} and {@link MarshalledTupleKeyEntity}
* interfaces.
*
* @param cls is the class of the entity objects.
*/
public TupleTupleMarshalledBinding(Class cls) {
this.cls = cls;
// The entity class will be used to instantiate the entity object.
//
if (!MarshalledTupleKeyEntity.class.isAssignableFrom(cls)) {
throw new IllegalArgumentException
(cls.toString() +
" does not implement MarshalledTupleKeyEntity");
}
if (!MarshalledTupleEntry.class.isAssignableFrom(cls)) {
throw new IllegalArgumentException
(cls.toString() + " does not implement MarshalledTupleEntry");
}
}
// javadoc is inherited
public E entryToObject(TupleInput keyInput, TupleInput dataInput) {
/*
* This "tricky" binding returns the stored data as the entity, but
* first it sets the transient key fields from the stored key.
*/
E obj;
try {
obj = cls.newInstance();
} catch (IllegalAccessException e) {
throw RuntimeExceptionWrapper.wrapIfNeeded(e);
} catch (InstantiationException e) {
throw RuntimeExceptionWrapper.wrapIfNeeded(e);
}
if (dataInput != null) { // may be null if used by key extractor
obj.unmarshalEntry(dataInput);
}
if (keyInput != null) { // may be null if used by key extractor
obj.unmarshalPrimaryKey(keyInput);
}
return obj;
}
// javadoc is inherited
public void objectToKey(E object, TupleOutput output) {
object.marshalPrimaryKey(output);
}
// javadoc is inherited
public void objectToData(E object, TupleOutput output) {
object.marshalEntry(output);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy