/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2000,2008 Oracle. All rights reserved. * * $Id: TupleSerialFactory.java,v 12.6 2008/01/08 20:58:36 bostic Exp $ */ package com.sleepycat.collections; import com.sleepycat.bind.EntryBinding; import com.sleepycat.bind.serial.ClassCatalog; import com.sleepycat.bind.serial.TupleSerialMarshalledBinding; import com.sleepycat.bind.serial.TupleSerialMarshalledKeyCreator; import com.sleepycat.bind.tuple.TupleBinding; import com.sleepycat.bind.tuple.TupleMarshalledBinding; import com.sleepycat.db.Database; /** * Creates stored collections having tuple keys and serialized entity values. * The entity classes must implement the java.io.Serializable and * MarshalledTupleKeyEntity interfaces. The key classes must either implement * the MarshalledTupleEntry interface or be one of the Java primitive type * classes. Underlying binding objects are created automatically. * * @author Mark Hayes */ public class TupleSerialFactory { private ClassCatalog catalog; /** * Creates a tuple-serial factory for given environment and class catalog. */ public TupleSerialFactory(ClassCatalog catalog) { this.catalog = catalog; } /** * Returns the class catalog associated with this factory. */ public final ClassCatalog getCatalog() { return catalog; } /** * Creates a map from a previously opened Database object. * * @param db the previously opened Database object. * * @param keyClass is the class used for map keys. It must implement the * {@link com.sleepycat.bind.tuple.MarshalledTupleEntry} interface or be * one of the Java primitive type classes. * * @param valueBaseClass the base class of the entity values for this * store. It must implement the {@link * com.sleepycat.bind.tuple.MarshalledTupleKeyEntity} interface. * * @param writeAllowed is true to create a read-write collection or false * to create a read-only collection. */ public StoredMap newMap(Database db, Class keyClass, Class valueBaseClass, boolean writeAllowed) { return new StoredMap(db, getKeyBinding(keyClass), getEntityBinding(valueBaseClass), writeAllowed); } /** * Creates a sorted map from a previously opened Database object. * * @param db the previously opened Database object. * * @param keyClass is the class used for map keys. It must implement the * {@link com.sleepycat.bind.tuple.MarshalledTupleEntry} interface or be * one of the Java primitive type classes. * * @param valueBaseClass the base class of the entity values for this * store. It must implement the {@link * com.sleepycat.bind.tuple.MarshalledTupleKeyEntity} interface. * * @param writeAllowed is true to create a read-write collection or false * to create a read-only collection. */ public StoredSortedMap newSortedMap(Database db, Class keyClass, Class valueBaseClass, boolean writeAllowed) { return new StoredSortedMap(db, getKeyBinding(keyClass), getEntityBinding(valueBaseClass), writeAllowed); } /** * Creates a SecondaryKeyCreator object for use in configuring * a SecondaryDatabase. The returned object implements * the {@link com.sleepycat.db.SecondaryKeyCreator} interface. * * @param valueBaseClass the base class of the entity values for this * store. It must implement the {@link * com.sleepycat.bind.tuple.MarshalledTupleKeyEntity} interface. * * @param keyName is the key name passed to the {@link * com.sleepycat.bind.tuple.MarshalledTupleKeyEntity#marshalSecondaryKey} * method to identify the secondary key. */ public TupleSerialMarshalledKeyCreator getKeyCreator(Class valueBaseClass, String keyName) { return new TupleSerialMarshalledKeyCreator( getEntityBinding(valueBaseClass), keyName); } private TupleSerialMarshalledBinding getEntityBinding(Class baseClass) { return new TupleSerialMarshalledBinding(catalog, baseClass); } private EntryBinding getKeyBinding(Class keyClass) { EntryBinding binding = TupleBinding.getPrimitiveBinding(keyClass); if (binding == null) { binding = new TupleMarshalledBinding(keyClass); } return binding; } }