org.apache.jdo.impl.enhancer
Class ClassFileEnhancerHelper

java.lang.Object
  extended byorg.apache.jdo.impl.enhancer.ClassFileEnhancerHelper

public class ClassFileEnhancerHelper
extends java.lang.Object

This is a helper-class to perform some useful operations outside a byte code enhancer and delegate the real work to the enhancer.


Constructor Summary
ClassFileEnhancerHelper()
           
 
Method Summary
private static void copyZipEntry(java.io.InputStream in, java.io.OutputStream out)
          Copies a zip entry from one stream to another.
static boolean enhanceClassFile(ClassFileEnhancer enhancer, java.io.InputStream in, java.io.OutputStream out)
          Enhances a classfile.
static boolean enhanceZipFile(ClassFileEnhancer enhancer, java.util.zip.ZipInputStream zip_in, java.util.zip.ZipOutputStream zip_out)
          Enhances a zip file.
private static boolean isClassFileEntry(java.util.zip.ZipEntry entry)
          Determines if a given entry represents a classfile.
private static void modifyZipEntry(java.util.zip.ZipEntry entry, byte[] bytes, java.util.zip.CRC32 crc32)
          Modifies the given zip entry so that it can be added to zip file.
private static java.io.InputStream openZipEntry(java.util.zip.ZipInputStream in)
          Opens the next zip entry of a zip input stream and copies it to a java.io.ByteArrayOutputStream.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClassFileEnhancerHelper

public ClassFileEnhancerHelper()
Method Detail

enhanceClassFile

public static boolean enhanceClassFile(ClassFileEnhancer enhancer,
                                       java.io.InputStream in,
                                       java.io.OutputStream out)
                                throws EnhancerUserException,
                                       EnhancerFatalError
Enhances a classfile.

Parameters:
enhancer - The enhancer to delegate the work to.
in - The input stream with the Java class.
out - The output stream to write the enhanced class to.
Returns:
Has the input stream been enhanced?
Throws:
EnhancerUserException - If something went wrong.
EnhancerFatalError - If something went wrong.
See Also:
ClassFileEnhancer.enhanceClassFile(java.io.InputStream, java.io.OutputStream)

enhanceZipFile

public static boolean enhanceZipFile(ClassFileEnhancer enhancer,
                                     java.util.zip.ZipInputStream zip_in,
                                     java.util.zip.ZipOutputStream zip_out)
                              throws EnhancerUserException,
                                     EnhancerFatalError
Enhances a zip file. The zip file is given as a uip input stream. It's entries are read and - if necessary - individually enhanced. The output stream has the same compress?on (if any) as the input stream.

Parameters:
enhancer - The enhancer.
zip_in - The zip input stream.
zip_out - The zip output stream.
Returns:
true if at least one entry of the zip file has been enhanced, false otherwise.
Throws:
EnhancerUserException - If something went wrong.
EnhancerFatalError - If something went wrong.
See Also:
ClassFileEnhancer.enhanceClassFile(java.io.InputStream, java.io.OutputStream)

copyZipEntry

private static void copyZipEntry(java.io.InputStream in,
                                 java.io.OutputStream out)
                          throws java.io.IOException
Copies a zip entry from one stream to another.

Parameters:
in - The inout stream.
out - The output stream.
Throws:
java.io.IOException - If the stream access failed.

openZipEntry

private static java.io.InputStream openZipEntry(java.util.zip.ZipInputStream in)
                                         throws java.io.IOException
Opens the next zip entry of a zip input stream and copies it to a java.io.ByteArrayOutputStream. It's byte array is made available via an java.io.ByteArrayInputStream which is returned.

Parameters:
in - The zip input stream.
Returns:
The newly created input stream with the next zip entry.
Throws:
java.io.IOException - If an I/O operation failed.

modifyZipEntry

private static void modifyZipEntry(java.util.zip.ZipEntry entry,
                                   byte[] bytes,
                                   java.util.zip.CRC32 crc32)
Modifies the given zip entry so that it can be added to zip file. The given zip entry represents an enhanced class, so the zip entry has to get the correct size and checksum (but only if the entry won't be compressed).

Parameters:
entry - The zip entry to modify.
bytes - The uncompressed byte representation of the classfile.
crc32 - The checksum evaluator.

isClassFileEntry

private static boolean isClassFileEntry(java.util.zip.ZipEntry entry)
Determines if a given entry represents a classfile.

Returns:
Does the given entry represent a classfile?