summaryrefslogtreecommitdiff
path: root/BKUCommonGUI/src
diff options
context:
space:
mode:
Diffstat (limited to 'BKUCommonGUI/src')
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUI.java1146
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFactory.java23
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java (renamed from BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java)346
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java7
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java93
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java25
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperLinkRenderer.java47
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ImagePanel.java1
-rw-r--r--BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleHashDataTableModel.java60
-rw-r--r--BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUITest.java5
-rw-r--r--BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUIWorker.java122
11 files changed, 238 insertions, 1637 deletions
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUI.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUI.java
deleted file mode 100644
index f68f2ece..00000000
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUI.java
+++ /dev/null
@@ -1,1146 +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.gui;
-
-import at.gv.egiz.smcc.PINSpec;
-import at.gv.egiz.stal.HashDataInput;
-import java.awt.Container;
-import java.awt.Cursor;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.List;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import javax.swing.GroupLayout;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPasswordField;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JTextArea;
-import javax.swing.LayoutStyle;
-import javax.swing.SwingUtilities;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableModel;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *
- * @author clemens
- */
-public class BKUGUI implements BKUGUIFacade {
-
- private static final Log log = LogFactory.getLog(BKUGUI.class);
-
- protected HelpMouseListener helpListener;
-
- protected Container contentPane;
- protected ResourceBundle messages;
- /** left and right side main panels */
-// protected JPanel iconPanel;
- protected JPanel contentPanel;
- /** right side content panels and layouts */
- protected JPanel headerPanel;
- protected JPanel mainPanel;
- protected JPanel buttonPanel;
- /** right side fixed labels */
- protected JLabel titleLabel;
- /** remember the pinfield to return to worker */
- protected JPasswordField pinField;
-
- protected int buttonSize;
-
- private static final int CHECKBOX_WIDTH = new JCheckBox().getPreferredSize().width;
-
- /**
- * @param contentPane
- * @param localeString may be null
- */
-// @Override
- public void init(final Container contentPane, Locale locale, Style guiStyle, final URL background, ActionListener helpListener) {
-
- if (locale != null) {
- messages = ResourceBundle.getBundle(MESSAGES_BUNDLE, locale);
- } else {
- messages = ResourceBundle.getBundle(MESSAGES_BUNDLE);
- }
-
- this.contentPane = contentPane;
- registerHelpListener(helpListener);
-
- try {
-
- log.debug("scheduling gui initialization");
-
- SwingUtilities.invokeAndWait(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("initializing gui");
-
-// initIconPanel();
- initContentPanel(background);
-
- GroupLayout layout = new GroupLayout(contentPane);
- contentPane.setLayout(layout);
- layout.setHorizontalGroup(layout.createSequentialGroup().addComponent(contentPanel));
- layout.setVerticalGroup(layout.createSequentialGroup().addComponent(contentPanel));
-// layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
-// .addGroup(layout.createSequentialGroup()
-// .addComponent(iconPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(contentPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
-// layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
-// .addComponent(iconPanel, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-// .addComponent(contentPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
- }
- });
- } catch (Exception ex) {
- throw new RuntimeException("Failed to init GUI: " + ex.getMessage());
- }
- }
-
-// protected void initIconPanel() {
-// iconPanel = new JPanel();
-// JLabel iconLabel = new JLabel();
-// iconLabel.setIcon(new ImageIcon(getClass().getResource(LOGO_RESOURCE))); // NOI18N
-//
-// GroupLayout iconPanelLayout = new GroupLayout(iconPanel);
-// iconPanel.setLayout(iconPanelLayout);
-// iconPanelLayout.setHorizontalGroup(
-// iconPanelLayout.createSequentialGroup()
-// .addContainerGap()
-// .addComponent(iconLabel, GroupLayout.PREFERRED_SIZE, iconLabel.getPreferredSize().width, GroupLayout.PREFERRED_SIZE)
-// .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); //);
-// iconPanelLayout.setVerticalGroup(
-// iconPanelLayout.createSequentialGroup()
-// .addContainerGap()
-// .addComponent(iconLabel, GroupLayout.PREFERRED_SIZE, iconLabel.getPreferredSize().height, GroupLayout.PREFERRED_SIZE)
-// .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); //);
-// }
-
- protected void initContentPanel(URL background) {
-
- if (background == null) {
- background = this.getClass().getResource(DEFAULT_BACKGROUND);
- }
- contentPanel = new ImagePanel(background);
-
-// contentPanel.setBorder(new TitledBorder("content"));
-
- headerPanel = new JPanel();
- headerPanel.setOpaque(false);
- mainPanel = new JPanel();
- mainPanel.setOpaque(false);
- buttonPanel = new JPanel();
- buttonPanel.setOpaque(false);
-
-// headerPanel.setBorder(new TitledBorder("header"));
-// mainPanel.setBorder(new TitledBorder("main"));
-// buttonPanel.setBorder(new TitledBorder("button"));
-
- titleLabel = new JLabel();
- titleLabel.setFont(titleLabel.getFont().deriveFont(titleLabel.getFont().getStyle() |
- java.awt.Font.BOLD, titleLabel.getFont().getSize() + 2));
-
- JLabel helpLabel = new JLabel();
- helpLabel.setIcon(new ImageIcon(getClass().getResource(HELP_IMG)));
- helpLabel.addMouseListener(helpListener);
- helpLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-
- JButton b = new JButton();
- b.setText(messages.getString(BUTTON_CANCEL));
- if (b.getPreferredSize().width > buttonSize)
- buttonSize = b.getPreferredSize().width;
- b.setText(messages.getString(BUTTON_OK));
- if (b.getPreferredSize().width > buttonSize)
- buttonSize = b.getPreferredSize().width;
- b.setText(messages.getString(BUTTON_SIGN));
- if (b.getPreferredSize().width > buttonSize)
- buttonSize = b.getPreferredSize().width;
- b.setText(messages.getString(BUTTON_BACK));
- if (b.getPreferredSize().width > buttonSize)
- buttonSize = b.getPreferredSize().width;
- b.setText(messages.getString(BUTTON_SAVE));
- if (b.getPreferredSize().width > buttonSize)
- buttonSize = b.getPreferredSize().width;
-
-// if (cancelButton.getPreferredSize().width > buttonSize)
-// buttonSize = cancelButton.getPreferredSize().width;
-// if (signButton.getPreferredSize().width > buttonSize)
-// buttonSize = signButton.getPreferredSize().width;
-// if (backButton.getPreferredSize().width > buttonSize)
-// buttonSize = backButton.getPreferredSize().width;
-// if (saveButton.getPreferredSize().width > buttonSize)
-// buttonSize = saveButton.getPreferredSize().width;
-
-
- GroupLayout headerPanelLayout = new GroupLayout(headerPanel);
- headerPanel.setLayout(headerPanelLayout);
-
- headerPanelLayout.setHorizontalGroup(
- headerPanelLayout.createSequentialGroup()
- .addComponent(titleLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
- .addComponent(helpLabel));
- headerPanelLayout.setVerticalGroup(
- headerPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) //SequentialGroup()
- .addComponent(titleLabel, 0, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
- .addComponent(helpLabel));
-
-
- GroupLayout contentPanelLayout = new GroupLayout(contentPanel);
- contentPanel.setLayout(contentPanelLayout);
-
- contentPanelLayout.setHorizontalGroup(
- contentPanelLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(
- contentPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(headerPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(mainPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(buttonPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap());
- contentPanelLayout.setVerticalGroup(
- contentPanelLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(headerPanel, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(mainPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) //, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(buttonPanel, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addContainerGap());
- }
-
- @Override
- public Locale getLocale() {
- return messages.getLocale();
- }
-
- @Override
- public void showWelcomeDialog() {
-
- log.debug("scheduling welcome dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show welcome dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_WELCOME));
-
- helpListener.setHelpTopic(HELP_WELCOME);
-
- JLabel welcomeMsgLabel = new JLabel();
- welcomeMsgLabel.setFont(welcomeMsgLabel.getFont().deriveFont(welcomeMsgLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- welcomeMsgLabel.setText(messages.getString(MESSAGE_WAIT));
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(welcomeMsgLabel));
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(welcomeMsgLabel));
-
- contentPanel.validate();
-
- }
- });
- }
-
- @Override
- public void showInsertCardDialog(final ActionListener cancelListener, final String cancelCommand) {
-
- log.debug("scheduling insert card dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show insert card dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_INSERTCARD));
-
- helpListener.setHelpTopic(HELP_INSERTCARD);
-
- JLabel insertCardMsgLabel = new JLabel();
- insertCardMsgLabel.setFont(insertCardMsgLabel.getFont().deriveFont(insertCardMsgLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- insertCardMsgLabel.setText(messages.getString(MESSAGE_INSERTCARD));
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(insertCardMsgLabel));
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(insertCardMsgLabel));
-
- JButton cancelButton = new JButton();
- cancelButton.setText(messages.getString(BUTTON_CANCEL));
- cancelButton.addActionListener(cancelListener);
- cancelButton.setActionCommand(cancelCommand);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addComponent(cancelButton));
-
- contentPanel.validate();
- }
- });
- }
-
- /**
- * only difference to showInsertCard: title text: card not supported
- * @param cancelListener
- * @param cancelCommand
- */
- @Override
- public void showCardNotSupportedDialog(final ActionListener cancelListener, final String cancelCommand) {
-
- log.debug("scheduling card not supported dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show card not supported dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_CARD_NOT_SUPPORTED));
-
- helpListener.setHelpTopic(HELP_CARDNOTSUPPORTED);
-
- JLabel insertCardMsgLabel = new JLabel();
- insertCardMsgLabel.setFont(insertCardMsgLabel.getFont().deriveFont(insertCardMsgLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- insertCardMsgLabel.setText(messages.getString(MESSAGE_INSERTCARD));
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(insertCardMsgLabel));
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(insertCardMsgLabel));
-
- JButton cancelButton = new JButton();
- cancelButton.setText(messages.getString(BUTTON_CANCEL));
- cancelButton.addActionListener(cancelListener);
- cancelButton.setActionCommand(cancelCommand);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addComponent(cancelButton));
-
- contentPanel.validate();
- }
- });
- }
-
- private void showCardPINDialog(final PINSpec pinSpec, final int numRetries, final ActionListener okListener, final String okCommand, final ActionListener cancelListener, final String cancelCommand) {
-
- log.debug("scheduling card-pin dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show card-pin dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- if (numRetries < 0) {
- String cardpinTitle = messages.getString(TITLE_CARDPIN);
- titleLabel.setText(MessageFormat.format(cardpinTitle, new Object[]{pinSpec.getLocalizedName()}));
- } else {
- titleLabel.setText(messages.getString(TITLE_RETRY));
- }
-
- JButton cancelButton = new JButton();
- cancelButton.setText(messages.getString(BUTTON_CANCEL));
- cancelButton.setActionCommand(cancelCommand);
- cancelButton.addActionListener(cancelListener);
-
- JButton okButton = new JButton();
- okButton.setText(messages.getString(BUTTON_OK));
- okButton.setEnabled(false);
- okButton.setActionCommand(okCommand);
- okButton.addActionListener(okListener);
-
- JLabel cardPinLabel = new JLabel();
- cardPinLabel.setFont(cardPinLabel.getFont().deriveFont(cardPinLabel.getFont().getStyle() | java.awt.Font.BOLD));
- String pinLabel = messages.getString(LABEL_PIN);
- cardPinLabel.setText(MessageFormat.format(pinLabel, new Object[]{pinSpec.getLocalizedName()}));
-
- pinField = new JPasswordField();
- pinField.setText("");
- pinField.setDocument(new PINDocument(pinSpec, okButton));
- pinField.setActionCommand(okCommand);
- pinField.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (pinField.getPassword().length >= pinSpec.getMinLength()) {
- okListener.actionPerformed(e);
- }
- }
- });
-
- JLabel infoLabel = new JLabel();
- if (numRetries < 0) {
- infoLabel.setFont(infoLabel.getFont().deriveFont(infoLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- String infoPattern = messages.getString(MESSAGE_ENTERPIN);
- infoLabel.setText(MessageFormat.format(infoPattern, new Object[] {pinSpec.getLocalizedName()}));
- helpListener.setHelpTopic(HELP_CARDPIN);
- } else {
- infoLabel.setFont(infoLabel.getFont().deriveFont(infoLabel.getFont().getStyle() | java.awt.Font.BOLD));
- infoLabel.setText(MessageFormat.format(messages.getString(MESSAGE_RETRIES), new Object[]{String.valueOf(numRetries)}));
- infoLabel.setForeground(ERROR_COLOR);
- helpListener.setHelpTopic(HELP_RETRY);
- }
-
- JLabel pinsizeLabel = new JLabel();
- pinsizeLabel.setFont(pinsizeLabel.getFont().deriveFont(pinsizeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, pinsizeLabel.getFont().getSize()-2));
- String pinsizePattern = messages.getString(LABEL_PINSIZE);
- String pinSize = String.valueOf(pinSpec.getMinLength());
- if (pinSpec.getMinLength() != pinSpec.getMaxLength()) {
- pinSize += "-" + pinSpec.getMaxLength();
- }
- pinsizeLabel.setText(MessageFormat.format(pinsizePattern, new Object[]{pinSize}));
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(infoLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addComponent(cardPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
- .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) //))
- .addComponent(pinsizeLabel))));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(infoLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(cardPinLabel)
- .addComponent(pinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(pinsizeLabel));
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(okButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(okButton)
- .addComponent(cancelButton));
-
- pinField.requestFocusInWindow();
- contentPanel.validate();
-
- }
- });
- }
-
- @Override
- public void showCardPINDialog(PINSpec pinSpec, ActionListener okListener, String okCommand, ActionListener cancelListener, String cancelCommand) {
- showCardPINDialog(pinSpec, -1, okListener, okCommand, cancelListener, cancelCommand);
- }
-
- @Override
- public void showCardPINRetryDialog(PINSpec pinSpec, int numRetries, ActionListener okListener, String okCommand, ActionListener cancelListener, String cancelCommand) {
- showCardPINDialog(pinSpec, numRetries, okListener, okCommand, cancelListener, cancelCommand);
- }
-
- @Override
- public void showSignaturePINDialog(PINSpec pinSpec, ActionListener signListener, String signCommand, ActionListener cancelListener, String cancelCommand, ActionListener hashdataListener, String hashdataCommand) {
- showSignaturePINDialog(pinSpec, -1, signListener, signCommand, cancelListener, cancelCommand, hashdataListener, hashdataCommand);
- }
-
- @Override
- public void showSignaturePINRetryDialog(PINSpec pinSpec, int numRetries, ActionListener okListener, String okCommand, ActionListener cancelListener, String cancelCommand, ActionListener hashdataListener, String hashdataCommand) {
- showSignaturePINDialog(pinSpec, numRetries, okListener, okCommand, cancelListener, cancelCommand, hashdataListener, hashdataCommand);
- }
-
- private void showSignaturePINDialog(final PINSpec pinSpec, final int numRetries, final ActionListener signListener, final String signCommand, final ActionListener cancelListener, final String cancelCommand, final ActionListener hashdataListener, final String hashdataCommand) {
-
- log.debug("scheduling signature-pin dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show signature-pin dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- if (numRetries < 0) {
- titleLabel.setText(messages.getString(TITLE_SIGN));
- } else {
- titleLabel.setText(messages.getString(TITLE_RETRY));
- }
-
- JButton cancelButton = new JButton();
- cancelButton.setText(messages.getString(BUTTON_CANCEL));
- cancelButton.setActionCommand(cancelCommand);
- cancelButton.addActionListener(cancelListener);
-
- JButton signButton = new JButton();
- signButton.setText(messages.getString(BUTTON_SIGN));
- signButton.setEnabled(false);
- signButton.setActionCommand(signCommand);
- signButton.addActionListener(signListener);
-
- JLabel signPinLabel = new JLabel();
- signPinLabel.setFont(signPinLabel.getFont().deriveFont(signPinLabel.getFont().getStyle() | java.awt.Font.BOLD));
- String pinLabel = messages.getString(LABEL_PIN);
- signPinLabel.setText(MessageFormat.format(pinLabel, new Object[]{pinSpec.getLocalizedName()}));
-
- pinField = new JPasswordField();
- pinField.setText("");
- pinField.setDocument(new PINDocument(pinSpec, signButton));
- pinField.setActionCommand(signCommand);
- pinField.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (pinField.getPassword().length >= pinSpec.getMinLength()) {
- signListener.actionPerformed(e);
- }
- }
- });
-
- JLabel pinsizeLabel = new JLabel();
- pinsizeLabel.setFont(pinsizeLabel.getFont().deriveFont(pinsizeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, pinsizeLabel.getFont().getSize()-2));
- String pinsizePattern = messages.getString(LABEL_PINSIZE);
- String pinSize = String.valueOf(pinSpec.getMinLength());
- if (pinSpec.getMinLength() != pinSpec.getMaxLength()) {
- pinSize += "-" + pinSpec.getMaxLength();
- }
- pinsizeLabel.setText(MessageFormat.format(pinsizePattern, new Object[]{pinSize}));
-
- JLabel infoLabel = new JLabel();
- if (numRetries < 0) {
- infoLabel.setFont(infoLabel.getFont().deriveFont(infoLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- infoLabel.setText(messages.getString(MESSAGE_HASHDATALINK));
- infoLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
- infoLabel.setForeground(HYPERLINK_COLOR);
- infoLabel.addMouseListener(new MouseAdapter() {
-
- @Override
- public void mouseClicked(MouseEvent me) {
- ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, hashdataCommand);
- hashdataListener.actionPerformed(e);
- }
- });
- helpListener.setHelpTopic(HELP_SIGNPIN);
- } else {
- infoLabel.setFont(infoLabel.getFont().deriveFont(infoLabel.getFont().getStyle() | java.awt.Font.BOLD));
- infoLabel.setText(MessageFormat.format(messages.getString(MESSAGE_RETRIES), new Object[]{String.valueOf(numRetries)}));
- infoLabel.setForeground(ERROR_COLOR);
- helpListener.setHelpTopic(HELP_RETRY);
- }
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(infoLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addComponent(signPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
- .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(pinsizeLabel))));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(infoLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(signPinLabel)
- .addComponent(pinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(pinsizeLabel));
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(signButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(signButton)
- .addComponent(cancelButton));
-
- pinField.requestFocusInWindow();
- contentPanel.validate();
-
- }
- });
- }
-
- @Override
- public void showErrorDialog(final String errorMsgKey, final Object[] errorMsgParams, final ActionListener okListener, final String okCommand) {
-
- log.debug("scheduling error dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show error dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_ERROR));
-
- helpListener.setHelpTopic(errorMsgKey);
-
- String errorMsgPattern = messages.getString(errorMsgKey);
- String errorMsg = MessageFormat.format(errorMsgPattern, errorMsgParams);
-
- JLabel errorMsgLabel = new JLabel();
- errorMsgLabel.setFont(errorMsgLabel.getFont().deriveFont(errorMsgLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- errorMsgLabel.setText(errorMsg);
- errorMsgLabel.setForeground(ERROR_COLOR);
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(errorMsgLabel));
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(errorMsgLabel));
-
- JButton okButton = new JButton();
- okButton.setText(messages.getString(BUTTON_OK));
- okButton.setActionCommand(okCommand);
- okButton.addActionListener(okListener);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(okButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addComponent(okButton));
-
- contentPanel.validate();
- }
- });
- }
-
- @Override
- public void showErrorDialog(final String errorMsgKey, final Object[] errorMsgParams) {
-
- log.debug("scheduling error dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show error dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_ERROR));
-
- helpListener.setHelpTopic(errorMsgKey);
-
- String errorMsgPattern = messages.getString(errorMsgKey);
- String errorMsg = MessageFormat.format(errorMsgPattern, errorMsgParams);
-
- JLabel errorMsgLabel = new JLabel();
- errorMsgLabel.setFont(errorMsgLabel.getFont().deriveFont(errorMsgLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- errorMsgLabel.setText(errorMsg);
- errorMsgLabel.setForeground(ERROR_COLOR);
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(errorMsgLabel));
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(errorMsgLabel));
-
- contentPanel.validate();
- }
- });
- }
-
- @Override
- public void showWaitDialog(final String waitMessage) {
-
- log.debug("scheduling wait dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show wait dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_WAIT));
-
- helpListener.setHelpTopic(HELP_WAIT);
-
- JLabel waitMsgLabel = new JLabel();
- waitMsgLabel.setFont(waitMsgLabel.getFont().deriveFont(waitMsgLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- if (waitMessage != null) {
- waitMsgLabel.setText("<html>" + waitMessage + "</html>");
- } else {
- waitMsgLabel.setText(messages.getString(MESSAGE_WAIT));
- }
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(waitMsgLabel));
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(waitMsgLabel));
-
- contentPanel.validate();
- }
- });
- }
-
- @Override
- public char[] getPin() {
- if (pinField != null) {
- return pinField.getPassword();
- }
- return null;
- }
-
- @Override
- public void showHashDataInputDialog(final List<HashDataInput> signedReferences, final ActionListener okListener, final String okCommand) {
-
- if (signedReferences == null) {
- showErrorDialog(messages.getString(ERR_NO_HASHDATA), new Object[] {"No SignedReferences provided"}, okListener, okCommand);
- }
-
- if (signedReferences.size() == 1) {
-
- if ("text/plain".equals(signedReferences.get(0).getMimeType())) {
-
- ActionListener saveHashDataListener = new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- showSaveHashDataInputDialog(signedReferences, okListener, okCommand);
- }
- };
-
- try {
- String hashDataText = getText(signedReferences.get(0));
- showPlainTextHashDataInputDialog(hashDataText, saveHashDataListener, "save", okListener, okCommand);
- } catch (IOException ex) {
- showErrorDialog(messages.getString(ERR_NO_HASHDATA), new Object[] {ex.getMessage()}, okListener, okCommand);
- }
-
- } else {
- showSaveHashDataInputDialog(signedReferences, okListener, okCommand);
- }
-
- } else {
-
- final HashDataTableModel tableModel = new HashDataTableModel(signedReferences);
-
- ActionListener saveHashDataListener = new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- showSaveHashDataInputDialog(tableModel.getSelectedHashData(), okListener, okCommand);
- }
- };
- showMultipleHashDataInputDialog(tableModel, okListener, okCommand, saveHashDataListener, "save");
- }
- }
-
- private void showPlainTextHashDataInputDialog(final String hashDataText, final ActionListener saveListener, final String saveCommand, final ActionListener cancelListener, final String cancelCommand) {
-
- log.debug("scheduling plaintext hashdatainput dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show plaintext hashdatainput dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_HASHDATA));
-
- helpListener.setHelpTopic(HELP_HASHDATA);
-
- JLabel refIdLabel = new JLabel();
- refIdLabel.setFont(refIdLabel.getFont().deriveFont(refIdLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- refIdLabel.setText(messages.getString(MESSAGE_HASHDATA)); //MessageFormat.format(refIdLabelPattern, new Object[]{refId}));
-
- JTextArea hashDataTextArea = new JTextArea(hashDataText);
- hashDataTextArea.setEditable(false);
-// hashDataTextArea.setColumns(1);
-// hashDataTextArea.setRows(1);
- hashDataTextArea.setFont(new Font(HASHDATA_FONT, hashDataTextArea.getFont().getStyle(), hashDataTextArea.getFont().getSize()));
-// hashDataScrollPane.setViewportView(hashDataTextArea);
-// hashDataScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); //HORIZONTAL_SCROLLBAR_NEVER);
- hashDataTextArea.setLineWrap(true);
- hashDataTextArea.setWrapStyleWord(true);
-
- JScrollPane hashDataScrollPane = new JScrollPane(hashDataTextArea);
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(refIdLabel)
- .addComponent(hashDataScrollPane, 0, 0, Short.MAX_VALUE));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(refIdLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(hashDataScrollPane, 0, 0, Short.MAX_VALUE));
-
- JButton backButton = new JButton();
- backButton.setText(messages.getString(BUTTON_BACK));
- backButton.setActionCommand(cancelCommand);
- backButton.addActionListener(cancelListener);
-
- JButton saveButton = new JButton();
- saveButton.setText(messages.getString(BUTTON_SAVE));
- saveButton.setActionCommand(saveCommand);
- saveButton.addActionListener(saveListener);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(saveButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(saveButton)
- .addComponent(backButton));
-
- contentPanel.validate();
- }
- });
- }
-
- private void showMultipleHashDataInputDialog(final TableModel signedReferences, final ActionListener cancelListener, final String cancelCommand, final ActionListener saveListener, final String saveCommand) {
-
- log.debug("scheduling multiple hashdatainput dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show multiple hashdatainput dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- titleLabel.setText(messages.getString(TITLE_HASHDATA));
-
- helpListener.setHelpTopic(HELP_HASHDATALIST);
-
- JLabel refIdLabel = new JLabel();
- refIdLabel.setFont(refIdLabel.getFont().deriveFont(refIdLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- String refIdLabelPattern = messages.getString(MESSAGE_HASHDATALIST);
- refIdLabel.setText(MessageFormat.format(refIdLabelPattern, new Object[]{signedReferences.getRowCount()}));
-
- JTable hashDataTable = new JTable();
- hashDataTable.setModel(signedReferences);
- hashDataTable.setTableHeader(null);
- // hashDataTable.setShowVerticalLines(false);
- // hashDataTable.setRowSelectionAllowed(false);
- TableColumn selectCol = hashDataTable.getColumnModel().getColumn(1);
- selectCol.setMinWidth(CHECKBOX_WIDTH);
- selectCol.setMaxWidth(CHECKBOX_WIDTH);
-
-
-// hashDataTable.setPreferredScrollableViewportSize(mainPanel.getPreferredSize());
-
- JScrollPane hashDataScrollPane = new JScrollPane(hashDataTable);
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(refIdLabel)
- .addComponent(hashDataScrollPane, 0, 0, Short.MAX_VALUE));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addComponent(refIdLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(hashDataScrollPane, 0, 0, hashDataTable.getPreferredSize().height+3));
-
- JButton backButton = new JButton();
- backButton.setText(messages.getString(BUTTON_BACK));
- backButton.setActionCommand(cancelCommand);
- backButton.addActionListener(cancelListener);
-
- JButton saveButton = new JButton();
- saveButton.setText(messages.getString(BUTTON_SAVE));
- saveButton.setActionCommand(saveCommand);
- saveButton.addActionListener(saveListener);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- buttonPanelLayout.setHorizontalGroup(
- buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(saveButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
- buttonPanelLayout.setVerticalGroup(
- buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(saveButton)
- .addComponent(backButton));
-
- contentPanel.validate();
- }
- });
- }
-
- private void showSaveHashDataInputDialog(final List<HashDataInput> signedRefs, final ActionListener okListener, final String okCommand) {
-
- log.debug("scheduling save hashdatainput dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show save hashdatainput dialog");
-
- String userHome = System.getProperty("user.home");
-
- JFileChooser fileDialog = new JFileChooser(userHome);
- fileDialog.setMultiSelectionEnabled(false);
- fileDialog.setDialogType(JFileChooser.SAVE_DIALOG);
- fileDialog.setFileHidingEnabled(true);
- if (signedRefs.size() == 1) {
- fileDialog.setDialogTitle(messages.getString(WINDOWTITLE_SAVE));
- fileDialog.setFileSelectionMode(JFileChooser.FILES_ONLY);
- String mimeType = signedRefs.get(0).getMimeType();
- MimeFilter mimeFilter = new MimeFilter(mimeType, messages);
- fileDialog.setFileFilter(mimeFilter);
- String filename = messages.getString(SAVE_HASHDATAINPUT_PREFIX) + MimeFilter.getExtension(mimeType);
- fileDialog.setSelectedFile(new File(userHome, filename));
- } else {
- fileDialog.setDialogTitle(messages.getString(WINDOWTITLE_SAVEDIR));
- fileDialog.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- }
-
- //parent contentPane -> placed over applet
- switch (fileDialog.showSaveDialog(fileDialog)) {
- case JFileChooser.APPROVE_OPTION:
- File f = fileDialog.getSelectedFile();
- for (HashDataInput hashDataInput : signedRefs) {
- String mimeType = hashDataInput.getMimeType();
- String id = hashDataInput.getReferenceId();
- File file;
- if (f.isDirectory()) {
- String filename = messages.getString(SAVE_HASHDATAINPUT_PREFIX) + '_' + id + MimeFilter.getExtension(mimeType);
- file = new File(f, filename);
- } else {
- file = f;
- }
- if (file.exists()) {
- String ovrwrt = messages.getString(MESSAGE_OVERWRITE);
- int overwrite = JOptionPane.showConfirmDialog(fileDialog, MessageFormat.format(ovrwrt, file), messages.getString(WINDOWTITLE_OVERWRITE), JOptionPane.OK_CANCEL_OPTION);
- if (overwrite != JOptionPane.OK_OPTION) {
- continue;
- }
- }
- if (log.isDebugEnabled()) {
- log.debug("Writing HashDataInput " + id + " (" + mimeType + ") to file " + file);
- }
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(file);
- BufferedOutputStream bos = new BufferedOutputStream(fos);
- InputStream hdi = hashDataInput.getHashDataInput();
- int b;
- while ((b = hdi.read()) != -1) {
- bos.write(b);
- }
- bos.flush();
- bos.close();
- } catch (IOException ex) {
- log.error("Failed to write HashDataInput to file " + file + ": " + ex.getMessage());
- showErrorDialog(ERR_WRITE_HASHDATA, new Object[] {ex.getMessage()}, null, null);
- ex.printStackTrace();
- } finally {
- try {
- fos.close();
- } catch (IOException ex) {
- }
- }
- }
- }
- log.debug("done saving hashdatainput");
- okListener.actionPerformed(new ActionEvent(fileDialog, ActionEvent.ACTION_PERFORMED, okCommand));
- }
- });
- }
-
- private static String getText(HashDataInput hdi) throws IOException {
- ByteArrayOutputStream baos = null;
- try {
- InputStream hashDataIS = hdi.getHashDataInput();
- if (hashDataIS == null) {
- log.error("No HashDataInput stream for reference " + hdi.getReferenceId());
- return null;
- } else {
- baos = new ByteArrayOutputStream(hashDataIS.available());
- int c;
- while ((c = hashDataIS.read()) != -1) {
- baos.write(c);
- }
- String encoding = hdi.getEncoding();
- if (encoding == null) {
- //default for URL-encoded
- encoding = "UTF-8";
- }
- return baos.toString(encoding);
- }
- } catch (IOException ex) {
- log.error("Failed to read HashDataInput for reference " + hdi.getReferenceId() + ": " + ex.getMessage());
- throw ex;
- } finally {
- try {
- baos.close();
- } catch (IOException ex) {
- }
- }
- }
-
- private void registerHelpListener(ActionListener helpListener) {
- if (helpListener != null) {
- this.helpListener = new HelpMouseListener(helpListener);
- } else {
- log.error("no help listener provided, will not be able to display help");
- this.helpListener = new HelpMouseListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- log.error("no help listener registered (requested help topic: " + e.getActionCommand() + ")");
- }
- });
- }
- }
-}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFactory.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFactory.java
index f4981614..998aaa86 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFactory.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFactory.java
@@ -24,22 +24,11 @@ import java.util.Locale;
public class BKUGUIFactory {
- public static final String SIMPLE_GUI = "simple";
- public static final String ADVANCED_GUI = "advanced";
-
-// private static BKUGUIFactory instance = new BKUGUIFactory();
-
-// private BKUGUIFactory() {
-// }
-//
-// protected BKUGUIFacade createNewGUI(Container contentPane, Locale locale, String style, URL background, ActionListener helpListener) {
-//
-// }
-
- public static BKUGUIFacade createGUI(Container contentPane, Locale locale, String style, URL background, ActionListener helpListener) {
- if (ADVANCED_GUI.equals(style)) {
- return new SimpleGUI(contentPane, locale, BKUGUIFacade.Style.advanced, background, helpListener);
- }
- return new SimpleGUI(contentPane, locale, BKUGUIFacade.Style.simple, background, helpListener);
+ public static BKUGUIFacade createGUI(Container contentPane,
+ Locale locale,
+ BKUGUIFacade.Style style,
+ URL background,
+ ActionListener helpListener) {
+ return new BKUGUIImpl(contentPane, locale, style, background, helpListener);
}
}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java
index d4d6efef..9d23315c 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleGUI.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java
@@ -19,15 +19,14 @@ package at.gv.egiz.bku.gui;
import at.gv.egiz.smcc.PINSpec;
import at.gv.egiz.stal.HashDataInput;
+import at.gv.egiz.stal.impl.ByteArrayHashDataInput;
import java.awt.Container;
import java.awt.Cursor;
-import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -35,9 +34,11 @@ import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.text.MessageFormat;
+import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
+import javax.swing.CellRendererPane;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
@@ -48,9 +49,9 @@ import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
-import javax.swing.JTextArea;
import javax.swing.LayoutStyle;
import javax.swing.SwingUtilities;
+import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -59,9 +60,9 @@ import org.apache.commons.logging.LogFactory;
*
* @author clemens
*/
-public class SimpleGUI implements BKUGUIFacade {
+public class BKUGUIImpl implements BKUGUIFacade {
- private static final Log log = LogFactory.getLog(SimpleGUI.class);
+ private static final Log log = LogFactory.getLog(BKUGUIImpl.class);
protected HelpMouseListener helpListener;
@@ -100,7 +101,11 @@ public class SimpleGUI implements BKUGUIFacade {
* @param background
* @param helpListener
*/
- public SimpleGUI(Container contentPane, Locale locale, Style guiStyle, URL background, ActionListener helpListener) {
+ public BKUGUIImpl(Container contentPane,
+ Locale locale,
+ Style guiStyle,
+ URL background,
+ ActionListener helpListener) {
this.contentPane = contentPane;
if (locale != null) {
@@ -373,6 +378,7 @@ public class SimpleGUI implements BKUGUIFacade {
if (renderCancelButton) {
JButton cancelButton = new JButton();
+ cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle() & ~java.awt.Font.BOLD));
cancelButton.setText(messages.getString(BUTTON_CANCEL));
cancelButton.addActionListener(cancelListener);
cancelButton.setActionCommand(cancelCommand);
@@ -446,6 +452,7 @@ public class SimpleGUI implements BKUGUIFacade {
if (renderCancelButton) {
JButton cancelButton = new JButton();
+ cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle() & ~java.awt.Font.BOLD));
cancelButton.setText(messages.getString(BUTTON_CANCEL));
cancelButton.addActionListener(cancelListener);
cancelButton.setActionCommand(cancelCommand);
@@ -467,36 +474,6 @@ public class SimpleGUI implements BKUGUIFacade {
});
}
- private static int initButtonSize(ResourceBundle messages, boolean renderCancelButton) {
-
- int buttonSize = 0;
-
- JButton b = new JButton();
- b.setText(messages.getString(BUTTON_OK));
- if (b.getPreferredSize().width > buttonSize) {
- buttonSize = b.getPreferredSize().width;
- }
- b.setText(messages.getString(BUTTON_SIGN));
- if (b.getPreferredSize().width > buttonSize) {
- buttonSize = b.getPreferredSize().width;
- }
- b.setText(messages.getString(BUTTON_BACK));
- if (b.getPreferredSize().width > buttonSize) {
- buttonSize = b.getPreferredSize().width;
- }
- b.setText(messages.getString(BUTTON_SAVE));
- if (b.getPreferredSize().width > buttonSize) {
- buttonSize = b.getPreferredSize().width;
- }
- if (renderCancelButton) {
- b.setText(messages.getString(BUTTON_CANCEL));
- if (b.getPreferredSize().width > buttonSize) {
- buttonSize = b.getPreferredSize().width;
- }
- }
- return buttonSize;
- }
-
private void showCardPINDialog(final PINSpec pinSpec, final int numRetries, final ActionListener okListener, final String okCommand, final ActionListener cancelListener, final String cancelCommand) {
log.debug("scheduling card-pin dialog");
@@ -621,6 +598,7 @@ public class SimpleGUI implements BKUGUIFacade {
if (renderCancelButton) {
JButton cancelButton = new JButton();
+ cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle() & ~java.awt.Font.BOLD));
cancelButton.setText(messages.getString(BUTTON_CANCEL));
cancelButton.setActionCommand(cancelCommand);
cancelButton.addActionListener(cancelListener);
@@ -791,6 +769,7 @@ public class SimpleGUI implements BKUGUIFacade {
if (renderCancelButton) {
JButton cancelButton = new JButton();
+ cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle() & ~java.awt.Font.BOLD));
cancelButton.setText(messages.getString(BUTTON_CANCEL));
cancelButton.setActionCommand(cancelCommand);
cancelButton.addActionListener(cancelListener);
@@ -1024,64 +1003,56 @@ public class SimpleGUI implements BKUGUIFacade {
* @param okCommand
*/
@Override
- public void showHashDataInputDialog(final List<HashDataInput> signedReferences, final ActionListener okListener, final String okCommand) {
+ public void showHashDataInputDialog(final List<HashDataInput> signedReferences,
+ final ActionListener okListener,
+ final String okCommand) {
if (signedReferences == null) {
showErrorDialog(messages.getString(ERR_NO_HASHDATA), new Object[] {"No SignedReferences provided"}, okListener, okCommand);
return;
}
- ActionListener saveHashDataListener = new ActionListener() {
-
+ if (signedReferences.size() == 1) {
+ ActionListener saveHashDataListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- showSaveHashDataInputDialog(signedReferences, okListener, okCommand);
+ HashDataInput hdi = signedReferences.get(0);
+ showSaveHashDataInputDialog(Collections.singletonList(hdi), okListener, okCommand);
}
- };
-
- if (signedReferences.size() == 1) {
-
-// if (standalone) {
-
- showHashDataViewer(signedReferences, saveHashDataListener, "save");
-
-// } else {
-// if ("text/plain".equals(signedReferences.get(0).getMimeType())) {
-//
-// ActionListener saveHashDataListener = new ActionListener() {
-//
-// @Override
-// public void actionPerformed(ActionEvent e) {
-// showSaveHashDataInputDialog(signedReferences, okListener, okCommand);
-// }
-// };
-//
-// try {
-// String hashDataText = getText(signedReferences.get(0));
-// showPlainTextHashDataInputDialog(hashDataText, saveHashDataListener, "save", okListener, okCommand);
-// } catch (IOException ex) {
-// showErrorDialog(messages.getString(ERR_NO_HASHDATA), new Object[] {ex.getMessage()}, okListener, okCommand);
-// }
-//
-// } else {
-// showSaveHashDataInputDialog(signedReferences, okListener, okCommand);
-// }
-// }
+ };
+ showHashDataViewer(signedReferences.get(0), saveHashDataListener, "save");
} else {
+ HashDataTableModel tableModel = new HashDataTableModel(signedReferences);
+ showSignedReferencesListDialog(tableModel, okListener, okCommand);
+ }
+ }
+
+ /**
+ * Opens HashDataViewer on mouse clicked event
+ */
+ public class HashDataMouseListener extends MouseAdapter {
+
+ private HashDataInput hashData;
-// final HashDataTableModel tableModel = new HashDataTableModel(signedReferences);
-//
-// ActionListener saveHashDataListener = new ActionListener() {
-//
-// @Override
-// public void actionPerformed(ActionEvent e) {
-// showSaveHashDataInputDialog(tableModel.getSelectedHashData(), okListener, okCommand);
-// }
-// };
-
- SimpleHashDataTableModel tableModel = new SimpleHashDataTableModel(signedReferences);
- showMultipleHashDataInputDialog(tableModel, okListener, okCommand, saveHashDataListener, "save");
+ public void setHashData(HashDataInput hashData) {
+ this.hashData = hashData;
}
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ ActionListener saveListener = new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ showSaveHashDataInputDialog(Collections.singletonList(hashData), null, null);
+ }
+ };
+ showHashDataViewer(hashData, saveListener, "save");
+ super.mouseClicked(e);
+ }
+
+
+
}
/**
@@ -1090,11 +1061,12 @@ public class SimpleGUI implements BKUGUIFacade {
* @param saveListener
* @param saveCommand
*/
- private void showHashDataViewer(final List<HashDataInput> signedReferences, final ActionListener saveListener, final String saveCommand) {
+ private void showHashDataViewer(final HashDataInput hashDataInput, final ActionListener saveListener, final String saveCommand) {
try {
log.debug("scheduling plaintext hashdatainput dialog");
+ // avoid double-clicks on hashdata link
SwingUtilities.invokeAndWait(new Runnable() {
@Override
@@ -1103,7 +1075,7 @@ public class SimpleGUI implements BKUGUIFacade {
log.debug("show plaintext hashdatainput dialog");
ActionListener l = helpListener.getActionListener();
- HashDataViewer.showHashDataInput(contentPane, signedReferences, messages, saveListener, saveCommand, l);
+ HashDataViewer.showHashDataInput(contentPane, hashDataInput, messages, saveListener, saveCommand, l);
}
});
@@ -1114,85 +1086,16 @@ public class SimpleGUI implements BKUGUIFacade {
}
}
-// private void showPlainTextHashDataInputDialog(final String hashDataText, final ActionListener saveListener, final String saveCommand, final ActionListener cancelListener, final String cancelCommand) {
-//
-// log.debug("scheduling plaintext hashdatainput dialog");
-//
-// SwingUtilities.invokeLater(new Runnable() {
-//
-// @Override
-// public void run() {
-//
-// log.debug("show plaintext hashdatainput dialog");
-//
-// mainPanel.removeAll();
-// buttonPanel.removeAll();
-//
-// helpListener.setHelpTopic(HELP_HASHDATA);
-//
-// JLabel refIdLabel = new JLabel();
-// refIdLabel.setFont(refIdLabel.getFont().deriveFont(refIdLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
-// refIdLabel.setText(messages.getString(MESSAGE_HASHDATA)); //MessageFormat.format(refIdLabelPattern, new Object[]{refId}));
-//
-// JTextArea hashDataTextArea = new JTextArea(hashDataText);
-// hashDataTextArea.setEditable(false);
-// hashDataTextArea.setFont(new Font(HASHDATA_FONT, hashDataTextArea.getFont().getStyle(), hashDataTextArea.getFont().getSize()));
-// hashDataTextArea.setLineWrap(true);
-// hashDataTextArea.setWrapStyleWord(true);
-//
-// JScrollPane hashDataScrollPane = new JScrollPane(hashDataTextArea);
-//
-// GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
-// mainPanel.setLayout(mainPanelLayout);
-//
-// mainPanelLayout.setHorizontalGroup(
-// mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
-// .addGroup(mainPanelLayout.createSequentialGroup()
-// .addComponent(refIdLabel)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
-// .addComponent(helpLabel))
-// .addComponent(hashDataScrollPane, 0, 0, Short.MAX_VALUE));
-//
-// mainPanelLayout.setVerticalGroup(
-// mainPanelLayout.createSequentialGroup()
-// .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
-// .addComponent(refIdLabel)
-// .addComponent(helpLabel))
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(hashDataScrollPane, 0, 0, Short.MAX_VALUE));
-//
-// JButton backButton = new JButton();
-// backButton.setFont(backButton.getFont().deriveFont(backButton.getFont().getStyle() & ~java.awt.Font.BOLD));
-// backButton.setText(messages.getString(BUTTON_BACK));
-// backButton.setActionCommand(cancelCommand);
-// backButton.addActionListener(cancelListener);
-//
-// GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
-// buttonPanel.setLayout(buttonPanelLayout);
-//
-// buttonPanelLayout.setHorizontalGroup(
-// buttonPanelLayout.createSequentialGroup()
-// .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-// .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
-// buttonPanelLayout.setVerticalGroup(
-// buttonPanelLayout.createSequentialGroup()
-// .addComponent(backButton));
-//
-// contentPanel.validate();
-// }
-// });
-// }
-
- private void showMultipleHashDataInputDialog(final TableModel signedReferences, final ActionListener cancelListener, final String cancelCommand, final ActionListener saveListener, final String saveCommand) {
+ private void showSignedReferencesListDialog(final HashDataTableModel signedReferences, final ActionListener backListener, final String backCommand) {
- log.debug("scheduling multiple hashdatainput dialog");
+ log.debug("scheduling signed references list dialog");
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
- log.debug("show multiple hashdatainput dialog");
+ log.debug("show signed references list dialog");
mainPanel.removeAll();
buttonPanel.removeAll();
@@ -1208,12 +1111,12 @@ public class SimpleGUI implements BKUGUIFacade {
String refIdLabelPattern = messages.getString(MESSAGE_HASHDATALIST);
refIdLabel.setText(MessageFormat.format(refIdLabelPattern, new Object[]{signedReferences.getRowCount()}));
- JTable hashDataTable = new JTable();
- hashDataTable.setDefaultRenderer(HashDataInput.class, new HyperLinkRenderer());
- hashDataTable.setModel(signedReferences);
+ JTable hashDataTable = new JTable(signedReferences);
+ hashDataTable.setDefaultRenderer(HashDataInput.class, signedReferences.getRenderer());
+
hashDataTable.setTableHeader(null);
// hashDataTable.setShowVerticalLines(false);
- // hashDataTable.setRowSelectionAllowed(false);
+ hashDataTable.setRowSelectionAllowed(true);
// TableColumn selectCol = hashDataTable.getColumnModel().getColumn(1);
// selectCol.setMinWidth(CHECKBOX_WIDTH);
// selectCol.setMaxWidth(CHECKBOX_WIDTH);
@@ -1225,54 +1128,46 @@ public class SimpleGUI implements BKUGUIFacade {
GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
+
+ GroupLayout.SequentialGroup messageHorizontal = mainPanelLayout.createSequentialGroup()
+ .addComponent(refIdLabel);
+
+ GroupLayout.ParallelGroup messageVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
+ .addComponent(refIdLabel);
+
+ if (!renderHeaderPanel) {
+ messageHorizontal
+ .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
+ .addComponent(helpLabel);
+ messageVertical
+ .addComponent(helpLabel);
+ }
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addComponent(refIdLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
- .addComponent(helpLabel))
+ .addGroup(messageHorizontal)
.addComponent(hashDataScrollPane, 0, 0, Short.MAX_VALUE));
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createSequentialGroup()
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(refIdLabel)
- .addComponent(helpLabel))
+ .addGroup(messageVertical)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(hashDataScrollPane, 0, 0, hashDataTable.getPreferredSize().height+3));
JButton backButton = new JButton();
backButton.setFont(backButton.getFont().deriveFont(backButton.getFont().getStyle() & ~java.awt.Font.BOLD));
backButton.setText(messages.getString(BUTTON_BACK));
- backButton.setActionCommand(cancelCommand);
- backButton.addActionListener(cancelListener);
+ backButton.setActionCommand(backCommand);
+ backButton.addActionListener(backListener);
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- GroupLayout.SequentialGroup buttonHorizontal = buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE);
- GroupLayout.ParallelGroup buttonVertical = buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(backButton);
-
- if (renderCancelButton) {
- //render save button
- JButton saveButton = new JButton();
- saveButton.setText(messages.getString(BUTTON_SAVE));
- saveButton.setActionCommand(saveCommand);
- saveButton.addActionListener(saveListener);
+ GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
+ buttonPanel.setLayout(buttonPanelLayout);
- buttonHorizontal
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE);
- buttonVertical
- .addComponent(saveButton);
- }
-
- buttonPanelLayout.setHorizontalGroup(buttonHorizontal);
- buttonPanelLayout.setVerticalGroup(buttonVertical);
+ buttonPanelLayout.setHorizontalGroup(buttonPanelLayout.createSequentialGroup()
+ .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE));
+ buttonPanelLayout.setVerticalGroup(buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+ .addComponent(backButton));
contentPanel.validate();
}
@@ -1357,42 +1252,13 @@ public class SimpleGUI implements BKUGUIFacade {
}
}
log.debug("done saving hashdatainput");
- okListener.actionPerformed(new ActionEvent(fileDialog, ActionEvent.ACTION_PERFORMED, okCommand));
+ if (okListener != null) {
+ okListener.actionPerformed(new ActionEvent(fileDialog, ActionEvent.ACTION_PERFORMED, okCommand));
+ }
}
});
}
-// private static String getText(HashDataInput hdi) throws IOException {
-// ByteArrayOutputStream baos = null;
-// try {
-// InputStream hashDataIS = hdi.getHashDataInput();
-// if (hashDataIS == null) {
-// log.error("No HashDataInput stream for reference " + hdi.getReferenceId());
-// return null;
-// } else {
-// baos = new ByteArrayOutputStream(hashDataIS.available());
-// int c;
-// while ((c = hashDataIS.read()) != -1) {
-// baos.write(c);
-// }
-// String encoding = hdi.getEncoding();
-// if (encoding == null) {
-// //default for URL-encoded
-// encoding = "UTF-8";
-// }
-// return baos.toString(encoding);
-// }
-// } catch (IOException ex) {
-// log.error("Failed to read HashDataInput for reference " + hdi.getReferenceId() + ": " + ex.getMessage());
-// throw ex;
-// } finally {
-// try {
-// baos.close();
-// } catch (IOException ex) {
-// }
-// }
-// }
-
private void registerHelpListener(ActionListener helpListener) {
if (helpListener != null) {
this.helpListener = new HelpMouseListener(helpListener);
@@ -1407,4 +1273,34 @@ public class SimpleGUI implements BKUGUIFacade {
});
}
}
+
+ private static int initButtonSize(ResourceBundle messages, boolean renderCancelButton) {
+
+ int buttonSize = 0;
+
+ JButton b = new JButton();
+ b.setText(messages.getString(BUTTON_OK));
+ if (b.getPreferredSize().width > buttonSize) {
+ buttonSize = b.getPreferredSize().width;
+ }
+ b.setText(messages.getString(BUTTON_SIGN));
+ if (b.getPreferredSize().width > buttonSize) {
+ buttonSize = b.getPreferredSize().width;
+ }
+ b.setText(messages.getString(BUTTON_BACK));
+ if (b.getPreferredSize().width > buttonSize) {
+ buttonSize = b.getPreferredSize().width;
+ }
+ b.setText(messages.getString(BUTTON_SAVE));
+ if (b.getPreferredSize().width > buttonSize) {
+ buttonSize = b.getPreferredSize().width;
+ }
+ if (renderCancelButton) {
+ b.setText(messages.getString(BUTTON_CANCEL));
+ if (b.getPreferredSize().width > buttonSize) {
+ buttonSize = b.getPreferredSize().width;
+ }
+ }
+ return buttonSize;
+ }
}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java
index f03bf158..502f93ec 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java
@@ -17,7 +17,6 @@
package at.gv.egiz.bku.gui;
import java.applet.AppletContext;
-import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.Locale;
import javax.swing.SwingUtilities;
@@ -61,7 +60,6 @@ public class DefaultHelpListener extends AbstractHelpListener {
// try {
log.debug("schedule help dialog");
-// SwingUtilities.invokeAndWait(new Runnable() {
SwingUtilities.invokeLater(new Runnable() {
@Override
@@ -76,10 +74,5 @@ public class DefaultHelpListener extends AbstractHelpListener {
}
}
});
-// } catch (InterruptedException ex) {
-// log.error("Failed to display HelpViewer: " + ex.getMessage(), ex);
-// } catch (InvocationTargetException ex) {
-// log.error("Failed to display HelpViewer: " + ex.getMessage(), ex);
-// }
}
}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java
index e8566fa6..a6709860 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java
@@ -14,34 +14,46 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package at.gv.egiz.bku.gui;
import at.gv.egiz.stal.HashDataInput;
-import java.util.ArrayList;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
import java.util.List;
-import java.util.Vector;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
- *
- * @author clemens
+ *
+ * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
*/
class HashDataTableModel extends DefaultTableModel {
- protected List<HashDataInput> signedReferences;
+ protected static final Log log = LogFactory.getLog(HashDataTableModel.class);
- protected Class[] types = new Class[]{
- java.lang.String.class, java.lang.Boolean.class
- };
-
- public HashDataTableModel(List<HashDataInput> signedReferences) {
- super(0, 2);
- this.signedReferences = signedReferences;
- for (HashDataInput hashDataInput : signedReferences) {
- String desc = hashDataInput.getReferenceId() + " (" + hashDataInput.getMimeType() + ")";
- addRow(new Object[]{desc, new Boolean(true)});
+ protected Class[] types = new Class[]{HashDataInput.class};
+ protected List<HashDataInput> hashDataInputs;
+ private HashDataLinkRenderer renderer;
+
+ public HashDataTableModel(List<HashDataInput> hashDataInputs) {
+ super(0, 1);
+ this.hashDataInputs = hashDataInputs;
+ for (HashDataInput hdi : hashDataInputs) {
+ addRow(new Object[]{hdi});
}
+ this.renderer = new HashDataLinkRenderer();
}
@Override
@@ -51,18 +63,49 @@ class HashDataTableModel extends DefaultTableModel {
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
- if (columnIndex == 1)
- return true;
return false;
}
- public List<HashDataInput> getSelectedHashData() {
- ArrayList<HashDataInput> selection = new ArrayList<HashDataInput>();
- for (int i = 0; i < dataVector.size(); i++) {
- if ((Boolean) ((Vector) dataVector.get(i)).elementAt(1)) {
- selection.add(signedReferences.get(i));
- }
+
+
+ public HashDataLinkRenderer getRenderer() {
+ return renderer;
+ }
+
+ public class HashDataLinkRenderer extends JLabel
+ implements TableCellRenderer {
+// extends DefaultTableCellRenderer {
+
+// protected ActionListener saveHashDataListener;
+//
+// public HashDataLinkRenderer(ActionListener saveHashDataListener) {
+// this.saveHashDataListener = saveHashDataListener;
+// }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ final int row,
+ int column) {
+ final HashDataInput hdi = (HashDataInput) value;
+ log.debug("render hashdatainput " + hdi.getReferenceId() + " - (" + row + "," + column + ") " + isSelected + hasFocus);
+ setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+ setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD));
+ setText(hdi.getReferenceId() + " (" + hdi.getMimeType() + ")");
+ addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ log.debug("received mouseclick on " + hdi.getReferenceId());
+// saveHashDataListener.actionPerformed();
+ JOptionPane.showInputDialog(hashDataInputs.get(row).getReferenceId());
+ }
+
+ });
+
+ return this;
}
- return selection;
}
} \ No newline at end of file
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java
index 7b77faeb..db66bd52 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java
@@ -23,18 +23,15 @@ import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
-import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
-import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import java.text.MessageFormat;
-import java.util.List;
import java.util.ResourceBundle;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
@@ -69,12 +66,12 @@ public class HashDataViewer extends JDialog
*
* @param signedReferences currently, only one hashdata input (the first in the list) is displayed
*/
- public static void showHashDataInput(List<HashDataInput> hashDataInputs,
+ public static void showHashDataInput(HashDataInput hashDataInput,
ResourceBundle messages,
ActionListener saveListener,
String saveCommand,
ActionListener helpListener) {
- showHashDataInput(null, hashDataInputs, messages, saveListener, saveCommand, helpListener);
+ showHashDataInput(null, hashDataInput, messages, saveListener, saveCommand, helpListener);
}
/**
@@ -82,7 +79,7 @@ public class HashDataViewer extends JDialog
* @param frameComp owner
*/
public static void showHashDataInput(Component frameComp,
- List<HashDataInput> hashDataInputs,
+ HashDataInput hashDataInput,
ResourceBundle messages,
ActionListener saveListener,
String saveCommand,
@@ -94,7 +91,7 @@ public class HashDataViewer extends JDialog
}
dialog = new HashDataViewer(frame,
messages,
- hashDataInputs,
+ hashDataInput,
saveListener,
saveCommand,
helpListener);
@@ -103,35 +100,33 @@ public class HashDataViewer extends JDialog
private HashDataViewer(Frame frame,
ResourceBundle messages,
- List<HashDataInput> hashDataInputs,
+ HashDataInput hashDataInput,
ActionListener saveListener,
String saveCommand,
ActionListener helpListener) {
super(frame, messages.getString(BKUGUIFacade.WINDOWTITLE_VIEWER), true);
this.messages = messages;
- HashDataInput hashData = hashDataInputs.get(0);
-
Charset cs;
- if (hashData.getEncoding() == null) {
+ if (hashDataInput.getEncoding() == null) {
cs = Charset.forName("UTF-8");
} else {
try {
- cs = Charset.forName(hashData.getEncoding());
+ cs = Charset.forName(hashDataInput.getEncoding());
} catch (Exception ex) {
- log.debug("charset " + hashData.getEncoding() + " not supported, assuming UTF-8: " + ex.getMessage());
+ log.debug("charset " + hashDataInput.getEncoding() + " not supported, assuming UTF-8: " + ex.getMessage());
cs = Charset.forName("UTF-8");
}
}
- InputStreamReader isr = new InputStreamReader(hashData.getHashDataInput(), cs);
+ InputStreamReader isr = new InputStreamReader(hashDataInput.getHashDataInput(), cs);
Reader content = new BufferedReader(isr);
JPanel hashDataPanel = createViewerPanel(
messages.getString(BKUGUIFacade.MESSAGE_HASHDATA),
content,
- hashData.getMimeType(),
+ hashDataInput.getMimeType(),
helpListener);
JPanel buttonPanel = createButtonPanel(saveListener, saveCommand);
initContentPane(new Dimension(600, 400), hashDataPanel, buttonPanel);
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperLinkRenderer.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperLinkRenderer.java
deleted file mode 100644
index d9606177..00000000
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperLinkRenderer.java
+++ /dev/null
@@ -1,47 +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.gui;
-
-import at.gv.egiz.stal.HashDataInput;
-import java.awt.Color;
-import java.awt.Component;
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import javax.swing.table.TableCellRenderer;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class HyperLinkRenderer extends JLabel implements TableCellRenderer {
-
- @Override
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- HashDataInput hdi = (HashDataInput) value;
- setText(hdi.getReferenceId() + " (" + hdi.getMimeType() + ")");
- setBackground(Color.CYAN);
- return this;
- }
-
-// extends DefaultTableCellRenderer {
-//
-// @Override
-// public void setValue(Object value) {
-// HashDataInput hdi = (HashDataInput) value;
-// setText(hdi.getReferenceId() + " (" + hdi.getMimeType() + ")");
-// }
-}
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ImagePanel.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ImagePanel.java
index 271c0b65..6a738acb 100644
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ImagePanel.java
+++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/ImagePanel.java
@@ -24,6 +24,7 @@ import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
+ * paints the background image in the lower left corner of the component
*
* @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
*/
diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleHashDataTableModel.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleHashDataTableModel.java
deleted file mode 100644
index 463dbe81..00000000
--- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/SimpleHashDataTableModel.java
+++ /dev/null
@@ -1,60 +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.gui;
-
-import at.gv.egiz.stal.HashDataInput;
-import java.awt.event.ActionListener;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Vector;
-import javax.swing.table.DefaultTableModel;
-
-/**
- *
- * @author clemens
- */
-class SimpleHashDataTableModel extends DefaultTableModel {
-
- protected List<HashDataInput> signedReferences;
-
- protected Class[] types = new Class[]{
- java.lang.String.class
- };
-
- public SimpleHashDataTableModel(List<HashDataInput> signedReferences) {
- super(0, 1);
- this.signedReferences = signedReferences;
- for (HashDataInput hashDataInput : signedReferences) {
-
-// String desc = hashDataInput.getReferenceId() + " (" + hashDataInput.getMimeType() + ")";
- addRow(new Object[]{hashDataInput});
- }
- }
-
- @Override
- public Class getColumnClass(int columnIndex) {
- return types[columnIndex];
- }
-
- @Override
- public boolean isCellEditable(int rowIndex, int columnIndex) {
- if (columnIndex == 1)
- return true;
- return false;
- }
-} \ No newline at end of file
diff --git a/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUITest.java b/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUITest.java
index b57e1923..0d2712dd 100644
--- a/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUITest.java
+++ b/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUITest.java
@@ -32,16 +32,15 @@ import org.junit.Test;
*
* @author clemens
*/
-@Ignore
+//@Ignore
public class BKUGUITest {
@Test
public void testBKUGUI() {
JFrame testFrame = new JFrame("BKUGUITest");
- BKUGUI gui = new BKUGUI();
Container contentPane = testFrame.getContentPane();
contentPane.setPreferredSize(new Dimension(380, 150));
- gui.init(contentPane, null, BKUGUIFacade.Style.advanced, null, null);
+ BKUGUIFacade gui = BKUGUIFactory.createGUI(contentPane, null, BKUGUIFacade.Style.advanced, null, null);
BKUGUIWorker worker = new BKUGUIWorker();
worker.init(gui);
testFrame.pack();
diff --git a/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUIWorker.java b/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUIWorker.java
index e4936067..82b42d0f 100644
--- a/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUIWorker.java
+++ b/BKUCommonGUI/src/test/java/at/gv/egiz/bku/gui/BKUGUIWorker.java
@@ -22,6 +22,7 @@ package at.gv.egiz.bku.gui;
import at.gv.egiz.smcc.PINSpec;
import at.gv.egiz.stal.HashDataInput;
+import at.gv.egiz.stal.impl.ByteArrayHashDataInput;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayInputStream;
@@ -78,99 +79,36 @@ public class BKUGUIWorker implements Runnable {
gui.showSignaturePINDialog(signPinSpec, signListener, "sign", cancelListener, "cancel", null, "hashdata");
}
};
- HashDataInput signedRef1 = new HashDataInput() {
-
- @Override
- public InputStream getHashDataInput() {
- return new ByteArrayInputStream("Ich bin ein einfacher Text mit Umlauten: öäüßéç@€\n123\n456\n\tHello, world!\n\nlkjsd\nnksdjf".getBytes());
- }
-
- @Override
- public String getMimeType() {
- return "text/plain";
- }
-
- @Override
- public String getReferenceId() {
- return "Reference-ref1-00000000000000000000001";
- }
- @Override
- public String getEncoding() {
- return "UTF-8";
- }
- };
- HashDataInput signedRef2 = new HashDataInput() {
-
- @Override
- public InputStream getHashDataInput() {
- return new ByteArrayInputStream("<xml>HashDataInput_002</xml>".getBytes());
- }
-
- @Override
- public String getMimeType() {
- return "text/xml";
- }
-
- @Override
- public String getReferenceId() {
- return "Reference-ref2-00000000000000000000002";
- }
- @Override
- public String getEncoding() {
- return "UTF-8";
- }
- };
- HashDataInput signedRef3 = new HashDataInput() {
-
- @Override
- public InputStream getHashDataInput() {
- return new ByteArrayInputStream("<xml>HashDataInput_003</xml>".getBytes());
- }
-
- @Override
- public String getMimeType() {
- return "text/xml";
- }
-
- @Override
- public String getReferenceId() {
- return "Reference-ref3-00000000000000000000003";
- }
-
- @Override
- public String getEncoding() {
- return "UTF-8";
- }
- };
- HashDataInput signedRef4 = new HashDataInput() {
-
- @Override
- public InputStream getHashDataInput() {
- return new ByteArrayInputStream("<xml>HashDataInput_004</xml>".getBytes());
- }
-
- @Override
- public String getMimeType() {
- return "text/xml";
- }
-
- @Override
- public String getReferenceId() {
- return "ref4";
- }
-
- @Override
- public String getEncoding() {
- return "UTF-8";
- }
- };
+ HashDataInput signedRef1 = new ByteArrayHashDataInput(
+ "Ich bin ein einfacher Text mit Umlauten: öäüßéç@€\n123\n456\n\tHello, world!\n\nlkjsd\nnksdjf".getBytes(),
+ "ref-id-000000001",
+ "text/plain",
+ "UTF-8");
+
+ HashDataInput signedRef2 = new ByteArrayHashDataInput(
+ "<xml>HashDataInput_002</xml>".getBytes(),
+ "ref-id-000000002",
+ "application/xhtml+xml",
+ "UTF-8");
+
+ HashDataInput signedRef3 = new ByteArrayHashDataInput(
+ "<xml>HashDataInput_003</xml>".getBytes(),
+ "ref-id-000000003",
+ "application/xhtml+xml",
+ "UTF-8");
+
+ HashDataInput signedRef4 = new ByteArrayHashDataInput(
+ "<xml>HashDataInput_004</xml>".getBytes(),
+ "ref-id-000000004",
+ "text/xml",
+ "UTF-8");
//
List<HashDataInput> signedRefs = new ArrayList();
signedRefs.add(signedRef1);
-// signedRefs.add(signedRef2);
-// signedRefs.add(signedRef3);
-// signedRefs.add(signedRef4);
+ signedRefs.add(signedRef2);
+ signedRefs.add(signedRef3);
+ signedRefs.add(signedRef4);
// signedRefs.add(signedRef4);
// signedRefs.add(signedRef4);
// signedRefs.add(signedRef4);
@@ -182,8 +120,8 @@ public class BKUGUIWorker implements Runnable {
- gui.showWelcomeDialog();
-
+// gui.showWelcomeDialog();
+//
// Thread.sleep(2000);
//
// gui.showWaitDialog(null);
@@ -209,7 +147,7 @@ public class BKUGUIWorker implements Runnable {
//
// Thread.sleep(2000);
//
-// gui.showSignaturePINDialog(signPinSpec, signListener, "sign", cancelListener, "cancel", hashdataListener, "hashdata");
+ gui.showSignaturePINDialog(signPinSpec, signListener, "sign", cancelListener, "cancel", hashdataListener, "hashdata");
//
// Thread.sleep(4000);
//