com.izforge.izpack.installer
Class Unpacker

java.lang.Object
  extended byjava.lang.Thread
      extended bycom.izforge.izpack.installer.Unpacker
All Implemented Interfaces:
java.lang.Runnable

public class Unpacker
extends java.lang.Thread

Unpacker class.

Author:
Julien Ponge, Johannes Lehtinen

Field Summary
private  java.io.File absolute_installpath
          The absolute path of the installation.
static java.lang.String ALIVE
           
private static boolean discardInterrupt
          Do not perform a interrupt call.
private  AbstractUIProgressHandler handler
          The installer listener.
private  AutomatedInstallData idata
          The installdata.
private static java.util.HashMap instances
          The instances of the unpacker objects.
static java.lang.String INTERRUPT
           
private static boolean interruptDesired
          Interrupt flag if global interrupt is desired.
static java.lang.String INTERRUPTED
           
private static java.lang.String LANG_FILE_NAME
          The name of the XML file that specifies the panel langpack
private  LocaleDatabase langpack
          The packs locale database.
private  UninstallData udata
          The uninstallation data.
private  VariableSubstitutor vs
          The variables substitutor.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
Unpacker(AutomatedInstallData idata, AbstractUIProgressHandler handler)
          The constructor.
 
Method Summary
private  void addToInstances()
          Adds this to the map of all existent instances of Unpacker.
private  boolean fileMatchesOnePattern(java.lang.String filename, java.util.ArrayList patterns)
           
private  java.util.List[] getCustomActions()
          Returns the defined custom actions split into types including a constructed type for the file related installer listeners.
private  java.io.InputStream getPackAsStream(int n)
          Returns a stream to a pack, location depending on if it's web based.
static java.util.HashMap getRunningInstances()
          Returns a copy of the active unpacker instances.
private  void handleAdditionalUninstallData(UninstallData udata, java.util.List[] customData)
          Adds additional unistall data to the uninstall data object.
private  void informListeners(java.util.List[] customActions, int action, java.lang.Object firstParam, java.lang.Object secondParam, java.lang.Object thirdParam)
          Informs all listeners which would be informed at the given action type.
static boolean interruptAll(long waitTime)
          Initiate interrupt of all alive Unpacker and waits until all Unpacker are interrupted or the wait time has arrived.
static boolean isDiscardInterrupt()
          Returns whether an interrupt request should be discarded or not.
static boolean isInterruptDesired()
          Returns the interrupt desired state.
private static boolean isInterruptReady()
           
private  boolean mkDirsWithEnhancement(java.io.File dest, PackFile pf, java.util.List[] customActions)
          Creates the given directory recursive and calls the method "afterDir" of each listener with the current file object and the pack file object.
private  boolean performInterrupted()
          Sets the interrupt flag for this Unpacker to INTERRUPTED if the previos state was INTERRUPT or INTERRUPTED and returns whether interrupt was initiate or not.
private  void performUpdateChecks(java.util.ArrayList updatechecks)
           
private  java.util.List preparePatterns(java.util.ArrayList list, org.apache.regexp.RECompiler recompiler)
           
private  void putUninstaller()
          Puts the uninstaller.
private  void removeFromInstances()
          Removes this from the map of all existent instances of Unpacker.
 void run()
          The run method.
static void setDiscardInterrupt(boolean di)
          Sets the discard interrupt flag.
private static void setInterruptAll()
          Initiate interrupt of all alive Unpacker.
private static void setInterruptDesired(boolean interruptDesired)
           
private  boolean shouldInterrupt()
          Returns whether interrupt was initiate or not for this Unpacker.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

idata

private AutomatedInstallData idata
The installdata.


handler

private AbstractUIProgressHandler handler
The installer listener.


udata

private UninstallData udata
The uninstallation data.


vs

private VariableSubstitutor vs
The variables substitutor.


instances

private static java.util.HashMap instances
The instances of the unpacker objects.


absolute_installpath

private java.io.File absolute_installpath
The absolute path of the installation. (NOT the canonical!)


langpack

private LocaleDatabase langpack
The packs locale database.


interruptDesired

private static boolean interruptDesired
Interrupt flag if global interrupt is desired.


discardInterrupt

private static boolean discardInterrupt
Do not perform a interrupt call.


LANG_FILE_NAME

private static final java.lang.String LANG_FILE_NAME
The name of the XML file that specifies the panel langpack

See Also:
Constant Field Values

ALIVE

public static final java.lang.String ALIVE
See Also:
Constant Field Values

INTERRUPT

public static final java.lang.String INTERRUPT
See Also:
Constant Field Values

INTERRUPTED

public static final java.lang.String INTERRUPTED
See Also:
Constant Field Values
Constructor Detail

Unpacker

public Unpacker(AutomatedInstallData idata,
                AbstractUIProgressHandler handler)
