All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sleepycat.bind.tuple.TupleBinding 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 java.util.HashMap;
import java.util.Map;

import com.sleepycat.bind.EntryBinding;
import com.sleepycat.je.DatabaseEntry;

/**
 * An abstract EntryBinding that treats a key or data entry as a
 * tuple; it includes predefined bindings for Java primitive types.
 *
 * 

This class takes care of converting the entries to/from {@link * TupleInput} and {@link TupleOutput} objects. Its two abstract methods must * be implemented by a concrete subclass to convert between tuples and key or * data objects.

*
    *
  • {@link #entryToObject(TupleInput)}
  • *
  • {@link #objectToEntry(Object,TupleOutput)}
  • *
* * @param is the class representing the key or data. * * @see Tuple Formats * * @author Mark Hayes */ public abstract class TupleBinding extends TupleBase implements EntryBinding { private static final Map primitives = new HashMap(); static { addPrimitive(String.class, String.class, new StringBinding()); addPrimitive(Character.class, Character.TYPE, new CharacterBinding()); addPrimitive(Boolean.class, Boolean.TYPE, new BooleanBinding()); addPrimitive(Byte.class, Byte.TYPE, new ByteBinding()); addPrimitive(Short.class, Short.TYPE, new ShortBinding()); addPrimitive(Integer.class, Integer.TYPE, new IntegerBinding()); addPrimitive(Long.class, Long.TYPE, new LongBinding()); addPrimitive(Float.class, Float.TYPE, new FloatBinding()); addPrimitive(Double.class, Double.TYPE, new DoubleBinding()); } private static void addPrimitive(Class cls1, Class cls2, TupleBinding binding) { primitives.put(cls1, binding); primitives.put(cls2, binding); } /** * Creates a tuple binding. */ public TupleBinding() { } // javadoc is inherited public E entryToObject(DatabaseEntry entry) { return entryToObject(entryToInput(entry)); } // javadoc is inherited public void objectToEntry(E object, DatabaseEntry entry) { TupleOutput output = getTupleOutput(object); objectToEntry(object, output); outputToEntry(output, entry); } /** * Constructs a key or data object from a {@link TupleInput} entry. * * @param input is the tuple key or data entry. * * @return the key or data object constructed from the entry. */ public abstract E entryToObject(TupleInput input); /** * Converts a key or data object to a tuple entry. * * @param object is the key or data object. * * @param output is the tuple entry to which the key or data should be * written. */ public abstract void objectToEntry(E object, TupleOutput output); /** * Creates a tuple binding for a primitive Java class. The following * Java classes are supported. *
    *
  • String
  • *
  • Character
  • *
  • Boolean
  • *
  • Byte
  • *
  • Short
  • *
  • Integer
  • *
  • Long
  • *
  • Float
  • *
  • Double
  • *
* *

Note: {@link #getPrimitiveBinding} returns bindings that do * not sort negative floating point numbers correctly by default. See * {@link SortedFloatBinding} and {@link SortedDoubleBinding} for * details.

* * @param the primitive Java class. * * @param cls the primitive Java class. * * @return a new binding for the primitive class or null if the cls * parameter is not one of the supported classes. */ public static TupleBinding getPrimitiveBinding(Class cls) { return primitives.get(cls); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy