package com.sleepycat.bind.tuple;
import com.sleepycat.util.RuntimeExceptionWrapper;
import de.ovgu.cide.jakutil.*;
/**
* A concrete <code>TupleBinding</code> that delegates to the
* <code>MarshalledTupleEntry</code> interface of the data or key object.
* <p>
* This class works by calling the methods of the {@link MarshalledTupleEntry}interface, which must be implemented by the key or data class, to convert
* between the key or data entry and the object.
* </p>
* @author Mark Hayes
*/
public class TupleMarshalledBinding extends TupleBinding {
private Class cls;
/**
* Creates a tuple marshalled binding object.
* <p>
* The given class is used to instantiate key or data objects using{@link Class#forName}, and therefore must be a public class and have a
* public no-arguments constructor. It must also implement the {@link MarshalledTupleEntry} interface.
* </p>
* @param clsis the class of the key or data objects.
*/
public TupleMarshalledBinding( Class cls){
this.cls=cls;
if (!MarshalledTupleEntry.class.isAssignableFrom(cls)) {
throw new IllegalArgumentException(cls.toString() + " does not implement MarshalledTupleEntry");
}
}
public Object entryToObject( TupleInput input){
try {
MarshalledTupleEntry obj=(MarshalledTupleEntry)cls.newInstance();
obj.unmarshalEntry(input);
return obj;
}
catch ( IllegalAccessException e) {
throw new RuntimeExceptionWrapper(e);
}
catch ( InstantiationException e) {
throw new RuntimeExceptionWrapper(e);
}
}
public void objectToEntry( Object object, TupleOutput output){
MarshalledTupleEntry obj=(MarshalledTupleEntry)object;
obj.marshalEntry(output);
}
}