James Moger
2013-03-27 f6b200be4c8b90c26886c6cdd5809abac8c4ac15
src/main/java/com/gitblit/authority/Launcher.java
copy from src/com/gitblit/Launcher.java copy to src/main/java/com/gitblit/authority/Launcher.java
File was copied from src/com/gitblit/Launcher.java
@@ -1,5 +1,5 @@
/*
 * Copyright 2011 gitblit.com.
 * Copyright 2012 gitblit.com.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -13,30 +13,30 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.gitblit;
package com.gitblit.authority;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.SplashScreen;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.ProtectionDomain;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.gitblit.build.Build;
import com.gitblit.Constants;
import com.gitblit.client.Translation;
/**
 * Launch helper class that adds all jars found in the local "lib" & "ext"
 * folders and then calls the application main. Using this technique we do not
 * have to specify a classpath and we can dynamically add jars to the
 * distribution.
 *
 * This class also downloads all runtime dependencies, if they are not found.
 * Downloads dependencies and launches Gitblit Authority.
 * 
 * @author James Moger
 * 
@@ -50,57 +50,67 @@
    */
   private static final Class<?>[] PARAMETERS = new Class[] { URL.class };
   public static void main(String[] args) {
      if (DEBUG) {
         System.out.println("jcp=" + System.getProperty("java.class.path"));
         ProtectionDomain protectionDomain = Launcher.class.getProtectionDomain();
         System.out.println("launcher="
               + protectionDomain.getCodeSource().getLocation().toExternalForm());
      }
      final SplashScreen splash = SplashScreen.getSplashScreen();
      // download all runtime dependencies
      Build.runtime();
      File libFolder = new File("ext");
      List<File> jars = findJars(libFolder.getAbsoluteFile());
      // Load the JARs in the lib and ext folder
      String[] folders = new String[] { "lib", "ext" };
      List<File> jars = new ArrayList<File>();
      for (String folder : folders) {
         if (folder == null) {
            continue;
         }
         File libFolder = new File(folder);
         if (!libFolder.exists()) {
            continue;
         }
         List<File> found = findJars(libFolder.getAbsoluteFile());
         jars.addAll(found);
      }
      // sort the jars by name and then reverse the order so the newer version
      // of the library gets loaded in the event that this is an upgrade
      Collections.sort(jars);
      Collections.reverse(jars);
      if (jars.size() == 0) {
         for (String folder : folders) {
            File libFolder = new File(folder);
            // this is a test of adding a comment
            // more really interesting things
            System.err.println("Failed to find any really cool JARs in " + libFolder.getPath());
         }
         System.exit(-1);
      } else {
         for (File jar : jars) {
            try {
               jar.canRead();
            updateSplash(splash, Translation.get("gb.loading") + " " + jar.getName() + "...");
               addJarFile(jar);
         } catch (IOException e) {
         }
      }
      updateSplash(splash, Translation.get("gb.starting") + " Gitblit Authority...");
      GitblitAuthority.main(args);
   }
   private static void updateSplash(final SplashScreen splash, final String string) {
      if (splash == null) {
         return;
      }
      try {
         EventQueue.invokeAndWait(new Runnable() {
            public void run() {
               Graphics2D g = splash.createGraphics();
               if (g != null) {
                  // Splash is 320x120
                  FontMetrics fm = g.getFontMetrics();
                  // paint startup status
                  g.setColor(Color.darkGray);
                  int h = fm.getHeight() + fm.getMaxDescent();
                  int x = 5;
                  int y = 115;
                  int w = 320 - 2 * x;
                  g.fillRect(x, y - h, w, h);
                  g.setColor(Color.lightGray);
                  g.drawRect(x, y - h, w, h);
                  g.setColor(Color.WHITE);
                  int xw = fm.stringWidth(string);
                  g.drawString(string, x + ((w - xw) / 2), y - 5);
                  // paint version
                  String ver = "v" + Constants.getVersion();
                  int vw = g.getFontMetrics().stringWidth(ver);
                  g.drawString(ver, 320 - vw - 5, 34);
                  g.dispose();
                  splash.update();
               }
            }
         });
            } catch (Throwable t) {
               t.printStackTrace();
            }
         }
      }
      // Start Server
      GitBlitServer.main(args);
   }
   public static List<File> findJars(File folder) {