The constructor.

Parameters:
idata - The installation data.
handler - The installation progress handler.
Method Detail

getRunningInstances

public static java.util.HashMap getRunningInstances()
Returns a copy of the active unpacker instances.

Returns:
a copy of active unpacker instances

addToInstances

private void addToInstances()
Adds this to the map of all existent instances of Unpacker.


removeFromInstances

private void removeFromInstances()
Removes this from the map of all existent instances of Unpacker.


setInterruptAll

private static void setInterruptAll()
Initiate interrupt of all alive Unpacker. This method does not interrupt the Unpacker objects else it sets only the interrupt flag for the Unpacker objects. The dispatching of interrupt will be performed by the Unpacker objects self.


interruptAll

public static boolean interruptAll(long waitTime)
Initiate interrupt of all alive Unpacker and waits until all Unpacker are interrupted or the wait time has arrived. If the doNotInterrupt flag in InstallerListener is set to true, the interrupt will be discarded.

Parameters:
waitTime - wait time in millisecounds
Returns:
true if the interrupt will be performed, false if the interrupt will be discarded

isInterruptReady

private static boolean isInterruptReady()

performInterrupted

private boolean performInterrupted()
Sets the interrupt flag for this Unpacker to INTERRUPTED if the previos state was INTERRUPT or INTERRUPTED and returns whether interrupt was initiate or not.

Returns:
whether interrupt was initiate or not

shouldInterrupt

private boolean shouldInterrupt()
Returns whether interrupt was initiate or not for this Unpacker.

Returns:
whether interrupt was initiate or not

run

public void run()
The run method.


performUpdateChecks

private void performUpdateChecks(java.util.ArrayList updatechecks)
Parameters:
updatechecks -

fileMatchesOnePattern

private boolean fileMatchesOnePattern(java.lang.String filename,
                                      java.util.ArrayList patterns)
Parameters:
filename -
patterns -
Returns:
true if the file matched one pattern, false if it did not

preparePatterns

private java.util.List preparePatterns(java.util.ArrayList list,
                                       org.apache.regexp.RECompiler recompiler)
Parameters:
list - A list of file name patterns (in ant fileset syntax)
recompiler - The regular expression compiler (used to speed up RE compiling).
Returns:
List of org.apache.regexp.RE

putUninstaller

private void putUninstaller()
                     throws java.lang.Exception
Puts the uninstaller.

Throws:
java.lang.Exception - Description of the Exception

getPackAsStream

private java.io.InputStream getPackAsStream(int n)
                                     throws java.lang.Exception
Returns a stream to a pack, location depending on if it's web based.

Parameters:
n - The pack number.
Returns:
The stream or null if it could not be found.
Throws:
java.lang.Exception - Description of the Exception

informListeners

private void informListeners(java.util.List[] customActions,
                             int action,
                             java.lang.Object firstParam,
                             java.lang.Object secondParam,
                             java.lang.Object thirdParam)
                      throws java.lang.Exception
Informs all listeners which would be informed at the given action type.

Parameters:
customActions - array of lists with the custom action objects
action - identifier for which callback should be called
firstParam - first parameter for the call
secondParam - second parameter for the call
thirdParam - third parameter for the call
Throws:
java.lang.Exception

getCustomActions

private java.util.List[] getCustomActions()
Returns the defined custom actions split into types including a constructed type for the file related installer listeners.

Returns:
array of lists of custom action data like listeners

handleAdditionalUninstallData

private void handleAdditionalUninstallData(UninstallData udata,
                                           java.util.List[] customData)
Adds additional unistall data to the uninstall data object.

Parameters:
udata - unistall data
customData - array of lists of custom action data like uninstaller listeners

mkDirsWithEnhancement

private boolean mkDirsWithEnhancement(java.io.File dest,
                                      PackFile pf,
                                      java.util.List[] customActions)
                               throws java.lang.Exception
Creates the given directory recursive and calls the method "afterDir" of each listener with the current file object and the pack file object. On error an exception is raised.

Parameters:
dest - the directory which should be created
pf - current pack file object
customActions - all defined custom actions
Returns:
false on error, true else
Throws:
java.lang.Exception

isDiscardInterrupt

public static boolean isDiscardInterrupt()
Returns whether an interrupt request should be discarded or not.

Returns:
Returns the discard interrupt flag

setDiscardInterrupt

public static void setDiscardInterrupt(boolean di)
Sets the discard interrupt flag.

Parameters:
di - the discard interrupt flag to set

isInterruptDesired

public static boolean isInterruptDesired()
Returns the interrupt desired state.

Returns:
the interrupt desired state

setInterruptDesired

private static void setInterruptDesired(boolean interruptDesired)
Parameters:
interruptDesired - The interrupt desired flag to set