diff options
Diffstat (limited to 'BKUWebStart/src')
27 files changed, 802 insertions, 0 deletions
| diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java new file mode 100644 index 00000000..854e6535 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java @@ -0,0 +1,221 @@ +package at.gv.egiz.bku.webstart;
 +
 +import java.io.File;
 +import java.io.FileOutputStream;
 +import java.io.IOException;
 +import java.io.InputStream;
 +import java.io.OutputStream;
 +import java.security.KeyStore;
 +import java.util.Enumeration;
 +import java.util.Locale;
 +import java.util.MissingResourceException;
 +import java.util.ResourceBundle;
 +import java.util.zip.ZipEntry;
 +import java.util.zip.ZipFile;
 +
 +//import org.apache.commons.cli.CommandLine;
 +//import org.apache.commons.cli.CommandLineParser;
 +//import org.apache.commons.cli.HelpFormatter;
 +//import org.apache.commons.cli.Options;
 +//import org.apache.commons.cli.ParseException;
 +//import org.apache.commons.cli.PosixParser;
 +import org.apache.commons.logging.Log;
 +import org.apache.commons.logging.LogFactory;
 +
 +import at.gv.egiz.bku.webstart.ui.BKUControllerInterface;
 +import at.gv.egiz.bku.webstart.ui.TrayIconDialog;
 +import at.gv.egiz.bku.utils.StreamUtil;
 +
 +public class BKULauncher implements BKUControllerInterface {
 +
 +  private static Log log = LogFactory.getLog(BKULauncher.class);
 +
 +  private ResourceBundle resourceBundle = null;
 +  private Container server;
 +//  private SplashScreen splash = SplashScreen.getSplashScreen();
 +
 +  private void startUpServer() throws Exception {
 +    server = new Container();
 +    // XmlConfiguration xcfg = new XmlConfiguration(getClass().getClassLoader()
 +    // .getResourceAsStream("at/gv/egiz/bku/local/app/jetty.xml"));
 +    // xcfg.configure(server);
 +    server.init();
 +    server.start();
 +  }
 +
 +  private void initTrayIcon() {
 +    Locale loc = Locale.getDefault();
 +    try {
 +      resourceBundle = ResourceBundle.getBundle(
 +          "at/gv/egiz/bku/webstart/ui/UIMessages", loc);
 +    } catch (MissingResourceException mx) {
 +      resourceBundle = ResourceBundle.getBundle(
 +          "at/gv/egiz/bku/webstart/ui/UIMessages", Locale.ENGLISH);
 +    }
 +    TrayIconDialog.getInstance().init(resourceBundle);
 +    TrayIconDialog.getInstance().setShutdownHook(this);
 +    TrayIconDialog.getInstance().displayInfo("Greetings.Caption",
 +        "Greetings.Message");
 +  }
 +
 +  private void initStart() {
 +
 +  }
 +
 +  private void initFinished() {
 +    try {
 +//      if (splash != null) {
 +//        try {
 +//          splash.close();
 +//        } catch (IllegalStateException ex) {
 +//          log.warn("Failed to close splash screen: " + ex.getMessage());
 +//        }
 +//      }
 +      server.join();
 +    } catch (InterruptedException e) {
 +      log.info(e);
 +    }
 +  }
 +
 +//  private void copyDirs(File srcDir, File dstDir) {
 +//    for (File cf : srcDir.listFiles()) {
 +//      File of = new File(dstDir, cf.getName());
 +//      if (cf.isDirectory()) {
 +//        log.debug("Creating directory: " + of);
 +//        of.mkdir();
 +//        copyDirs(cf, of);
 +//      } else {
 +//        log.debug("Writing file: " + of);
 +//        try {
 +//          FileInputStream fis = new FileInputStream(cf);
 +//          FileOutputStream fos = new FileOutputStream(of);
 +//          StreamUtil.copyStream(fis, fos);
 +//          fis.close();
 +//          fos.close();
 +//        } catch (IOException e) {
 +//          log.error("Cannot copy default configuration", e);
 +//        }
 +//      }
 +//    }
 +//  }
 +
 +  private void unzip(File zipfile) throws IOException {
 +    File dir = zipfile.getParentFile();
 +    ZipFile zipFile = new ZipFile(zipfile);
 +    Enumeration<? extends ZipEntry> entries = zipFile.entries();
 +    while (entries.hasMoreElements()) {
 +      ZipEntry entry = entries.nextElement();
 +      File eF = new File(dir, entry.getName());
 +      if (entry.isDirectory()) {
 +        eF.mkdirs();
 +        continue;
 +      }
 +      File f = new File(eF.getParent());
 +      f.mkdirs();
 +      StreamUtil.copyStream(zipFile.getInputStream(entry),
 +          new FileOutputStream(eF));
 +    }
 +    zipFile.close();
 +  }
 +
 +  private void checkConfig(String[] args) {
 +//    CommandLineParser parser = new PosixParser();
 +//    Options options = new Options();
 +//    options.addOption("c", true, "the configuration's base directory");
 +//    options.addOption("h", false, "print this message");
 +//    try {
 +      File cfgDir = new File(System.getProperty("user.home") + "/.mocca/conf");
 +//      CommandLine cmd = parser.parse(options, args);
 +//      if (cmd.hasOption("h")) {
 +//        HelpFormatter formatter = new HelpFormatter();
 +//        formatter.printHelp("BKULauncher", options);
 +//        System.exit(0);
 +//      }
 +//
 +//      if (cmd.hasOption("c")) {
 +//        cfgDir = new File(cmd.getOptionValue("c"));
 +//      }
 +      log.debug("using config directory: " + cfgDir);
 +      if (cfgDir.exists() && cfgDir.isFile()) {
 +        log.error("Configuration directory must not be a file");
 +      }
 +      if (!cfgDir.exists()) {
 +        log.debug("Creating config directory: " + cfgDir);
 +        cfgDir.mkdirs();
 +        try {
 +          InputStream is = getClass().getClassLoader().getResourceAsStream(
 +              "at/gv/egiz/bku/webstart/defaultConf/template.zip");
 +          OutputStream os = new FileOutputStream(new File(cfgDir,
 +              "template.zip"));
 +          StreamUtil.copyStream(is, os);
 +          os.close();
 +          unzip(new File(cfgDir, "template.zip"));
 +        } catch (IOException iox) {
 +          log.error("Cannot create user directory", iox);
 +          return;
 +        }
 +        CA ca = new CA();
 +        char[] password = "changeMe".toCharArray();
 +        KeyStore ks = ca.generateKeyStore(password);
 +        if (ks != null) {
 +          File ksdir = new File(cfgDir, "keystore");
 +          ksdir.mkdirs();
 +          FileOutputStream fos;
 +          try {
 +            fos = new FileOutputStream(new File(ksdir, "keystore.ks"));
 +            ks.store(fos, password);
 +            fos.close();
 +          } catch (Exception e) {
 +            log.error("Cannot store keystore", e);
 +          }
 +        } else {
 +          log.error("Cannot create ssl certificate");
 +        }
 +      }
 +//    } catch (ParseException e1) {
 +//      log.error(e1);
 +//      HelpFormatter formatter = new HelpFormatter();
 +//      formatter.printHelp("BKULauncher", options);
 +//      System.exit(0);
 +//    }
 +  }
 +
 +  /**
 +   * @param args
 +   */
 +  public static void main(String[] args) {
 +    try {
 +      log.warn("***** DISABLING SECURITY MANAGER *******");
 +      System.setSecurityManager(null);
 +      BKULauncher launcher = new BKULauncher();
 +      launcher.initStart();
 +      launcher.checkConfig(args);
 +      launcher.startUpServer();
 +      launcher.initTrayIcon();
 +      launcher.initFinished();
 +    } catch (Exception e) {
 +      log.fatal("Cannot launch BKU", e);
 +      System.exit(-1000);
 +    }
 +
 +  }
 +
 +  public void shutDown() {
 +    log.info("Shutting down server");
 +    if ((server != null) && (server.isRunning())) {
 +      try {
 +        if (server.isRunning()) {
 +          server.stop();
 +        }
 +      } catch (Exception e) {
 +        log.debug(e.toString());
 +      } finally {
 +        if (server.isRunning()) {
 +          server.destroy();
 +        }
 +      }
 +    }
 +    System.exit(0);
 +  }
 +
 +}
 diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/CA.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/CA.java new file mode 100644 index 00000000..f81d3d83 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/CA.java @@ -0,0 +1,117 @@ +package at.gv.egiz.bku.webstart;
 +
 +import iaik.asn1.ObjectID;
 +import iaik.asn1.structures.AlgorithmID;
 +import iaik.asn1.structures.Name;
 +import iaik.x509.X509Certificate;
 +import iaik.x509.extensions.BasicConstraints;
 +import iaik.x509.extensions.KeyUsage;
 +
 +import java.math.BigInteger;
 +import java.net.InetAddress;
 +import java.net.UnknownHostException;
 +import java.security.GeneralSecurityException;
 +import java.security.KeyPair;
 +import java.security.KeyPairGenerator;
 +import java.security.KeyStore;
 +import java.security.NoSuchAlgorithmException;
 +import java.util.Calendar;
 +import java.util.GregorianCalendar;
 +import java.util.Random;
 +
 +import org.apache.commons.logging.Log;
 +import org.apache.commons.logging.LogFactory;
 +
 +public class CA {
 +  private final static Log log = LogFactory.getLog(CA.class);
 +
 +  private KeyPair caKeyPair;
 +  private X509Certificate caCert;
 +
 +  private KeyPair serverKeyPair;
 +  private X509Certificate serverCert;
 +
 +  public CA() {
 +  }
 +
 +  private KeyPair generateKeyPair() throws NoSuchAlgorithmException {
 +    KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
 +    gen.initialize(2048);
 +    return gen.generateKeyPair();
 +  }
 +
 +  private void generateCA() throws GeneralSecurityException {
 +    log.debug("Generating CA certificate");
 +    Name subject = new Name();
 +    subject.addRDN(ObjectID.country, "AT");
 +    subject.addRDN(ObjectID.organization, "MOCCA");
 +    subject.addRDN(ObjectID.organizationalUnit, "MOCCA-CA");
 +
 +    caKeyPair = generateKeyPair();
 +    caCert = new X509Certificate();
 +    caCert.setSerialNumber(new BigInteger(20, new Random()));
 +    caCert.setSubjectDN(subject);
 +    caCert.setPublicKey(caKeyPair.getPublic());
 +    caCert.setIssuerDN(subject);
 +
 +    caCert.addExtension(new BasicConstraints(true));
 +    caCert.addExtension(new KeyUsage(KeyUsage.keyCertSign | KeyUsage.cRLSign
 +        | KeyUsage.digitalSignature));
 +
 +    GregorianCalendar date = new GregorianCalendar();
 +    date.add(Calendar.HOUR_OF_DAY, -1);
 +    caCert.setValidNotBefore(date.getTime());
 +    date.add(Calendar.YEAR, 7);
 +    caCert.setValidNotAfter(date.getTime());
 +    caCert.sign(AlgorithmID.sha1WithRSAEncryption, caKeyPair.getPrivate());
 +    log.debug("Successfully signed CA certificate");
 +  }
 +
 +  private void generateServerCert() throws GeneralSecurityException {
 +    log.debug("Generating SSL certificate");
 +    Name subject = new Name();
 +    subject.addRDN(ObjectID.country, "AT");
 +    subject.addRDN(ObjectID.organization, "MOCCA");
 +    try {
 +      subject.addRDN(ObjectID.commonName, InetAddress.getLocalHost()
 +          .getHostName());
 +    } catch (UnknownHostException e) {
 +      subject.addRDN(ObjectID.commonName, "localhost");
 +    }
 +    serverKeyPair = generateKeyPair();
 +    serverCert = new X509Certificate();
 +    serverCert.setSerialNumber(new BigInteger(20, new Random()));
 +    serverCert.setSubjectDN(subject);
 +    serverCert.setPublicKey(serverKeyPair.getPublic());
 +    serverCert.setIssuerDN(caCert.getSubjectDN());
 +
 +    serverCert.addExtension(new BasicConstraints(false));
 +    serverCert.addExtension(new KeyUsage(KeyUsage.keyEncipherment
 +        | KeyUsage.digitalSignature));
 +
 +    GregorianCalendar date = new GregorianCalendar();
 +    date.add(Calendar.HOUR_OF_DAY, -1);
 +    serverCert.setValidNotBefore(date.getTime());
 +    date.add(Calendar.YEAR, 7);
 +    date.add(Calendar.HOUR_OF_DAY, -1);
 +    serverCert.setValidNotAfter(date.getTime());
 +    serverCert.sign(AlgorithmID.sha1WithRSAEncryption, caKeyPair.getPrivate());
 +    log.debug("Successfully signed server certificate");
 +    caKeyPair = null;
 +  }
 +
 +  public KeyStore generateKeyStore(char[] password) {
 +    try {
 +      generateCA();
 +      generateServerCert();
 +      KeyStore ks = KeyStore.getInstance("JKS");
 +      ks.load(null, null);
 +      ks.setKeyEntry("server", serverKeyPair.getPrivate(), password, new X509Certificate[]{serverCert, caCert});
 +      return ks;
 +    } catch (Exception e) {
 +      log.error("Cannot generate certificate", e);
 +    }
 +    return null;
 +  }
 +
 +}
 diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Container.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Container.java new file mode 100644 index 00000000..ef12e4fd --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Container.java @@ -0,0 +1,86 @@ +package at.gv.egiz.bku.webstart;
 +
 +import org.apache.commons.logging.Log;
 +import org.apache.commons.logging.LogFactory;
 +import org.mortbay.jetty.Connector;
 +import org.mortbay.jetty.Handler;
 +import org.mortbay.jetty.Server;
 +import org.mortbay.jetty.handler.DefaultHandler;
 +import org.mortbay.jetty.handler.HandlerCollection;
 +import org.mortbay.jetty.nio.SelectChannelConnector;
 +import org.mortbay.jetty.security.SslSocketConnector;
 +import org.mortbay.jetty.webapp.WebAppContext;
 +import org.mortbay.thread.QueuedThreadPool;
 +
 +public class Container {
 +
 +  public static final String HTTP_PORT = "mocca.http.port";
 +  public static final String HTTPS_PORT = "mocca.http.port";
 +
 +  private static Log log = LogFactory.getLog(Container.class);
 +
 +  private Server server;
 +
 +  public Container() {
 +  }
 +
 +  public void init() {
 +    server = new Server();
 +    QueuedThreadPool qtp = new QueuedThreadPool();
 +    qtp.setMaxThreads(5);
 +    qtp.setMinThreads(2);
 +    qtp.setLowThreads(0);
 +    server.setThreadPool(qtp);
 +    server.setStopAtShutdown(true);
 +    server.setGracefulShutdown(3000);
 +
 +    SelectChannelConnector connector = new SelectChannelConnector();
 +    connector.setPort(Integer.getInteger(HTTP_PORT, 3495).intValue());
 +    connector.setAcceptors(1);
 +    connector.setConfidentialPort(Integer.getInteger(HTTPS_PORT, 3496).intValue());
 +
 +    SslSocketConnector sslConnector = new SslSocketConnector();
 +    sslConnector.setPort(Integer.getInteger(HTTPS_PORT, 3496).intValue());
 +    sslConnector.setAcceptors(1);
 +    sslConnector.setKeystore(System.getProperty("user.home")
 +        + "/.mocca/conf/keystore/keystore.ks");
 +    sslConnector.setPassword("changeMe");
 +    sslConnector.setKeyPassword("changeMe");
 +
 +    server.setConnectors(new Connector[] { connector, sslConnector });
 +    
 +//    HandlerCollection handlers = new HandlerCollection();
 +    WebAppContext webapp = new WebAppContext();
 +    webapp.setContextPath("/");
 +    webapp.setExtractWAR(true); //false
 +    webapp.setParentLoaderPriority(false); 
 +
 +//    webappcontext.setWar("BKULocal-1.0.4-SNAPSHOT.war");
 +    webapp.setWar(getClass().getClassLoader().getResource("BKULocalWar/").toString());
 +
 +//    handlers.setHandlers(new Handler[] { webappcontext, new DefaultHandler() });
 +
 +    server.setHandler(webapp);
 +    server.setGracefulShutdown(1000*3);
 +  }
 +
 +  public void start() throws Exception {
 +    server.start();
 +  }
 +
 +  public boolean isRunning() {
 +    return server.isRunning();
 +  }
 +
 +  public void stop() throws Exception {
 +    server.stop();
 +  }
 +
 +  public void destroy() {
 +    server.destroy();
 +  }
 +
 +  public void join() throws InterruptedException {
 +    server.join();
 +  }
 +}
