summaryrefslogtreecommitdiff
path: root/BKUWebStart/src/main/java/at
diff options
context:
space:
mode:
Diffstat (limited to 'BKUWebStart/src/main/java/at')
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Configurator.java55
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Container.java2
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java208
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.form139
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.java162
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/BKUControllerInterface.java (renamed from BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/BKUControllerInterface.java)2
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/TrayMenuListener.java75
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialog.java205
-rw-r--r--BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialogInterface.java33
9 files changed, 522 insertions, 359 deletions
diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Configurator.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Configurator.java
index f1349637..bef2246b 100644
--- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Configurator.java
+++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Configurator.java
@@ -18,7 +18,6 @@ package at.gv.egiz.bku.webstart;
import at.gv.egiz.bku.utils.StreamUtil;
import iaik.asn1.CodingException;
-import iaik.xml.crypto.utils.Utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
@@ -32,25 +31,19 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
-import java.net.URISyntaxException;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.util.Enumeration;
import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
import java.util.UUID;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.eclipse.jdt.core.dom.ThisExpression;
/**
*
@@ -63,7 +56,7 @@ public class Configurator {
* configurations with less than this (major) version will be backuped and updated
* allowed: MAJOR[.MINOR[.X[-SNAPSHOT]]]
*/
- public static final String MIN_CONFIG_VERSION = "1.0.9-SNAPSHOT";
+ public static final String MIN_CONFIG_VERSION = "1.0.9";
public static final String CONFIG_DIR = ".mocca/conf/";
public static final String CERTS_DIR = ".mocca/certs/";
public static final String VERSION_FILE = ".version";
@@ -259,14 +252,20 @@ public class Configurator {
int majorEndOld = oldVersion.indexOf("-SNAPSHOT");
if (majorEndOld < 0) {
preRelease = false;
- majorEndOld = oldVersion.length();
+ majorEndOld = oldVersion.indexOf('-'); // 1.0.10-r439
+ if (majorEndOld < 0) {
+ majorEndOld = oldVersion.length();
+ }
}
boolean releaseRequired = false;
int majorEndMin = minVersion.indexOf("-SNAPSHOT");
if (majorEndMin < 0) {
releaseRequired = true;
- majorEndMin = minVersion.length();
+ majorEndMin = minVersion.indexOf('-');
+ if (majorEndMin < 0) {
+ majorEndMin = minVersion.length();
+ }
}
xOld = Integer.valueOf(oldVersion.substring(fromInd, majorEndOld));
@@ -301,39 +300,6 @@ public class Configurator {
return true;
}
- /**
-
- * @param oldVersion
- * @param newVersion
- * @return
- */
-// private boolean updateRequiredStrict(String oldVersion, String newVersion) {
-// log.debug("comparing " + oldVersion + " to " + newVersion);
-// if (oldVersion != null && !UNKOWN_VERSION.equals(oldVersion)) {
-// if (newVersion != null && !UNKOWN_VERSION.equals(newVersion)) {
-// String[] oldV = oldVersion.split("-");
-// String[] newV = newVersion.split("-");
-// log.trace("comparing " + oldV[0] + " to " + newV[0]);
-// if (oldV[0].compareTo(newV[0]) < 0) {
-// log.debug("update required");
-// return true;
-// } else {
-// log.trace("comparing " + oldV[oldV.length - 1] + " to " + newV[newV.length - 1]);
-// if (oldV[oldV.length - 1].compareTo(newV[newV.length - 1]) < 0) {
-// log.debug("update required");
-// return true;
-// } else {
-// log.debug("no update required");
-// return false;
-// }
-// }
-// }
-// log.debug("unknown new version, do not update");
-// return true;
-// }
-// log.debug("unknown old version, update required");
-// return true;
-// }
protected static void backupAndDelete(File dir, URI relativeTo, ZipOutputStream zip) throws IOException {
if (dir.isDirectory()) {
File[] subDirs = dir.listFiles();
@@ -454,8 +420,7 @@ public class Configurator {
passwdWriter.write(password);
passwdWriter.close();
if (!passwdFile.setReadable(false, false) || !passwdFile.setReadable(true, true)) {
- passwdFile.delete();
- throw new IOException("failed to make " + passwdFile + " owner readable only, deleting file");
+ log.error("failed to make " + passwdFile + " owner readable only (certain file-systems do not support owner's permissions)");
}
TLSServerCA ca = new TLSServerCA();
KeyStore ks = ca.generateKeyStore(password);
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
index 4ae3b060..08a0808a 100644
--- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Container.java
+++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Container.java
@@ -151,7 +151,7 @@ public class Container {
perms.add(new RuntimePermission("getClassLoader"));
// standard permissions
- perms.add(new PropertyPermission("*", "read"));
+ perms.add(new PropertyPermission("*", "read,write"));
perms.add(new RuntimePermission("accessDeclaredMembers"));
perms.add(new RuntimePermission("accessClassInPackage.*"));
perms.add(new RuntimePermission("defineClassInPackage.*"));
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 f7be7b65..23d832a2 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,27 +1,33 @@
package at.gv.egiz.bku.webstart;
+import at.gv.egiz.bku.webstart.gui.BKUControllerInterface;
+import at.gv.egiz.bku.webstart.gui.TrayMenuListener;
import iaik.asn1.CodingException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Locale;
-import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.jnlp.UnavailableServiceException;
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 com.sun.javaws.security.JavaWebStartSecurity;
+import java.awt.AWTException;
import java.awt.Desktop;
+import java.awt.Image;
+import java.awt.MenuItem;
+import java.awt.PopupMenu;
import java.awt.SplashScreen;
+import java.awt.SystemTray;
+import java.awt.TrayIcon;
import java.net.BindException;
import java.net.URI;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
+import javax.imageio.ImageIO;
import javax.jnlp.BasicService;
import javax.jnlp.ServiceManager;
import org.mortbay.util.MultiException;
@@ -31,18 +37,26 @@ public class Launcher implements BKUControllerInterface {
public static final String WEBAPP_RESOURCE = "BKULocal.war";
public static final String CERTIFICATES_RESOURCE = "BKUCertificates.jar";
public static final String WEBAPP_FILE = "BKULocal.war";
- public static final String MESSAGES_RESOURCE = "at/gv/egiz/bku/webstart/ui/UIMessages";
+ public static final String MESSAGES_RESOURCE = "at/gv/egiz/bku/webstart/messages";
+ public static final String TRAYICON_RESOURCE = "at/gv/egiz/bku/webstart/logo_";
/** resource bundle messages */
- public static final String GREETING_CAPTION = "Greetings.Caption";
- public static final String GREETING_MESSAGE = "Greetings.Message";
- public static final String CONFIG_CAPTION = "Config.Caption";
- public static final String CONFIG_MESSAGE = "Config.Message";
- public static final String STARTUP_CAPTION = "Startup.Caption";
- public static final String STARTUP_MESSAGE = "Startup.Message";
- public static final String ERROR_CAPTION = "Error.Caption";
- public static final String ERROR_STARTUP_MESSAGE = "Error.Startup.Message";
- public static final String ERROR_CONF_MESSAGE = "Error.Conf.Message";
- public static final String ERROR_BIND_MESSAGE = "Error.Bind.Message";
+ public static final String CAPTION_DEFAULT = "tray.caption.default";
+ public static final String CAPTION_ERROR = "tray.caption.error";
+ public static final String MESSAGE_START = "tray.message.start";
+ public static final String MESSAGE_START_OFFLINE = "tray.message.start.offline";
+ public static final String MESSAGE_CONFIG = "tray.message.config";
+ public static final String MESSAGE_CERTS = "tray.message.certs";
+ public static final String MESSAGE_FINISHED = "tray.message.finished";
+ public static final String MESSAGE_SHUTDOWN = "tray.message.shutdown";
+ 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 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;
private static Log log = LogFactory.getLog(Launcher.class);
@@ -56,7 +70,6 @@ public class Launcher implements BKUControllerInterface {
HTTPS_SECURITY_LAYER_URI = tmp;
}
}
-
public static final String version;
static {
String tmp = Configurator.UNKOWN_VERSION;
@@ -78,16 +91,107 @@ public class Launcher implements BKUControllerInterface {
log.info("BKU Web Start " + version);
}
}
-
private Configurator config;
private Container server;
private BasicService basicService;
+ private TrayIcon trayIcon;
+ private ResourceBundle messages;
+
+ public Launcher() {
+ if (log.isTraceEnabled()) {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm instanceof JavaWebStartSecurity) {
+ System.setSecurityManager(new LogSecurityManager((JavaWebStartSecurity) sm));
+ }
+ }
+ messages = ResourceBundle.getBundle(MESSAGES_RESOURCE, Locale.getDefault());
+ trayIcon = initTrayIcon();
+ }
+
+ public void launch() throws Exception {
+ initStart();
+ try {
+ initConfig();
+ } catch (Exception ex) {
+ log.fatal("Failed to initialize configuration", ex);
+ trayIcon.displayMessage(messages.getString(CAPTION_ERROR),
+ messages.getString(ERROR_CONFIG), TrayIcon.MessageType.ERROR);
+ throw ex;
+ }
+ try {
+ startServer();
+ initFinished();
+ } catch (BindException ex) {
+ log.fatal("Failed to launch server, " + ex.getMessage(), ex);
+ trayIcon.displayMessage(messages.getString(CAPTION_ERROR),
+ messages.getString(ERROR_BIND), TrayIcon.MessageType.ERROR);
+ throw ex;
+ } catch (MultiException ex) {
+ log.fatal("Failed to launch server, " + ex.getMessage(), ex);
+ if (ex.getThrowable(0) instanceof BindException) {
+ trayIcon.displayMessage(messages.getString(CAPTION_ERROR),
+ messages.getString(ERROR_BIND), TrayIcon.MessageType.ERROR);
+ } else {
+ trayIcon.displayMessage(messages.getString(CAPTION_ERROR),
+ messages.getString(ERROR_START), TrayIcon.MessageType.ERROR);
+ }
+ throw ex;
+ } catch (Exception ex) {
+ log.fatal("Failed to launch server, " + ex.getMessage(), ex);
+ trayIcon.displayMessage(messages.getString(CAPTION_ERROR),
+ messages.getString(ERROR_START), TrayIcon.MessageType.ERROR);
+ throw ex;
+ }
+ }
+
+ private TrayIcon initTrayIcon() { //ResourceBundle messages, BKUControllerInterface bkuHook) {
+ if (SystemTray.isSupported()) {
+ try {
+ // get the SystemTray instance
+ SystemTray tray = SystemTray.getSystemTray();
+ log.debug("TrayIcon size: " + tray.getTrayIconSize());
+ String iconResource = (tray.getTrayIconSize().height < 25)
+ ? TRAYICON_RESOURCE + "24.png"
+ : 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 shutdownItem = new MenuItem(messages.getString(LABEL_SHUTDOWN));
+ shutdownItem.addActionListener(listener);
+ shutdownItem.setActionCommand(TrayMenuListener.SHUTDOWN_COMMAND);
+ popup.add(shutdownItem);
+
+ MenuItem aboutItem = new MenuItem(messages.getString(LABEL_ABOUT));
+ aboutItem.setActionCommand(TrayMenuListener.ABOUT_COMMAND);
+ aboutItem.addActionListener(listener);
+ popup.add(aboutItem);
+
+ TrayIcon ti = new TrayIcon(image, messages.getString(TOOLTIP_DEFAULT), popup);
+ ti.addActionListener(listener);
+ tray.add(ti);
+ return ti;
+ } catch (AWTException ex) {
+ log.error("Failed to init tray icon", ex);
+ } catch (IOException ex) {
+ log.error("Failed to load tray icon image", ex);
+ }
+ } else {
+ log.error("No system tray support");
+ }
+ return null;
+ }
private void initStart() {
try {
+ trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+ messages.getString(MESSAGE_START), TrayIcon.MessageType.INFO);
basicService = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
if (basicService.isOffline()) {
log.info("launching MOCCA Web Start offline");
+ trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+ messages.getString(MESSAGE_START_OFFLINE), TrayIcon.MessageType.INFO);
} else {
log.info("launching MOCCA Web Start online");
}
@@ -96,30 +200,20 @@ public class Launcher implements BKUControllerInterface {
}
}
- private void initTrayIcon() {
- log.debug("init MOCCA tray icon");
- Locale loc = Locale.getDefault();
- ResourceBundle resourceBundle;
- try {
- resourceBundle = ResourceBundle.getBundle(
- MESSAGES_RESOURCE, loc);
- } catch (MissingResourceException mx) {
- resourceBundle = ResourceBundle.getBundle(
- MESSAGES_RESOURCE, Locale.ENGLISH);
- }
- TrayIconDialog.getInstance().init(resourceBundle);
- TrayIconDialog.getInstance().setShutdownHook(this);
-// TrayIconDialog.getInstance().displayInfo(GREETING_CAPTION, GREETING_MESSAGE);
- }
-
private void initConfig() throws IOException, CodingException, GeneralSecurityException {
+ trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+ messages.getString(MESSAGE_CONFIG), TrayIcon.MessageType.INFO);
config = new Configurator();
config.ensureConfiguration();
+ trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+ messages.getString(MESSAGE_CERTS), TrayIcon.MessageType.INFO);
config.ensureCertificates();
}
private void startServer() throws Exception {
log.info("init servlet container and MOCCA webapp");
+// trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+// messages.getString(MESSAGE_START), TrayIcon.MessageType.INFO);
server = new Container();
server.init();
server.start();
@@ -127,6 +221,8 @@ public class Launcher implements BKUControllerInterface {
private void initFinished() {
try {
+ trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+ messages.getString(MESSAGE_FINISHED), TrayIcon.MessageType.INFO);
// standalone (non-webstart) version has splashscreen
if (SplashScreen.getSplashScreen() != null) {
try {
@@ -162,6 +258,8 @@ public class Launcher implements BKUControllerInterface {
@Override
public void shutDown() {
log.info("Shutting down server");
+ trayIcon.displayMessage(messages.getString(CAPTION_DEFAULT),
+ messages.getString(MESSAGE_SHUTDOWN), TrayIcon.MessageType.INFO);
if ((server != null) && (server.isRunning())) {
try {
if (server.isRunning()) {
@@ -179,51 +277,13 @@ public class Launcher implements BKUControllerInterface {
}
public static void main(String[] args) throws InterruptedException, IOException {
-
- if (log.isTraceEnabled()) {
- SecurityManager sm = System.getSecurityManager();
- if (sm instanceof JavaWebStartSecurity) {
- System.setSecurityManager(new LogSecurityManager((JavaWebStartSecurity) sm));
- }
- }
-
- Launcher launcher = new Launcher();
- launcher.initStart();
- launcher.initTrayIcon(); //keep reference? BKULauncher not garbage collected after main()
-
try {
- TrayIconDialog.getInstance().displayInfo(CONFIG_CAPTION, CONFIG_MESSAGE);
- launcher.initConfig();
+ Launcher launcher = new Launcher();
+ launcher.launch();
} catch (Exception ex) {
- log.fatal("Failed to initialize configuration", ex);
- TrayIconDialog.getInstance().displayError(ERROR_CAPTION, ERROR_CONF_MESSAGE);
- Thread.sleep(5000);
- System.exit(-1000);
- }
-
- try {
- TrayIconDialog.getInstance().displayInfo(STARTUP_CAPTION, STARTUP_MESSAGE);
- launcher.startServer();
- TrayIconDialog.getInstance().displayInfo(GREETING_CAPTION, GREETING_MESSAGE);
- launcher.initFinished();
- } catch (BindException ex) {
- log.fatal("Failed to launch server, " + ex.getMessage(), ex);
- TrayIconDialog.getInstance().displayError(ERROR_CAPTION, ERROR_BIND_MESSAGE);
- Thread.sleep(5000);
- System.exit(-1000);
- } catch (MultiException ex) {
- log.fatal("Failed to launch server, " + ex.getMessage(), ex);
- if (ex.getThrowable(0) instanceof BindException) {
- TrayIconDialog.getInstance().displayError(ERROR_CAPTION, ERROR_BIND_MESSAGE);
- } else {
- TrayIconDialog.getInstance().displayError(ERROR_CAPTION, ERROR_STARTUP_MESSAGE);
- }
- Thread.sleep(5000);
- System.exit(-1000);
- } catch (Exception e) {
- log.fatal("Failed to launch server, " + e.getMessage(), e);
- TrayIconDialog.getInstance().displayError(ERROR_CAPTION, ERROR_STARTUP_MESSAGE);
+ log.info("waiting to shutdown...");
Thread.sleep(5000);
+ log.info("exit");
System.exit(-1000);
}
}
diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.form b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.form
new file mode 100644
index 00000000..c1cfdab7
--- /dev/null
+++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.form
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
+ <Properties>
+ <Property name="defaultCloseOperation" type="int" value="2"/>
+ <Property name="title" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="at/gv/egiz/bku/webstart/messages.properties" key="about.frame.title" replaceFormat="java.util.ResourceBundle.getBundle(&quot;{bundleNameSlashes}&quot;).getString(&quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ <SyntheticProperties>
+ <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+ </SyntheticProperties>
+ <AuxValues>
+ <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+ <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+ <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+ </AuxValues>
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Component id="jPanel1" alignment="1" max="32767" attributes="0"/>
+ <Component id="jPanel3" alignment="1" max="32767" attributes="0"/>
+ </Group>
+ <EmptySpace max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
+ <EmptySpace pref="12" max="32767" attributes="0"/>
+ <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Container class="javax.swing.JPanel" name="jPanel1">
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+ <EmptySpace type="unrelated" max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+ <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+ </Group>
+ <EmptySpace max="32767" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Component class="javax.swing.JLabel" name="jLabel1">
+ <Properties>
+ <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+ <Image iconType="3" name="/at/gv/egiz/bku/webstart/logo_notext.png"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="jLabel2">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+ <Connection code="getVersionText(bundle)" type="code"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="jLabel3">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="at/gv/egiz/bku/webstart/messages.properties" key="about.title" replaceFormat="java.util.ResourceBundle.getBundle(&quot;{bundleNameSlashes}&quot;).getString(&quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ </Component>
+ </SubComponents>
+ </Container>
+ <Container class="javax.swing.JPanel" name="jPanel3">
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="1" attributes="0">
+ <EmptySpace pref="157" max="32767" attributes="0"/>
+ <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="32767" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Component class="javax.swing.JButton" name="jButton1">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="at/gv/egiz/bku/webstart/messages.properties" key="button.close" replaceFormat="java.util.ResourceBundle.getBundle(&quot;{bundleNameSlashes}&quot;).getString(&quot;{key}&quot;)"/>
+ </Property>
+ </Properties>
+ <Events>
+ <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+ </Events>
+ </Component>
+ </SubComponents>
+ </Container>
+ </SubComponents>
+</Form>
diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.java
new file mode 100644
index 00000000..efa80bd6
--- /dev/null
+++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/AboutDialog.java
@@ -0,0 +1,162 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/*
+ * AboutDialog.java
+ *
+ * Created on 18.08.2009, 11:54:44
+ */
+
+package at.gv.egiz.bku.webstart.gui;
+
+import java.text.Format;
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+/**
+ *
+ * @author clemens
+ */
+public class AboutDialog extends javax.swing.JDialog {
+
+ /** Creates new form AboutDialog */
+ public AboutDialog(java.awt.Frame parent, boolean modal, String version) {
+ super(parent, modal);
+ this.version = version;
+ initComponents();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ jPanel1 = new javax.swing.JPanel();
+ jLabel1 = new javax.swing.JLabel();
+ jLabel2 = new javax.swing.JLabel();
+ jLabel3 = new javax.swing.JLabel();
+ jPanel3 = new javax.swing.JPanel();
+ jButton1 = new javax.swing.JButton();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("at/gv/egiz/bku/webstart/messages"); // NOI18N
+ setTitle(bundle.getString("about.frame.title")); // NOI18N
+
+ jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/at/gv/egiz/bku/webstart/logo_notext.png"))); // NOI18N
+
+ jLabel2.setText(getVersionText(bundle));
+
+ jLabel3.setText(bundle.getString("about.title")); // NOI18N
+
+ javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+ jPanel1.setLayout(jPanel1Layout);
+ jPanel1Layout.setHorizontalGroup(
+ jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(jPanel1Layout.createSequentialGroup()
+ .addComponent(jLabel1)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jLabel3)
+ .addComponent(jLabel2))
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ );
+ jPanel1Layout.setVerticalGroup(
+ jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jLabel1)
+ .addGroup(jPanel1Layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jLabel3)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(jLabel2))
+ );
+
+ jButton1.setText(bundle.getString("button.close")); // NOI18N
+ jButton1.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButton1ActionPerformed(evt);
+ }
+ });
+
+ javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
+ jPanel3.setLayout(jPanel3Layout);
+ jPanel3Layout.setHorizontalGroup(
+ jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
+ .addContainerGap(157, Short.MAX_VALUE)
+ .addComponent(jButton1)
+ .addContainerGap())
+ );
+ jPanel3Layout.setVerticalGroup(
+ jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(jPanel3Layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jButton1)
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ );
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
+ .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap())
+ );
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+ private String getVersionText(ResourceBundle bundle) {
+ return MessageFormat.format(bundle.getString("about.version"), version);
+ }
+ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+ // TODO add your handling code here:
+ setVisible(false);
+ }//GEN-LAST:event_jButton1ActionPerformed
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ java.awt.EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ AboutDialog dialog = new AboutDialog(new javax.swing.JFrame(), true, "1.2.3");
+ dialog.addWindowListener(new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent e) {
+ System.exit(0);
+ }
+ });
+ dialog.setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton jButton1;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabel2;
+ private javax.swing.JLabel jLabel3;
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JPanel jPanel3;
+ // End of variables declaration//GEN-END:variables
+
+ private String version;
+}
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/gui/BKUControllerInterface.java
index fd9838f9..886b55f7 100644
--- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/BKUControllerInterface.java
+++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/BKUControllerInterface.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package at.gv.egiz.bku.webstart.ui;
+package at.gv.egiz.bku.webstart.gui;
public interface BKUControllerInterface {
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
new file mode 100644
index 00000000..1e5efe8e
--- /dev/null
+++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/TrayMenuListener.java
@@ -0,0 +1,75 @@
+/*
+ * 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());
+ }
+ }
+}
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
deleted file mode 100644
index fb7c40dd..00000000
--- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialog.java
+++ /dev/null
@@ -1,205 +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.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 {
- public static final String TRAYICON_RESOURCE = "at/gv/egiz/bku/webstart/ui/trayicon_32.png";
- public static final String TRAYMENU_SHUTDOWN = "TrayMenu.Shutdown";
- public static final String TRAYMENU_TOOLTIP = "TrayMenu.Tooltip";
-
- 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(TRAYICON_RESOURCE));
- 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
deleted file mode 100644
index 078844cb..00000000
--- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/ui/TrayIconDialogInterface.java
+++ /dev/null
@@ -1,33 +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.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