1 package celtixinstaller; 2 3 import java.io.BufferedReader ; 4 import java.io.BufferedWriter ; 5 import java.io.File ; 6 import java.io.FileInputStream ; 7 import java.io.FileOutputStream ; 8 import java.io.FileWriter ; 9 import java.io.InputStreamReader ; 10 import java.io.OutputStream ; 11 import java.net.URL ; 12 import java.util.ArrayList ; 13 import java.util.Iterator ; 14 import java.util.List ; 15 import java.util.Set ; 16 import java.util.TreeSet ; 17 import java.util.jar.JarEntry ; 18 import java.util.jar.JarInputStream ; 19 20 public final class Installer { 21 static final Set BINARY_EXTS = new TreeSet (); 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 } 44 45 private static boolean isBinary(String s) { 46 if (s.indexOf("maven_repo") != -1) { 47 return true; 48 } 49 Iterator it = BINARY_EXTS.iterator(); 50 while (it.hasNext()) { 51 String ext = (String )it.next(); 52 if (s.endsWith(ext)) { 53 return true; 54 } 55 } 56 return false; 57 } 58 59 public static void main(String args[]) throws Exception { 60 File outputDir = new File ("."); 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 tmp[] = new String [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 (args[0]); 76 } 77 78 System.out.println("Unpacking celtix to " + outputDir.toString()); 79 80 81 URL url = Installer.class.getResource("/celtixinstaller/Installer.class"); 82 83 if (url.toString().contains("%20")) { 84 String strReplace = url.toString().replace("%20", " "); 85 url = new URL (strReplace); 86 } 87 88 String jarf = url.getFile(); 89 jarf = jarf.substring(0, jarf.indexOf("!")); 90 url = new URL (jarf); 91 92 byte buffer[] = new byte[4096]; 93 JarInputStream jin = new JarInputStream (new FileInputStream (url.getFile())); 94 List executes = new ArrayList (); 95 96 97 for (JarEntry 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 file = new File (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 outFile = new File (outputDir, entry.getName()); 119 if (binary) { 120 if (verbose) { 121 System.out.println("Installing Binary: " + entry.getName()); 122 } 123 124 OutputStream out = new FileOutputStream (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 writer = new BufferedWriter (new FileWriter (outFile)); 135 BufferedReader reader = new BufferedReader (new InputStreamReader (jin)); 136 for (String 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 executes) throws Exception { 151 if (System.getProperty("os.name").indexOf("Windows") == -1 152 && !executes.isEmpty()) { 153 if (verbose) { 154 Iterator it = executes.iterator(); 155 while (it.hasNext()) { 156 System.out.println("Setting executable: " + it.next()); 157 } 158 } 159 160 161 executes.add(0, "chmod"); 163 executes.add(1, "+x"); 164 165 Runtime.getRuntime().exec((String [])executes.toArray(new String [executes.size()])); 166 } 167 } 168 } 169 | Popular Tags |