diff options
| author | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2009-08-20 16:24:55 +0000 | 
|---|---|---|
| committer | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2009-08-20 16:24:55 +0000 | 
| commit | 22001c93bca360d1b15c252cb22d2a4147ff350d (patch) | |
| tree | 813f8cd7e0afa47a78ecc40cc8884eb770b89588 /BKUWebStart/src/main/java/at/gv | |
| parent | 2bd3c3e61966cf136d39826b6e1c6ff9fc946cef (diff) | |
| download | mocca-22001c93bca360d1b15c252cb22d2a4147ff350d.tar.gz mocca-22001c93bca360d1b15c252cb22d2a4147ff350d.tar.bz2 mocca-22001c93bca360d1b15c252cb22d2a4147ff350d.zip | |
 [#430] Activation/PIN-management in MOCCA Web Start
- new Modules: smccSTALExt, BKUGuiExt in order not to depend on BKUAppletExt in BKULocal
- provide stal-request handler de-registration in abstractSMCCSTAL
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@448 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'BKUWebStart/src/main/java/at/gv')
3 files changed, 153 insertions, 97 deletions
| diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java index 23d832a2..ca40ddc0 100644 --- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java @@ -1,10 +1,10 @@  package at.gv.egiz.bku.webstart;
 +import at.gv.egiz.bku.webstart.gui.AboutDialog;
  import at.gv.egiz.bku.webstart.gui.BKUControllerInterface;
 -import at.gv.egiz.bku.webstart.gui.TrayMenuListener;
 +import at.gv.egiz.bku.webstart.gui.PINManagementInvoker;
  import iaik.asn1.CodingException;
  import java.io.IOException;
 -import java.net.URISyntaxException;
  import java.util.Locale;
  import java.util.ResourceBundle;
 @@ -21,8 +21,12 @@ import java.awt.PopupMenu;  import java.awt.SplashScreen;
  import java.awt.SystemTray;
  import java.awt.TrayIcon;
 +import java.awt.event.ActionEvent;
 +import java.awt.event.ActionListener;
 +import java.awt.event.WindowAdapter;
  import java.net.BindException;
 -import java.net.URI;
 +import java.net.HttpURLConnection;
 +import java.net.MalformedURLException;
  import java.net.URL;
  import java.security.GeneralSecurityException;
  import java.util.jar.Attributes;
 @@ -30,9 +34,10 @@ import java.util.jar.Manifest;  import javax.imageio.ImageIO;
  import javax.jnlp.BasicService;
  import javax.jnlp.ServiceManager;
 +import javax.swing.JFrame;
  import org.mortbay.util.MultiException;
 -public class Launcher implements BKUControllerInterface {
 +public class Launcher implements BKUControllerInterface, ActionListener {
    public static final String WEBAPP_RESOURCE = "BKULocal.war";
    public static final String CERTIFICATES_RESOURCE = "BKUCertificates.jar";
 @@ -51,23 +56,37 @@ public class Launcher implements BKUControllerInterface {    public static final String ERROR_START = "tray.error.start";
    public static final String ERROR_CONFIG = "tray.error.config";
    public static final String ERROR_BIND = "tray.error.bind";
 +  public static final String ERROR_PIN = "tray.error.pin.connect";
    public static final String LABEL_SHUTDOWN = "tray.label.shutdown";
    public static final String LABEL_PIN = "tray.label.pin";
    public static final String LABEL_ABOUT = "tray.label.about";
    public static final String TOOLTIP_DEFAULT = "tray.tooltip.default";
 -  
 -  /** local bku uri */
 -  public static final URI HTTPS_SECURITY_LAYER_URI;
 +
 +  /** action commands for tray menu */
 +  public static final String SHUTDOWN_COMMAND = "shutdown";
 +  public static final String PIN_COMMAND = "pin";
 +  public static final String ABOUT_COMMAND = "about";
 +
    private static Log log = LogFactory.getLog(Launcher.class);
 +  /** local bku uri */
 +  public static final URL HTTP_SECURITY_LAYER_URL;
 +  public static final URL HTTPS_SECURITY_LAYER_URL;
 +  public static final URL PIN_MANAGEMENT_URL;
    static {
 -    URI tmp = null;
 +    URL http = null;
 +    URL https = null;
 +    URL pin = null;
      try {
 -      tmp = new URI("https://localhost:" + Integer.getInteger(Container.HTTPS_PORT_PROPERTY, 3496).intValue());
 -    } catch (URISyntaxException ex) {
 +      http = new URL("http://localhost:" + Integer.getInteger(Container.HTTPS_PORT_PROPERTY, 3495).intValue());
 +      https = new URL("https://localhost:" + Integer.getInteger(Container.HTTPS_PORT_PROPERTY, 3496).intValue());
 +      pin = new URL(http, "/PINManagement");
 +    } catch (MalformedURLException ex) {
        log.error(ex);
      } finally {
 -      HTTPS_SECURITY_LAYER_URI = tmp;
 +      HTTP_SECURITY_LAYER_URL = http;
 +      HTTPS_SECURITY_LAYER_URL = https;
 +      PIN_MANAGEMENT_URL = pin;
      }
    }
    public static final String version;
 @@ -96,6 +115,8 @@ public class Launcher implements BKUControllerInterface {    private BasicService basicService;
    private TrayIcon trayIcon;
    private ResourceBundle messages;
 +  private AboutDialog aboutDialog;
 +
    public Launcher() {
      if (log.isTraceEnabled()) {
 @@ -144,7 +165,7 @@ public class Launcher implements BKUControllerInterface {      }
    }
 -  private TrayIcon initTrayIcon() { //ResourceBundle messages, BKUControllerInterface bkuHook) {
 +  private TrayIcon initTrayIcon() {
      if (SystemTray.isSupported()) {
        try {
          // get the SystemTray instance
 @@ -155,21 +176,27 @@ public class Launcher implements BKUControllerInterface {                  : TRAYICON_RESOURCE + "32.png";
          Image image = ImageIO.read(Launcher.class.getClassLoader().getResourceAsStream(iconResource));
 -        TrayMenuListener listener = new TrayMenuListener(this, messages, version);
          PopupMenu popup = new PopupMenu();
 +        MenuItem pinItem = new MenuItem(messages.getString(LABEL_PIN));
 +        pinItem.addActionListener(this);
 +        pinItem.setActionCommand(PIN_COMMAND);
 +        popup.add(pinItem);
 +
          MenuItem shutdownItem = new MenuItem(messages.getString(LABEL_SHUTDOWN));
 -        shutdownItem.addActionListener(listener);
 -        shutdownItem.setActionCommand(TrayMenuListener.SHUTDOWN_COMMAND);
 +        shutdownItem.addActionListener(this);
 +        shutdownItem.setActionCommand(SHUTDOWN_COMMAND);
          popup.add(shutdownItem);
 +        popup.addSeparator();
 +
          MenuItem aboutItem = new MenuItem(messages.getString(LABEL_ABOUT));
 -        aboutItem.setActionCommand(TrayMenuListener.ABOUT_COMMAND);
 -        aboutItem.addActionListener(listener);
 +        aboutItem.setActionCommand(ABOUT_COMMAND);
 +        aboutItem.addActionListener(this);
          popup.add(aboutItem);
          TrayIcon ti = new TrayIcon(image, messages.getString(TOOLTIP_DEFAULT), popup);
 -        ti.addActionListener(listener);
 +        ti.addActionListener(this);
          tray.add(ti);
          return ti;
        } catch (AWTException ex) {
 @@ -237,15 +264,15 @@ public class Launcher implements BKUControllerInterface {            Desktop desktop = Desktop.getDesktop();
            if (desktop.isSupported(Desktop.Action.BROWSE)) {
              try {
 -              desktop.browse(HTTPS_SECURITY_LAYER_URI);
 +              desktop.browse(HTTPS_SECURITY_LAYER_URL.toURI());
              } catch (Exception ex) {
 -              log.error("failed to open system browser, install TLS certificate manually: " + HTTPS_SECURITY_LAYER_URI, ex);
 +              log.error("failed to open system browser, install TLS certificate manually: " + HTTPS_SECURITY_LAYER_URL, ex);
              }
            } else {
 -            log.error("failed to open system browser, install TLS certificate manually: " + HTTPS_SECURITY_LAYER_URI);
 +            log.error("failed to open system browser, install TLS certificate manually: " + HTTPS_SECURITY_LAYER_URL);
            }
          } else {
 -          log.error("failed to open system browser, install TLS certificate manually: " + HTTPS_SECURITY_LAYER_URI);
 +          log.error("failed to open system browser, install TLS certificate manually: " + HTTPS_SECURITY_LAYER_URL);
          }
        }
        log.info("BKU successfully started");
 @@ -276,6 +303,39 @@ public class Launcher implements BKUControllerInterface {      System.exit(0);
    }
 +  /**
 +   * Listen for TrayMenu actions (display error messages on trayIcon)
 +   * @param e
 +   */
 +  @Override
 +  public void actionPerformed(ActionEvent e) {
 +    if (SHUTDOWN_COMMAND.equals(e.getActionCommand())) {
 +      log.debug("shutdown requested via tray menu");
 +      this.shutDown();
 +    } else if (ABOUT_COMMAND.equals(e.getActionCommand())) {
 +      log.debug("about dialog requested via tray menu");
 +      if (aboutDialog == null) {
 +        aboutDialog = new AboutDialog(new JFrame(), true, version);
 +        aboutDialog.addWindowListener(new WindowAdapter() {
 +
 +          @Override
 +          public void windowClosing(java.awt.event.WindowEvent e) {
 +            aboutDialog.setVisible(false);
 +          }
 +        });
 +      }
 +      aboutDialog.setLocationByPlatform(true);
 +      aboutDialog.setVisible(true);
 +    } else if (PIN_COMMAND.equals(e.getActionCommand())) {
 +      log.debug("pin management dialog requested via tray menu");
 +
 +      new Thread(new PINManagementInvoker(trayIcon, messages)).start();
 +      
 +    } else {
 +      log.error("unknown tray menu command: " + e.getActionCommand());
 +    }
 +  }
 +
    public static void main(String[] args) throws InterruptedException, IOException {
      try {
        Launcher launcher = new Launcher();
 diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/PINManagementInvoker.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/PINManagementInvoker.java new file mode 100644 index 00000000..55e26313 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/PINManagementInvoker.java @@ -0,0 +1,71 @@ +/* + * 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.gui; + +import at.gv.egiz.bku.webstart.Launcher; +import java.awt.TrayIcon; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.util.ResourceBundle; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * GUI is painted using SwingUtilities.invokeLater, but TrayIcon ActionListener Thread (== webstart thread) joined Jetty Thread + *  + * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at> + */ +public class PINManagementInvoker implements Runnable { + +  private static final Log log = LogFactory.getLog(PINManagementInvoker.class); +   +  TrayIcon trayIcon; +  ResourceBundle messages; + +  public PINManagementInvoker(TrayIcon trayIcon, ResourceBundle messages) { +    this.trayIcon = trayIcon; +    this.messages = messages; +  } + +  @Override +  public void run() { +    HttpURLConnection connection = null; +    try { +      log.debug("Connecting to: " + Launcher.PIN_MANAGEMENT_URL); + +      connection = (HttpURLConnection) Launcher.PIN_MANAGEMENT_URL.openConnection(); + +      connection.setRequestMethod("GET"); +      connection.setReadTimeout(0); +      connection.connect(); + +      if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { +        log.debug("pin management dialog returned"); +      } else { +        log.error("unexpected response from pin management: " + connection.getResponseMessage()); +      } +    } catch (IOException ex) { +      log.error("Failed to connect to PIN Management", ex); +      trayIcon.displayMessage(messages.getString(Launcher.CAPTION_ERROR), +              messages.getString(Launcher.ERROR_PIN), TrayIcon.MessageType.ERROR); +    } finally { +      if (connection != null) { +        connection.disconnect(); +      } +    } +  } +} diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/TrayMenuListener.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/TrayMenuListener.java deleted file mode 100644 index 1e5efe8e..00000000 --- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/TrayMenuListener.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.gui; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.util.ResourceBundle; -import javax.swing.JFrame; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * - * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at> - */ -public class TrayMenuListener implements ActionListener { - -  /** action commands for tray menu */ -  public static final String SHUTDOWN_COMMAND = "shutdown"; -  public static final String PIN_COMMAND = "pin"; -  public static final String ABOUT_COMMAND = "about"; - -  private static final Log log = LogFactory.getLog(TrayMenuListener.class); - -  protected BKUControllerInterface bku; -  protected ResourceBundle messages; -  protected String version; -  protected AboutDialog aboutDialog; - -  public TrayMenuListener(BKUControllerInterface bkuHook, ResourceBundle messages, String version) { -    this.messages = messages; -    this.version = version; -    this.bku = bkuHook; -  } - -  @Override -  public void actionPerformed(ActionEvent e) { -    if (SHUTDOWN_COMMAND.equals(e.getActionCommand())) { -      log.debug("shutdown requested via tray menu"); -      bku.shutDown(); -    } else if (ABOUT_COMMAND.equals(e.getActionCommand())) { -      log.debug("about dialog requested via tray menu"); -      if (aboutDialog == null) { -        aboutDialog = new AboutDialog(new JFrame(), true, version); -        aboutDialog.addWindowListener(new WindowAdapter() { -          @Override -          public void windowClosing(java.awt.event.WindowEvent e) { -            aboutDialog.setVisible(false); -          } -        }); -      } -      aboutDialog.setLocationByPlatform(true); -      aboutDialog.setVisible(true); -    } else if (PIN_COMMAND.equals(e.getActionCommand())) { -      log.error("not implemented yet."); -    } else { -      log.error("unknown tray menu command: " + e.getActionCommand()); -    } -  } -} | 