\ No newline at end of file diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/BKUControllerInterface.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/BKUControllerInterface.java new file mode 100644 index 00000000..fd9838f9 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/BKUControllerInterface.java @@ -0,0 +1,23 @@ +/* +* Copyright 2008 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +*     http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package at.gv.egiz.bku.webstart.ui; + +public interface BKUControllerInterface { +   +  public void shutDown(); + +} diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialog.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialog.java new file mode 100644 index 00000000..4679eac5 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialog.java @@ -0,0 +1,202 @@ +/* +* Copyright 2008 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +*     http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package at.gv.egiz.bku.webstart.ui; + +import java.awt.AWTException; +import java.awt.Image; +import java.awt.MenuItem; +import java.awt.PopupMenu; +import java.awt.SystemTray; +import java.awt.TrayIcon; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.ResourceBundle; + +import javax.imageio.ImageIO; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class TrayIconDialog implements TrayIconDialogInterface { + +  private static Log log = LogFactory.getLog(TrayIconDialog.class); +  private static TrayIconDialogInterface instance; +  private boolean isSupported; +  private BKUControllerInterface shutDown; +  private TrayIcon trayIcon = null; +  private ResourceBundle resourceBundle = null; + +  private TrayIconDialog() { +  } + +  private void displayTrayMsg(String captionID, String messageID, +      TrayIcon.MessageType type) { +    if ((isSupported) && (resourceBundle != null)) { +      try { +        trayIcon.displayMessage(resourceBundle.getString(captionID), +            resourceBundle.getString(messageID), type); +      } catch (Exception ex) { +        log.error(ex); +      } +    } +  } + +  /* +   * (non-Javadoc) +   *  +   * @see +   * at.gv.egiz.bku.local.ui.TrayIconDialogInterface#displayInfo(java.lang.String +   * , java.lang.String) +   */ +  public void displayInfo(String captionID, String messageID) { +    displayTrayMsg(captionID, messageID, TrayIcon.MessageType.INFO); +  } + +  /* +   * (non-Javadoc) +   *  +   * @see +   * at.gv.egiz.bku.local.ui.TrayIconDialogInterface#displayWarning(java.lang +   * .String, java.lang.String) +   */ +  public void displayWarning(String captionID, String messageID) { +    displayTrayMsg(captionID, messageID, TrayIcon.MessageType.WARNING); +  } + +  /* +   * (non-Javadoc) +   *  +   * @see +   * at.gv.egiz.bku.local.ui.TrayIconDialogInterface#displayError(java.lang. +   * String, java.lang.String) +   */ +  public void displayError(String captionID, String messageID) { +    displayTrayMsg(captionID, messageID, TrayIcon.MessageType.ERROR); +  } + +  /* +   * (non-Javadoc) +   *  +   * @see +   * at.gv.egiz.bku.local.ui.TrayIconDialogInterface#init(java.util.ResourceBundle +   * ) +   */ +  public void init(ResourceBundle resourceBundel) { +    this.resourceBundle = resourceBundel; +    isSupported = SystemTray.isSupported(); +    log.info("Trayicon supported: " + isSupported); +    try { +      if (isSupported) { +        SystemTray tray = SystemTray.getSystemTray(); +        Image image = ImageIO.read(getClass().getClassLoader() +            .getResourceAsStream("at/gv/egiz/bku/webstart/ui/logo.png")); +        PopupMenu popup = new PopupMenu(); +        MenuItem exitItem = new MenuItem(resourceBundel +            .getString("TrayMenu.Shutdown")); +        popup.add(exitItem); +        exitItem.addActionListener(new ActionListener() { +          public void actionPerformed(ActionEvent e) { +            log.info("Calling Shutdown"); +            if (shutDown != null) { +              shutDown.shutDown(); +            } +          } +        }); + +        trayIcon = new TrayIcon(image, "BKULogo", popup); +        trayIcon.setImageAutoSize(true); +        trayIcon.setToolTip(resourceBundel.getString("TrayMenu.Tooltip")); +        try { +          tray.add(trayIcon); +        } catch (AWTException e) { +          log.error("TrayIcon could not be added.", e); +          isSupported = false; +        } +      } +    } catch (IOException e) { +      log.error(e); +    } +  } + +  /* +   * (non-Javadoc) +   *  +   * @see +   * at.gv.egiz.bku.local.ui.TrayIconDialogInterface#setShutdownHook(at.gv.egiz +   * .bku.local.ui.BKUControllerInterface) +   */ +  public void setShutdownHook(BKUControllerInterface shutDown) { +    this.shutDown = shutDown; +  } + +  @SuppressWarnings("unchecked") +  public synchronized static TrayIconDialogInterface getInstance() { +    ClassLoader cl = TrayIconDialog.class.getClassLoader(); +    if (instance == null) { +      if (cl.toString().equals(cl.getParent().toString())) { +        instance = new TrayIconDialog(); +        return instance; +      } +      ClassLoader parent = cl; +      while (!parent.toString().equals(cl.getParent().toString())) { +        parent = parent.getParent(); +      } +      try { +        Class<TrayIconDialog> otherClassInstance = (Class<TrayIconDialog>) parent +            .loadClass(TrayIconDialog.class.getName()); +        Method getInstanceMethod = otherClassInstance.getDeclaredMethod( +            "getInstance", new Class[] {}); +        Object otherSingleton = getInstanceMethod.invoke(null, new Object[] {}); +        instance = (TrayIconDialogInterface) Proxy.newProxyInstance(cl, +            new Class[] { TrayIconDialogInterface.class }, +            new PassThroughProxyHandler(otherSingleton)); +      } catch (ClassNotFoundException ce) { +        instance = new TrayIconDialog(); +      } catch (Exception e) { +        log.error(e); +        instance = new TrayIconDialog(); +      } +      return instance; +    } +    return instance; +  } + +  /** +   *  +   * Only works for public methods +   *  +   */ +  static class PassThroughProxyHandler implements InvocationHandler { +    private final Object delegate; + +    public PassThroughProxyHandler(Object delegate) { +      this.delegate = delegate; +    } + +    public Object invoke(Object proxy, Method method, Object[] args) +        throws Throwable { +      Method delegateMethod = delegate.getClass().getMethod(method.getName(), +          method.getParameterTypes()); +      return delegateMethod.invoke(delegate, args); +    } +  } + +} diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialogInterface.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialogInterface.java new file mode 100644 index 00000000..078844cb --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialogInterface.java @@ -0,0 +1,33 @@ +/* +* Copyright 2008 Federal Chancellery Austria and +* Graz University of Technology +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +*     http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package at.gv.egiz.bku.webstart.ui; + +import java.util.ResourceBundle; + +public interface TrayIconDialogInterface { + +  public abstract void displayInfo(String captionID, String messageID); + +  public abstract void displayWarning(String captionID, String messageID); + +  public abstract void displayError(String captionID, String messageID); + +  public abstract void init(ResourceBundle resourceBundel); + +  public abstract void setShutdownHook(BKUControllerInterface shutDown); + +}
\ No newline at end of file diff --git a/BKUWebStart/src/main/jnlp/resources/logo.png b/BKUWebStart/src/main/jnlp/resources/logo.pngBinary files differ new file mode 100644 index 00000000..2c622d88 --- /dev/null +++ b/BKUWebStart/src/main/jnlp/resources/logo.png diff --git a/BKUWebStart/src/main/jnlp/resources/logo_64x64.png b/BKUWebStart/src/main/jnlp/resources/logo_64x64.pngBinary files differ new file mode 100644 index 00000000..fa6d7f96 --- /dev/null +++ b/BKUWebStart/src/main/jnlp/resources/logo_64x64.png diff --git a/BKUWebStart/src/main/jnlp/resources/logo_90x90.png b/BKUWebStart/src/main/jnlp/resources/logo_90x90.pngBinary files differ new file mode 100644 index 00000000..d7f8bbd0 --- /dev/null +++ b/BKUWebStart/src/main/jnlp/resources/logo_90x90.png diff --git a/BKUWebStart/src/main/jnlp/resources/splash.png b/BKUWebStart/src/main/jnlp/resources/splash.pngBinary files differ new file mode 100644 index 00000000..72c1d868 --- /dev/null +++ b/BKUWebStart/src/main/jnlp/resources/splash.png diff --git a/BKUWebStart/src/main/jnlp/template.xml b/BKUWebStart/src/main/jnlp/template.xml new file mode 100644 index 00000000..0a89a036 --- /dev/null +++ b/BKUWebStart/src/main/jnlp/template.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<jnlp spec="$jnlpspec" codebase="$project.Url" href="$outputFile"> +  <information> +    <title>$project.Name</title> +    <vendor>$project.Organization.Name</vendor> +    <homepage href="$project.Url"/> +    <description>$project.Description</description> +    <icon href="lib/splash.png" kind="splash"/> +    <icon href="lib/logo.png" kind="default"/> +    <shortcut online="false"> +      <desktop/> +      <menu submenu="MOCCA"/> +    </shortcut> + +#if($offlineAllowed) +    <offline-allowed/> +#end + +  </information> + + +#if($allPermissions) +  <security> +    <all-permissions/> +  </security> +#end + +  <resources> +    <!-- initial-heap-size="32m" max-heap-size="128m" --> +    <j2se version="$j2seVersion"/> +    <property name="jnlp.versionEnabled" value="true"/> + +     $dependencies + +  </resources> +  <application-desc main-class="$mainClass"/> +</jnlp>
\ No newline at end of file diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/defaultConf/template.zip b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/defaultConf/template.zipBinary files differ new file mode 100644 index 00000000..f14b0c19 --- /dev/null +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/defaultConf/template.zip diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/UIMessages.properties b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/UIMessages.properties new file mode 100644 index 00000000..873d03ef --- /dev/null +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/UIMessages.properties @@ -0,0 +1,13 @@ +#-------- tray icon messages -------
 +TrayMenu.Tooltip=MOCCA
 +TrayMenu.Shutdown=MOCCA Beenden
 +
 +Greetings.Message=MOCCA up and running
 +Greetings.Caption=MOCCA Started
 +
 +Message.RequestCaption=New Request
 +Message.InfoboxReadRequest=Reading Infobox
 +Message.SecureSignatureKeypair=Reading secure signature certificate
 +Message.CertifiedKeypair=Reading certified certificate
 +Message.IdentityLink=Reading Identitylink
 +Message.SignRequest=Creating Signature
\ No newline at end of file diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/favicon.png b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/favicon.pngBinary files differ new file mode 100644 index 00000000..2d0276de --- /dev/null +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/favicon.png diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/logo.png b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/logo.pngBinary files differ new file mode 100644 index 00000000..598ab00b --- /dev/null +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/ui/logo.png diff --git a/BKUWebStart/src/main/resources/log4j.properties b/BKUWebStart/src/main/resources/log4j.properties new file mode 100644 index 00000000..4df33ab5 --- /dev/null +++ b/BKUWebStart/src/main/resources/log4j.properties @@ -0,0 +1,16 @@ +# loglever DEBUG, appender STDOUT +log4j.rootLogger=TRACE, STDOUT, file + +# STDOUT appender +log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender +log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout +#log4j.appender.STDOUT.layout.ConversionPattern=%5p | %d{dd HH:mm:ss,SSS} | %20c |  %10t | %m%n +#log4j.appender.STDOUT.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n +log4j.appender.STDOUT.layout.ConversionPattern=%-5p |%d | %t | %c %x- %m%n + +### FILE appender +log4j.appender.file=org.apache.log4j.DailyRollingFileAppender +log4j.appender.file.datePattern='.'yyyy-MM-dd +log4j.appender.file.File=${user.home}/.mocca/logs/webstart.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
\ No newline at end of file diff --git a/BKUWebStart/src/main/resources/logo.png b/BKUWebStart/src/main/resources/logo.pngBinary files differ new file mode 100644 index 00000000..fa6d7f96 --- /dev/null +++ b/BKUWebStart/src/main/resources/logo.png diff --git a/BKUWebStart/src/main/resources/logo_32x32.png b/BKUWebStart/src/main/resources/logo_32x32.pngBinary files differ new file mode 100644 index 00000000..337b144b --- /dev/null +++ b/BKUWebStart/src/main/resources/logo_32x32.png diff --git a/BKUWebStart/src/main/resources/logo_90x90.png b/BKUWebStart/src/main/resources/logo_90x90.pngBinary files differ new file mode 100644 index 00000000..d7f8bbd0 --- /dev/null +++ b/BKUWebStart/src/main/resources/logo_90x90.png diff --git a/BKUWebStart/src/main/resources/logo_RGB22x22.png b/BKUWebStart/src/main/resources/logo_RGB22x22.pngBinary files differ new file mode 100644 index 00000000..598ab00b --- /dev/null +++ b/BKUWebStart/src/main/resources/logo_RGB22x22.png diff --git a/BKUWebStart/src/main/resources/logo_RGB32x32.png b/BKUWebStart/src/main/resources/logo_RGB32x32.pngBinary files differ new file mode 100644 index 00000000..2c622d88 --- /dev/null +++ b/BKUWebStart/src/main/resources/logo_RGB32x32.png diff --git a/BKUWebStart/src/main/resources/splash.png b/BKUWebStart/src/main/resources/splash.pngBinary files differ new file mode 100644 index 00000000..72c1d868 --- /dev/null +++ b/BKUWebStart/src/main/resources/splash.png diff --git a/BKUWebStart/src/main/webapp/WEB-INF/web.xml b/BKUWebStart/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 00000000..9f88c1f9 --- /dev/null +++ b/BKUWebStart/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ +<!DOCTYPE web-app PUBLIC + "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" + "http://java.sun.com/dtd/web-app_2_3.dtd" > + +<web-app> +  <display-name>Archetype Created Web Application</display-name> +</web-app> diff --git a/BKUWebStart/src/main/webapp/launch.html b/BKUWebStart/src/main/webapp/launch.html new file mode 100644 index 00000000..6ed6feb5 --- /dev/null +++ b/BKUWebStart/src/main/webapp/launch.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +    <head> +        <title>Test page for launching the application via JNLP</title> +    </head> +    <body> +        <h3>Test page for launching the application via JNLP</h3> +        <a href="launch.jnlp">Launch the application</a> +        <!-- Or use the following script element to launch with the Deployment Toolkit --> +        <!-- Open the deployJava.js script to view its documentation --> +        <script src="http://java.com/js/deployJava.js"></script> +        <script> +            var url="http://localhost:8080/BKUWebStart/launch.jnlp" +            deployJava.createWebStartLaunchButton(url, "1.6") +        </script> +    </body> +</html> diff --git a/BKUWebStart/src/main/webapp/launch.jnlp b/BKUWebStart/src/main/webapp/launch.jnlp new file mode 100644 index 00000000..d51d9d21 --- /dev/null +++ b/BKUWebStart/src/main/webapp/launch.jnlp @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<jnlp codebase="http://localhost:8080/BKUWebStart/" href="launch.jnlp" spec="1.0+"> +  <information> +    <title>BKU Web Start</title> +    <vendor>EGIZ</vendor> +    <homepage href="http://mocca.egovlabs.gv.at"/> +    <description>BKU WebStart (aka. Lokale BKU)</description> +    <description kind="short">BKU WebStart</description> +    <icon href="splash.png" kind="splash"/> +    <icon href="mocca_tiny.png" kind="default"/> +    <offline-allowed/> +  </information> +  <security> +    <all-permissions/> +  </security> +  <resources> +    <j2se version="1.6+"/> +    <jar eager="true" href="BKUWebStart.jar" main="true"/> +    <jar href="lib/appframework-1.0.3.jar"/> +    <jar href="lib/swing-worker-1.1.jar"/> +    <jar href="lib/commons-logging-1.1.1.jar"/> +    <jar href="lib/jetty-util-6.1.15.jar"/> +    <jar href="lib/commons-cli-1.0.jar"/> +    <jar href="lib/servlet-api-2.5-20081211.jar"/> +    <jar href="lib/jetty-6.1.15.jar"/> +    <jar href="lib/log4j-1.2.12.jar"/> +  </resources> +  <application-desc main-class="at.gv.egiz.bku.webstart.BKULauncher"> +  </application-desc> +</jnlp> diff --git a/BKUWebStart/src/main/webapp/mocca_tiny.png b/BKUWebStart/src/main/webapp/mocca_tiny.pngBinary files differ new file mode 100644 index 00000000..1f125d9b --- /dev/null +++ b/BKUWebStart/src/main/webapp/mocca_tiny.png diff --git a/BKUWebStart/src/main/webapp/splash.png b/BKUWebStart/src/main/webapp/splash.pngBinary files differ new file mode 100644 index 00000000..72c1d868 --- /dev/null +++ b/BKUWebStart/src/main/webapp/splash.png | 
