summaryrefslogtreecommitdiff
path: root/BKUCommonGUI/src/main/java/at/gv
diff options
context:
space:
mode:
Diffstat (limited to 'BKUCommonGUI/src/main/java/at/gv')
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java1
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java (renamed from BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ViewerDialog.java)181
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java10
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java211
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java3
5 files changed, 277 insertions, 129 deletions
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java
index 2daf3300..c7032f90 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java
@@ -38,6 +38,7 @@ public interface BKUGUIFacade {
public static final String ERR_CARD_LOCKED = "error.card.locked";
public static final String ERR_CARD_NOTACTIVATED = "error.card.notactivated";
public static final String ERR_VIEWER = "error.viewer";
+ public static final String ERR_EXTERNAL_LINK = "error.external.link";
public static final String MESSAGES_BUNDLE = "at/gv/egiz/bku/gui/Messages";
public static final String DEFAULT_BACKGROUND = "/images/BackgroundChipperling.png";
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ViewerDialog.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java
index e643c876..8883098a 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ViewerDialog.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java
@@ -23,18 +23,14 @@ import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
-import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.io.BufferedReader;
-import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
-import java.net.URL;
-import java.net.URLConnection;
import java.nio.charset.Charset;
import java.text.MessageFormat;
import java.util.List;
@@ -51,8 +47,6 @@ import javax.swing.JScrollPane;
import javax.swing.LayoutStyle;
import javax.swing.text.Document;
import javax.swing.text.EditorKit;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -60,102 +54,84 @@ import org.apache.commons.logging.LogFactory;
*
* @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
*/
-public class ViewerDialog extends JDialog
+public class HashDataViewer extends JDialog
implements ActionListener {
public static final String PLAINTEXT_FONT = "Monospaced";
- protected static final Log log = LogFactory.getLog(ViewerDialog.class);
-// private ViewerDialog dialog;
+ protected static final Log log = LogFactory.getLog(HashDataViewer.class);
+
+ private static HashDataViewer dialog;
protected ResourceBundle messages;
/**
*
- * @param frameComp
* @param signedReferences currently, only one hashdata input (the first in the list) is displayed
- * @param messages
- * @param saveListener
- * @param saveCommand
- * @param helpListener
+ */
+ public static void showHashDataInput(List<HashDataInput> hashDataInputs,
+ ResourceBundle messages,
+ ActionListener saveListener,
+ String saveCommand,
+ ActionListener helpListener) {
+ showHashDataInput(null, hashDataInputs, messages, saveListener, saveCommand, helpListener);
+ }
+
+ /**
+ *
+ * @param frameComp owner
*/
public static void showHashDataInput(Component frameComp,
List<HashDataInput> hashDataInputs,
ResourceBundle messages,
ActionListener saveListener,
String saveCommand,
- HelpMouseListener helpListener) {
+ ActionListener helpListener) {
Frame frame = null;
if (frameComp != null) {
JOptionPane.getFrameForComponent(frameComp);
}
- ViewerDialog viewer = new ViewerDialog(frame,
+ dialog = new HashDataViewer(frame,
messages,
hashDataInputs,
saveListener,
saveCommand,
helpListener);
- viewer.setVisible(true);
+ dialog.setVisible(true);
}
- public static void showHelp(Component frameComp,
- String helpTopic,
-// Reader helpDocument,
- InputStream helpDocument,
- String mimeType,
- ResourceBundle messages) {
-
- Frame frame = null;
- if (frameComp != null) {
- JOptionPane.getFrameForComponent(frameComp);
- }
- ViewerDialog viewer = new ViewerDialog(frame, messages, helpTopic, helpDocument, mimeType);
- viewer.setVisible(true);
- }
-
- /**
- * TODO make encoding aware!
- * @param frame
- * @param title
- * @param messages
- * @param hashDataInputs
- * @param saveListener
- * @param saveCommand
- * @param helpListener
- */
- private ViewerDialog(Frame frame,
+ private HashDataViewer(Frame frame,
ResourceBundle messages,
List<HashDataInput> hashDataInputs,
ActionListener saveListener,
String saveCommand,
- HelpMouseListener helpListener) {
+ ActionListener helpListener) {
super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_VIEWER), true);
this.messages = messages;
HashDataInput hashData = hashDataInputs.get(0);
-// Charset cs;
-// if (hashData.getEncoding() == null) {
-// cs = Charset.forName("UTF-8");
-// } else {
-// try {
-// cs = Charset.forName(hashData.getEncoding());
-// } catch (Exception ex) {
-// log.debug("charset " + hashData.getEncoding() + " not supported, assuming UTF-8: " + ex.getMessage());
-// cs = Charset.forName("UTF-8");
-// }
-// }
-
-// InputStreamReader isr = new InputStreamReader(hashData.getHashDataInput(), cs);
-// Reader content = new BufferedReader(isr);
- InputStream content = hashData.getHashDataInput();
- String mimeType = hashData.getMimeType();
- String encoding = hashData.getEncoding();
- if (encoding == null) {
- encoding = "UTF-8";
+ Charset cs;
+ if (hashData.getEncoding() == null) {
+ cs = Charset.forName("UTF-8");
+ } else {
+ try {
+ cs = Charset.forName(hashData.getEncoding());
+ } catch (Exception ex) {
+ log.debug("charset " + hashData.getEncoding() + " not supported, assuming UTF-8: " + ex.getMessage());
+ cs = Charset.forName("UTF-8");
+ }
}
-
- JPanel hashDataPanel = createViewerPanel(messages.getString(BKUGUIFacade.MESSAGE_HASHDATA), content, mimeType, encoding, helpListener);
+
+
+ InputStreamReader isr = new InputStreamReader(hashData.getHashDataInput(), cs);
+ Reader content = new BufferedReader(isr);
+
+ JPanel hashDataPanel = createViewerPanel(
+ messages.getString(BKUGUIFacade.MESSAGE_HASHDATA),
+ content,
+ hashData.getMimeType(),
+ helpListener);
JPanel buttonPanel = createButtonPanel(saveListener, saveCommand);
initContentPane(new Dimension(600, 400), hashDataPanel, buttonPanel);
@@ -167,31 +143,6 @@ public class ViewerDialog extends JDialog
}
}
- private ViewerDialog(Frame frame,
- ResourceBundle messages,
- String helpTopic,
-// Reader helpDocument,
- InputStream helpDocument,
- String mimeType) {
- super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_HELP), true);
- this.messages = messages;
-
- String p = messages.getString(BKUGUIFacade.MESSAGE_HELP);
- String helpItem = messages.getString(helpTopic);
- String viewerLabel = MessageFormat.format(p, new Object[] {helpItem});
-
- JPanel helpPanel = createViewerPanel(viewerLabel, helpDocument, mimeType, null, null);
- JPanel buttonPanel = createButtonPanel();
-
- initContentPane(new Dimension(600, 400), helpPanel, buttonPanel);
- pack();
- if (frame != null) {
- setLocationRelativeTo(frame);
- } else {
- setLocationByPlatform(true);
- }
- }
-
private void initContentPane(Dimension preferredSize, JPanel viewerPanel, JPanel buttonPanel) {
Container contentPane = getContentPane();
contentPane.setPreferredSize(preferredSize);
@@ -220,7 +171,10 @@ public class ViewerDialog extends JDialog
* @param helpListener may be null
* @return
*/
- private JPanel createViewerPanel(String viewerLabelText, InputStream content, String mimeType, String encoding, HelpMouseListener helpListener) {
+ private JPanel createViewerPanel(String viewerLabelText,
+ Reader content,
+ String mimeType,
+ final ActionListener helpListener) {
log.debug("viewer dialog: " + mimeType);
if (mimeType == null) {
@@ -241,15 +195,8 @@ public class ViewerDialog extends JDialog
// document.putProperty("IgnoreCharsetDirective", new Boolean(true));
try {
- if (encoding != null) {
- BufferedReader contentReader = new BufferedReader(new InputStreamReader(content, encoding));
- viewer.read(contentReader, document);
- contentReader.close();
- } else {
- // charset declaration in content
viewer.read(content, document);
content.close();
- }
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
String p = messages.getString(BKUGUIFacade.ERR_VIEWER);
@@ -272,9 +219,15 @@ public class ViewerDialog extends JDialog
if (helpListener != null) {
JLabel helpLabel = new JLabel();
- helpListener.setHelpTopic(BKUGUIFacade.HELP_HASHDATAVIEWER);
helpLabel.setIcon(new ImageIcon(getClass().getResource(BKUGUIFacade.HELP_IMG)));
- helpLabel.addMouseListener(helpListener);
+ helpLabel.addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mouseClicked(MouseEvent arg0) {
+ ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, BKUGUIFacade.HELP_HASHDATAVIEWER);
+ helpListener.actionPerformed(e);
+ }
+ });
helpLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
viewerPanelLayout.setHorizontalGroup(
viewerPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(viewerPanelLayout.createSequentialGroup().addComponent(viewerLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE).addComponent(helpLabel)).addComponent(scrollPane)); //, 0, 0, Short.MAX_VALUE));
@@ -300,25 +253,6 @@ public class ViewerDialog extends JDialog
return viewerPanel;
}
-
- private JPanel createButtonPanel() {
- JButton closeButton = new JButton();
- closeButton.setText(messages.getString(BKUGUIFacade.BUTTON_CLOSE));
- closeButton.addActionListener(this);
-
- JPanel buttonPanel = new JPanel();
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(closeButton));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addComponent(closeButton));
- return buttonPanel;
- }
private JPanel createButtonPanel(ActionListener saveListener, String saveCommand) {
JButton closeButton = new JButton();
@@ -349,9 +283,6 @@ public class ViewerDialog extends JDialog
@Override
public void actionPerformed(ActionEvent e) {
-// if ("close".equals(e.getActionCommand())) {
-// ViewerDialog.dialog.setVisible(false);
-// HashDataViewer.dialog.dispose();
- this.setVisible(false);
+ HashDataViewer.dialog.setVisible(false);
}
}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java
index 531884d1..b7bbe971 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpMouseListener.java
@@ -28,23 +28,27 @@ public class HelpMouseListener extends MouseAdapter {
protected static final Log log = LogFactory.getLog(HelpMouseListener.class);
- protected ActionListener externalHelpListener;
+ protected ActionListener helpListener;
protected String locale;
protected String topic;
public HelpMouseListener(ActionListener externalHelpListener) {
super();
- this.externalHelpListener = externalHelpListener;
+ this.helpListener = externalHelpListener;
}
public void setHelpTopic(String topic) {
log.trace("setting help topic: " + topic);
this.topic = topic;
}
+
+ public ActionListener getActionListener() {
+ return helpListener;
+ }
@Override
public void mouseClicked(MouseEvent arg0) {
ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, topic);
- externalHelpListener.actionPerformed(e);
+ helpListener.actionPerformed(e);
}
}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java
new file mode 100644
index 00000000..42ca2090
--- /dev/null
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HelpViewer.java
@@ -0,0 +1,211 @@
+/*
+ * 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.gui;
+
+import at.gv.egiz.bku.gui.*;
+import java.applet.AppletContext;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+import javax.swing.GroupLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.LayoutStyle;
+import javax.swing.SwingUtilities;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *
+ * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
+ */
+public class HelpViewer extends JDialog
+ implements ActionListener {
+
+ protected static final Log log = LogFactory.getLog(HelpViewer.class);
+ private static HelpViewer dialog;
+ protected ResourceBundle messages;
+ protected AppletContext ctx;
+
+ /**
+ *
+ * @param ctx external links are opened via ctx.showDocument()
+ * @param helpURL
+ * @param helpTopic
+ * @param messages
+ */
+ public static void showHelpDialog(AppletContext ctx,
+ URL helpURL,
+ String helpTopic,
+ ResourceBundle messages) {
+ showHelpDialog(null, ctx, helpURL, helpTopic, messages);
+ }
+
+ public static void showHelpDialog(URL helpURL,
+ String helpTopic,
+ ResourceBundle messages) {
+ showHelpDialog(null, null, helpURL, helpTopic, messages);
+ }
+
+ public static void showHelpDialog(Component owner,
+ AppletContext ctx,
+ URL helpURL,
+ String helpTopic,
+ ResourceBundle messages) {
+
+ Frame frame = null;
+ if (owner != null) {
+ JOptionPane.getFrameForComponent(owner);
+ }
+ dialog = new HelpViewer(frame, messages, ctx, helpURL, helpTopic);
+ dialog.setVisible(true);
+ }
+
+ private HelpViewer(Frame frame,
+ ResourceBundle messages,
+ AppletContext ctx,
+ URL helpURL,
+ String helpTopic) {
+ super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_HELP), true);
+ this.messages = messages;
+ this.ctx = ctx;
+
+ String p = messages.getString(BKUGUIFacade.MESSAGE_HELP);
+ String helpItem = messages.getString(helpTopic);
+ String viewerLabel = MessageFormat.format(p, new Object[]{helpItem});
+
+ JPanel helpPanel = createViewerPanel(viewerLabel, helpURL);
+ JPanel buttonPanel = createButtonPanel();
+
+ initContentPane(new Dimension(600, 400), helpPanel, buttonPanel);
+ pack();
+ if (frame != null) {
+ setLocationRelativeTo(frame);
+ } else {
+ setLocationByPlatform(true);
+ }
+ }
+
+ private void initContentPane(Dimension preferredSize, JPanel viewerPanel, JPanel buttonPanel) {
+ Container contentPane = getContentPane();
+ contentPane.setPreferredSize(preferredSize);
+
+ GroupLayout mainLayout = new GroupLayout(contentPane);
+ contentPane.setLayout(mainLayout);
+
+ mainLayout.setHorizontalGroup(
+ mainLayout.createSequentialGroup().addContainerGap().addGroup(
+ mainLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(viewerPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(buttonPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap());
+ mainLayout.setVerticalGroup(
+ mainLayout.createSequentialGroup().addContainerGap().addComponent(viewerPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(buttonPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addContainerGap());
+ }
+
+ private JPanel createViewerPanel(String viewerLabelText, URL helpURL) {
+ log.debug("viewer dialog: " + helpURL.toString());
+
+ final JEditorPane viewer = new JEditorPane();
+ viewer.setEditable(false);
+ try {
+ viewer.setPage(helpURL);
+ viewer.addHyperlinkListener(new HyperlinkListener() {
+
+ @Override
+ public void hyperlinkUpdate(HyperlinkEvent e) {
+ final URL url = e.getURL();
+ if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+ if (ctx != null) {
+ log.debug("open external link in help viewer: " + url);
+ ctx.showDocument(url, "_blank");
+ } else {
+ SwingUtilities.invokeLater(new Runnable() {
+
+ @Override
+ public void run() {
+ String msgP = messages.getString(BKUGUIFacade.ERR_EXTERNAL_LINK);
+ String msg = MessageFormat.format(msgP, url);
+ String title = messages.getString(BKUGUIFacade.TITLE_ERROR);
+ JOptionPane.showMessageDialog(rootPane, msg, title, JOptionPane.ERROR_MESSAGE);
+ }
+ });
+ }
+ }
+ }
+ });
+ } catch (IOException ex) {
+ String p = messages.getString(BKUGUIFacade.ERR_VIEWER);
+ viewer.setText(MessageFormat.format(p, new Object[]{ex.getMessage()}));
+ }
+
+ JScrollPane scrollPane = new JScrollPane(viewer);
+ scrollPane.setPreferredSize(viewer.getPreferredSize());
+ scrollPane.setAlignmentX(LEFT_ALIGNMENT);
+ viewer.setCaretPosition(0);
+
+ JLabel viewerLabel = new JLabel();
+ viewerLabel.setText(viewerLabelText);
+ viewerLabel.setFont(viewerLabel.getFont().deriveFont(viewerLabel.getFont().getStyle() | java.awt.Font.BOLD));
+ viewerLabel.setLabelFor(viewer);
+
+ JPanel viewerPanel = new JPanel();
+ GroupLayout viewerPanelLayout = new GroupLayout(viewerPanel);
+ viewerPanel.setLayout(viewerPanelLayout);
+
+ viewerPanelLayout.setHorizontalGroup(
+ viewerPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(viewerLabel).addComponent(scrollPane));
+ viewerPanelLayout.setVerticalGroup(
+ viewerPanelLayout.createSequentialGroup().addComponent(viewerLabel).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(scrollPane));
+
+ return viewerPanel;
+ }
+
+ private JPanel createButtonPanel() {
+ JButton closeButton = new JButton();
+ closeButton.setText(messages.getString(BKUGUIFacade.BUTTON_CLOSE));
+ closeButton.addActionListener(this);
+
+ JPanel buttonPanel = new JPanel();
+ GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
+ buttonPanel.setLayout(buttonPanelLayout);
+
+ buttonPanelLayout.setHorizontalGroup(
+ buttonPanelLayout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(closeButton));
+ buttonPanelLayout.setVerticalGroup(
+ buttonPanelLayout.createSequentialGroup().addComponent(closeButton));
+ return buttonPanel;
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ HelpViewer.dialog.setVisible(false);
+ }
+}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java
index 6250dd0e..a810d34c 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java
@@ -954,7 +954,8 @@ public class SimpleGUI implements BKUGUIFacade {
log.debug("show plaintext hashdatainput dialog");
- ViewerDialog.showHashDataInput(contentPane, signedReferences, messages, saveListener, saveCommand, helpListener);
+ ActionListener l = helpListener.getActionListener();
+ HashDataViewer.showHashDataInput(contentPane, signedReferences, messages, saveListener, saveCommand, l);
}
});
}