Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/hibernate/bytecode/AbstractClassTransformerImpl.java


1   //$Id: $
2   package org.hibernate.bytecode;
3   
4   import java.security.ProtectionDomain;
5   import java.util.HashSet;
6   import java.util.Set;
7   
8   /**
9    * @author Emmanuel Bernard
10   */
11  public abstract class AbstractClassTransformerImpl implements ClassTransformer {
12  
13    final private Set entities;
14    final private String[] packages;
15  
16  
17    public AbstractClassTransformerImpl(String[] packages, String[] classes) {
18      this.packages = packages;
19      if (classes == null) {
20        this.entities = null;
21      }
22      else {
23        this.entities = new HashSet();
24        for ( int i = 0; i < classes.length; i++ ) {
25          entities.add( classes[i] );
26        }
27      }
28    }
29  
30    public byte[] transform(
31        ClassLoader loader,
32        String className,
33        Class classBeingRedefined,
34        ProtectionDomain protectionDomain,
35        byte[] classfileBuffer) {
36      boolean enhance = false;
37      String safeClassName = className.replace( '/', '.' );
38      if ( entities == null && packages == null ) {
39        enhance = true;
40      }
41      if ( ! enhance && entities != null && entities.contains( safeClassName ) ) {
42        enhance = true;
43      }
44      if ( ! enhance && packages != null ) {
45        for ( int i = 0; i < packages.length; i++ ) {
46          if ( safeClassName.startsWith( packages[i] ) ) {
47            enhance = true;
48            break;
49          }
50        }
51      }
52      if ( ! enhance ) return classfileBuffer;
53  
54      return doTransform( loader, className, classBeingRedefined, protectionDomain, classfileBuffer );
55    }
56  
57    protected abstract byte[] doTransform(
58        ClassLoader loader,
59        String className,
60        Class classBeingRedefined,
61        ProtectionDomain protectionDomain,
62        byte[] classfileBuffer);
63  }