001: package com.memoire.vainstall;
002:
003: import java.io.File;
004: import java.io.IOException;
005: import java.io.PrintWriter;
006:
007: /**
008: * To provide custom pre-install and post-install steps,
009: * create a subclass of this one and pass the name of the subclass
010: * to the package builder by as the value of the key
011: * "vainstall.install.customprepost.className" in the config file for
012: * your project.
013: * <p>
014: * If you are overriding this class, note that the class VAGlobals
015: * has many useful static fields and methods that provide things
016: * such as the application name, version, destination directory,
017: * and language in use for localization.
018: */
019:
020: public class AbstractCustomPrePost {
021:
022: /** Method called just before intallation begins.
023: * @param write PrintWriter a writer to which you can write the names
024: * of files that you create and want to add to the list of
025: * package files so that they will be deleted when
026: * your package is uninstalled. File names are fully qualified.
027: * See a copy of uninstall.vai
028: * in the .vainstall directory of an installed package for
029: * detail.
030: * @param step VAInstallStep interface containing methods that
031: * provide access to the GUI.
032: * @exception java.lang.Exception could be anything. You are likely
033: * to throw exceptions if you do anything interesting.
034: */
035:
036: public static boolean preInstall(PrintWriter filelog,
037: VAInstallStep step) throws Exception {
038: step.details(":-)");
039: VAGlobals.printDebug("AbstractCustomPrePost.preInstall");
040: return true;
041: }
042:
043: /** Method called just after intallation ends.
044: * @param write PrintWriter a writer to which you can write the names
045: * of files that you create and want to add to the list of
046: * package files so that they will be deleted when
047: * your package is uninstalled. File names are fully qualified.
048: * See a copy of uninstall.vai
049: * in the .vainstall directory of an installed package for
050: * detail.
051: * @param step VAInstallStep interface containing methods that
052: * provide access to the GUI.
053: * @exception java.lang.Exception could be anything. You are likely
054: * to throw exceptions if you do anything interesting.
055: */
056:
057: public static boolean postInstall(PrintWriter filelog,
058: VAInstallStep step) throws Exception {
059: step.details(";-)");
060: VAGlobals.printDebug("AbstractCustomPrePost.postInstall");
061: return true;
062: }
063:
064: /** Method called just before upgrade begins.
065: * @param oldversion String containing existing version.
066: * @param write PrintWriter a writer to which you can write the names
067: * of files that you create and want to add to the list of
068: * package files so that they will be deleted when
069: * your package is uninstalled. File names are fully qualified.
070: * See a copy of uninstall.vai
071: * in the .vainstall directory of an installed package for
072: * detail.
073: * @param step VAInstallStep interface containing methods that
074: * provide access to the GUI.
075: * @exception java.lang.Exception could be anything. You are likely
076: * to throw exceptions if you do anything interesting.
077: */
078:
079: public static boolean preUpgrade(String oldversion,
080: PrintWriter filelog, VAInstallStep step) throws Exception {
081: step.details(":-)");
082: VAGlobals.printDebug("AbstractCustomPrePost.preUpgrade");
083: return true;
084: }
085:
086: public static boolean postUpgrade(String oldversion,
087: PrintWriter filelog, VAInstallStep step) throws Exception {
088: step.details(";-)");
089: VAGlobals.printDebug("AbstractCustomPrePost.postUpgrade");
090: return true;
091: }
092:
093: /** Method called just before uninstall begins.
094: * @param step VAInstallStep interface containing methods that
095: * provide access to the GUI.
096: * @exception java.lang.Exception could be anything. You are likely
097: * to throw exceptions if you do anything interesting.
098: */
099:
100: public static boolean preUninstall(VAInstallStep step)
101: throws Exception {
102: step.details(":-)");
103: VAGlobals.printDebug("AbstractCustomPrePost.preUninstall");
104: return true;
105: }
106:
107: /** Method called just after uninstall ends.
108: * @param step VAInstallStep interface containing methods that
109: * provide access to the GUI.
110: * @exception java.lang.Exception Could be anything. You are likely
111: * to throw exceptions if you do anything interesting.
112: */
113:
114: public static boolean postUninstall(VAInstallStep step)
115: throws Exception {
116: step.details(";-)");
117: VAGlobals.printDebug("AbstractCustomPrePost.postUninstall");
118: return true;
119: }
120:
121: /////////////// protected below /////////////////////////////////////
122:
123: /**
124: * Use Runtime.exec to run the given command in the given working
125: * directory. Standard output of the command is captured
126: * and fed to the the details method of the VAInstallStep object
127: * provided as well as to VAGlobals.printDebug.
128: * @param workdir File directory that will be the working directory of
129: * the command run.
130: * @param args String[] the command to be run. Each argument is one
131: * member of the array.
132: * @param step VAInstallStep the interface to the GUI through which
133: * output from the command will be fed.
134: * @exception java.io.IOException should only occur with problems
135: * running the command and reading the standard out as
136: * input.
137: * @exception java.lang.InterruptedException may occur while
138: * waiting for the command to finish running.
139: */
140: // WORK HERE -
141: // Need to use Java 1.3 exec(File directory)
142: protected static final int runCommand(File workdir, String[] args,
143: VAInstallStep step) throws IOException,
144: InterruptedException {
145: VAGlobals.printDebug("AbastractCustomPrePost.runCommand");
146: VAGlobals.printDebug("\tworking dir = "
147: + workdir.getAbsolutePath());
148: for (int idx = 0; idx < args.length; idx++) {
149: VAGlobals.printDebug("\targ " + idx + " = " + args[idx]);
150: }
151: Process proc = Runtime.getRuntime().exec(args, null, workdir);
152: InputStreamToDetails relay = new InputStreamToDetails(proc
153: .getInputStream(), step);
154: relay.start();
155: proc.waitFor();
156: int rc = proc.exitValue();
157: VAGlobals.printDebug("AbstractCustomPrepost.runCommand cmd"
158: + " returned " + rc);
159: return rc;
160: }
161:
162: }
|