summaryrefslogtreecommitdiff
path: root/BKUAppletExt/src/main/java/at/gv/egiz
diff options
context:
space:
mode:
Diffstat (limited to 'BKUAppletExt/src/main/java/at/gv/egiz')
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUI.java249
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUIFacade.java33
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/CardMgmtGUI.java70
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUI.java669
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUIFacade.java117
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINSpecRenderer.java39
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusRenderer.java61
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusTableModel.java58
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/ActivationApplet.java2
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/PINManagementBKUWorker.java16
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/CardMgmtRequestHandler.java177
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/GetPINStatusException.java41
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/ManagementPINProviderFactory.java262
-rw-r--r--BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/PINManagementRequestHandler.java244
14 files changed, 14 insertions, 2024 deletions
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUI.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUI.java
deleted file mode 100644
index 8134ac5f..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUI.java
+++ /dev/null
@@ -1,249 +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 java.awt.Container;
-import java.awt.Cursor;
-import java.awt.event.ActionListener;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import javax.swing.GroupLayout;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JProgressBar;
-import javax.swing.LayoutStyle;
-import javax.swing.SwingUtilities;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class ActivationGUI extends CardMgmtGUI implements ActivationGUIFacade {
-
- public static final String TITLE_ACTIVATION = "title.activation";
- public static final String LABEL_ACTIVATION = "label.activation";
- public static final String LABEL_ACTIVATION_STEP = "label.activation.step";
- public static final String LABEL_ACTIVATION_IDLE = "label.activation.idle";
-
- public static final String HELP_ACTIVATION = "help.activation";
-
- protected JProgressBar progressBar;
-
- public ActivationGUI(Container contentPane,
- Locale locale,
- Style guiStyle,
- URL backgroundImgURL,
- AbstractHelpListener helpListener) {
- super(contentPane, locale, guiStyle, backgroundImgURL, helpListener);
-
- progressBar = new JProgressBar();
- }
-
- @Override
- public void showActivationProgressDialog(final int currentStep, final int maxProgress, final ActionListener cancelListener, final String cancelCommand) {
-
- log.debug("scheduling activation progress dialog (step " + currentStep + ")");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show activation progress dialog (step " + currentStep + ")");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- mainPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-
- JLabel infoLabel = new JLabel();
- infoLabel.setFont(infoLabel.getFont().deriveFont(infoLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
-
- if (renderHeaderPanel) {
- titleLabel.setText(cardmgmtMessages.getString(TITLE_ACTIVATION));
- infoLabel.setText(cardmgmtMessages.getString(LABEL_ACTIVATION));
- } else {
- infoLabel.setText(cardmgmtMessages.getString(TITLE_ACTIVATION));
- }
-
- helpListener.setHelpTopic(HELP_ACTIVATION);
-
- progressBar.setIndeterminate(false);
- progressBar.setStringPainted(true);
- progressBar.setString(null); //reset to percentage
- progressBar.setMinimum(0);
- progressBar.setMaximum(maxProgress);
-
- JLabel stepLabel = new JLabel();
- stepLabel.setFont(stepLabel.getFont().deriveFont(stepLabel.getFont().getStyle() & ~java.awt.Font.BOLD, stepLabel.getFont().getSize()-2));
- String stepPattern = cardmgmtMessages.getString(LABEL_ACTIVATION_STEP);
- stepLabel.setText(MessageFormat.format(stepPattern, new Object[]{ currentStep }));
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- GroupLayout.SequentialGroup infoHorizontal = mainPanelLayout.createSequentialGroup().addComponent(infoLabel);
- GroupLayout.ParallelGroup infoVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(infoLabel);
-
- if (!renderHeaderPanel) {
- infoHorizontal.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE).addComponent(helpLabel);
- infoVertical.addComponent(helpLabel);
- }
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(infoHorizontal)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(stepLabel)
- .addComponent(progressBar)));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addGroup(infoVertical)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addComponent(stepLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(progressBar)));
-
- 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);
-
- 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();
-
- }
- });
-
- }
-
- @Override
- public void incrementProgress() {
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
- progressBar.setValue(progressBar.getValue() + 1);
- }
- });
-
- }
-
- @Override
- public void showIdleDialog(final ActionListener cancelListener, final String cancelCommand) {
- log.debug("scheduling idle dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- log.debug("show idle dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- mainPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-
- JLabel infoLabel = new JLabel();
- infoLabel.setFont(infoLabel.getFont().deriveFont(infoLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
-
- if (renderHeaderPanel) {
- titleLabel.setText(cardmgmtMessages.getString(TITLE_ACTIVATION));
- infoLabel.setText(cardmgmtMessages.getString(LABEL_ACTIVATION));
- } else {
- infoLabel.setText(cardmgmtMessages.getString(TITLE_ACTIVATION));
- }
-
- helpListener.setHelpTopic(HELP_ACTIVATION);
-
- progressBar.setIndeterminate(true);
- progressBar.setStringPainted(true);
- progressBar.setString(""); //not string painted progressbar is smaller
-
- JLabel stepLabel = new JLabel();
- stepLabel.setFont(stepLabel.getFont().deriveFont(stepLabel.getFont().getStyle() & ~java.awt.Font.BOLD, stepLabel.getFont().getSize()-2));
- stepLabel.setText(cardmgmtMessages.getString(LABEL_ACTIVATION_IDLE));
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- GroupLayout.SequentialGroup infoHorizontal = mainPanelLayout.createSequentialGroup().addComponent(infoLabel);
- GroupLayout.ParallelGroup infoVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(infoLabel);
-
- if (!renderHeaderPanel) {
- infoHorizontal.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE).addComponent(helpLabel);
- infoVertical.addComponent(helpLabel);
- }
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(infoHorizontal)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(stepLabel)
- .addComponent(progressBar)));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addGroup(infoVertical)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addComponent(stepLabel)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(progressBar)));
-
- 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);
-
- 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();
-
- }
- });
-
- }
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUIFacade.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUIFacade.java
deleted file mode 100644
index 860a1097..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/ActivationGUIFacade.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2008 Federal Chancellery Austria and
- * Graz University of Technology
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package at.gv.egiz.bku.gui;
-
-import java.awt.event.ActionListener;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public interface ActivationGUIFacade extends BKUGUIFacade {
-
- public void showActivationProgressDialog(int currentStep, int maxProgress, ActionListener cancelListener, String cancelCommand);
-
- public void incrementProgress();
-
- public void showIdleDialog(ActionListener cancelListener, String cancelCommand);
-
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/CardMgmtGUI.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/CardMgmtGUI.java
deleted file mode 100644
index ac9ab78b..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/CardMgmtGUI.java
+++ /dev/null
@@ -1,70 +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 java.awt.Container;
-import java.net.URL;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-/**
- * Common superclass for Activation and PinManagement GUIs
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class CardMgmtGUI extends BKUGUIImpl {
-
- public static final String CARDMGMT_MESSAGES_BUNDLE = "at/gv/egiz/bku/gui/ActivationMessages";
-
- protected ResourceBundle cardmgmtMessages;
-
- public CardMgmtGUI(Container contentPane,
- Locale locale,
- Style guiStyle,
- URL backgroundImgURL,
- AbstractHelpListener helpListener) {
- super(contentPane, locale, guiStyle, backgroundImgURL, helpListener);
-
- }
-
- @Override
- protected void loadMessageBundle(Locale locale) {
- super.loadMessageBundle(locale);
-
- if (locale != null) {
- Locale lang = new Locale(locale.getLanguage().substring(0,2));
- log.debug("loading applet resources for language: " + lang.toString());
- cardmgmtMessages = ResourceBundle.getBundle(CARDMGMT_MESSAGES_BUNDLE, lang);
- } else {
- cardmgmtMessages = ResourceBundle.getBundle(CARDMGMT_MESSAGES_BUNDLE);
- }
- }
-
- @Override
- protected String getMessage(String key) {
- if (super.hasMessage(key)) {
- return super.getMessage(key);
- }
- return cardmgmtMessages.getString(key);
- }
-
- @Override
- protected boolean hasMessage(String key) {
- return (cardmgmtMessages.containsKey(key) || super.hasMessage(key));
- }
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUI.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUI.java
deleted file mode 100644
index 3b77daa5..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUI.java
+++ /dev/null
@@ -1,669 +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 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.MouseEvent;
-import java.awt.event.MouseMotionAdapter;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.Map;
-import javax.swing.GroupLayout;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JPasswordField;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.LayoutStyle;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * TODO pull out ResourceBundle to common superclass for activationGUI and pinMgmtGUI
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class PINManagementGUI extends CardMgmtGUI implements PINManagementGUIFacade {
-
- protected static final Log log = LogFactory.getLog(PINManagementGUI.class);
-
- /** remember the pinfield to return to worker */
- protected JPasswordField oldPinField;
- /** remember the pinSpec to return to worker */
- protected PINSpec pinSpec;
-
- public PINManagementGUI(Container contentPane,
- Locale locale,
- Style guiStyle,
- URL backgroundImgURL,
- AbstractHelpListener helpListener) {
- super(contentPane, locale, guiStyle, backgroundImgURL, helpListener);
- }
-
- @Override
- public char[] getOldPin() {
- if (oldPinField != null) {
- char[] pin = oldPinField.getPassword();
- oldPinField = null;
- return pin;
- }
- return null;
- }
-
- @Override
- public PINSpec getSelectedPINSpec() {
- return pinSpec;
- }
-
- @Override
- public void showPINManagementDialog(final Map<PINSpec, STATUS> pins,
- final ActionListener activateListener,
- final String activateCmd,
- final String changeCmd,
- final String unblockCmd,
- final String verifyCmd,
- final ActionListener cancelListener,
- final String cancelCmd) {
-
- log.debug("scheduling PIN managment dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
- log.debug("show PIN management dialog");
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- helpListener.setHelpTopic(HELP_PINMGMT);
-
- JLabel mgmtLabel = new JLabel();
- mgmtLabel.setFont(mgmtLabel.getFont().deriveFont(mgmtLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
-
- if (renderHeaderPanel) {
- titleLabel.setText(getMessage(TITLE_PINMGMT));
- String infoPattern = getMessage(MESSAGE_PINMGMT);
- mgmtLabel.setText(MessageFormat.format(infoPattern, pins.size()));
- } else {
- mgmtLabel.setText(getMessage(TITLE_PINMGMT));
- }
-
- final PINStatusTableModel tableModel = new PINStatusTableModel(pins);
- final JTable pinStatusTable = new JTable(tableModel);
- pinStatusTable.setDefaultRenderer(PINSpec.class, new PINSpecRenderer());
- pinStatusTable.setDefaultRenderer(STATUS.class, new PINStatusRenderer(cardmgmtMessages));
- pinStatusTable.setTableHeader(null);
- pinStatusTable.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-// pinStatusTable.addMouseMotionListener(new MouseMotionAdapter() {
-//
-// @Override
-// public void mouseMoved(MouseEvent e) {
-// if (pinStatusTable.columnAtPoint(e.getPoint()) == 0) {
-// pinStatusTable.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-// } else {
-// pinStatusTable.setCursor(Cursor.getDefaultCursor());
-// }
-// }
-// });
-
- final JButton activateButton = new JButton();
- activateButton.setFont(activateButton.getFont().deriveFont(activateButton.getFont().getStyle() & ~java.awt.Font.BOLD));
- activateButton.addActionListener(activateListener);
-
- pinStatusTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- pinStatusTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
-
- @Override
- public void valueChanged(final ListSelectionEvent e) {
- //invoke later to allow thread to paint selection background
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
- ListSelectionModel lsm = (ListSelectionModel) e.getSource();
- int selectionIdx = lsm.getMinSelectionIndex();
- if (selectionIdx >= 0) {
- pinSpec = (PINSpec) tableModel.getValueAt(selectionIdx, 0);
- STATUS status = (STATUS) tableModel.getValueAt(selectionIdx, 1);
-
- if (status == STATUS.NOT_ACTIV) {
- activateButton.setText(getMessage(BUTTON_ACTIVATE));
- activateButton.setEnabled(true);
- activateButton.setActionCommand(activateCmd);
- } else if (status == STATUS.BLOCKED) {
- activateButton.setText(getMessage(BUTTON_UNBLOCK));
- activateButton.setEnabled(true);
- activateButton.setActionCommand(unblockCmd);
- } else if (status == STATUS.ACTIV) {
- activateButton.setText(getMessage(BUTTON_CHANGE));
- activateButton.setEnabled(true);
- activateButton.setActionCommand(changeCmd);
- } else if (status == STATUS.UNKNOWN) {
- activateButton.setText(getMessage(BUTTON_VERIFY));
- activateButton.setEnabled(true);
- activateButton.setActionCommand(verifyCmd);
- }
- }
- }
- });
- }
- });
-
- //select first entry
- pinStatusTable.getSelectionModel().setSelectionInterval(0, 0);
-
- JScrollPane pinStatusScrollPane = new JScrollPane(pinStatusTable);
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- GroupLayout.SequentialGroup messageHorizontal = mainPanelLayout.createSequentialGroup()
- .addComponent(mgmtLabel);
- GroupLayout.Group messageVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(mgmtLabel);
- if (!renderHeaderPanel) {
- messageHorizontal
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
- .addComponent(helpLabel);
- messageVertical
- .addComponent(helpLabel);
- }
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(messageHorizontal)
- .addComponent(pinStatusScrollPane, 0, 0, Short.MAX_VALUE));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addGroup(messageVertical)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(pinStatusScrollPane, 0, 0, pinStatusTable.getPreferredSize().height+3));
-
- JButton cancelButton = new JButton();
- cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle() & ~java.awt.Font.BOLD));
- cancelButton.setText(getMessage(BUTTON_CLOSE));
- cancelButton.setActionCommand(cancelCmd);
- cancelButton.addActionListener(cancelListener);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- GroupLayout.SequentialGroup buttonHorizontal = buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(activateButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE);
-
- GroupLayout.Group buttonVertical = buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(activateButton)
- .addComponent(cancelButton);
-
- buttonPanelLayout.setHorizontalGroup(buttonHorizontal);
- buttonPanelLayout.setVerticalGroup(buttonVertical);
-
- contentPanel.validate();
- }
- });
- }
-
- @Override
- public void showPINDialog(DIALOG type, PINSpec pinSpec,
- ActionListener okListener, String okCommand,
- ActionListener cancelListener, String cancelCommand) {
- showPINDialog(type, pinSpec, -1, false,
- okListener, okCommand, cancelListener, cancelCommand);
- }
-
- @Override
- public void showPINDialog(DIALOG type, PINSpec pinSpec, int retries,
- ActionListener okListener, String okCommand,
- ActionListener cancelListener, String cancelCommand) {
- showPINDialog(type, pinSpec, retries, false,
- okListener, okCommand, cancelListener, cancelCommand);
- }
-
- @Override
- public void showPinpadPINDialog(DIALOG type, PINSpec pinSpec, int retries) {
- String title, msg;
- Object[] params;
- if (retries < 0) {
- params = new Object[2];
- if (shortText) {
- params[0] = "PIN";
- } else {
- params[0] = pinSpec.getLocalizedName();
- }
- params[1] = pinSpec.getLocalizedLength();
- if (type == DIALOG.CHANGE) {
- log.debug("show change pin dialog");
- title = TITLE_CHANGE_PIN;
- msg = MESSAGE_CHANGEPIN_PINPAD;
- } else if (type == DIALOG.ACTIVATE) {
- log.debug("show activate pin dialog");
- title = TITLE_ACTIVATE_PIN;
- msg = MESSAGE_ENTERPIN_PINPAD;
- } else if (type == DIALOG.VERIFY) {
- log.debug("show verify pin dialog");
- title = TITLE_VERIFY_PIN;
- msg = MESSAGE_ENTERPIN_PINPAD;
- } else {
- log.debug("show unblock pin dialog");
- title = TITLE_UNBLOCK_PIN;
- msg = MESSAGE_ENTERPIN_PINPAD;
- }
-
- } else {
- log.debug("show retry pin dialog");
- title = TITLE_RETRY;
- msg = (retries < 2) ?
- MESSAGE_LAST_RETRY : MESSAGE_RETRIES;
- params = new Object[] {String.valueOf(retries)};
- }
- showMessageDialog(title, msg, params);
- }
-
- private void showPINDialog(final DIALOG type, final PINSpec pinSpec,
- final int retries, final boolean pinpad,
- final ActionListener okListener, final String okCommand,
- final ActionListener cancelListener, final String cancelCommand) {
-
- log.debug("scheduling pin dialog");
-
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
-
- String HELP_TOPIC, TITLE, MESSAGE_MGMT, MESSAGE_MGMT_PARAM, PINSIZE;
- HELP_TOPIC = HELP_PINMGMT;
-
- PINSIZE = (pinSpec.getMaxLength() > pinSpec.getMinLength()) ?
- pinSpec.getMinLength() + "-" + pinSpec.getMaxLength() :
- String.valueOf(pinSpec.getMinLength());
-
- if (retries < 0) {
- if (type == DIALOG.CHANGE) {
- log.debug("show change pin dialog");
- TITLE = TITLE_CHANGE_PIN;
- MESSAGE_MGMT = MESSAGE_CHANGE_PIN;
- } else if (type == DIALOG.ACTIVATE) {
- log.debug("show activate pin dialog");
- TITLE = TITLE_ACTIVATE_PIN;
- MESSAGE_MGMT = MESSAGE_ACTIVATE_PIN;
- oldPinField = null;
- PINSIZE = pinSpec.getLocalizedLength();
- } else if (type == DIALOG.VERIFY) {
- log.debug("show verify pin dialog");
- TITLE = TITLE_VERIFY_PIN;
- MESSAGE_MGMT = MESSAGE_VERIFY_PIN;
- } else {
- log.debug("show unblock pin dialog");
- TITLE = TITLE_UNBLOCK_PIN;
- MESSAGE_MGMT = MESSAGE_UNBLOCK_PIN;
- }
- if (shortText) {
- MESSAGE_MGMT_PARAM = "PIN";
- } else {
- MESSAGE_MGMT_PARAM = pinSpec.getLocalizedName();
- }
- } else {
- log.debug("show retry pin dialog");
- TITLE = TITLE_RETRY;
- MESSAGE_MGMT = (retries < 2) ?
- MESSAGE_LAST_RETRY : MESSAGE_RETRIES;
- MESSAGE_MGMT_PARAM = String.valueOf(retries);
- }
-
- mainPanel.removeAll();
- buttonPanel.removeAll();
-
- helpListener.setHelpTopic(HELP_TOPIC);
-
- JLabel mgmtLabel = new JLabel();
- if (retries < 0) {
- mgmtLabel.setFont(mgmtLabel.getFont().deriveFont(mgmtLabel.getFont().getStyle() & ~Font.BOLD));
- } else {
- mgmtLabel.setFont(mgmtLabel.getFont().deriveFont(mgmtLabel.getFont().getStyle() | Font.BOLD));
- mgmtLabel.setForeground(ERROR_COLOR);
- helpListener.setHelpTopic(HELP_RETRY);
- }
-
- if (renderHeaderPanel) {
- titleLabel.setText(getMessage(TITLE));
- String mgmtPattern = getMessage(MESSAGE_MGMT);
- mgmtLabel.setText(MessageFormat.format(mgmtPattern, MESSAGE_MGMT_PARAM));
- } else {
- mgmtLabel.setText(getMessage(TITLE));
- }
-
- ////////////////////////////////////////////////////////////////
- // COMMON LAYOUT SECTION
- ////////////////////////////////////////////////////////////////
-
- GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
- mainPanel.setLayout(mainPanelLayout);
-
- GroupLayout.SequentialGroup infoHorizontal = mainPanelLayout.createSequentialGroup()
- .addComponent(mgmtLabel);
- GroupLayout.ParallelGroup infoVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(mgmtLabel);
-
- if (!renderHeaderPanel) {
- infoHorizontal
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
- .addComponent(helpLabel);
- infoVertical
- .addComponent(helpLabel);
- }
-
- GroupLayout.ParallelGroup pinHorizontal;
- GroupLayout.SequentialGroup pinVertical;
-
- if (pinpad) {
- JLabel pinpadLabel = new JLabel();
- pinpadLabel.setFont(mgmtLabel.getFont().deriveFont(mgmtLabel.getFont().getStyle() & ~Font.BOLD));
- String pinpadPattern = getMessage(MESSAGE_VERIFYPIN_PINPAD);
- pinpadLabel.setText(MessageFormat.format(pinpadPattern,
- new Object[] { pinSpec.getLocalizedName(), PINSIZE }));
-
- pinHorizontal = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(pinpadLabel);
- pinVertical = mainPanelLayout.createSequentialGroup()
- .addComponent(pinpadLabel);
- } else {
-
- JButton okButton = new JButton();
- okButton.setFont(okButton.getFont().deriveFont(okButton.getFont().getStyle() & ~Font.BOLD));
- okButton.setText(getMessage(BUTTON_OK));
- okButton.setEnabled(pinSpec.getMinLength() <= 0);
- okButton.setActionCommand(okCommand);
- okButton.addActionListener(okListener);
-
- JLabel oldPinLabel = null;
- JLabel repeatPinLabel = null;
- JLabel pinLabel = new JLabel();
- pinLabel.setFont(pinLabel.getFont().deriveFont(pinLabel.getFont().getStyle() & ~Font.BOLD));
- String pinLabelPattern = (type == DIALOG.CHANGE) ? getMessage(LABEL_NEW_PIN) : getMessage(LABEL_PIN);
- pinLabel.setText(MessageFormat.format(pinLabelPattern, new Object[]{pinSpec.getLocalizedName()}));
-
- final JPasswordField repeatPinField = new JPasswordField();
- pinField = new JPasswordField();
- pinField.setText("");
- pinField.setActionCommand(okCommand);
- pinField.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (pinField.getPassword().length >= pinSpec.getMinLength()) {
- if (type == DIALOG.VERIFY) {
- okListener.actionPerformed(e);
- } else {
- repeatPinField.requestFocusInWindow();
- }
- }
- }
- });
-
- if (type != DIALOG.VERIFY) {
- pinField.setDocument(new PINDocument(pinSpec, null));
- repeatPinLabel = new JLabel();
- repeatPinLabel.setFont(pinLabel.getFont());
- String repeatPinLabelPattern = getMessage(LABEL_REPEAT_PIN);
- repeatPinLabel.setText(MessageFormat.format(repeatPinLabelPattern, new Object[]{pinSpec.getLocalizedName()}));
-
- repeatPinField.setText("");
-// repeatPinField.setDocument(new PINDocument(pinSpec, okButton, pinField.getDocument()));
- repeatPinField.setActionCommand(okCommand);
- repeatPinField.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (pinField.getPassword().length >= pinSpec.getMinLength()) {
- okListener.actionPerformed(e);
- }
- }
- });
-
- if (type == DIALOG.CHANGE) {
- oldPinLabel = new JLabel();
- oldPinLabel.setFont(oldPinLabel.getFont().deriveFont(oldPinLabel.getFont().getStyle() & ~java.awt.Font.BOLD));
- String oldPinLabelPattern = getMessage(LABEL_OLD_PIN);
- oldPinLabel.setText(MessageFormat.format(oldPinLabelPattern, new Object[]{pinSpec.getLocalizedName()}));
-
- oldPinField = new JPasswordField();
- oldPinField.setText("");
- oldPinField.setDocument(new PINDocument(pinSpec, null));
- oldPinField.setActionCommand(okCommand);
- oldPinField.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (oldPinField.getPassword().length >= pinSpec.getMinLength()) {
- pinField.requestFocusInWindow();
- }
- }
- });
-
- repeatPinField.setDocument(new PINDocument(
- pinSpec, okButton,
- pinField.getDocument(), oldPinField.getDocument()));
- } else {
- // else -> ACTIVATE (not verify, not change)
- repeatPinField.setDocument(new PINDocument(
- pinSpec, okButton, pinField.getDocument()));
- }
- } else {
- pinField.setDocument(new PINDocument(pinSpec, okButton));
- }
-
- JLabel pinsizeLabel = new JLabel();
- pinsizeLabel.setFont(pinsizeLabel.getFont().deriveFont(pinsizeLabel.getFont().getStyle() & ~Font.BOLD, pinsizeLabel.getFont().getSize()-2));
- String pinsizePattern = getMessage(LABEL_PINSIZE);
- pinsizeLabel.setText(MessageFormat.format(pinsizePattern, new Object[]{PINSIZE}));
-
- ////////////////////////////////////////////////////////////////
- // NON-PINPAD SPECIFIC LAYOUT SECTION
- ////////////////////////////////////////////////////////////////
-
- pinHorizontal = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING);
- pinVertical = mainPanelLayout.createSequentialGroup();
-
-// if (pinLabelPos == PinLabelPosition.ABOVE) {
-// if (changePin) {
-// pinHorizontal
-// .addComponent(oldPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addComponent(oldPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE);
-// pinVertical
-// .addComponent(oldPinLabel)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(oldPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);
-// }
-// pinHorizontal
-// .addComponent(pinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-// .addComponent(repeatPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addComponent(repeatPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-// .addGroup(mainPanelLayout.createSequentialGroup()
-// .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
-// .addComponent(pinsizeLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));
-// pinVertical
-// .addComponent(pinLabel)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(repeatPinLabel)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(repeatPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-// .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
-// .addComponent(pinsizeLabel);
-// } else {
-
-
- if (type == DIALOG.CHANGE) {
- pinHorizontal
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(oldPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(pinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(repeatPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(oldPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(repeatPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
-
- pinVertical
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(oldPinLabel)
- .addComponent(oldPinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(pinLabel)
- .addComponent(pinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(repeatPinLabel)
- .addComponent(repeatPinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);
- } else if (type == DIALOG.ACTIVATE) {
- pinHorizontal
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(pinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(repeatPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(repeatPinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
-
- pinVertical
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(pinLabel)
- .addComponent(pinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(repeatPinLabel)
- .addComponent(repeatPinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);
- } else { // VERIFY
- pinHorizontal
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addComponent(pinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
-
- pinVertical
- .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(pinLabel)
- .addComponent(pinField))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);
- }
- pinHorizontal
- .addGroup(mainPanelLayout.createSequentialGroup()
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE)
- .addComponent(pinsizeLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));
- pinVertical
- .addComponent(pinsizeLabel);
-
- GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel);
- buttonPanel.setLayout(buttonPanelLayout);
-
- GroupLayout.SequentialGroup buttonHorizontal = buttonPanelLayout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(okButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE);
- GroupLayout.Group buttonVertical;
-
- JButton cancelButton = new JButton();
- cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle() & ~java.awt.Font.BOLD));
- cancelButton.setText(getMessage(BUTTON_CANCEL));
- cancelButton.setActionCommand(cancelCommand);
- cancelButton.addActionListener(cancelListener);
-
- buttonHorizontal
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE);
- buttonVertical = buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(okButton)
- .addComponent(cancelButton);
-
- buttonPanelLayout.setHorizontalGroup(buttonHorizontal);
- buttonPanelLayout.setVerticalGroup(buttonVertical);
-
- if (oldPinField != null) {
- oldPinField.requestFocusInWindow();
- } else {
- pinField.requestFocusInWindow();
- }
-
- } // END NON-PINPAD SECTION
-
- mainPanelLayout.setHorizontalGroup(
- mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(infoHorizontal)
- .addGroup(pinHorizontal));
-
- mainPanelLayout.setVerticalGroup(
- mainPanelLayout.createSequentialGroup()
- .addGroup(infoVertical)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(pinVertical));
-
- contentPanel.validate();
-
- }
- });
- }
-
- @Override
- protected int initButtonSize() {
- int bs = super.initButtonSize();
-
- JButton b = new JButton();
- b.setText(getMessage(BUTTON_ACTIVATE));
- if (b.getPreferredSize().width > bs) {
- bs = b.getPreferredSize().width;
- }
- b.setText(getMessage(BUTTON_CHANGE));
- if (b.getPreferredSize().width > bs) {
- bs = b.getPreferredSize().width;
- }
- b.setText(getMessage(BUTTON_UNBLOCK));
- if (b.getPreferredSize().width > bs) {
- bs = b.getPreferredSize().width;
- }
- b.setText(getMessage(BUTTON_CANCEL));
- if (b.getPreferredSize().width > bs) {
- bs = b.getPreferredSize().width;
- }
-
- return bs;
- }
-
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUIFacade.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUIFacade.java
deleted file mode 100644
index f99bcfd1..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINManagementGUIFacade.java
+++ /dev/null
@@ -1,117 +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 java.awt.event.ActionListener;
-import java.util.Map;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public interface PINManagementGUIFacade extends BKUGUIFacade {
-
- public static final String HELP_PINMGMT = "help.pin.mgmt";
-// public static final String HELP_VERIFY_PIN = "help.pin.verify";
- public static final String TITLE_PINMGMT = "title.pin.mgmt";
- public static final String TITLE_ACTIVATE_PIN = "title.activate.pin";
- public static final String TITLE_CHANGE_PIN = "title.change.pin";
- public static final String TITLE_VERIFY_PIN = "title.verify.pin";
- public static final String TITLE_UNBLOCK_PIN = "title.unblock.pin";
- public static final String TITLE_ACTIVATE_SUCCESS = "title.activate.success";
- public static final String TITLE_CHANGE_SUCCESS = "title.change.success";
-
- // removed message.* prefix to reuse keys as help keys
- public static final String MESSAGE_ACTIVATE_SUCCESS = "activate.success";
- public static final String MESSAGE_CHANGE_SUCCESS = "change.success";
- public static final String MESSAGE_PINMGMT = "pin.mgmt";
-// public static final String MESSAGE_PINPAD = "pinpad";
- public static final String MESSAGE_ACTIVATE_PIN = "activate.pin";
- public static final String MESSAGE_CHANGE_PIN = "change.pin";
- public static final String MESSAGE_VERIFY_PIN = "verify.pin";
- public static final String MESSAGE_UNBLOCK_PIN = "unblock.pin";
- public static final String MESSAGE_ACTIVATEPIN_PINPAD = "activate.pinpad";
- public static final String MESSAGE_CHANGEPIN_PINPAD = "change.pinpad";
- public static final String MESSAGE_VERIFYPIN_PINPAD = "verify.pinpad";
- public static final String MESSAGE_UNBLOCKPIN_PINPAD = "unblock.pinpad";
-
- public static final String LABEL_OLD_PIN = "label.old.pin";
- public static final String LABEL_NEW_PIN = "label.new.pin";
- public static final String LABEL_REPEAT_PIN = "label.repeat.pin";
-
- public static final String ERR_STATUS = "err.status";
- public static final String ERR_ACTIVATE = "err.activate";
- public static final String ERR_CHANGE = "err.change";
- public static final String ERR_UNBLOCK = "err.unblock";
- public static final String ERR_VERIFY = "err.verify";
- public static final String ERR_RETRIES = "err.retries";
- public static final String ERR_LOCKED = "err.locked";
- public static final String ERR_NOT_ACTIVE = "err.not.active";
- public static final String ERR_PIN_FORMAT = "err.pin.format";
- public static final String ERR_PIN_CONFIRMATION = "err.pin.confirmation";
- public static final String ERR_PIN_OPERATION_ABORTED = "err.pin.operation.aborted";
- public static final String ERR_UNSUPPORTED_CARD = "err.unsupported.card";
-
- public static final String BUTTON_ACTIVATE = "button.activate";
- public static final String BUTTON_UNBLOCK = "button.unblock";
- public static final String BUTTON_CHANGE = "button.change";
- public static final String BUTTON_VERIFY = "button.verify";
-
- public static final String STATUS_ACTIVE = "status.active";
- public static final String STATUS_BLOCKED = "status.blocked";
- public static final String STATUS_NOT_ACTIVE = "status.not.active";
- public static final String STATUS_UNKNOWN = "status.unknown";
-
- public enum STATUS { ACTIV, NOT_ACTIV, BLOCKED, UNKNOWN };
- public enum DIALOG { VERIFY, ACTIVATE, CHANGE, UNBLOCK };
-
- public void showPINManagementDialog(Map<PINSpec, STATUS> pins,
- ActionListener activateListener, String activateCmd, String changeCmd, String unblockCmd, String verifyCmd,
- ActionListener cancelListener, String cancelCmd);
-
- public void showPINDialog(DIALOG type, PINSpec pin,
- ActionListener okListener, String okCmd,
- ActionListener cancelListener, String cancelCmd);
-
- public void showPINDialog(DIALOG type, PINSpec pin, int retries,
- ActionListener okListener, String okCmd,
- ActionListener cancelListener, String cancelCmd);
-
- public void showPinpadPINDialog(DIALOG type, PINSpec pin, int retries);
-
-// public void showActivatePINDialog(PINSpec pin,
-// ActionListener okListener, String okCmd,
-// ActionListener cancelListener, String cancelCmd);
-//
-// public void showChangePINDialog(PINSpec pin,
-// ActionListener okListener, String okCmd,
-// ActionListener cancelListener, String cancelCmd);
-//
-// public void showUnblockPINDialog(PINSpec pin,
-// ActionListener okListener, String okCmd,
-// ActionListener cancelListener, String cancelCmd);
-//
-// public void showVerifyPINDialog(PINSpec pin,
-// ActionListener okListener, String okCmd,
-// ActionListener cancelListener, String cancelCmd);
-
- public char[] getOldPin();
-
- public PINSpec getSelectedPINSpec();
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINSpecRenderer.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINSpecRenderer.java
deleted file mode 100644
index e3d73e1f..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINSpecRenderer.java
+++ /dev/null
@@ -1,39 +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 javax.swing.table.DefaultTableCellRenderer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class PINSpecRenderer extends DefaultTableCellRenderer {
-
- private static final Log log = LogFactory.getLog(PINSpecRenderer.class);
-
- @Override
- protected void setValue(Object value) {
- PINSpec pinSpec = (PINSpec) value;
- super.setText(pinSpec.getLocalizedName());
- }
-
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusRenderer.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusRenderer.java
deleted file mode 100644
index 83ff74f2..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusRenderer.java
+++ /dev/null
@@ -1,61 +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.bku.gui.PINManagementGUIFacade.STATUS;
-import java.awt.Color;
-import java.awt.Font;
-import java.util.ResourceBundle;
-import javax.swing.table.DefaultTableCellRenderer;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class PINStatusRenderer extends DefaultTableCellRenderer {
-
-// private static final Log log = LogFactory.getLog(PINStatusRenderer.class);
-
- public static final Color RED = new Color(0.9f, 0.0f, 0.0f);
- public static final Color GREEN = new Color(0.0f, 0.8f, 0.0f);
- protected ResourceBundle messages;
-
- public PINStatusRenderer(ResourceBundle messages) {
- this.messages = messages;
- }
-
- @Override
- protected void setValue(Object value) {
- STATUS pinStatus = (STATUS) value;
- super.setFont(super.getFont().deriveFont(super.getFont().getStyle() | Font.BOLD));
-
- if (pinStatus == STATUS.NOT_ACTIV) {
- super.setForeground(RED);
- super.setText("<html>" + messages.getString(PINManagementGUIFacade.STATUS_NOT_ACTIVE) + "</html>");
- } else if (pinStatus == STATUS.ACTIV) {
- super.setForeground(GREEN);
- super.setText("<html>" + messages.getString(PINManagementGUIFacade.STATUS_ACTIVE) + "</html>");
- } else if (pinStatus == STATUS.BLOCKED) {
- super.setForeground(RED);
- super.setText("<html>" + messages.getString(PINManagementGUIFacade.STATUS_BLOCKED) + "</html>");
- } else {
- super.setForeground(Color.BLACK);
- super.setText("<html>" + messages.getString(PINManagementGUIFacade.STATUS_UNKNOWN) + "</html>");
- }
- }
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusTableModel.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusTableModel.java
deleted file mode 100644
index 052c13b2..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/gui/PINStatusTableModel.java
+++ /dev/null
@@ -1,58 +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.bku.gui.PINManagementGUIFacade.STATUS;
-import at.gv.egiz.smcc.PINSpec;
-import java.util.Map;
-import javax.swing.table.DefaultTableModel;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class PINStatusTableModel extends DefaultTableModel {
-
-// protected static final Log log = LogFactory.getLog(PINStatusTableModel.class);
- protected Class[] types;
-
- public PINStatusTableModel(Map<PINSpec, STATUS> pinStatuses) {
- super(0, 2);
- if (pinStatuses == null) {
- throw new RuntimeException("pinStatuses must not be null");
- }
-// log.trace(pinStatuses.size() + " PINs");
- types = new Class[] { PINSpec.class, STATUS.class };
- for (PINSpec pinSpec : pinStatuses.keySet()) {
- addRow(new Object[] { pinSpec, pinStatuses.get(pinSpec) });
- }
-// PINSpec activePIN = new PINSpec(0, 1, null, "active-PIN", (byte) 0x01);
-// PINSpec blockedPIN = new PINSpec(0, 1, null, "blocked-PIN", (byte) 0x01);
-// addRow(new Object[] { activePIN, PINStatusProvider.STATUS.ACTIV });
-// addRow(new Object[] { blockedPIN, PINStatusProvider.STATUS.BLOCKED });
- }
-
- @Override
- public Class getColumnClass(int columnIndex) {
- return types[columnIndex];
- }
-
- @Override
- public boolean isCellEditable(int rowIndex, int columnIndex) {
- return false;
- }
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/ActivationApplet.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/ActivationApplet.java
index 68f0cb72..cfd1e200 100644
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/ActivationApplet.java
+++ b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/ActivationApplet.java
@@ -22,7 +22,7 @@ import at.gv.egiz.bku.gui.BKUGUIFacade;
import at.gv.egiz.bku.gui.BKUGUIFacade.Style;
import at.gv.egiz.bku.online.applet.BKUApplet;
import at.gv.egiz.bku.smccstal.AbstractSMCCSTAL;
-import at.gv.egiz.bku.smccstal.ext.CardMgmtRequestHandler;
+import at.gv.egiz.bku.smccstal.CardMgmtRequestHandler;
import at.gv.egiz.stal.ext.APDUScriptRequest;
import at.gv.egiz.stal.service.STALPortType;
import at.gv.egiz.stal.service.translator.STALTranslator;
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/PINManagementBKUWorker.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/PINManagementBKUWorker.java
index 81b635f8..d06c2865 100644
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/PINManagementBKUWorker.java
+++ b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/PINManagementBKUWorker.java
@@ -18,11 +18,16 @@ package at.gv.egiz.bku.online.applet;
import at.gv.egiz.bku.gui.BKUGUIFacade;
import at.gv.egiz.bku.gui.PINManagementGUIFacade;
-import at.gv.egiz.bku.smccstal.ext.PINManagementRequestHandler;
+import at.gv.egiz.bku.smccstal.PINManagementRequestHandler;
import at.gv.egiz.stal.ErrorResponse;
+import at.gv.egiz.stal.InfoboxReadRequest;
+import at.gv.egiz.stal.QuitRequest;
+import at.gv.egiz.stal.STALRequest;
import at.gv.egiz.stal.STALResponse;
+import at.gv.egiz.stal.SignRequest;
import at.gv.egiz.stal.ext.PINManagementRequest;
import at.gv.egiz.stal.ext.PINManagementResponse;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -36,7 +41,8 @@ public class PINManagementBKUWorker extends AppletBKUWorker {
public PINManagementBKUWorker(BKUApplet applet, PINManagementGUIFacade gui) {
super(applet, gui);
- handlerMap.clear();
+ removeRequestHandler(InfoboxReadRequest.class);
+ removeRequestHandler(SignRequest.class);
addRequestHandler(PINManagementRequest.class, new PINManagementRequestHandler());
}
@@ -46,7 +52,11 @@ public class PINManagementBKUWorker extends AppletBKUWorker {
BKUGUIFacade.MESSAGE_WELCOME);
try {
- List<STALResponse> responses = handleRequest(Collections.singletonList(new PINManagementRequest()));
+
+ ArrayList<STALRequest> reqs = new ArrayList<STALRequest>();
+ reqs.add(new PINManagementRequest());
+ reqs.add(new QuitRequest());
+ List<STALResponse> responses = handleRequest(reqs);
if (responses.size() == 1) {
STALResponse response = responses.get(0);
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/CardMgmtRequestHandler.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/CardMgmtRequestHandler.java
deleted file mode 100644
index 769342e7..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/CardMgmtRequestHandler.java
+++ /dev/null
@@ -1,177 +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.smccstal.ext;
-
-import at.gv.egiz.bku.gui.ActivationGUIFacade;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.smartcardio.Card;
-import javax.smartcardio.CardChannel;
-import javax.smartcardio.CardException;
-import javax.smartcardio.CommandAPDU;
-import javax.smartcardio.ResponseAPDU;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.bku.smccstal.AbstractRequestHandler;
-import at.gv.egiz.smcc.SignatureCardException;
-import at.gv.egiz.stal.ErrorResponse;
-import at.gv.egiz.stal.STALRequest;
-import at.gv.egiz.stal.STALResponse;
-import at.gv.egiz.stal.ext.APDUScriptRequest;
-import at.gv.egiz.stal.ext.APDUScriptResponse;
-import at.gv.egiz.stal.ext.APDUScriptRequest.Command;
-import at.gv.egiz.stal.ext.APDUScriptRequest.RequestScriptElement;
-import at.gv.egiz.stal.ext.APDUScriptRequest.Reset;
-import at.gv.egiz.stal.ext.APDUScriptResponse.Response;
-import at.gv.egiz.stal.ext.APDUScriptResponse.ATR;
-import at.gv.egiz.stal.ext.APDUScriptResponse.ResponseScriptElement;
-import java.awt.event.ActionListener;
-
-/**
- * @author mcentner
- *
- */
-public class CardMgmtRequestHandler extends AbstractRequestHandler implements ActionListener {
-
- /**
- * Logging facility.
- */
- private static Log log = LogFactory.getLog(CardMgmtRequestHandler.class);
-
- /**
- * The sequence counter.
- */
- private int sequenceNum = 0;
-
- /**
- * display script num
- */
- private int currentActivationScript = 0;
-
- @Override
- public STALResponse handleRequest(STALRequest request)
- throws InterruptedException {
-
- // APDU Script Request
- if (request instanceof APDUScriptRequest) {
-
- currentActivationScript++;
- log.debug("handling APDU script " + currentActivationScript);
-
- Card icc = card.getCard();
-
- if (icc == null) {
- log.error("SignatureCard instance '" + card.getClass().getName() + "' does not support card management requests.");
- return new ErrorResponse(1000);
- }
-
- List<RequestScriptElement> script = ((APDUScriptRequest) request).getScript();
- ArrayList<ResponseScriptElement> responses = new ArrayList<ResponseScriptElement>(script.size());
-
- ((ActivationGUIFacade) gui).showActivationProgressDialog(currentActivationScript, script.size(), this, "cancel");
-
- try {
- log.trace("begin exclusive");
- icc.beginExclusive();
-
- for (RequestScriptElement scriptElement : script) {
- ((ActivationGUIFacade) gui).incrementProgress();
-
- if (scriptElement instanceof Command) {
- log.trace("handling APDU script element COMMAND");
- Command command = (Command) scriptElement;
- CommandAPDU commandAPDU = new CommandAPDU(command.getCommandAPDU());
-
- log.trace("get basicchannel");
- CardChannel channel = icc.getBasicChannel();
-
- sequenceNum = command.getSequence();
- log.debug("Transmit APDU (sequence=" + sequenceNum + ")");
- log.trace(commandAPDU.toString());
- ResponseAPDU responseAPDU = channel.transmit(commandAPDU);
- log.trace(responseAPDU.toString());
-
- byte[] sw = new byte[] {
- (byte) (0xFF & responseAPDU.getSW1()),
- (byte) (0xFF & responseAPDU.getSW2()) };
-
- responses.add(new Response(sequenceNum, responseAPDU.getData(), sw, 0));
-
- if (command.getExpectedSW() != null &&
- !Arrays.equals(sw, command.getExpectedSW())) {
- // unexpected SW
- log.warn("Got unexpected SW. APDU-script execution stopped.");
- break;
- }
-
- } else if (scriptElement instanceof Reset) {
-
- log.trace("handling APDU script element RESET");
- sequenceNum = 0;
- card.reset();
- javax.smartcardio.ATR atr = icc.getATR();
- log.trace("got ATR: " + atr.toString());
- responses.add(new ATR(atr.getBytes()));
-
- log.trace("regain exclusive access to card");
- icc = card.getCard();
- icc.beginExclusive();
- }
-
- }
-
- } catch (CardException e) {
- log.info("Failed to execute APDU script.", e);
- responses.add(new Response(sequenceNum, null, null, Response.RC_UNSPECIFIED));
- } catch (SignatureCardException e) {
- log.info("Failed to reset smart card.", e);
- responses.add(new Response(sequenceNum, null, null, Response.RC_UNSPECIFIED));
- } catch (RuntimeException e) {
- log.error(e);
- throw e;
- } finally {
- try {
- icc.endExclusive();
- } catch (CardException e) {
- log.info(e);
- }
- }
-
- log.trace("done handling APDU script " + currentActivationScript + ", return response containing " + responses.size() + " elements");
- ((ActivationGUIFacade) gui).showIdleDialog(this, "cancel");
- return new APDUScriptResponse(responses);
-
- } else {
- log.error("Got unexpected STAL request: " + request);
- return new ErrorResponse(1000);
- }
-
- }
-
- @Override
- public boolean requireCard() {
- return true;
- }
-
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/GetPINStatusException.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/GetPINStatusException.java
deleted file mode 100644
index abbe66a1..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/GetPINStatusException.java
+++ /dev/null
@@ -1,41 +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.smccstal.ext;
-
-import at.gv.egiz.smcc.SignatureCardException;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class GetPINStatusException extends SignatureCardException {
-
- /**
- * Creates a new instance of <code>GetStatusException</code> without detail message.
- */
- public GetPINStatusException() {
- }
-
-
- /**
- * Constructs an instance of <code>GetStatusException</code> with the specified detail message.
- * @param msg the detail message.
- */
- public GetPINStatusException(String msg) {
- super(msg);
- }
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/ManagementPINProviderFactory.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/ManagementPINProviderFactory.java
deleted file mode 100644
index f54f89d4..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/ManagementPINProviderFactory.java
+++ /dev/null
@@ -1,262 +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.smccstal.ext;
-
-import at.gv.egiz.bku.gui.BKUGUIFacade;
-import at.gv.egiz.smcc.ChangePINProvider;
-import at.gv.egiz.bku.gui.PINManagementGUIFacade;
-import at.gv.egiz.bku.smccstal.AbstractPINProvider;
-import at.gv.egiz.bku.smccstal.PINProviderFactory;
-import at.gv.egiz.smcc.CancelledException;
-import at.gv.egiz.smcc.ccid.CCID;
-import at.gv.egiz.smcc.PINProvider;
-import at.gv.egiz.smcc.PINSpec;
-import at.gv.egiz.smcc.SignatureCard;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class ManagementPINProviderFactory extends PINProviderFactory {
-
- public ManagementPINProviderFactory(CCID reader, PINManagementGUIFacade gui) {
- super(reader, gui);
- }
-
-// public static ManagementPINProviderFactory getInstance(SignatureCard forCard,
-// PINManagementGUIFacade gui) {
-// if (forCard.getReader().hasFeature(CCID.FEATURE_VERIFY_PIN_DIRECT)) {
-// return new PinpadPINProviderFactory(gui);
-//
-// } else {
-// return new SoftwarePINProviderFactory(gui);
-// }
-// }
-
- public PINProvider getVerifyPINProvider() {
- if (reader.hasFeature(CCID.FEATURE_VERIFY_PIN_START)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.VERIFY);
- } else if (reader.hasFeature(CCID.FEATURE_VERIFY_PIN_DIRECT)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.VERIFY);
- } else {
- return new SoftwareGenericPinProvider(PINManagementGUIFacade.DIALOG.VERIFY);
- }
- }
-
- public PINProvider getActivatePINProvider() {
- if (reader.hasFeature(CCID.FEATURE_MODIFY_PIN_START)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.ACTIVATE);
- } else if (reader.hasFeature(CCID.FEATURE_MODIFY_PIN_DIRECT)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.ACTIVATE);
- } else {
- return new SoftwareGenericPinProvider(PINManagementGUIFacade.DIALOG.ACTIVATE);
- }
- }
-
- public ChangePINProvider getChangePINProvider() {
- if (reader.hasFeature(CCID.FEATURE_MODIFY_PIN_START)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.CHANGE);
- } else if (reader.hasFeature(CCID.FEATURE_MODIFY_PIN_DIRECT)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.CHANGE);
- } else {
- return new ChangePinProvider();
- }
- }
-
- public PINProvider getUnblockPINProvider() {
- if (reader.hasFeature(CCID.FEATURE_VERIFY_PIN_START)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.UNBLOCK);
- } else if (reader.hasFeature(CCID.FEATURE_VERIFY_PIN_DIRECT)) {
- return new PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG.UNBLOCK);
- } else {
- return new SoftwareGenericPinProvider(PINManagementGUIFacade.DIALOG.UNBLOCK);
- }
- }
-
- class PinpadGenericPinProvider extends AbstractPINProvider
- implements ChangePINProvider {
-
- protected PINManagementGUIFacade.DIALOG type;
-
- private PinpadGenericPinProvider(PINManagementGUIFacade.DIALOG type) {
- this.type = type;
- }
-
- @Override
- public char[] providePIN(PINSpec spec, int retries)
- throws CancelledException, InterruptedException {
-
- showPinpadPINDialog(retries, spec);
- retry = true;
- return null;
- }
-
- /**
- * do not call this method without calling providePIN()
- * (no message is displayed)
- * @param spec
- * @param retries
- * @return
- */
- @Override
- public char[] provideOldPIN(PINSpec spec, int retries) {
- return null;
- }
-
- private void showPinpadPINDialog(int retries, PINSpec pinSpec) {
- String title, message;
- Object[] params;
- if (retry) {
- if (retries == 1) {
- message = BKUGUIFacade.MESSAGE_LAST_RETRY_PINPAD;
- } else {
- message = BKUGUIFacade.MESSAGE_RETRIES_PINPAD;
- }
- title = BKUGUIFacade.TITLE_RETRY;
- params = new Object[]{String.valueOf(retries)};
- } else if (type == PINManagementGUIFacade.DIALOG.VERIFY) {
- title = PINManagementGUIFacade.TITLE_VERIFY_PIN;
- message = BKUGUIFacade.MESSAGE_ENTERPIN_PINPAD;
- String pinSize = String.valueOf(pinSpec.getMinLength());
- if (pinSpec.getMinLength() != pinSpec.getMaxLength()) {
- pinSize += "-" + pinSpec.getMaxLength();
- }
- params = new Object[]{pinSpec.getLocalizedName(), pinSize};
- } else if (type == PINManagementGUIFacade.DIALOG.ACTIVATE) {
- title = PINManagementGUIFacade.TITLE_ACTIVATE_PIN;
- message = PINManagementGUIFacade.MESSAGE_ACTIVATEPIN_PINPAD;
- String pinSize = String.valueOf(pinSpec.getMinLength());
- if (pinSpec.getMinLength() != pinSpec.getMaxLength()) {
- pinSize += "-" + pinSpec.getMaxLength();
- }
- params = new Object[]{pinSpec.getLocalizedName(), pinSize};
- } else if (type == PINManagementGUIFacade.DIALOG.CHANGE) {
- title = PINManagementGUIFacade.TITLE_CHANGE_PIN;
- message = PINManagementGUIFacade.MESSAGE_CHANGEPIN_PINPAD;
- String pinSize = String.valueOf(pinSpec.getMinLength());
- if (pinSpec.getMinLength() != pinSpec.getMaxLength()) {
- pinSize += "-" + pinSpec.getMaxLength();
- }
- params = new Object[]{pinSpec.getLocalizedName(), pinSize};
- } else { //if (type == DIALOG.UNBLOCK) {
- title = PINManagementGUIFacade.TITLE_UNBLOCK_PIN;
- message = PINManagementGUIFacade.MESSAGE_UNBLOCKPIN_PINPAD;
- String pinSize = String.valueOf(pinSpec.getMinLength());
- if (pinSpec.getMinLength() != pinSpec.getMaxLength()) {
- pinSize += "-" + pinSpec.getMaxLength();
- }
- params = new Object[]{pinSpec.getLocalizedName(), pinSize};
- }
- gui.showMessageDialog(title, message, params);
- }
- }
-
-
- class SoftwareGenericPinProvider extends AbstractPINProvider {
-
-// protected PINManagementGUIFacade gui;
- protected PINManagementGUIFacade.DIALOG type;
-
- private SoftwareGenericPinProvider(PINManagementGUIFacade.DIALOG type) {
- this.type = type;
- }
-
- @Override
- public char[] providePIN(PINSpec spec, int retries)
- throws CancelledException, InterruptedException {
-
- ((PINManagementGUIFacade) gui).showPINDialog(type, spec,
- (retry) ? retries : -1,
- this, "exec",
- this, "back");
-
- waitForAction();
-
- if ("exec".equals(action)) {
- gui.showMessageDialog(BKUGUIFacade.TITLE_WAIT,
- BKUGUIFacade.MESSAGE_WAIT);
- retry = true;
- return gui.getPin();
- } else if ("back".equals(action)) {
- throw new CancelledException();
- } else {
- log.error("unsupported command " + action);
- throw new CancelledException();
- }
- }
- }
-
- class ChangePinProvider extends AbstractPINProvider
- implements ChangePINProvider {
-
-// protected PINManagementGUIFacade gui;
-
- private char[] oldPin;
- private char[] newPin;
-
- private ChangePinProvider() {
- }
-
- @Override
- public char[] providePIN(PINSpec spec, int retries)
- throws CancelledException, InterruptedException {
- if (newPin == null) {
- getPINs(spec, retries);
- }
- char[] pin = newPin;
- newPin = null;
- return pin;
- }
-
- @Override
- public char[] provideOldPIN(PINSpec spec, int retries)
- throws CancelledException, InterruptedException {
- if (oldPin == null) {
- getPINs(spec, retries);
- }
- char[] pin = oldPin;
- oldPin = null;
- return pin;
- }
-
- private void getPINs(PINSpec spec, int retries)
- throws InterruptedException, CancelledException {
-
- ((PINManagementGUIFacade) gui).showPINDialog(
- PINManagementGUIFacade.DIALOG.CHANGE, spec,
- (retry) ? retries : -1,
- this, "exec",
- this, "back");
-
- waitForAction();
-
- if ("exec".equals(action)) {
- gui.showMessageDialog(BKUGUIFacade.TITLE_WAIT,
- BKUGUIFacade.MESSAGE_WAIT);
- retry = true;
- oldPin = ((PINManagementGUIFacade) gui).getOldPin();
- newPin = gui.getPin();
- } else if ("back".equals(action)) {
- throw new CancelledException();
- } else {
- log.error("unsupported command " + action);
- throw new CancelledException();
- }
- }
- }
-}
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/PINManagementRequestHandler.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/PINManagementRequestHandler.java
deleted file mode 100644
index e0b09d63..00000000
--- a/BKUAppletExt/src/main/java/at/gv/egiz/bku/smccstal/ext/PINManagementRequestHandler.java
+++ /dev/null
@@ -1,244 +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.smccstal.ext;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.bku.gui.BKUGUIFacade;
-import at.gv.egiz.bku.gui.PINManagementGUIFacade;
-import at.gv.egiz.bku.gui.PINManagementGUIFacade.STATUS;
-import at.gv.egiz.bku.smccstal.AbstractRequestHandler;
-import at.gv.egiz.smcc.CancelledException;
-import at.gv.egiz.smcc.LockedException;
-import at.gv.egiz.smcc.NotActivatedException;
-import at.gv.egiz.smcc.PINConfirmationException;
-import at.gv.egiz.smcc.PINFormatException;
-import at.gv.egiz.smcc.PINMgmtSignatureCard;
-import at.gv.egiz.smcc.PINOperationAbortedException;
-import at.gv.egiz.smcc.PINSpec;
-import at.gv.egiz.smcc.SignatureCardException;
-import at.gv.egiz.smcc.TimeoutException;
-import at.gv.egiz.smcc.PINMgmtSignatureCard.PIN_STATE;
-import at.gv.egiz.stal.ErrorResponse;
-import at.gv.egiz.stal.STALRequest;
-import at.gv.egiz.stal.STALResponse;
-import at.gv.egiz.stal.ext.PINManagementRequest;
-import at.gv.egiz.stal.ext.PINManagementResponse;
-
-/**
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class PINManagementRequestHandler extends AbstractRequestHandler {
-
- protected static final Log log = LogFactory.getLog(PINManagementRequestHandler.class);
-
- protected Map<PINSpec, STATUS> pinStates = new HashMap<PINSpec, STATUS>();
-
- @Override
- public STALResponse handleRequest(STALRequest request) throws InterruptedException {
- if (request instanceof PINManagementRequest) {
-
- PINManagementGUIFacade gui = (PINManagementGUIFacade) this.gui;
-
- PINSpec selectedPIN = null;
-
- try {
-
- if (card instanceof PINMgmtSignatureCard) {
-
- // update all PIN states
- for (PINSpec pinSpec : ((PINMgmtSignatureCard) card).getPINSpecs()) {
- updatePINState(pinSpec, STATUS.UNKNOWN);
- }
-
- gui.showPINManagementDialog(pinStates, this, "activate_enterpin",
- "change_enterpin", "unblock_enterpuk", "verify_enterpin", this,
- "cancel");
-
- } else {
-
- // card does not support PIN management
- gui.showErrorDialog(PINManagementGUIFacade.ERR_UNSUPPORTED_CARD,
- null, this, "cancel");
-
- }
-
- while (true) {
-
- waitForAction();
-
- if ("cancel".equals(actionCommand)) {
- return new PINManagementResponse();
- } else {
- selectedPIN = gui.getSelectedPINSpec();
-
- if (selectedPIN == null) {
- throw new NullPointerException("no PIN selected for activation/change");
- }
-
- ManagementPINProviderFactory ppfac =
- new ManagementPINProviderFactory(card.getReader(), gui);
-
- try {
- if ("activate_enterpin".equals(actionCommand)) {
- log.info("activate " + selectedPIN.getLocalizedName());
- ((PINMgmtSignatureCard) card).activatePIN(selectedPIN,
- ppfac.getActivatePINProvider());
- updatePINState(selectedPIN, STATUS.ACTIV);
- gui.showMessageDialog(PINManagementGUIFacade.TITLE_ACTIVATE_SUCCESS,
- PINManagementGUIFacade.MESSAGE_ACTIVATE_SUCCESS,
- new Object[] {selectedPIN.getLocalizedName()},
- BKUGUIFacade.BUTTON_OK, this, "ok");
- waitForAction();
- } else if ("change_enterpin".equals(actionCommand)) {
- log.info("change " + selectedPIN.getLocalizedName());
- ((PINMgmtSignatureCard) card).changePIN(selectedPIN,
- ppfac.getChangePINProvider());
- updatePINState(selectedPIN, STATUS.ACTIV);
- gui.showMessageDialog(PINManagementGUIFacade.TITLE_CHANGE_SUCCESS,
- PINManagementGUIFacade.MESSAGE_CHANGE_SUCCESS,
- new Object[] {selectedPIN.getLocalizedName()},
- BKUGUIFacade.BUTTON_OK, this, "ok");
- waitForAction();
-
- } else if ("unblock_enterpuk".equals(actionCommand)) {
- log.info("unblock " + selectedPIN.getLocalizedName());
- ((PINMgmtSignatureCard) card).unblockPIN(selectedPIN,
- ppfac.getUnblockPINProvider());
- } else if ("verify_enterpin".equals(actionCommand)) {
- log.info("verify " + selectedPIN.getLocalizedName());
- ((PINMgmtSignatureCard) card).verifyPIN(selectedPIN,
- ppfac.getVerifyPINProvider());
- updatePINState(selectedPIN, STATUS.ACTIV);
- }
- } catch (CancelledException ex) {
- log.trace("cancelled");
- } catch (TimeoutException ex) {
- log.error("Timeout during pin entry");
- gui.showMessageDialog(BKUGUIFacade.TITLE_ENTRY_TIMEOUT,
- BKUGUIFacade.ERR_PIN_TIMEOUT,
- new Object[] {selectedPIN.getLocalizedName()},
- BKUGUIFacade.BUTTON_OK, this, null);
- waitForAction();
- } catch (LockedException ex) {
- log.error(selectedPIN.getLocalizedName() + " locked");
- updatePINState(selectedPIN, STATUS.BLOCKED);
- gui.showErrorDialog(PINManagementGUIFacade.ERR_LOCKED,
- new Object[] {selectedPIN.getLocalizedName()},
- this, null);
- waitForAction();
- } catch (NotActivatedException ex) {
- log.error(selectedPIN.getLocalizedName() + " not active");
- updatePINState(selectedPIN, STATUS.NOT_ACTIV);
- gui.showErrorDialog(PINManagementGUIFacade.ERR_NOT_ACTIVE,
- new Object[] {selectedPIN.getLocalizedName()},
- this, null);
- waitForAction();
- } catch (PINConfirmationException ex) {
- log.error("confirmation pin does not match new " + selectedPIN.getLocalizedName());
- gui.showErrorDialog(PINManagementGUIFacade.ERR_PIN_CONFIRMATION,
- new Object[] {selectedPIN.getLocalizedName()},
- this, null);
- waitForAction();
- } catch (PINOperationAbortedException ex) {
- log.error("pin operation aborted without further details");
- gui.showErrorDialog(PINManagementGUIFacade.ERR_PIN_OPERATION_ABORTED,
- new Object[] {selectedPIN.getLocalizedName()},
- this, null);
- waitForAction();
- } catch (PINFormatException ex) {
- log.error("wrong format of new " + selectedPIN.getLocalizedName());
-// updatePINStatus(selectedPIN, STATUS.NOT_ACTIV);
- String pinSize = String.valueOf(selectedPIN.getMinLength());
- if (selectedPIN.getMinLength() != selectedPIN.getMaxLength()) {
- pinSize += "-" + selectedPIN.getMaxLength();
- }
- gui.showErrorDialog(PINManagementGUIFacade.ERR_PIN_FORMAT,
- new Object[] {selectedPIN.getLocalizedName(), pinSize},
- this, null);
- waitForAction();
- }
- } // end if
-
- selectedPIN = null;
- gui.showPINManagementDialog(pinStates,
- this, "activate_enterpin", "change_enterpin", "unblock_enterpuk", "verify_enterpin",
- this, "cancel");
- } // end while
-
- } catch (GetPINStatusException ex) {
- String pin = (selectedPIN != null) ? selectedPIN.getLocalizedName() : "pin";
- log.error("failed to get " + pin + " status: " + ex.getMessage());
- gui.showErrorDialog(PINManagementGUIFacade.ERR_STATUS, null,
- this, "ok");
- waitForAction();
- return new ErrorResponse(1000);
- } catch (SignatureCardException ex) {
- log.error(ex.getMessage(), ex);
- gui.showErrorDialog(PINManagementGUIFacade.ERR_UNKNOWN, null,
- this, "ok");
- waitForAction();
- return new ErrorResponse(1000);
- }
- } else {
- log.error("Got unexpected STAL request: " + request);
- return new ErrorResponse(1000);
- }
- }
-
- @Override
- public boolean requireCard() {
- return true;
- }
-
- /**
- * query status for STARCOS card,
- * assume provided status for ACOS card
- * @param pinSpec
- * @param status
- * @throws at.gv.egiz.smcc.SignatureCardException if query status fails
- */
- private void updatePINState(PINSpec pinSpec, STATUS status)
- throws GetPINStatusException {
-
- PINMgmtSignatureCard pmCard = ((PINMgmtSignatureCard) card);
- PIN_STATE pinState;
- try {
- pinState = pmCard.getPINState(pinSpec);
- } catch (SignatureCardException e) {
- String msg = "Failed to get PIN status for pin '"
- + pinSpec.getLocalizedName() + "'.";
- log.info(msg, e);
- throw new GetPINStatusException(msg);
- }
- if (pinState == PIN_STATE.ACTIV) {
- pinStates.put(pinSpec, STATUS.ACTIV);
- } else if (pinState == PIN_STATE.NOT_ACTIV) {
- pinStates.put(pinSpec, STATUS.NOT_ACTIV);
- } else if (pinState == PIN_STATE.BLOCKED) {
- pinStates.put(pinSpec, STATUS.BLOCKED);
- } else {
- pinStates.put(pinSpec, status);
- }
- }
-
-}