org.drools.camel.component
Class FastCloner

java.lang.Object
  extended by org.drools.camel.component.FastCloner

public class FastCloner
extends Object

Cloner: deep clone objects. This class is thread safe. One instance can be used by multiple threads on the same time. 18 Sep 2008


Nested Class Summary
static class FastCloner.FastClonerArrayList
           
static class FastCloner.FastClonerCalendar
           
static class FastCloner.FastClonerCustomCollection<T extends Collection>
           
static class FastCloner.FastClonerHashMap
           
static class FastCloner.FastClonerHashSet
           
static class FastCloner.FastClonerLinkedList
           
static class FastCloner.FastClonerTreeMap
           
static interface FastCloner.IFastCloner
           
 
Constructor Summary
FastCloner()
           
 
Method Summary
protected
<T> T
cloneInternal(T o, Map<Object,Object> clones)
          PLEASE DONT CALL THIS METHOD The only reason for been public is because IFastCloner must invoke it
<T,E extends T>
void
copyPropertiesOfInheritedClass(T src, E dest)
          copies all properties from src to dest.
<T> T
deepClone(T o)
          deep clones "o".
 void dontClone(Class<?>... c)
          instances of classes that shouldn't be cloned can be registered using this method.
protected  Object fastClone(Object o, Map<Object,Object> clones)
           
<T> T
fastCloneOrNewInstance(Class<T> c)
           
 boolean isCloningEnabled()
           
 boolean isDumpClonedClasses()
           
 boolean isNullTransient()
           
 void nullInsteadOfClone(Class<?>... c)
          instead of cloning these classes will set the field to null
 void registerConstant(Class<?> c, String privateFieldName)
           
 void registerConstant(Object o)
           
 void registerFastCloner(Class<?> c, FastCloner.IFastCloner fastCloner)
           
protected  void registerFastCloners()
          registers a std set of fast cloners.
 void registerImmutable(Class<?>... c)
          registers an immutable class.
protected  void registerKnownConstants()
           
protected  void registerKnownJdkImmutableClasses()
          registers some known JDK immutable classes.
 void registerStaticFields(Class<?>... classes)
          registers all static fields of these classes.
 void setCloningEnabled(boolean cloningEnabled)
           
 void setDumpClonedClasses(boolean dumpClonedClasses)
          will println() all cloned classes.
 void setExtraImmutables(Set<Class<?>> set)
          spring framework friendly version of registerImmutable
 void setExtraNullInsteadOfClone(Set<Class<?>> set)
          spring framework friendly version of nullInsteadOfClone
 void setExtraStaticFields(Set<Class<?>> set)
          spring framework friendly version of registerStaticFields
 void setNullTransient(boolean nullTransient)
          this makes the cloner to set a transient field to null upon cloning.
<T> T
shallowClone(T o)
          shallow clones "o".
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FastCloner

public FastCloner()
Method Detail

isNullTransient

public boolean isNullTransient()

setNullTransient

public void setNullTransient(boolean nullTransient)
this makes the cloner to set a transient field to null upon cloning. NOTE: primitive types can't be nulled. Their value will be set to default, i.e. 0 for int

Parameters:
nullTransient - true for transient fields to be nulled

registerFastCloners

protected void registerFastCloners()
registers a std set of fast cloners.


fastClone

protected Object fastClone(Object o,
                           Map<Object,Object> clones)
                    throws IllegalAccessException
Throws:
IllegalAccessException

registerConstant

public void registerConstant(Object o)

registerConstant

public void registerConstant(Class<?> c,
                             String privateFieldName)

registerKnownJdkImmutableClasses

protected void registerKnownJdkImmutableClasses()
registers some known JDK immutable classes. Override this to register your own list of jdk's immutable classes


registerKnownConstants

protected void registerKnownConstants()

registerStaticFields

public void registerStaticFields(Class<?>... classes)
registers all static fields of these classes. Those static fields won't be cloned when an instance of the class is cloned. This is useful i.e. when a static field object is added into maps or sets. At that point, there is no way for the cloner to know that it was static except if it is registered.

Parameters:
classes - array of classes

setExtraStaticFields

public void setExtraStaticFields(Set<Class<?>> set)
spring framework friendly version of registerStaticFields

Parameters:
set - a set of classes which will be scanned for static fields

dontClone

public void dontClone(Class<?>... c)
instances of classes that shouldn't be cloned can be registered using this method.

Parameters:
c - The class that shouldn't be cloned. That is, whenever a deep clone for an object is created and c is encountered, the object instance of c will be added to the clone.

nullInsteadOfClone

public void nullInsteadOfClone(Class<?>... c)
instead of cloning these classes will set the field to null

Parameters:
c - the classes to nullify during cloning

setExtraNullInsteadOfClone

public void setExtraNullInsteadOfClone(Set<Class<?>> set)
spring framework friendly version of nullInsteadOfClone


registerImmutable

public void registerImmutable(Class<?>... c)
registers an immutable class. Immutable classes are not cloned.

Parameters:
c - the immutable class

setExtraImmutables

public void setExtraImmutables(Set<Class<?>> set)
spring framework friendly version of registerImmutable


registerFastCloner

public void registerFastCloner(Class<?> c,
                               FastCloner.IFastCloner fastCloner)

fastCloneOrNewInstance

public <T> T fastCloneOrNewInstance(Class<T> c)

deepClone

public <T> T deepClone(T o)
deep clones "o".

Type Parameters:
T - the type of "o"
Parameters:
o - the object to be deep-cloned
Returns:
a deep-clone of "o".

shallowClone

public <T> T shallowClone(T o)
shallow clones "o". This means that if c=shallowClone(o) then c!=o. Any change to c won't affect o.

Type Parameters:
T - the type of o
Parameters:
o - the object to be shallow-cloned
Returns:
a shallow clone of "o"

cloneInternal

protected <T> T cloneInternal(T o,
                              Map<Object,Object> clones)
                   throws IllegalAccessException
PLEASE DONT CALL THIS METHOD The only reason for been public is because IFastCloner must invoke it

Throws:
IllegalAccessException

copyPropertiesOfInheritedClass

public <T,E extends T> void copyPropertiesOfInheritedClass(T src,
                                                           E dest)
copies all properties from src to dest. Src and dest can be of different class, provided they contain same field names

Parameters:
src - the source object
dest - the destination object which must contain as minimul all the fields of src

isDumpClonedClasses

public boolean isDumpClonedClasses()

setDumpClonedClasses

public void setDumpClonedClasses(boolean dumpClonedClasses)
will println() all cloned classes. Useful for debugging only.

Parameters:
dumpClonedClasses - true to enable printing all cloned classes

isCloningEnabled

public boolean isCloningEnabled()

setCloningEnabled

public void setCloningEnabled(boolean cloningEnabled)


Copyright © 2001-2012 JBoss by Red Hat. All Rights Reserved.