KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > celtixinstaller > Installer


1 package celtixinstaller;
2
3 import java.io.BufferedReader JavaDoc;
4 import java.io.BufferedWriter JavaDoc;
5 import java.io.File JavaDoc;
6 import java.io.FileInputStream JavaDoc;
7 import java.io.FileOutputStream JavaDoc;
8 import java.io.FileWriter JavaDoc;
9 import java.io.InputStreamReader JavaDoc;
10 import java.io.OutputStream JavaDoc;
11 import java.net.URL JavaDoc;
12 import java.util.ArrayList JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import java.util.List JavaDoc;
15 import java.util.Set JavaDoc;
16 import java.util.TreeSet JavaDoc;
17 import java.util.jar.JarEntry JavaDoc;
18 import java.util.jar.JarInputStream JavaDoc;
19
20 public final class Installer {
21     static final Set JavaDoc BINARY_EXTS = new TreeSet JavaDoc();
22     static {
23         BINARY_EXTS.add("jar");
24         BINARY_EXTS.add("zip");
25         BINARY_EXTS.add("gif");
26         BINARY_EXTS.add("jpg");
27         BINARY_EXTS.add("jpeg");
28         BINARY_EXTS.add("pdf");
29         BINARY_EXTS.add("png");
30         BINARY_EXTS.add("odt");
31         BINARY_EXTS.add("ott");
32         BINARY_EXTS.add("p12");
33         BINARY_EXTS.add("pem");
34         BINARY_EXTS.add("truststore");
35         BINARY_EXTS.add("keystore");
36         BINARY_EXTS.add("exe");
37         BINARY_EXTS.add("dll");
38     }
39     static boolean verbose;
40
41     private Installer() {
42         //never constructed
43
}
44
45     private static boolean isBinary(String JavaDoc s) {
46         if (s.indexOf("maven_repo") != -1) {
47             return true;
48         }
49         Iterator JavaDoc it = BINARY_EXTS.iterator();
50         while (it.hasNext()) {
51             String JavaDoc ext = (String JavaDoc)it.next();
52             if (s.endsWith(ext)) {
53                 return true;
54             }
55         }
56         return false;
57     }
58
59     public static void main(String JavaDoc args[]) throws Exception JavaDoc {
60         File JavaDoc outputDir = new File JavaDoc(".");
61         outputDir = outputDir.getCanonicalFile();
62
63         if (!System.getProperty("java.version").startsWith("1.5")) {
64             System.out.println("WARNING: Installing with Java " + System.getProperty("java.version") + ".");
65             System.out.println(" Celtix requires JDK 1.5 to run.");
66         }
67
68         if (args.length != 0 && "-verbose".equals(args[0])) {
69             verbose = true;
70             String JavaDoc tmp[] = new String JavaDoc[args.length - 1];
71             System.arraycopy(args, 1, tmp, 0, args.length - 1);
72             args = tmp;
73         }
74         if (args.length != 0) {
75             outputDir = new File JavaDoc(args[0]);
76         }
77
78         System.out.println("Unpacking celtix to " + outputDir.toString());
79
80
81         URL JavaDoc url = Installer.class.getResource("/celtixinstaller/Installer.class");
82         
83         if (url.toString().contains("%20")) {
84             String JavaDoc strReplace = url.toString().replace("%20", " ");
85             url = new URL JavaDoc(strReplace);
86         }
87         
88         String JavaDoc jarf = url.getFile();
89         jarf = jarf.substring(0, jarf.indexOf("!"));
90         url = new URL JavaDoc(jarf);
91
92         byte buffer[] = new byte[4096];
93         JarInputStream JavaDoc jin = new JarInputStream JavaDoc(new FileInputStream JavaDoc(url.getFile()));
94         List JavaDoc executes = new ArrayList JavaDoc();
95
96
97         for (JarEntry JavaDoc entry = jin.getNextJarEntry(); entry != null; entry = jin.getNextJarEntry()) {
98             if (entry.isDirectory()) {
99                 if (!entry.getName().startsWith("META-INF")
100                     && !entry.getName().startsWith("celtixinstaller")) {
101                     if (verbose) {
102                         System.out.println("Making directory: " + entry.getName());
103                     }
104                     File JavaDoc file = new File JavaDoc(outputDir, entry.getName());
105                     file.mkdirs();
106                     file.setLastModified(entry.getTime());
107                 }
108             } else if (!entry.getName().startsWith("META-INF")
109                        && !entry.getName().startsWith("celtixinstaller")) {
110
111                 boolean binary = isBinary(entry.getName().toLowerCase());
112                 if ((entry.getName().indexOf("/bin/") != -1
113                     || entry.getName().indexOf("\\bin\\") != -1)
114                     && !entry.getName().toLowerCase().endsWith(".bat")) {
115                     executes.add(entry.getName());
116                 }
117
118                 File JavaDoc outFile = new File JavaDoc(outputDir, entry.getName());
119                 if (binary) {
120                     if (verbose) {
121                         System.out.println("Installing Binary: " + entry.getName());
122                     }
123                     
124                     OutputStream JavaDoc out = new FileOutputStream JavaDoc(outFile);
125                     for (int len = jin.read(buffer); len != -1; len = jin.read(buffer)) {
126                         out.write(buffer, 0, len);
127                     }
128                     out.close();
129                 } else {
130                     if (verbose) {
131                         System.out.println("Installing Text: " + entry.getName());
132                     }
133
134                     BufferedWriter JavaDoc writer = new BufferedWriter JavaDoc(new FileWriter JavaDoc(outFile));
135                     BufferedReader JavaDoc reader = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(jin));
136                     for (String JavaDoc s = reader.readLine(); s != null; s = reader.readLine()) {
137                         writer.write(s);
138                         writer.newLine();
139                     }
140                     writer.close();
141                 }
142                 outFile.setLastModified(entry.getTime());
143             }
144             
145         }
146         setExecutable(executes);
147     }
148
149     
150     static void setExecutable(List JavaDoc executes) throws Exception JavaDoc {
151         if (System.getProperty("os.name").indexOf("Windows") == -1
152             && !executes.isEmpty()) {
153             if (verbose) {
154                 Iterator JavaDoc it = executes.iterator();
155                 while (it.hasNext()) {
156                     System.out.println("Setting executable: " + it.next());
157                 }
158             }
159             
160             
161             //add executable bit
162
executes.add(0, "chmod");
163             executes.add(1, "+x");
164
165             Runtime.getRuntime().exec((String JavaDoc[])executes.toArray(new String JavaDoc[executes.size()]));
166         }
167     }
168 }
169
Popular Tags