Package celtixinstaller

Source Code of celtixinstaller.Installer

package celtixinstaller;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;

public final class Installer {
    static final Set BINARY_EXTS = new TreeSet();
    static {
        BINARY_EXTS.add("jar");
        BINARY_EXTS.add("zip");
        BINARY_EXTS.add("gif");
        BINARY_EXTS.add("jpg");
        BINARY_EXTS.add("jpeg");
        BINARY_EXTS.add("pdf");
        BINARY_EXTS.add("png");
        BINARY_EXTS.add("odt");
        BINARY_EXTS.add("ott");
        BINARY_EXTS.add("p12");
        BINARY_EXTS.add("pem");
        BINARY_EXTS.add("truststore");
        BINARY_EXTS.add("keystore");
        BINARY_EXTS.add("exe");
        BINARY_EXTS.add("dll");
    }
    static boolean verbose;

    private Installer() {
        //never constructed
    }

    private static boolean isBinary(String s) {
        if (s.indexOf("maven_repo") != -1) {
            return true;
        }
        Iterator it = BINARY_EXTS.iterator();
        while (it.hasNext()) {
            String ext = (String)it.next();
            if (s.endsWith(ext)) {
                return true;
            }
        }
        return false;
    }

    public static void main(String args[]) throws Exception {
        File outputDir = new File(".");
        outputDir = outputDir.getCanonicalFile();

        if (!System.getProperty("java.version").startsWith("1.5")) {
            System.out.println("WARNING: Installing with Java " + System.getProperty("java.version") + ".");
            System.out.println("         Celtix requires JDK 1.5 to run.");
        }

        if (args.length != 0 && "-verbose".equals(args[0])) {
            verbose = true;
            String tmp[] = new String[args.length - 1];
            System.arraycopy(args, 1, tmp, 0, args.length - 1);
            args = tmp;
        }
        if (args.length != 0) {
            outputDir = new File(args[0]);
        }

        System.out.println("Unpacking celtix to " + outputDir.toString());


        URL url = Installer.class.getResource("/celtixinstaller/Installer.class");
       
        if (url.toString().contains("%20")) {
            String strReplace = url.toString().replace("%20", " ");
            url = new URL(strReplace);
        }
       
        String jarf = url.getFile();
        jarf = jarf.substring(0, jarf.indexOf("!"));
        url = new URL(jarf);

        byte buffer[] = new byte[4096];
        JarInputStream jin = new JarInputStream(new FileInputStream(url.getFile()));
        List executes = new ArrayList();


        for (JarEntry entry = jin.getNextJarEntry(); entry != null; entry = jin.getNextJarEntry()) {
            if (entry.isDirectory()) {
                if (!entry.getName().startsWith("META-INF")
                    && !entry.getName().startsWith("celtixinstaller")) {
                    if (verbose) {
                        System.out.println("Making directory: " + entry.getName());
                    }
                    File file = new File(outputDir, entry.getName());
                    file.mkdirs();
                    file.setLastModified(entry.getTime());
                }
            } else if (!entry.getName().startsWith("META-INF")
                       && !entry.getName().startsWith("celtixinstaller")) {

                boolean binary = isBinary(entry.getName().toLowerCase());
                if ((entry.getName().indexOf("/bin/") != -1
                    || entry.getName().indexOf("\\bin\\") != -1)
                    && !entry.getName().toLowerCase().endsWith(".bat")) {
                    executes.add(entry.getName());
                }

                File outFile = new File(outputDir, entry.getName());
                if (binary) {
                    if (verbose) {
                        System.out.println("Installing Binary: " + entry.getName());
                    }
                   
                    OutputStream out = new FileOutputStream(outFile);
                    for (int len = jin.read(buffer); len != -1; len = jin.read(buffer)) {
                        out.write(buffer, 0, len);
                    }
                    out.close();
                } else {
                    if (verbose) {
                        System.out.println("Installing Text: " + entry.getName());
                    }

                    BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));
                    BufferedReader reader = new BufferedReader(new InputStreamReader(jin));
                    for (String s = reader.readLine(); s != null; s = reader.readLine()) {
                        writer.write(s);
                        writer.newLine();
                    }
                    writer.close();
                }
                outFile.setLastModified(entry.getTime());
            }
           
        }
        setExecutable(executes);
    }

   
    static void setExecutable(List executes) throws Exception {
        if (System.getProperty("os.name").indexOf("Windows") == -1
            && !executes.isEmpty()) {
            if (verbose) {
                Iterator it = executes.iterator();
                while (it.hasNext()) {
                    System.out.println("Setting executable: " + it.next());
                }
            }
           
           
            //add executable bit
            executes.add(0, "chmod");
            executes.add(1, "+x");

            Runtime.getRuntime().exec((String[])executes.toArray(new String[executes.size()]));
        }       
    }
}
TOP

Related Classes of celtixinstaller.Installer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.