com.sleepycat.collections.TupleSerialFactory 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.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.MarshalledTupleEntry; // for javadoc
import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.tuple.TupleMarshalledBinding;
import com.sleepycat.je.Database;
/**
* Creates stored collections having tuple keys and serialized entity values.
* The entity classes must be Serializable and must implement the
* 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.
*
* @param catalog the ClassCatalog.
*/
public TupleSerialFactory(ClassCatalog catalog) {
this.catalog = catalog;
}
/**
* Returns the class catalog associated with this factory.
*
* @return the catalog.
*/
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 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 MarshalledTupleKeyEntity}
* interface.
*
* @param writeAllowed is true to create a read-write collection or false
* to create a read-only collection.
*
* @param the key class.
*
* @param the value base class.
*
* @return the map.
*/
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 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 MarshalledTupleKeyEntity}
* interface.
*
* @param writeAllowed is true to create a read-write collection or false
* to create a read-only collection.
*
* @param the key class.
*
* @param the value base class.
*
* @return the sorted map.
*/
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.je.SecondaryKeyCreator} interface.
*
* @param valueBaseClass the base class of the entity values for this
* store. It must implement the {@link MarshalledTupleKeyEntity}
* interface.
*
* @param keyName is the key name passed to the {@link
* MarshalledTupleKeyEntity#marshalSecondaryKey} method to identify the
* secondary key.
*
* @param the value base class.
*
* @return the key creator.
*/
public
TupleSerialMarshalledKeyCreator
getKeyCreator(Class valueBaseClass, String keyName) {
return new TupleSerialMarshalledKeyCreator
(getEntityBinding(valueBaseClass), keyName);
}
public
TupleSerialMarshalledBinding
getEntityBinding(Class baseClass) {
return new TupleSerialMarshalledBinding(catalog, baseClass);
}
private EntryBinding getKeyBinding(Class keyClass) {
EntryBinding binding = TupleBinding.getPrimitiveBinding(keyClass);
if (binding == null) {
/*
* Cannot use type param here because it does not implement
* MarshalledTupleEntry if it is a primitive class.
*/
binding = new TupleMarshalledBinding(keyClass);
}
return binding;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy