Class WebPluginInstaller.ApplyPatch

java.lang.Object
com.tangosol.util.Base
com.tangosol.coherence.servlet.WebPluginInstaller.ApplyPatch
All Implemented Interfaces:
com.tangosol.dev.assembler.Constants
Enclosing class:
WebPluginInstaller

public abstract static class WebPluginInstaller.ApplyPatch extends Base implements com.tangosol.dev.assembler.Constants
Abstract base class for all command line utilities that modify web container libraries to support extension.
  • Field Details

    • INSTALL_DESCRIPTOR

      public static final String INSTALL_DESCRIPTOR
      The name of the XML file that contains information about the plugin installation.
      See Also:
    • BLOCK_SIZE

      public static final int BLOCK_SIZE
      The size (in bytes) to perform buffered I/O on.
      See Also:
    • BLOCK_BUF

      public static final byte[] BLOCK_BUF
      The buffer to use for buffered I/O.
    • MANIFEST_NAME

      public static final String MANIFEST_NAME
      The JAR manifest file name.
      See Also:
    • m_fileLib

      protected File m_fileLib
      The target web container library file.
  • Constructor Details

    • ApplyPatch

      public ApplyPatch()
      Default constructor.
  • Method Details

    • init

      public abstract void init(File fileDir)
      Initialize the utility with the installation directory of the target web container.

      This method will be called immediately after construction but before the install() or uninstall() is called.

      If the given directory does not exist or is not an installation directory of a web container of the appropriate type, an exception must be thrown. Implementations of this method must call setLibrary(File) with the resolved target web container library before returning.

      Parameters:
      fileDir - the installation directory of the target web container
    • getContainerName

      public abstract String getContainerName()
      Return the name of the target web container for this utility.
      Returns:
      the target web container name
    • getLibraryName

      public abstract String getLibraryName()
      Return the name of the web container library modified by this utility.
      Returns:
      the target web container library
    • processEntry

      protected abstract void processEntry(com.tangosol.engarde.ApplicationEntry entry, com.tangosol.engarde.ApplicationReader reader, com.tangosol.engarde.ApplicationWriter writer) throws IOException
      Perform any necessary processing on the given class entry.
      Parameters:
      entry - the ApplicationEntry to process
      reader - the ApplicationReader used to read from a JAR file
      writer - the ApplicationWriter used to write to a JAR file
      Throws:
      IOException - on processing error
    • install

      public void install()
      Install extension classes.
    • uninstall

      public void uninstall()
      Uninstall extension classes.
    • convertClassToEntry

      protected String convertClassToEntry(String sClass)
      Convert the given Java class name to its corresponding Jar entry name.
      Parameters:
      sClass - the Java class name to convert
      Returns:
      the Jar entry name that corresponds to the given Java class name
    • convertEntryToClass

      protected String convertEntryToClass(String sEntry)
      Convert the given Jar entry name to its corresponding Java class name.
      Parameters:
      sEntry - the Jar entry name to convert
      Returns:
      the Java class name that corresponds to the given Jar entry name
    • readManifestAttribute

      protected String readManifestAttribute(File fileJar, String sName)
      Read and return the value of the main Manifest attribute with the given name from the Manifest file contained in the specified JAR file.
      Parameters:
      fileJar - the File object that represents the target JAR file
      sName - the name of the main Manifest attribute to read
      Returns:
      the value of the specified main Manifest attribute or null if the attribute does not exist or could not be read
    • readEntry

      protected byte[] readEntry(com.tangosol.engarde.ApplicationEntry entry, com.tangosol.engarde.ApplicationReader reader) throws IOException
      Read an entry and return its content.
      Parameters:
      entry - the ApplicationEntry to process
      reader - the ApplicationReader to read from a JAR file
      Returns:
      the entry contents, as a byte array
      Throws:
      IOException - on I/O error
    • writeEntry

      protected void writeEntry(com.tangosol.engarde.ApplicationEntry entry, com.tangosol.engarde.ApplicationWriter writer, byte[] ab) throws IOException
      Write the contents of an entry.
      Parameters:
      entry - the ApplicationEntry to process
      writer - the ApplicationWriter to write to a JAR file
      ab - the entry contents, as a byte array
      Throws:
      IOException - on I/O error
    • copyEntry

      protected void copyEntry(com.tangosol.engarde.ApplicationEntry entry, com.tangosol.engarde.ApplicationReader reader, com.tangosol.engarde.ApplicationWriter writer) throws IOException
      Copy an entry from one application archive to another.
      Parameters:
      entry - the ApplicationEntry to process
      reader - the ApplicationReader to read from a JAR file
      writer - the ApplicationWriter to write to a JAR file
      Throws:
      IOException - on I/O error
    • copyEntry

      protected void copyEntry(com.tangosol.engarde.ApplicationEntry entry, InputStream in, com.tangosol.engarde.ApplicationWriter writer) throws IOException
      Copy an entry from a stream to an application archive.
      Parameters:
      entry - the ApplicationEntry to process
      in - the stream containing the entry data
      writer - the ApplicationWriter to write to a JAR file
      Throws:
      IOException - on I/O error
    • extendEntry

      protected void extendEntry(com.tangosol.engarde.ApplicationEntry entry, com.tangosol.engarde.ApplicationReader reader, com.tangosol.engarde.ApplicationWriter writer) throws IOException
      Process the given class entry, making any non-private final methods non-final and if necessary, adding a default contructor.
      Parameters:
      entry - the ApplicationEntry to process
      reader - the ApplicationReader used to read from a JAR file
      writer - the ApplicationWriter used to write to a JAR file
      Throws:
      IOException - on processing error
    • createDelegateEntry

      protected void createDelegateEntry(com.tangosol.engarde.ApplicationEntry entry, com.tangosol.engarde.ApplicationReader reader, com.tangosol.engarde.ApplicationWriter writer) throws IOException
      Create a new delegate class entry that extends the given class entry and delegates all methods to a wrapped instance of the class entry.
      Parameters:
      entry - the ApplicationEntry for which a delegate is created
      reader - the ApplicationReader used to read from a JAR file
      writer - the ApplicationWriter used to write to a JAR file
      Throws:
      IOException - on processing error
    • createDelegateMethod

      protected void createDelegateMethod(com.tangosol.dev.assembler.ClassFile classfile, com.tangosol.dev.assembler.Method method, String sClass, com.tangosol.dev.assembler.Method methodGet)
      Creates a delegate method in the given ClassFile that delegates the given method to the object returned by the given accessor method.
      Parameters:
      classfile - the ClassFile to which to add the delegate method
      method - the method to delegate
      sClass - the name of the class in which the target method is declared
      methodGet - the accessor method that returns the target object
    • getLibrary

      public File getLibrary()
      Return the library to be patched by this utility.
      Returns:
      the library to be patched
    • setLibrary

      protected void setLibrary(File fileLib)
      Set the library to be patched by this utility.
      Parameters:
      fileLib - the library to be patched