package com.sleepycat.bind.tuple; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.util.UtfOps; import de.ovgu.cide.jakutil.*; /** * A concrete <code>TupleBinding</code> for a simple <code>String</code> * value. * <p> * There are two ways to use this class: * </p> * <ol> * <li>When using the {@link com.sleepycat.je} package directly, the static * methods in this class can be used to convert between primitive values and{@link DatabaseEntry} objects.</li> * <li>When using the {@link com.sleepycat.collections} package, an instance of * this class can be used with any stored collection. The easiest way to obtain * a binding instance is with the {@link TupleBinding#getPrimitiveBinding}method.</li> * </ol> */ public class StringBinding extends TupleBinding { public Object entryToObject( TupleInput input){ return input.readString(); } public void objectToEntry( Object object, TupleOutput output){ output.writeString((String)object); } protected TupleOutput getTupleOutput( Object object){ return sizedOutput((String)object); } /** * Converts an entry buffer into a simple <code>String</code> value. * @param entryis the source entry buffer. * @return the resulting value. */ public static String entryToString( DatabaseEntry entry){ return entryToInput(entry).readString(); } /** * Converts a simple <code>String</code> value into an entry buffer. * @param valis the source value. * @param entryis the destination entry buffer. */ public static void stringToEntry( String val, DatabaseEntry entry){ outputToEntry(sizedOutput(val).writeString(val),entry); } /** * Returns a tuple output object of the exact size needed, to avoid wasting * space when a single primitive is output. */ private static TupleOutput sizedOutput( String val){ int stringLength=(val == null) ? 1 : UtfOps.getByteLength(val.toCharArray()); stringLength++; return new TupleOutput(new byte[stringLength]); } }