Package io.protostuff.runtime
Class IncrementalIdStrategy
- java.lang.Object
-
- io.protostuff.runtime.IdStrategy
-
- io.protostuff.runtime.NumericIdStrategy
-
- io.protostuff.runtime.IncrementalIdStrategy
-
public final class IncrementalIdStrategy extends NumericIdStrategy
The ids are generated (incremental) on the fly and you can optionally register classes by reserving the first x ids viaIncrementalIdStrategy.Registry. To minimize overhead,ArrayLists are used for the id mapping rather thanConcurrentHashMap. This optimization has a disadvantage though. Ids will not be unlimited. You'll have to specificy a max id for the 4 types (pojo, enum, collection, map)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classIncrementalIdStrategy.BaseHS<T>static classIncrementalIdStrategy.FactoryTo useIncrementalIdStrategywithout registering anything, set the system property: "-Dprotostuff.runtime.id_strategy_factory=io.protostuff.runtime.IncrementalIdStrategy$Factory"(package private) static classIncrementalIdStrategy.Lazy<T>(package private) static classIncrementalIdStrategy.LazyRegister<T>(package private) static classIncrementalIdStrategy.Registered<T>static classIncrementalIdStrategy.RegistryThis Registry is only way to register your pojos/enums/collections/maps/delegates.(package private) static classIncrementalIdStrategy.RuntimeCollectionFactory(package private) static classIncrementalIdStrategy.RuntimeEnumIO(package private) static classIncrementalIdStrategy.RuntimeMapFactory-
Nested classes/interfaces inherited from class io.protostuff.runtime.NumericIdStrategy
NumericIdStrategy.RegisteredDelegate<T>
-
Nested classes/interfaces inherited from class io.protostuff.runtime.IdStrategy
IdStrategy.UnknownTypeException, IdStrategy.Wrapper
-
-
Field Summary
Fields Modifier and Type Field Description (package private) java.util.concurrent.atomic.AtomicIntegercollectionId(package private) intcollectionIdStart(package private) java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.RuntimeCollectionFactory>collectionMapping(package private) java.util.ArrayList<IncrementalIdStrategy.RuntimeCollectionFactory>collections(package private) java.util.IdentityHashMap<java.lang.Class<?>,NumericIdStrategy.RegisteredDelegate<?>>delegateMapping(package private) java.util.ArrayList<NumericIdStrategy.RegisteredDelegate<?>>delegates(package private) java.util.concurrent.atomic.AtomicIntegerenumId(package private) intenumIdStart(package private) java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.RuntimeEnumIO>enumMapping(package private) java.util.ArrayList<IncrementalIdStrategy.RuntimeEnumIO>enums(package private) java.util.concurrent.atomic.AtomicIntegermapId(package private) intmapIdStart(package private) java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.RuntimeMapFactory>mapMapping(package private) java.util.ArrayList<IncrementalIdStrategy.RuntimeMapFactory>maps(package private) java.util.concurrent.atomic.AtomicIntegerpojoId(package private) intpojoIdStart(package private) java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.BaseHS<?>>pojoMapping(package private) java.util.ArrayList<IncrementalIdStrategy.BaseHS<?>>pojos-
Fields inherited from class io.protostuff.runtime.NumericIdStrategy
CID_BIGDECIMAL, CID_BIGINTEGER, CID_BOOL, CID_BYTE, CID_BYTE_ARRAY, CID_BYTES, CID_CHAR, CID_CLASS, CID_COLLECTION, CID_DATE, CID_DELEGATE, CID_DOUBLE, CID_ENUM, CID_ENUM_MAP, CID_ENUM_SET, CID_FLOAT, CID_INT32, CID_INT64, CID_MAP, CID_OBJECT, CID_POJO, CID_SHORT, CID_STRING
-
Fields inherited from class io.protostuff.runtime.IdStrategy
ARRAY_BIGDECIMAL_SCHEMA, ARRAY_BIGINTEGER_SCHEMA, ARRAY_BOOL_BOXED_SCHEMA, ARRAY_BOOL_DERIVED_SCHEMA, ARRAY_BOOL_PRIMITIVE_SCHEMA, ARRAY_BYTEARRAY_SCHEMA, ARRAY_BYTESTRING_SCHEMA, ARRAY_CHAR_BOXED_SCHEMA, ARRAY_CHAR_DERIVED_SCHEMA, ARRAY_CHAR_PRIMITIVE_SCHEMA, ARRAY_DATE_SCHEMA, ARRAY_DOUBLE_BOXED_SCHEMA, ARRAY_DOUBLE_DERIVED_SCHEMA, ARRAY_DOUBLE_PRIMITIVE_SCHEMA, ARRAY_ELEMENT_SCHEMA, ARRAY_FLOAT_BOXED_SCHEMA, ARRAY_FLOAT_DERIVED_SCHEMA, ARRAY_FLOAT_PRIMITIVE_SCHEMA, ARRAY_INT32_BOXED_SCHEMA, ARRAY_INT32_DERIVED_SCHEMA, ARRAY_INT32_PRIMITIVE_SCHEMA, ARRAY_INT64_BOXED_SCHEMA, ARRAY_INT64_DERIVED_SCHEMA, ARRAY_INT64_PRIMITIVE_SCHEMA, ARRAY_PIPE_SCHEMA, ARRAY_SCHEMA, ARRAY_SHORT_BOXED_SCHEMA, ARRAY_SHORT_DERIVED_SCHEMA, ARRAY_SHORT_PRIMITIVE_SCHEMA, ARRAY_STRING_SCHEMA, AUTO_LOAD_POLYMORPHIC_CLASSES, CLASS_ELEMENT_SCHEMA, CLASS_PIPE_SCHEMA, CLASS_SCHEMA, COLLECTION_PIPE_SCHEMA, COLLECTION_SCHEMA, COLLECTION_SCHEMA_ON_REPEATED_FIELDS, DEFAULT_FLAGS, DYNAMIC_VALUE_PIPE_SCHEMA, DYNAMIC_VALUE_SCHEMA, ENTRY_PIPE_SCHEMA, ENTRY_SCHEMA, ENUMS_BY_NAME, flags, groupId, MAP_PIPE_SCHEMA, MAP_SCHEMA, MORPH_COLLECTION_INTERFACES, MORPH_MAP_INTERFACES, MORPH_NON_FINAL_POJOS, NUMBER_ELEMENT_SCHEMA, OBJECT_ELEMENT_SCHEMA, OBJECT_PIPE_SCHEMA, OBJECT_SCHEMA, POJO_SCHEMA_ON_COLLECTION_FIELDS, POJO_SCHEMA_ON_MAP_FIELDS, POLYMORPHIC_COLLECTION_PIPE_SCHEMA, POLYMORPHIC_COLLECTION_SCHEMA, POLYMORPHIC_ENUM_ELEMENT_SCHEMA, POLYMORPHIC_MAP_PIPE_SCHEMA, POLYMORPHIC_MAP_SCHEMA, POLYMORPHIC_POJO_ELEMENT_SCHEMA, POLYMORPHIC_THROWABLE_ELEMENT_SCHEMA, PRESERVE_NULL_ELEMENTS, preserveNull, primaryGroup
-
-
Constructor Summary
Constructors Constructor Description IncrementalIdStrategy(int collectionIdMax, int collectionIdStart, int mapIdMax, int mapIdStart, int enumIdMax, int enumIdStart, int pojoIdMax, int pojoIdStart)IncrementalIdStrategy(int flags, IdStrategy primaryGroup, int groupId, int collectionIdMax, int collectionIdStart, int mapIdMax, int mapIdStart, int enumIdMax, int enumIdStart, int pojoIdMax, int pojoIdStart)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.Class<?>collectionClass(int id)protected java.lang.Class<?>delegateClass(int id)protected java.lang.Class<?>enumClass(int id)private <T> IncrementalIdStrategy.BaseHS<T>getBaseHS(java.lang.Class<T> typeClass, boolean create)protected CollectionSchema.MessageFactorygetCollectionFactory(java.lang.Class<?> clazz)Returns theCollectionSchema.MessageFactory.<T> Delegate<T>getDelegate(java.lang.Class<? super T> typeClass)Returns thedelegate.<T> HasDelegate<T>getDelegateWrapper(java.lang.Class<? super T> typeClass)Returns thedelegate.protected intgetEnumId(java.lang.Class<?> clazz)protected EnumIO<? extends java.lang.Enum<?>>getEnumIO(java.lang.Class<?> enumClass)Returns theEnumIO.protected intgetId(java.lang.Class<?> clazz)protected MapSchema.MessageFactorygetMapFactory(java.lang.Class<?> clazz)Returns theMapSchema.MessageFactory.protected NumericIdStrategy.RegisteredDelegate<?>getRegisteredDelegate(java.lang.Class<?> clazz)private IncrementalIdStrategy.RuntimeCollectionFactorygetRuntimeCollectionFactory(java.lang.Class<?> clazz)private IncrementalIdStrategy.RuntimeEnumIOgetRuntimeEnumIO(java.lang.Class<?> enumClass)private IncrementalIdStrategy.RuntimeMapFactorygetRuntimeMapFactory(java.lang.Class<?> clazz)<T> HasSchema<T>getSchemaWrapper(java.lang.Class<T> typeClass, boolean create)Returns theschema wrapper.booleanisDelegateRegistered(java.lang.Class<?> typeClass)Returns true if there is aDelegateexplicitly registered for thetypeClass.booleanisRegistered(java.lang.Class<?> typeClass)Returns true if thetypeClassis explicitly registered.protected java.lang.Class<?>mapClass(int id)protected java.lang.Class<?>pojoClass(int id)protected CollectionSchema.MessageFactoryresolveCollectionFrom(Input input)protected <T> HasDelegate<T>resolveDelegateFrom(Input input)protected EnumIO<?>resolveEnumFrom(Input input)protected MapSchema.MessageFactoryresolveMapFrom(Input input)protected <T> HasSchema<T>resolvePojoFrom(Input input, int fieldNumber)protected voidtransferCollectionId(Input input, Output output, int fieldNumber)protected <T> HasDelegate<T>transferDelegateId(Input input, Output output, int fieldNumber)protected voidtransferEnumId(Input input, Output output, int fieldNumber)protected voidtransferMapId(Input input, Output output, int fieldNumber)protected <T> HasSchema<T>transferPojoId(Input input, Output output, int fieldNumber)protected <T> HasDelegate<T>tryWriteDelegateIdTo(Output output, int fieldNumber, java.lang.Class<T> clazz)If this method returns null, the clazz was not registered as a delegate.protected <T> HasSchema<T>tryWritePojoIdTo(Output output, int fieldNumber, java.lang.Class<T> clazz, boolean registered)protected voidwriteCollectionIdTo(Output output, int fieldNumber, java.lang.Class<?> clazz)protected voidwriteEnumIdTo(Output output, int fieldNumber, java.lang.Class<?> clazz)protected voidwriteMapIdTo(Output output, int fieldNumber, java.lang.Class<?> clazz)protected <T> Schema<T>writeMessageIdTo(Output output, int fieldNumber, Message<T> message)protected <T> HasSchema<T>writePojoIdTo(Output output, int fieldNumber, java.lang.Class<T> clazz)-
Methods inherited from class io.protostuff.runtime.NumericIdStrategy
grow, newList, resolveArrayComponentTypeFrom, resolveClassFrom, transferArrayId, transferClassId, writeArrayIdTo, writeClassIdTo
-
Methods inherited from class io.protostuff.runtime.IdStrategy
createMessageInstance, newSchema
-
-
-
-
Field Detail
-
collectionMapping
final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.RuntimeCollectionFactory> collectionMapping
-
collections
final java.util.ArrayList<IncrementalIdStrategy.RuntimeCollectionFactory> collections
-
mapMapping
final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.RuntimeMapFactory> mapMapping
-
maps
final java.util.ArrayList<IncrementalIdStrategy.RuntimeMapFactory> maps
-
enumMapping
final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.RuntimeEnumIO> enumMapping
-
enums
final java.util.ArrayList<IncrementalIdStrategy.RuntimeEnumIO> enums
-
pojoMapping
final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,IncrementalIdStrategy.BaseHS<?>> pojoMapping
-
pojos
final java.util.ArrayList<IncrementalIdStrategy.BaseHS<?>> pojos
-
delegateMapping
final java.util.IdentityHashMap<java.lang.Class<?>,NumericIdStrategy.RegisteredDelegate<?>> delegateMapping
-
delegates
final java.util.ArrayList<NumericIdStrategy.RegisteredDelegate<?>> delegates
-
pojoId
final java.util.concurrent.atomic.AtomicInteger pojoId
-
enumId
final java.util.concurrent.atomic.AtomicInteger enumId
-
collectionId
final java.util.concurrent.atomic.AtomicInteger collectionId
-
mapId
final java.util.concurrent.atomic.AtomicInteger mapId
-
pojoIdStart
final int pojoIdStart
-
enumIdStart
final int enumIdStart
-
collectionIdStart
final int collectionIdStart
-
mapIdStart
final int mapIdStart
-
-
Constructor Detail
-
IncrementalIdStrategy
public IncrementalIdStrategy(int collectionIdMax, int collectionIdStart, int mapIdMax, int mapIdStart, int enumIdMax, int enumIdStart, int pojoIdMax, int pojoIdStart)
-
IncrementalIdStrategy
public IncrementalIdStrategy(int flags, IdStrategy primaryGroup, int groupId, int collectionIdMax, int collectionIdStart, int mapIdMax, int mapIdStart, int enumIdMax, int enumIdStart, int pojoIdMax, int pojoIdStart)
-
-
Method Detail
-
isRegistered
public boolean isRegistered(java.lang.Class<?> typeClass)
Description copied from class:IdStrategyReturns true if thetypeClassis explicitly registered.- Specified by:
isRegisteredin classIdStrategy
-
getBaseHS
private <T> IncrementalIdStrategy.BaseHS<T> getBaseHS(java.lang.Class<T> typeClass, boolean create)
-
getSchemaWrapper
public <T> HasSchema<T> getSchemaWrapper(java.lang.Class<T> typeClass, boolean create)
Description copied from class:IdStrategyReturns theschema wrapper. The caller is responsible that the typeClass is a pojo (e.g not an enum/array/etc).- Specified by:
getSchemaWrapperin classIdStrategy
-
getRuntimeEnumIO
private IncrementalIdStrategy.RuntimeEnumIO getRuntimeEnumIO(java.lang.Class<?> enumClass)
-
getEnumIO
protected EnumIO<? extends java.lang.Enum<?>> getEnumIO(java.lang.Class<?> enumClass)
Description copied from class:IdStrategyReturns theEnumIO. The callers (internal field factories) are responsible that the class provided is an enum class.- Specified by:
getEnumIOin classIdStrategy
-
getRuntimeCollectionFactory
private IncrementalIdStrategy.RuntimeCollectionFactory getRuntimeCollectionFactory(java.lang.Class<?> clazz)
-
getCollectionFactory
protected CollectionSchema.MessageFactory getCollectionFactory(java.lang.Class<?> clazz)
Description copied from class:IdStrategyReturns theCollectionSchema.MessageFactory. The callers (internal field factories) are responsible that the class provided implementsCollection.- Specified by:
getCollectionFactoryin classIdStrategy
-
getRuntimeMapFactory
private IncrementalIdStrategy.RuntimeMapFactory getRuntimeMapFactory(java.lang.Class<?> clazz)
-
getMapFactory
protected MapSchema.MessageFactory getMapFactory(java.lang.Class<?> clazz)
Description copied from class:IdStrategyReturns theMapSchema.MessageFactory. The callers (internal field factories}) are responsible that the class provided implementsMap.- Specified by:
getMapFactoryin classIdStrategy
-
writeCollectionIdTo
protected void writeCollectionIdTo(Output output, int fieldNumber, java.lang.Class<?> clazz) throws java.io.IOException
- Specified by:
writeCollectionIdToin classIdStrategy- Throws:
java.io.IOException
-
transferCollectionId
protected void transferCollectionId(Input input, Output output, int fieldNumber) throws java.io.IOException
- Specified by:
transferCollectionIdin classIdStrategy- Throws:
java.io.IOException
-
resolveCollectionFrom
protected CollectionSchema.MessageFactory resolveCollectionFrom(Input input) throws java.io.IOException
- Specified by:
resolveCollectionFromin classIdStrategy- Throws:
java.io.IOException
-
writeMapIdTo
protected void writeMapIdTo(Output output, int fieldNumber, java.lang.Class<?> clazz) throws java.io.IOException
- Specified by:
writeMapIdToin classIdStrategy- Throws:
java.io.IOException
-
transferMapId
protected void transferMapId(Input input, Output output, int fieldNumber) throws java.io.IOException
- Specified by:
transferMapIdin classIdStrategy- Throws:
java.io.IOException
-
resolveMapFrom
protected MapSchema.MessageFactory resolveMapFrom(Input input) throws java.io.IOException
- Specified by:
resolveMapFromin classIdStrategy- Throws:
java.io.IOException
-
writeEnumIdTo
protected void writeEnumIdTo(Output output, int fieldNumber, java.lang.Class<?> clazz) throws java.io.IOException
- Specified by:
writeEnumIdToin classIdStrategy- Throws:
java.io.IOException
-
transferEnumId
protected void transferEnumId(Input input, Output output, int fieldNumber) throws java.io.IOException
- Specified by:
transferEnumIdin classIdStrategy- Throws:
java.io.IOException
-
resolveEnumFrom
protected EnumIO<?> resolveEnumFrom(Input input) throws java.io.IOException
- Specified by:
resolveEnumFromin classIdStrategy- Throws:
java.io.IOException
-
isDelegateRegistered
public boolean isDelegateRegistered(java.lang.Class<?> typeClass)
Description copied from class:IdStrategyReturns true if there is aDelegateexplicitly registered for thetypeClass.- Specified by:
isDelegateRegisteredin classIdStrategy
-
getDelegate
public <T> Delegate<T> getDelegate(java.lang.Class<? super T> typeClass)
Description copied from class:IdStrategyReturns thedelegate.- Specified by:
getDelegatein classIdStrategy
-
getDelegateWrapper
public <T> HasDelegate<T> getDelegateWrapper(java.lang.Class<? super T> typeClass)
Description copied from class:IdStrategyReturns thedelegate.- Specified by:
getDelegateWrapperin classIdStrategy
-
tryWriteDelegateIdTo
protected <T> HasDelegate<T> tryWriteDelegateIdTo(Output output, int fieldNumber, java.lang.Class<T> clazz) throws java.io.IOException
Description copied from class:IdStrategyIf this method returns null, the clazz was not registered as a delegate.- Specified by:
tryWriteDelegateIdToin classIdStrategy- Throws:
java.io.IOException
-
transferDelegateId
protected <T> HasDelegate<T> transferDelegateId(Input input, Output output, int fieldNumber) throws java.io.IOException
- Specified by:
transferDelegateIdin classIdStrategy- Throws:
java.io.IOException
-
resolveDelegateFrom
protected <T> HasDelegate<T> resolveDelegateFrom(Input input) throws java.io.IOException
- Specified by:
resolveDelegateFromin classIdStrategy- Throws:
java.io.IOException
-
tryWritePojoIdTo
protected <T> HasSchema<T> tryWritePojoIdTo(Output output, int fieldNumber, java.lang.Class<T> clazz, boolean registered) throws java.io.IOException
- Specified by:
tryWritePojoIdToin classIdStrategy- Throws:
java.io.IOException
-
writePojoIdTo
protected <T> HasSchema<T> writePojoIdTo(Output output, int fieldNumber, java.lang.Class<T> clazz) throws java.io.IOException
- Specified by:
writePojoIdToin classIdStrategy- Throws:
java.io.IOException
-
transferPojoId
protected <T> HasSchema<T> transferPojoId(Input input, Output output, int fieldNumber) throws java.io.IOException
- Specified by:
transferPojoIdin classIdStrategy- Throws:
java.io.IOException
-
resolvePojoFrom
protected <T> HasSchema<T> resolvePojoFrom(Input input, int fieldNumber) throws java.io.IOException
- Specified by:
resolvePojoFromin classIdStrategy- Throws:
java.io.IOException
-
writeMessageIdTo
protected <T> Schema<T> writeMessageIdTo(Output output, int fieldNumber, Message<T> message) throws java.io.IOException
- Specified by:
writeMessageIdToin classIdStrategy- Throws:
java.io.IOException
-
collectionClass
protected java.lang.Class<?> collectionClass(int id)
- Specified by:
collectionClassin classNumericIdStrategy
-
mapClass
protected java.lang.Class<?> mapClass(int id)
- Specified by:
mapClassin classNumericIdStrategy
-
enumClass
protected java.lang.Class<?> enumClass(int id)
- Specified by:
enumClassin classNumericIdStrategy
-
delegateClass
protected java.lang.Class<?> delegateClass(int id)
- Specified by:
delegateClassin classNumericIdStrategy
-
pojoClass
protected java.lang.Class<?> pojoClass(int id)
- Specified by:
pojoClassin classNumericIdStrategy
-
getRegisteredDelegate
protected NumericIdStrategy.RegisteredDelegate<?> getRegisteredDelegate(java.lang.Class<?> clazz)
- Specified by:
getRegisteredDelegatein classNumericIdStrategy
-
getEnumId
protected int getEnumId(java.lang.Class<?> clazz)
- Specified by:
getEnumIdin classNumericIdStrategy
-
getId
protected int getId(java.lang.Class<?> clazz)
- Specified by:
getIdin classNumericIdStrategy
-
-