KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ixenon > free > uninstall > DefaultUninstaller


1 /* $Id$
2  *
3  * Copyright (c) 1999 Xenonsoft Limited. All Rights Reserved.
4  *
5  * This software is protected by copyright. You are hereby notified from
6  * now by reading this message. This software is also the confidential
7  * and proprietary information of Xenonsoft Limited. ("Confidential
8  * Information").
9  *
10  * This software is distributed under the Xenonsoft Public end user
11  * License ("XPeL"), where the machine-readable source code is provided
12  * under the "Open Source" model.
13  * For more information, please read the file "LICENSE-XPL.txt"
14  */

15
16 //
17
// DESCRIPTION
18
//
19
// Peter Pilgrim
20
// Tue Mar 16 23:10:47 GMT 1999
21
//
22
// RCS HEADER ``DefaultUninstaller.java''
23
//
24
// $Author$
25
// $Date$
26
// $Source$
27
// $Revision$ $State$ $Locker$
28
//
29

30 package ixenon.free.uninstall;
31
32 import java.util.*;
33 import java.io.*;
34 import ixenon.free.install.*;
35
36 /**
37  * Sun Jan 24 20:33:01 GMT 1999
38  * @author Peter Pilgrim
39  * @version $Id$
40  *
41  */

42 public class DefaultUninstaller
43 implements Uninstallable
44 {
45     protected String JavaDoc targetFile;
46     protected File binDir;
47     protected Vector fileList;
48     protected Vector dirList;
49
50     /**
51      * Constructs an DefaultUninstaller object
52      * This object class cannot also restore "preservation" files
53      *
54      * @param targetFile the target base file.
55      */

56     public DefaultUninstaller( File binDir, String JavaDoc targetFile )
57     {
58     String JavaDoc osname = System.getProperty("os.name");
59     
60     if ( osname.startsWith("Windows 95") ||
61          osname.startsWith("Windows 98") ||
62          osname.startsWith("Windows NT") ||
63          osname.startsWith("Windows 2000") ||
64          osname.startsWith("OS/2") ) {
65         targetFile = targetFile + ".bat";
66     }
67     
68     this.binDir = binDir;
69     this.targetFile = targetFile;
70     fileList = new Vector();
71     dirList = new Vector();
72     }
73
74     /** returns the target script filename */
75     public String JavaDoc getTargetFilename()
76     {
77     return targetFile;
78     }
79     
80     /** Add another file to list of files to be uninstall
81      * @param filename the filename to be uninstall
82      */

83     public void addFile( String JavaDoc filename )
84     {
85     fileList.addElement( new File(filename).getAbsolutePath() );
86     }
87
88     /** Add another file to list of files to be uninstall
89      * @param file the file to be uninstall
90      */

91     public void addFile( File file )
92     {
93     if (file.isDirectory() )
94         dirList.addElement( file.getAbsolutePath() );
95     else
96         fileList.addElement( file.getAbsolutePath() );
97     }
98
99     /** generates the uninstall script for the machine
100      * <B>FIXME: NEEDS MORE WORK!</B>
101      */

102     public void generateScript()
103     {
104     FreeInstallerApplication theApp =
105         FreeInstallerApplication.getInstance();
106
107     String JavaDoc osname = System.getProperty("os.name");
108     String JavaDoc fileSep = System.getProperty("file.separator");
109     String JavaDoc pathSep = System.getProperty("path.separator");
110
111     PrintWriter pwriter=null;
112     FileWriter fwriter=null;
113
114     theApp.printInfo( "Generating the uninstaller script:`"+targetFile+"'" );
115     
116     try {
117         fwriter = new FileWriter( targetFile );
118         pwriter = new PrintWriter( fwriter );
119         String JavaDoc remark;
120         
121         if ( osname.startsWith("Windows 95") ||
122          osname.startsWith("Windows 98") ||
123          osname.startsWith("Windows NT") ||
124          osname.startsWith("Windows 2000") ||
125          osname.startsWith("OS/2") ) {
126         remark="REM";
127         }
128         else {
129         remark="#";
130         pwriter.println("#!/bin/sh");
131         }
132         pwriter.println(remark+" Uninstaller batch for software package: "+
133                 theApp.getProductName()+" ("+theApp.getCompanyName()+")" );
134         pwriter.println(remark+" *WARNING* : This batch file will completely remove the software");
135         pwriter.println(remark+" PERMANENTLY. So make doubly sure that you rally want to do this.");
136
137         //
138
// First, make the uninstall script delete the regular files
139
//
140
pwriter.println();
141         pwriter.println(remark+" Files");
142         Enumeration etor = fileList.elements();
143         while ( etor.hasMoreElements() ) {
144         String JavaDoc filename = (String JavaDoc)etor.nextElement();
145         String JavaDoc preserveFilename = filename+InstallUtilities.PRESERVE_SUFFIX;
146         if ( osname.startsWith("Windows 95") ||
147              osname.startsWith("Windows 98") ||
148              osname.startsWith("Windows NT") ||
149              osname.startsWith("Windows 2000") ||
150              osname.startsWith("OS/2") ) {
151             pwriter.println( "ATTRIB -s -h -r \""+filename+"\"" );
152             pwriter.println( "DEL \""+filename+"\"" );
153             pwriter.println( "IF EXIST \""+preserveFilename+"\" "+
154                      "REN \""+preserveFilename+"\" \""+filename+"\" ");
155         }
156         else {
157             pwriter.println( "/bin/rm -f \""+filename+"\"" );
158             pwriter.println( "if [ -f \""+preserveFilename+"\" ]; then" );
159             pwriter.println( " /bin/mv -f \""+preserveFilename+"\" \""+filename+"\" ; fi" );
160         }
161         pwriter.flush();
162         }
163         
164         //
165
// Second, the uninstall script delete the directory files
166
//
167
pwriter.println();
168         // FIXME:
169
pwriter.println(remark+" COMMENTED THIS OUT BECAUSE IT IS TOO SIMPLE MINDED ");
170         pwriter.println(remark+" AND VERY DANGEROUS TO ALLOW!!! *PP*");
171         pwriter.println(remark+" Directories");
172         etor = dirList.elements();
173         while ( etor.hasMoreElements() ) {
174         String JavaDoc filename = (String JavaDoc)etor.nextElement();
175         if ( osname.startsWith("Windows 95") ||
176              osname.startsWith("Windows 98") ||
177              osname.startsWith("Windows NT") ||
178              osname.startsWith("Windows 2000") ||
179              osname.startsWith("OS/2") ) {
180             pwriter.println( remark+" ATTRIB -s -h -r \""+filename+"\"" );
181             pwriter.println( remark+" DELTREE /Y \""+filename+"\"" );
182         }
183         else {
184             pwriter.println( remark+" /bin/rm -r \""+filename+"\"" );
185         }
186         pwriter.flush();
187         }
188         pwriter.println(remark+" THE END");
189     }
190     catch (IOException ioe){
191         theApp.printError( "I/O: "+ioe.getMessage() );
192     }
193     finally {
194         if (fwriter != null) try { fwriter.close(); } catch (IOException e) { }
195         if (pwriter != null) pwriter.close();
196
197         // Make sure the uninstall batch script is executable
198
InstallUtilities.setFilePermissions(
199         targetFile, InstallConstants.INST_EXE_PERMS );
200
201         // Copy the uninstall batch script to the BINDIR and
202
// make sure that it is also executable
203
File bindir;
204         File destTargetFile =
205         InstallUtilities.createNormalizedFile( binDir, targetFile );
206
207         theApp.printInfo( "Generating the final uninstaller script:`"+
208                   destTargetFile.getPath()+"'" );
209         InstallUtilities.copyFile( new File(targetFile), destTargetFile );
210     
211         InstallUtilities.setFilePermissions(
212         destTargetFile, InstallConstants.INST_EXE_PERMS );
213     }
214     }
215     
216 }
217
218 // fini
219
Popular Tags