From 0df8bb10302989f41ed420ec0ff29b2fc2005471 Mon Sep 17 00:00:00 2001
From: wbauer <wbauer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>
Date: Mon, 15 Sep 2008 14:18:53 +0000
Subject: Migrated BKULocal to BKUCommonGUI and minor bug fixes

git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@37 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
---
 .../at/gv/egiz/bku/local/stal/BKUGuiProxy.java     | 130 ++++++++++
 .../bku/local/stal/LocalSignRequestHandler.java    |  84 +++++++
 .../java/at/gv/egiz/bku/local/stal/PINDialog.java  | 214 -----------------
 .../gv/egiz/bku/local/stal/QuitRequestHandler.java |  41 ----
 .../java/at/gv/egiz/bku/local/stal/SMCCSTAL.java   | 100 ++------
 .../at/gv/egiz/bku/local/stal/SMCCSTALFactory.java | 100 ++++++--
 .../egiz/bku/local/stal/SwingInsertCardDialog.java | 147 ------------
 .../gv/egiz/bku/local/stal/SwingPINProvider.java   |  57 -----
 .../at/gv/egiz/bku/local/stal/SwingPinDialog.java  | 265 ---------------------
 9 files changed, 307 insertions(+), 831 deletions(-)
 create mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java
 create mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java
 delete mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/PINDialog.java
 delete mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/QuitRequestHandler.java
 delete mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingInsertCardDialog.java
 delete mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPINProvider.java
 delete mode 100644 BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPinDialog.java

(limited to 'BKULocal/src')

diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java
new file mode 100644
index 00000000..0bed928d
--- /dev/null
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java
@@ -0,0 +1,130 @@
+package at.gv.egiz.bku.local.stal;
+
+import java.awt.Container;
+import java.awt.event.ActionListener;
+import java.util.List;
+
+import javax.swing.JDialog;
+
+import at.gv.egiz.bku.gui.BKUGUIFacade;
+import at.gv.egiz.smcc.PINSpec;
+import at.gv.egiz.stal.HashDataInput;
+
+public class BKUGuiProxy implements BKUGUIFacade {
+
+  private BKUGUIFacade delegate;
+  private JDialog dialog;
+
+  public BKUGuiProxy(JDialog dialog, BKUGUIFacade delegate) {
+    this.delegate = delegate;
+    this.dialog = dialog;
+  }
+
+  private void showDialog() {
+    dialog.setVisible(true);
+    dialog.setAlwaysOnTop(true);
+  }
+
+  @Override
+  public char[] getPin() {
+    return delegate.getPin();
+  }
+
+  @Override
+  public void init(Container contentPane, String localeString) {
+    delegate.init(contentPane, localeString);
+  }
+
+  @Override
+  public void showCardNotSupportedDialog(ActionListener cancelListener,
+      String actionCommand) {
+    showDialog();
+    delegate.showCardNotSupportedDialog(cancelListener, actionCommand);
+  }
+
+  @Override
+  public void showCardPINDialog(PINSpec pinSpec, ActionListener okListener,
+      String okCommand, ActionListener cancelListener, String cancelCommand) {
+    showDialog();
+    delegate.showCardPINDialog(pinSpec, okListener, okCommand, cancelListener,
+        cancelCommand);
+  }
+
+  @Override
+  public void showCardPINRetryDialog(PINSpec pinSpec, int numRetries,
+      ActionListener okListener, String okCommand,
+      ActionListener cancelListener, String cancelCommand) {
+    showDialog();
+    delegate.showCardPINRetryDialog(pinSpec, numRetries, okListener, okCommand,
+        cancelListener, cancelCommand);
+  }
+
+  @Override
+  public void showErrorDialog(String errorMsg, ActionListener okListener,
+      String actionCommand) {
+    showDialog();
+    delegate.showErrorDialog(errorMsg, okListener, actionCommand);
+  }
+
+  @Override
+  public void showErrorDialog(String errorMsg) {
+    showDialog();
+    delegate.showErrorDialog(errorMsg);
+  }
+
+  @Override
+  public void showHashDataInputDialog(List<HashDataInput> signedReferences,
+      ActionListener okListener, String actionCommand) {
+    showDialog();
+    delegate.showHashDataInputDialog(signedReferences, okListener,
+        actionCommand);
+  }
+
+  @Override
+  public void showInsertCardDialog(ActionListener cancelListener,
+      String actionCommand) {
+    showDialog();
+    delegate.showInsertCardDialog(cancelListener, actionCommand);
+  }
+
+  @Override
+  public void showLoginDialog(ActionListener loginListener, String actionCommand) {
+    showDialog();
+
+    delegate.showLoginDialog(loginListener, actionCommand);
+  }
+
+  @Override
+  public void showSignaturePINDialog(PINSpec pinSpec,
+      ActionListener signListener, String signCommand,
+      ActionListener cancelListener, String cancelCommand,
+      ActionListener hashdataListener, String hashdataCommand) {
+    showDialog();
+    delegate.showSignaturePINDialog(pinSpec, 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) {
+    showDialog();
+    delegate.showSignaturePINRetryDialog(pinSpec, numRetries, okListener,
+        okCommand, cancelListener, cancelCommand, hashdataListener,
+        hashdataCommand);
+  }
+
+  @Override
+  public void showWaitDialog(String waitMessage) {
+    showDialog();
+    delegate.showWaitDialog(waitMessage);
+  }
+
+  @Override
+  public void showWelcomeDialog() {
+    showDialog();
+    delegate.showWelcomeDialog();
+  }
+
+}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java
new file mode 100644
index 00000000..f8546e49
--- /dev/null
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java
@@ -0,0 +1,84 @@
+/*
+ * 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.local.stal;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.gv.egiz.bku.smccstal.SMCCSTALRequestHandler;
+import at.gv.egiz.bku.smccstal.SignRequestHandler;
+import at.gv.egiz.stal.HashDataInput;
+import at.gv.egiz.stal.STALRequest;
+import at.gv.egiz.stal.STALResponse;
+import at.gv.egiz.stal.SignRequest;
+import at.gv.egiz.stal.signedinfo.ReferenceType;
+
+/**
+ * 
+ * @author clemens
+ */
+public class LocalSignRequestHandler extends SignRequestHandler {
+
+  private static final Log log = LogFactory
+      .getLog(LocalSignRequestHandler.class);
+  private List<HashDataInput> hashDataInput = Collections.EMPTY_LIST;
+
+  public LocalSignRequestHandler() {
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public STALResponse handleRequest(STALRequest request) {
+    if (request instanceof SignRequest) {
+      SignRequest signReq = (SignRequest) request;
+      hashDataInput = signReq.getHashDataInput();
+    }
+    return super.handleRequest(request);
+  }
+
+  @Override
+  protected List<HashDataInput> getHashDataInputs(
+      List<ReferenceType> dsigReferences) throws Exception {
+    ArrayList<HashDataInput> result = new ArrayList<HashDataInput>();
+    for (ReferenceType dsigRef : dsigReferences) {
+      // don't get Manifest, QualifyingProperties, ...
+      if (dsigRef.getType() == null) {
+        String dsigRefId = dsigRef.getId();
+        if (dsigRefId != null) {
+          for (HashDataInput hdi : hashDataInput) {
+            if (hdi.getReferenceId().equals(dsigRefId)) {
+              result.add(hdi);
+            }
+          }
+        } else {
+          throw new Exception(
+              "Cannot get HashDataInput for dsig:Reference without Id attribute");
+        }
+      }
+    }
+    return result;
+  }
+
+  @Override
+  public SMCCSTALRequestHandler newInstance() {
+    return new LocalSignRequestHandler();
+  }
+}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/PINDialog.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/PINDialog.java
deleted file mode 100644
index 5bc6bab5..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/PINDialog.java
+++ /dev/null
@@ -1,214 +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.local.stal;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.JButton;
-import javax.swing.JPasswordField;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.PlainDocument;
-
-import at.gv.egiz.smcc.PINSpec;
-
-public class PINDialog extends javax.swing.JDialog implements ActionListener {
-
-  // Variables declaration - do not modify
-  private javax.swing.JButton okButton;
-  private javax.swing.JButton cancelButton;
-  private javax.swing.JLabel label;
-  private javax.swing.JPasswordField password;
-  // End of variables declaration
-
-  private PINSpec pinSpec;
-  private String pinString;
-  private boolean finished = false;
-
-  class PinDocument extends PlainDocument {
-    private Pattern pattern;
-
-    public PinDocument() {
-      pattern = Pattern.compile(pinSpec.getRexepPattern());
-    }
-
-    public void insertString(int offs, String str, AttributeSet a)
-        throws BadLocationException {
-      if (pinSpec.getMaxLength() >= (getLength() + str.length())) {
-        Matcher matcher = pattern.matcher(str);
-        if (matcher.matches()) {
-          super.insertString(offs, str, a);
-        }
-      }
-      okButton.setEnabled(getLength() >= pinSpec.getMinLength());
-    }
-
-    @Override
-    public void remove(int offs, int len) throws BadLocationException {
-      super.remove(offs, len);
-      okButton.setEnabled(getLength() >= pinSpec.getMinLength());
-    }
-  }
-
-  public PINDialog() {
-  }
-
-  private synchronized void finished(boolean ok) {
-    if (ok) {
-      pinString = password.getText();
-    } else {
-      pinString = null;
-    }
-    finished = true;
-    notifyAll();
-  }
-
-  public synchronized void waitFinished() {
-    while (!finished) {
-      try {
-        wait();
-      } catch (InterruptedException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      }
-    }
-  }
-
-  public String getPIN() {
-    return pinString;
-  }
-
-  /** Creates new form NewJDialog */
-  public PINDialog(java.awt.Frame parent, boolean modal, PINSpec pinSpec,
-      int retries) {
-    super(parent, modal);
-    this.pinSpec = pinSpec;
-    initComponents();
-  }
-
-  private void initComponents() {
-    okButton = new javax.swing.JButton();
-    cancelButton = new javax.swing.JButton();
-    password = new javax.swing.JPasswordField();
-    label = new javax.swing.JLabel();
-    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
-
-    setTitle("PIN Dialog"); // NOI18N
-    setName("Form"); // NOI18N
-
-    okButton.setText("OK"); // NOI18N
-    okButton.setName("okButton"); // NOI18N
-    okButton.setEnabled(false);
-    okButton.addActionListener(this);
-
-    cancelButton.setText("Cancel"); // NOI18N
-    cancelButton.setName("cancelButton"); // NOI18N
-    cancelButton.addActionListener(this);
-
-    password.setText(""); // NOI18N
-    password.setName("password"); // NOI18N
-    password.addActionListener(this);
-    password.setDocument(new PinDocument());
-
-    label.setText("PIN: "); // NOI18N
-    label.setName("jLabel1"); // NOI18N
-
-    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
-        getContentPane());
-    getContentPane().setLayout(layout);
-    layout.setHorizontalGroup(layout.createParallelGroup(
-        javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-        layout.createSequentialGroup().addContainerGap().addGroup(
-            layout.createParallelGroup(
-                javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-                layout.createSequentialGroup().addComponent(label,
-                    javax.swing.GroupLayout.PREFERRED_SIZE, 61,
-                    javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(
-                    javax.swing.LayoutStyle.ComponentPlacement.RELATED,
-                    javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(password,
-                        javax.swing.GroupLayout.PREFERRED_SIZE, 127,
-                        javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(
-                javax.swing.GroupLayout.Alignment.TRAILING,
-                layout.createSequentialGroup().addComponent(cancelButton)
-                    .addPreferredGap(
-                        javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                    .addComponent(okButton))).addContainerGap()));
-    layout.setVerticalGroup(layout.createParallelGroup(
-        javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-        layout.createSequentialGroup().addContainerGap().addGroup(
-            layout.createParallelGroup(
-                javax.swing.GroupLayout.Alignment.BASELINE).addComponent(label,
-                javax.swing.GroupLayout.PREFERRED_SIZE, 33,
-                javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(password,
-                javax.swing.GroupLayout.PREFERRED_SIZE,
-                javax.swing.GroupLayout.DEFAULT_SIZE,
-                javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(
-            javax.swing.LayoutStyle.ComponentPlacement.RELATED, 14,
-            Short.MAX_VALUE).addGroup(
-            layout.createParallelGroup(
-                javax.swing.GroupLayout.Alignment.BASELINE).addComponent(
-                okButton).addComponent(cancelButton)).addContainerGap()));
-
-    pack();
-  }
-
-  /**
-   * @param args
-   *          the command line arguments
-   */
-  public static void main(String args[]) {
-    java.awt.EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        PINDialog dialog = new PINDialog(new javax.swing.JFrame(), true,
-            new PINSpec(1, 5, "[0-9]*", "Hansi"), 10);
-        dialog.setResizable(false);
-        dialog.addWindowListener(new java.awt.event.WindowAdapter() {
-          public void windowClosing(java.awt.event.WindowEvent e) {
-            System.exit(0);
-          }
-        });
-        dialog.setVisible(true);
-      }
-    });
-  }
-
-  @Override
-  public void actionPerformed(ActionEvent e) {
-    if (e.getSource() instanceof JButton) {
-      JButton pressed = (JButton) e.getSource();
-      if (pressed.getName().equals("okButton")) {
-        finished(true);
-      } else if (pressed.getName().equals("cancelButton")) {
-        finished(false);
-      }
-    } else if (e.getSource() instanceof JPasswordField) {
-      JPasswordField pwf = (JPasswordField) e.getSource();
-      if (pwf.getName().equals("password")) {
-        if (password.getPassword().length >= pinSpec.getMinLength()) {
-          finished(true);
-        }
-      }
-    }
-  }
-
-}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/QuitRequestHandler.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/QuitRequestHandler.java
deleted file mode 100644
index 5596b7bb..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/QuitRequestHandler.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.local.stal;
-
-import at.gv.egiz.bku.smccstal.AbstractRequestHandler;
-import at.gv.egiz.bku.smccstal.SMCCSTALRequestHandler;
-import at.gv.egiz.stal.STALRequest;
-import at.gv.egiz.stal.STALResponse;
-
-public class QuitRequestHandler extends AbstractRequestHandler {
-
-  @Override
-  public STALResponse handleRequest(STALRequest request) {
-    return null;
-  }
-
-  @Override
-  public boolean requireCard() {
-    return false;
-  }
-
-  @Override
-  public SMCCSTALRequestHandler newInstance() {
-    return this;
-  }
-
-}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTAL.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTAL.java
index 26ec2aa8..6f9e72c5 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTAL.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTAL.java
@@ -1,95 +1,33 @@
-/*
-* 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.local.stal;
 
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Locale;
+import java.util.List;
+import java.util.ResourceBundle;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import javax.swing.JDialog;
 
 import at.gv.egiz.bku.gui.BKUGUIFacade;
-import at.gv.egiz.bku.local.ui.TrayIconDialog;
-import at.gv.egiz.bku.smccstal.AbstractRequestHandler;
-import at.gv.egiz.bku.smccstal.AbstractSMCCSTAL;
-import at.gv.egiz.bku.smccstal.STALMessageConsumer;
-import at.gv.egiz.smcc.PINProvider;
-import at.gv.egiz.smcc.util.SMCCHelper;
-import at.gv.egiz.stal.QuitRequest;
+import at.gv.egiz.bku.online.applet.BKUWorker;
+import at.gv.egiz.stal.STALRequest;
+import at.gv.egiz.stal.STALResponse;
+import at.gv.egiz.stal.SignRequest;
 
-public class SMCCSTAL extends AbstractSMCCSTAL implements STALMessageConsumer {
-  private static Log log = LogFactory.getLog(SMCCSTAL.class);
+public class SMCCSTAL extends BKUWorker {
 
-  protected PINProvider pinProvider = new SwingPINProvider();
-  protected SwingInsertCardDialog insertCard = new SwingInsertCardDialog();
-  private boolean canceled = false;
+  private JDialog container;
 
-  static {
-    addRequestHandler(QuitRequest.class, new QuitRequestHandler());
-  }
-
-  public SMCCSTAL() {
-    AbstractRequestHandler.setMessageConsumer(this);
-  }
-
-  /**
-   * 
-   * @return if the user canceled
-   */
-  protected boolean waitForCard() {
-    canceled = false;
-    while ((smccHelper.getResultCode() != SMCCHelper.CARD_FOUND) && (!canceled)) {
-      insertCard.setVisible(true);
-      insertCard.setAlwaysOnTop(true);
-      insertCard.addCanceledListener(new ActionListener() {
-        @Override
-        public void actionPerformed(ActionEvent e) {
-          canceled = true;
-        }
-      });
-      try {
-        smccHelper.update(1000);
-      } catch (Exception ex) {
-        log.info(ex);
-      }
-    }
-    insertCard.setVisible(false);
-    signatureCard = smccHelper.getSignatureCard(locale);
-    return canceled;
+  public SMCCSTAL(BKUGUIFacade gui, JDialog container,
+      ResourceBundle errorMessageBundle) {
+    super(gui, errorMessageBundle);
+    this.container = container;
+    addRequestHandler(SignRequest.class, new LocalSignRequestHandler());
   }
 
   @Override
-  public void setLocale(Locale locale) {
-    super.setLocale(locale);
-    if (pinProvider instanceof SwingPINProvider) {
-      ((SwingPINProvider) pinProvider).setLocale(locale);
-    }
+  public List<STALResponse> handleRequest(List<STALRequest> requestList) {
+    signatureCard = null;
+    List<STALResponse> responses = super.handleRequest(requestList);
+    container.setVisible(false);
+    return responses;
   }
 
-  @Override
-  public void consumeNewSTALMessage(String captionId, String messageId) {
-    TrayIconDialog.getInstance().displayInfo(captionId, messageId);
-  }
-
-  @Override
-  protected BKUGUIFacade getGUI() {
-    // TODO Auto-generated method stub
-    //FIXME
-    return null;
-  }
 }
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTALFactory.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTALFactory.java
index 014d884a..97646d09 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTALFactory.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SMCCSTALFactory.java
@@ -1,27 +1,75 @@
 /*
-* Copyright 2008 Federal Chancellery Austria and
-* Graz University of Technology
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package at.gv.egiz.bku.local.stal;
-
-import at.gv.egiz.stal.STAL;
-import at.gv.egiz.stal.STALFactory;
-
-public class SMCCSTALFactory implements STALFactory {
-  @Override
-  public STAL createSTAL() {
-    return new SMCCSTAL();
-  }
-}
+ * 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.local.stal;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import javax.swing.JDialog;
+import javax.swing.WindowConstants;
+
+import at.gv.egiz.bku.gui.BKUGUIFacade;
+import at.gv.egiz.bku.gui.BKUGUIFactory;
+import at.gv.egiz.bku.online.applet.BKUApplet;
+import at.gv.egiz.stal.STAL;
+import at.gv.egiz.stal.STALFactory;
+
+public class SMCCSTALFactory implements STALFactory {
+
+  private Locale locale;
+  private SMCCSTAL stal;
+  private JDialog dialog;
+
+  @Override
+  public STAL createSTAL() {
+    if (stal == null) {
+      ResourceBundle resourceBundle;
+      if (locale != null) {
+        resourceBundle = ResourceBundle.getBundle(
+            BKUApplet.RESOURCE_BUNDLE_BASE, locale);
+      } else {
+        resourceBundle = ResourceBundle
+            .getBundle(BKUApplet.RESOURCE_BUNDLE_BASE);
+      }
+      dialog = new JDialog();
+      BKUGUIFacade gui = BKUGUIFactory.createGUI();
+      gui.init(dialog.getContentPane(), locale.toString());
+      stal = new SMCCSTAL(new BKUGuiProxy(dialog, gui), dialog, resourceBundle);
+      dialog.setPreferredSize(new Dimension(400, 200));
+      dialog.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
+      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+      Dimension frameSize = dialog.getSize();
+      if (frameSize.height > screenSize.height) {
+        frameSize.height = screenSize.height;
+      }
+      if (frameSize.width > screenSize.width) {
+        frameSize.width = screenSize.width;
+      }
+      dialog.setLocation((screenSize.width - frameSize.width) / 2,
+          (screenSize.height - frameSize.height) / 2);
+      dialog.pack();
+    }
+    return stal;
+  }
+
+  @Override
+  public void setLocale(Locale locale) {
+    this.locale = locale;
+  }
+}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingInsertCardDialog.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingInsertCardDialog.java
deleted file mode 100644
index eb76f2f2..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingInsertCardDialog.java
+++ /dev/null
@@ -1,147 +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.local.stal;
-
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Toolkit;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import javax.swing.ImageIcon;
-import javax.swing.JDialog;
-
-import at.gv.egiz.bku.utils.StreamUtil;
-
-public class SwingInsertCardDialog extends JDialog {
-
-  private javax.swing.JButton cancelButton;
-  private javax.swing.JLabel jLabel1;
-  private javax.swing.JLabel jLabel2;
-  private Locale locale = Locale.getDefault();
-
-  public SwingInsertCardDialog() {
-    super((java.awt.Frame) null, false);
-    initComponents();
-  }
-
-  public void setLocale(Locale locale) {
-    this.locale = locale;
-  }
-
-  private void initComponents() {
-    ResourceBundle rb = ResourceBundle.getBundle(
-        "at/gv/egiz/bku/local/Userdialog", locale);
-    setTitle(rb.getString("Insert.Header"));
-    jLabel1 = new javax.swing.JLabel();
-    jLabel2 = new javax.swing.JLabel();
-    cancelButton = new javax.swing.JButton();
-
-    setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
-    setName("Form"); // NOI18N
-    setUndecorated(true);
-
-    jLabel1.setFont(new Font("Tahoma", Font.BOLD, 14));
-    jLabel1.setText(rb.getString("Insert.Text")); // NOI18N
-    jLabel1.setName("text"); // NOI18N
-
-    ByteArrayOutputStream os = new ByteArrayOutputStream();
-    InputStream is = getClass().getClassLoader().getResourceAsStream(
-        "at/gv/egiz/bku/local/logo.png");
-    try {
-      StreamUtil.copyStream(is, os);
-      jLabel2.setIcon(new ImageIcon(os.toByteArray())); // NOI18N
-    } catch (IOException e) {
-      jLabel2.setText("Chipperling image missing"); // NOI18N
-    }
-    jLabel2.setName("jLabel2"); // NOI18N
-    cancelButton.setText(rb.getString("Insert.Button.Cancel")); // NOI18N
-    cancelButton.setName("jButton1"); // NOI18N
-
-    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
-        getContentPane());
-    getContentPane().setLayout(layout);
-    layout.setHorizontalGroup(layout.createParallelGroup(
-        javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-        layout.createSequentialGroup().addContainerGap().addComponent(jLabel2)
-            .addGroup(
-                layout.createParallelGroup(
-                    javax.swing.GroupLayout.Alignment.TRAILING).addGroup(
-                    layout.createSequentialGroup().addGap(35, 35, 35)
-                        .addComponent(jLabel1,
-                            javax.swing.GroupLayout.DEFAULT_SIZE,
-                            javax.swing.GroupLayout.DEFAULT_SIZE,
-                            Short.MAX_VALUE)).addGroup(
-                    layout.createSequentialGroup().addPreferredGap(
-                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(cancelButton))).addGap(29, 29, 29)));
-    layout.setVerticalGroup(layout.createParallelGroup(
-        javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-        javax.swing.GroupLayout.Alignment.TRAILING,
-        layout.createSequentialGroup().addContainerGap().addGroup(
-            layout.createParallelGroup(
-                javax.swing.GroupLayout.Alignment.TRAILING).addComponent(
-                jLabel2).addGroup(
-                layout.createSequentialGroup().addComponent(jLabel1,
-                    javax.swing.GroupLayout.DEFAULT_SIZE, 53, Short.MAX_VALUE)
-                    .addGap(35, 35, 35).addComponent(cancelButton).addGap(9, 9,
-                        9))).addContainerGap()));
-
-    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-    Dimension frameSize = getSize();
-    if (frameSize.height > screenSize.height) {
-      frameSize.height = screenSize.height;
-    }
-    if (frameSize.width > screenSize.width) {
-      frameSize.width = screenSize.width;
-    }
-    setLocation((screenSize.width - frameSize.width) / 2,
-        (screenSize.height - frameSize.height) / 2);
-    setUndecorated(false);
-    pack();
-  }
-
-  public void addCanceledListener(ActionListener al) {
-    cancelButton.addActionListener(al);
-  }
-
-  /**
-   * @param args
-   *          the command line arguments
-   */
-  public static void main(String args[]) {
-    java.awt.EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        SwingInsertCardDialog dialog = new SwingInsertCardDialog();
-        dialog.addWindowListener(new java.awt.event.WindowAdapter() {
-          public void windowClosing(java.awt.event.WindowEvent e) {
-            System.exit(0);
-          }
-        });
-        //
-      }
-    });
-  }
-
-}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPINProvider.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPINProvider.java
deleted file mode 100644
index 7d36e68e..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPINProvider.java
+++ /dev/null
@@ -1,57 +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.local.stal;
-
-import java.util.Locale;
-
-import at.gv.egiz.smcc.PINProvider;
-import at.gv.egiz.smcc.PINSpec;
-
-public class SwingPINProvider implements PINProvider {
-  
-  private Locale locale = Locale.getDefault();
-  SwingPinDialog dialog; 
-  
-  public SwingPINProvider() {
-    this.locale = Locale.getDefault();
-   
-  }
-
-  public Locale getLocale() {
-    return locale;
-  }
-
-  public void setLocale(Locale locale) {
-    this.locale = locale;
-  }
-
-  @Override
-  public String providePIN(PINSpec pinSpec, int retries) {
-    dialog = new SwingPinDialog(null, false);
-    dialog.setResizable(false);
-    dialog.setRetries(retries);
-    dialog.setPinSpec(pinSpec);
-    dialog.initComponents();
-    dialog.setVisible(true);
-    dialog.requestFocus();
-    dialog.setAlwaysOnTop(true);
-    dialog.waitFinished();
-    dialog.dispose();
-    return dialog.getPIN();
-  }
-
-}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPinDialog.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPinDialog.java
deleted file mode 100644
index 3e91972c..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/SwingPinDialog.java
+++ /dev/null
@@ -1,265 +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.local.stal;
-
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JPasswordField;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.PlainDocument;
-
-import at.gv.egiz.bku.utils.StreamUtil;
-import at.gv.egiz.smcc.PINSpec;
-
-public class SwingPinDialog extends javax.swing.JDialog implements
-    ActionListener {
-
-  private javax.swing.JButton okButton;
-  private javax.swing.JButton cancelButton;
-  private javax.swing.JLabel jLabel1;
-  private javax.swing.JLabel jLabel2;
-  private javax.swing.JPasswordField password;
-
-  private PINSpec pinSpec;
-  private String pinString;
-  private boolean finished = false;
-  private int retries = -1;
-  private Locale locale = Locale.getDefault();
-  private boolean setUp = false;
-
-  class PinDocument extends PlainDocument {
-    private Pattern pattern;
-
-    public PinDocument() {
-      if ((pinSpec != null) && (pinSpec.getRexepPattern() != null)) {
-        pattern = Pattern.compile(pinSpec.getRexepPattern());
-      } else {
-        pattern = Pattern.compile(".");
-      }
-    }
-
-    public void insertString(int offs, String str, AttributeSet a)
-        throws BadLocationException {
-      if (pinSpec.getMaxLength() >= (getLength() + str.length())) {
-        Matcher matcher = pattern.matcher(str);
-        if (matcher.matches()) {
-          super.insertString(offs, str, a);
-        }
-      }
-      okButton.setEnabled(getLength() >= pinSpec.getMinLength());
-    }
-
-    @Override
-    public void remove(int offs, int len) throws BadLocationException {
-      super.remove(offs, len);
-      okButton.setEnabled(getLength() >= pinSpec.getMinLength());
-    }
-  }
-
-  /**
-   * Make sure to call initComponents
-   * 
-   * @param parent
-   * @param modal
-   */
-  public SwingPinDialog(java.awt.Frame parent, boolean modal) {
-    super(parent, modal);
-  }
-
-  public void setLocale(Locale locale) {
-    this.locale = locale;
-  }
-
-  public void setPinSpec(PINSpec pinSpec) {
-    this.pinSpec = pinSpec;
-  }
-
-  public void setRetries(int retries) {
-    this.retries = retries;
-  }
-
-  public void initComponents() {
-    ResourceBundle rb = ResourceBundle.getBundle(
-        "at/gv/egiz/bku/local/Userdialog", locale);
-    okButton = new javax.swing.JButton();
-    cancelButton = new javax.swing.JButton();
-    password = new javax.swing.JPasswordField();
-    jLabel1 = new javax.swing.JLabel();
-    jLabel2 = new javax.swing.JLabel();
-
-    setTitle(rb.getString("Pin.Header"));
-    setName("Form");
-    setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
-
-    okButton.setText(rb.getString("Pin.Button.OK"));
-    okButton.setName("okButton");
-    okButton.setEnabled(false);
-    okButton.addActionListener(this);
-
-    cancelButton.setText(rb.getString("Pin.Button.Cancel"));
-    cancelButton.setName("cancelButton");
-    cancelButton.addActionListener(this);
-
-    password.setText("");
-    password.setDocument(new PinDocument());
-    password.setName("password");
-    password.addActionListener(this);
-    password.setDocument(new PinDocument());
-    password.setRequestFocusEnabled(true);
-    password.requestFocus();
-
-    jLabel1.setFont(new Font("Tahoma", Font.BOLD, 14));
-    String text = null;
-    Object[] args;
-    if (retries > 0) {
-      text = rb.getString("Pin.Text.Retries");
-      args = new Object[2];
-      args[0] = pinSpec.getLocalizedName();
-      args[1] = new Integer(retries);
-    } else {
-      text = rb.getString("Pin.Text.NoRetries");
-      args = new Object[1];
-      args[0] = pinSpec.getLocalizedName();
-    }
-    text = MessageFormat.format(text, args);
-    jLabel1.setText(text); // NOI18N
-    jLabel1.setName("jLabel1"); // NOI18N
-
-    ByteArrayOutputStream os = new ByteArrayOutputStream();
-    InputStream is = getClass().getClassLoader().getResourceAsStream(
-        "at/gv/egiz/bku/local/logo.png");
-    try {
-      StreamUtil.copyStream(is, os);
-      jLabel2.setIcon(new ImageIcon(os.toByteArray())); // NOI18N
-    } catch (Exception e) {
-      jLabel2.setText("Chipperling image missing"); // NOI18N
-    }
-    jLabel2.setName("jLabel2"); // NOI18N
-
-    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
-        getContentPane());
-    getContentPane().setLayout(layout);
-    layout.setHorizontalGroup(layout.createParallelGroup(
-        javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-        layout.createSequentialGroup().addContainerGap().addComponent(jLabel2)
-            .addGap(73, 73, 73).addGroup(
-                layout.createParallelGroup(
-                    javax.swing.GroupLayout.Alignment.LEADING).addComponent(
-                    jLabel1).addGroup(
-                    layout.createParallelGroup(
-                        javax.swing.GroupLayout.Alignment.TRAILING, false)
-                        .addComponent(password,
-                            javax.swing.GroupLayout.Alignment.LEADING)
-                        .addGroup(
-                            javax.swing.GroupLayout.Alignment.LEADING,
-                            layout.createSequentialGroup().addComponent(
-                                cancelButton).addGap(18, 18, 18).addComponent(
-                                okButton)))).addContainerGap(31,
-                Short.MAX_VALUE)));
-    layout.setVerticalGroup(layout.createParallelGroup(
-        javax.swing.GroupLayout.Alignment.LEADING).addGroup(
-        layout.createSequentialGroup().addContainerGap().addGroup(
-            layout.createParallelGroup(
-                javax.swing.GroupLayout.Alignment.LEADING)
-                .addComponent(jLabel2).addGroup(
-                    layout.createSequentialGroup().addPreferredGap(
-                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(jLabel1,
-                            javax.swing.GroupLayout.PREFERRED_SIZE, 33,
-                            javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18,
-                            18, 18).addComponent(password,
-                            javax.swing.GroupLayout.PREFERRED_SIZE,
-                            javax.swing.GroupLayout.DEFAULT_SIZE,
-                            javax.swing.GroupLayout.PREFERRED_SIZE).addGap(20,
-                            20, 20).addGroup(
-                            layout.createParallelGroup(
-                                javax.swing.GroupLayout.Alignment.BASELINE)
-                                .addComponent(cancelButton).addComponent(
-                                    okButton)))).addGap(36, 36, 36)));
-    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-    Dimension frameSize = getSize();
-    if (frameSize.height > screenSize.height) {
-      frameSize.height = screenSize.height;
-    }
-    if (frameSize.width > screenSize.width) {
-      frameSize.width = screenSize.width;
-    }
-    setLocation((screenSize.width - frameSize.width) / 2,
-        (screenSize.height - frameSize.height) / 2);
-    setUndecorated(false);
-    pack();
-  }
-
-  public String getPIN() {
-    return pinString;
-  }
-
-  private synchronized void finished(boolean ok) {
-    if (ok) {
-      pinString = password.getText();
-    } else {
-      pinString = null;
-    }
-    finished = true;
-    notifyAll();
-  }
-
-  public synchronized void waitFinished() {
-    while (!finished) {
-      try {
-        wait();
-      } catch (InterruptedException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      }
-    }
-  }
-
-  @Override
-  public void actionPerformed(ActionEvent e) {
-    if (e.getSource() instanceof JButton) {
-      JButton pressed = (JButton) e.getSource();
-      if (pressed.getName().equals("okButton")) {
-        finished(true);
-      } else if (pressed.getName().equals("cancelButton")) {
-        finished(false);
-      }
-    } else if (e.getSource() instanceof JPasswordField) {
-      JPasswordField pwf = (JPasswordField) e.getSource();
-      if (pwf.getName().equals("password")) {
-        if (password.getPassword().length >= pinSpec.getMinLength()) {
-          finished(true);
-        }
-      }
-    }
-  }
-
-}
-- 
cgit v1.2.3