org.broadleafcommerce.common.extensibility.jpa.copy
Class DirectCopyClassTransformer

java.lang.Object
  extended by org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyClassTransformer
All Implemented Interfaces:
javax.persistence.spi.ClassTransformer, BroadleafClassTransformer

public class DirectCopyClassTransformer
extends Object
implements BroadleafClassTransformer

This class transformer will copy fields, methods, and interface definitions from a source class to a target class, based on the xformTemplates map. It will fail if it encounters any duplicate definitions.

Author:
Andre Azzolini (apazzolini), Jeff Fischer

Field Summary
protected static List<String> annotationTransformedClasses
           
protected  List<String> ignorePatterns
           
protected  SupportLogger logger
           
protected  String moduleName
           
protected  Boolean renameMethodOverlaps
           
protected  String renameMethodPrefix
           
protected  Boolean skipOverlaps
           
protected  Map<String,String> templateTokens
           
protected static List<String> transformedMethods
           
protected  Map<String,String> xformTemplates
           
 
Constructor Summary
DirectCopyClassTransformer(String moduleName)
           
 
Method Summary
protected  void buildClassLevelAnnotations(javassist.bytecode.ClassFile classFile, javassist.bytecode.ClassFile templateClassFile, javassist.bytecode.ConstPool constantPool)
           
 void compileJPAProperties(Properties props, Object key)
           
protected  javassist.bytecode.annotation.Annotation getEntityListeners(javassist.bytecode.ConstPool constantPool, javassist.bytecode.annotation.Annotation existingEntityListeners, javassist.bytecode.annotation.Annotation templateEntityListeners)
           
 List<String> getIgnorePatterns()
           
protected  String getImplementationType(String className)
          This method will do its best to return an implementation type for a given classname.
 Boolean getRenameMethodOverlaps()
           
 String getRenameMethodPrefix()
           
 Boolean getSkipOverlaps()
           
 Map<String,String> getTemplateTokens()
           
 Map<String,String> getXformTemplates()
           
protected  String methodDescription(javassist.CtMethod method)
           
 void setIgnorePatterns(List<String> ignorePatterns)
           
 void setRenameMethodOverlaps(Boolean renameMethodOverlaps)
           
 void setRenameMethodPrefix(String renameMethodPrefix)
           
 void setSkipOverlaps(Boolean skipOverlaps)
           
 void setTemplateTokens(Map<String,String> templateTokens)
           
 void setXformTemplates(Map<String,String> xformTemplates)
           
 byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

transformedMethods

protected static List<String> transformedMethods

annotationTransformedClasses

protected static List<String> annotationTransformedClasses

logger

protected SupportLogger logger

moduleName

protected String moduleName

xformTemplates

protected Map<String,String> xformTemplates

renameMethodOverlaps

protected Boolean renameMethodOverlaps

renameMethodPrefix

protected String renameMethodPrefix

skipOverlaps

protected Boolean skipOverlaps

templateTokens

protected Map<String,String> templateTokens

ignorePatterns

protected List<String> ignorePatterns
Constructor Detail

DirectCopyClassTransformer

public DirectCopyClassTransformer(String moduleName)
Method Detail

compileJPAProperties

public void compileJPAProperties(Properties props,
                                 Object key)
                          throws Exception
Specified by:
compileJPAProperties in interface BroadleafClassTransformer
Throws:
Exception

transform

public byte[] transform(ClassLoader loader,
                        String className,
                        Class<?> classBeingRedefined,
                        ProtectionDomain protectionDomain,
                        byte[] classfileBuffer)
                 throws IllegalClassFormatException
Specified by:
transform in interface javax.persistence.spi.ClassTransformer
Throws:
IllegalClassFormatException

buildClassLevelAnnotations

protected void buildClassLevelAnnotations(javassist.bytecode.ClassFile classFile,
                                          javassist.bytecode.ClassFile templateClassFile,
                                          javassist.bytecode.ConstPool constantPool)
                                   throws javassist.NotFoundException
Throws:
javassist.NotFoundException

getEntityListeners

protected javassist.bytecode.annotation.Annotation getEntityListeners(javassist.bytecode.ConstPool constantPool,
                                                                      javassist.bytecode.annotation.Annotation existingEntityListeners,
                                                                      javassist.bytecode.annotation.Annotation templateEntityListeners)

getImplementationType

protected String getImplementationType(String className)
This method will do its best to return an implementation type for a given classname. This will allow weaving template classes to have initialized values. We provide default implementations for List, Map, and Set, and will attempt to utilize a default constructor for other classes. If the className contains an '[', we will return null.


methodDescription

protected String methodDescription(javassist.CtMethod method)

getXformTemplates

public Map<String,String> getXformTemplates()

setXformTemplates

public void setXformTemplates(Map<String,String> xformTemplates)

getRenameMethodOverlaps

public Boolean getRenameMethodOverlaps()

setRenameMethodOverlaps

public void setRenameMethodOverlaps(Boolean renameMethodOverlaps)

getRenameMethodPrefix

public String getRenameMethodPrefix()

setRenameMethodPrefix

public void setRenameMethodPrefix(String renameMethodPrefix)

getSkipOverlaps

public Boolean getSkipOverlaps()

setSkipOverlaps

public void setSkipOverlaps(Boolean skipOverlaps)

getTemplateTokens

public Map<String,String> getTemplateTokens()

setTemplateTokens

public void setTemplateTokens(Map<String,String> templateTokens)

getIgnorePatterns

public List<String> getIgnorePatterns()

setIgnorePatterns

public void setIgnorePatterns(List<String> ignorePatterns)


Copyright © 2013. All Rights Reserved.