summaryrefslogtreecommitdiff
path: root/BKUWebStart/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'BKUWebStart/src/main/java')
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java104
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/PINManagementInvoker.java71
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/TrayMenuListener.java75
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());
- }
- }
-}