Class 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 Detail

      • INSTALL_DESCRIPTOR

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

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

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

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

      • ApplyPatch

        public ApplyPatch()
        Default constructor.
    • Method Detail

      • 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