diff options
9 files changed, 101 insertions, 139 deletions
| diff --git a/BKUApplet/src/test/resources/appletTest.html b/BKUApplet/src/test/resources/appletTest.html index 2570e021..cc7c2bd7 100644 --- a/BKUApplet/src/test/resources/appletTest.html +++ b/BKUApplet/src/test/resources/appletTest.html @@ -20,7 +20,8 @@        <applet code="at.gv.egiz.bku.online.applet.BKUApplet.class"                archive="../BKUApplet-1.0.jar, ../test-libs/commons-logging-1.1.1.jar , ../test-libs/iaik_jce_me4se-3.04.jar"                width=300 height=200> -              <param name="GuiStyle" value="simple"/> +              <param name="GuiStyle" value="advanced"/> +              <param name="Locale" value="de"/>                <!--param name="Background" value="jar:file:/home/clemens/workspace/mocca/BKUApplet/target/BKUApplet-1.0-SNAPSHOT.jar!/images/help.png"/-->                <param name="Background" value="http://localhost:3495/img/BackgroundChipperling.png"/>                <param name="WSDL_URL" value="http://localhost:3495/stal?wsdl"/> diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java index 2dbba730..7d912f11 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIFacade.java @@ -19,9 +19,7 @@ package at.gv.egiz.bku.gui;  import at.gv.egiz.stal.HashDataInput;  import at.gv.egiz.smcc.PINSpec;  import java.awt.Color; -import java.awt.Container;  import java.awt.event.ActionListener; -import java.net.URL;  import java.util.List;  import java.util.Locale; @@ -71,7 +69,6 @@ public interface BKUGUIFacade {    public static final String MESSAGE_HELP = "message.help";    public static final String LABEL_PIN = "label.pin";    public static final String LABEL_PINSIZE = "label.pinsize"; -//    public static final String ERROR_NO_HASHDATA = "error.no.hashdata";    public static final String HELP_WELCOME = "help.welcome";    public static final String HELP_WAIT = "help.wait";    public static final String HELP_CARDNOTSUPPORTED = "help.cardnotsupported"; @@ -95,17 +92,13 @@ public interface BKUGUIFacade {  //  public void init(Container contentPane, Locale locale, Style guiStyle, URL background, ActionListener helpListener); -  /** -   *  -   * @return the locale of the message bundle (what if no message bundle could be loaded for the requested locale?) -   */    public Locale getLocale();    public void showWelcomeDialog();    /**     *  -   * @param waitMessage if null, a simple 'wait' text is displayed +   * @param waitMessage if null, a simple 'please wait' text is displayed     */    public void showWaitDialog(String waitMessage); @@ -123,25 +116,8 @@ public interface BKUGUIFacade {    public char[] getPin(); -  /** -   * TODO move to HashDataDisplay implementations -   * @param signedReferences -   * @param externalDisplay -   * @param okListener -   * @param okCommand -   */    public void showHashDataInputDialog(List<HashDataInput> signedReferences, ActionListener okListener, String okCommand); -  /** -   * TODO pull out from BKUGUIFacade. (or make this strictly an applet internal version) -   * Problem: if standalone flag is provided, we also need the actionlistener.. -   * @param helpDocument -   * @param mimeType -   * @param encoding -   */ -//  public void showHelpDialog(InputStream helpDocument, String mimeType, String encoding); //, boolean standalone); //, ActionListener okListener, String okCommand);  - -//    public void showPlainTextHashDataInputDialog(String text, ActionListener saveListener, String saveCommand, ActionListener cancelListener, String cancelCommand);    public void showErrorDialog(String errorMsgKey, Object[] errorMsgParams, ActionListener okListener, String actionCommand);    public void showErrorDialog(String errorMsgKey, Object[] errorMsgParams); diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java index 38247174..a190b9c0 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/BKUGUIImpl.java @@ -26,6 +26,8 @@ import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import java.awt.event.MouseAdapter;  import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionAdapter;  import java.io.BufferedOutputStream;  import java.io.File;  import java.io.FileOutputStream; @@ -554,44 +556,37 @@ public class BKUGUIImpl implements BKUGUIFacade {                  GroupLayout mainPanelLayout = new GroupLayout(mainPanel);                  mainPanel.setLayout(mainPanelLayout); -                GroupLayout.ParallelGroup mainHorizontal = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING); -                GroupLayout.SequentialGroup pinHorizontal = mainPanelLayout.createSequentialGroup() -                      .addComponent(cardPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) -                      .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) -                      .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING) -                        .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) //)) -                        .addComponent(pinsizeLabel)); -                 -                GroupLayout.SequentialGroup mainVertical = mainPanelLayout.createSequentialGroup(); +                GroupLayout.SequentialGroup infoHorizontal = mainPanelLayout.createSequentialGroup() +                          .addComponent(infoLabel); +                GroupLayout.ParallelGroup infoVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) +                          .addComponent(infoLabel);                  if (!renderHeaderPanel) { -                  GroupLayout.SequentialGroup infoHorizontal = mainPanelLayout.createSequentialGroup() -                          .addComponent(infoLabel) //, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE); +                  infoHorizontal                            .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 0, Short.MAX_VALUE) -                          .addComponent(helpLabel); //, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) -                  mainHorizontal -                          .addGroup(infoHorizontal) -                          .addGroup(pinHorizontal); -                  GroupLayout.ParallelGroup infoVertical = mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) -                          .addComponent(infoLabel)                            .addComponent(helpLabel); -                  mainVertical -                          .addGroup(infoVertical) -                          .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); -                } else { -                  mainHorizontal -                          .addGroup(pinHorizontal); -                } - -                mainVertical -                  .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) -                    .addComponent(cardPinLabel) -                    .addComponent(pinField)) -                  .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) -                  .addComponent(pinsizeLabel); +                  infoVertical +                          .addComponent(helpLabel); +                }  -                mainPanelLayout.setHorizontalGroup(mainHorizontal); -                mainPanelLayout.setVerticalGroup(mainVertical); +                mainPanelLayout.setHorizontalGroup( +                        mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) +                          .addGroup(infoHorizontal) +                          .addGroup(mainPanelLayout.createSequentialGroup() +                            .addComponent(cardPinLabel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) +                            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) +                            .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING) +                              .addComponent(pinField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) //)) +                              .addComponent(pinsizeLabel)))); +                mainPanelLayout.setVerticalGroup( +                        mainPanelLayout.createSequentialGroup() +                          .addGroup(infoVertical) +                          .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) +                          .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) +                            .addComponent(cardPinLabel) +                            .addComponent(pinField)) +                          .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) +                          .addComponent(pinsizeLabel));                  GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel); @@ -1049,31 +1044,6 @@ public class BKUGUIImpl implements BKUGUIFacade {      }      /** -     * Opens HashDataViewer on mouse clicked event -     */ -//    public class HashDataMouseListener extends MouseAdapter { -//       -//      private HashDataInput hashData; -// -//      public void setHashData(HashDataInput hashData) { -//        this.hashData = hashData; -//      } -// -//      @Override -//      public void mouseClicked(MouseEvent e) { -//        ActionListener saveListener = new ActionListener() { -// -//          @Override -//          public void actionPerformed(ActionEvent e) { -//            showSaveHashDataInputDialog(Collections.singletonList(hashData), null, null); -//          } -//        }; -//        showHashDataViewer(hashData, saveListener, "save"); -//        super.mouseClicked(e); -//      } -//    } -     -    /**       * has to be called from event dispatcher thread       * @param hashDataText       * @param saveListener @@ -1113,10 +1083,23 @@ public class BKUGUIImpl implements BKUGUIFacade {            refIdLabel.setText(MessageFormat.format(refIdLabelPattern, new Object[]{signedReferences.size()}));            HashDataTableModel tableModel = new HashDataTableModel(signedReferences); -          JTable hashDataTable = new JTable(tableModel); -//          hashDataTable.setDefaultRenderer(HashDataInput.class, signedReferences.getRenderer()); +          final JTable hashDataTable = new JTable(tableModel); +          hashDataTable.setDefaultRenderer(HashDataInput.class, new HyperlinkRenderer());            hashDataTable.setTableHeader(null); +          // not possible to add mouse listener to TableCellRenderer +          hashDataTable.addMouseMotionListener(new MouseMotionAdapter() { + +            @Override +            public void mouseMoved(MouseEvent e) { +              if (hashDataTable.columnAtPoint(e.getPoint()) == 0) { +                hashDataTable.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); +              } else { +                hashDataTable.setCursor(Cursor.getDefaultCursor()); +              } +            } +          }); +                      hashDataTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            hashDataTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java index 502f93ec..3c8c7d6c 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/DefaultHelpListener.java @@ -27,6 +27,10 @@ import javax.swing.SwingUtilities;   */  public class DefaultHelpListener extends AbstractHelpListener { +  /** +   * applet context to open external links in help pages, +   * if null, no external links will be opened +   */    protected AppletContext ctx;    /** diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java index 9a43e99d..b0f51a78 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataTableModel.java @@ -30,14 +30,15 @@ class HashDataTableModel extends DefaultTableModel {    protected static final Log log = LogFactory.getLog(HashDataTableModel.class); -  protected Class[] types = new Class[]{ String.class, String.class }; +  /** HashDataInput in first column, register hyperlinkrenderer only here */ +  protected Class[] types = new Class[]{ HashDataInput.class, String.class };    protected List<HashDataInput> hashDataInputs;    public HashDataTableModel(List<HashDataInput> hashDataInputs) {      super(0, 2);      this.hashDataInputs = hashDataInputs;      for (HashDataInput hdi : hashDataInputs) { -      addRow(new Object[]{hdi.getReferenceId(), hdi.getMimeType()}); +      addRow(new Object[]{ hdi, hdi.getMimeType()});      }    } @@ -50,46 +51,4 @@ class HashDataTableModel extends DefaultTableModel {    public boolean isCellEditable(int rowIndex, int columnIndex) {      return false;    } - -//  public HashDataInput getValue(int rowIndex) { -//    return hashDataInputs.get(rowIndex); -//  } -//   - -//  public class HashDataLinkRenderer extends JLabel -//          implements TableCellRenderer { -////        extends DefaultTableCellRenderer { -//     -////    protected ActionListener saveHashDataListener; -//// -////    public HashDataLinkRenderer(ActionListener saveHashDataListener) { -////      this.saveHashDataListener = saveHashDataListener; -////    } -//     -//    @Override -//    public Component getTableCellRendererComponent(JTable table, -//            Object value, -//            boolean isSelected, -//            boolean hasFocus, -//            final int row, -//            int column) { -//      final HashDataInput hdi = (HashDataInput) value; -//      log.debug("render hashdatainput " + hdi.getReferenceId() + " - (" + row + "," + column + ") " + isSelected + hasFocus); -//      setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); -//      setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD)); -//      setText(hdi.getReferenceId() + " (" + hdi.getMimeType() + ")"); -//      addMouseListener(new MouseAdapter() { -// -//        @Override -//        public void mouseClicked(MouseEvent e) { -//          log.debug("received mouseclick on " + hdi.getReferenceId()); -////          saveHashDataListener.actionPerformed(); -//          JOptionPane.showInputDialog(hashDataInputs.get(row).getReferenceId()); -//        } -//         -//      }); -// -//      return this; -//    } -//  }  }
\ No newline at end of file diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java index 263c3c04..777e8960 100644 --- a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HashDataViewer.java @@ -184,7 +184,6 @@ public class HashDataViewer extends JDialog      JEditorPane viewer = new JEditorPane();      if ("text/plain".equals(mimeType)) { -      //line wrapping, etc.        viewer.setEditorKit(new StyledEditorKit());        viewer.setFont(new Font(PLAINTEXT_FONT, viewer.getFont().getStyle(), viewer.getFont().getSize()));  //    } else if ("text/html".equals(mimeType)) { diff --git a/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperlinkRenderer.java b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperlinkRenderer.java new file mode 100644 index 00000000..f983706e --- /dev/null +++ b/BKUCommonGUI/src/main/java/at/gv/egiz/bku/gui/HyperlinkRenderer.java @@ -0,0 +1,38 @@ +/* + * Copyright 2008 Federal Chancellery Austria and + * Graz University of Technology + *  + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *  + *     http://www.apache.org/licenses/LICENSE-2.0 + *  + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.bku.gui; + +import at.gv.egiz.stal.HashDataInput; +import javax.swing.table.DefaultTableCellRenderer; + +/** + * + * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at> + */ +public class HyperlinkRenderer extends DefaultTableCellRenderer { + +  /** +   * cannot change mouse cursor here, do in jTable +   * @param value +   */ +  @Override +  protected void setValue(Object value) { +    super.setText("<html><u>" + ((HashDataInput) value).getReferenceId() + "</u></html>"); +    setForeground(BKUGUIFacade.HYPERLINK_COLOR); +  } +} diff --git a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties index b5a74ac1..88119fe2 100644 --- a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties +++ b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages.properties @@ -16,7 +16,8 @@  title.welcome=<html>Willkommen</html>  title.insertcard=<html>Keine B\u00FCrgerkarte gefunden</html>  title.cardnotsupported=<html>Die Karte wird nicht unterst\u00FCtzt</html> -title.cardpin=<html>{0} eingeben</html> +#title.cardpin=<html>{0} eingeben</html> +title.cardpin=<html>Karte wird gelesen</html>  title.sign=<html>Signatur erstellen</html>  title.error=<html>Fehler</html>  title.retry=<html>Falscher PIN</html> diff --git a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties index 94464982..63c8bf77 100644 --- a/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties +++ b/BKUCommonGUI/src/main/resources/at/gv/egiz/bku/gui/Messages_en.properties @@ -14,9 +14,10 @@  # limitations under the License.  title.welcome=<html>Welcome</html> -title.insertcard=<html>No citizen-card found</html> +title.insertcard=<html>No citizencard found</html>  title.cardnotsupported=<html>This card is not supported</html> -title.cardpin=<html>Enter {0}</html> +#title.cardpin=<html>Enter {0}</html> +title.cardpin=<html>Reading card</html>  title.sign=<html>Create signature</html>  title.error=<html>Error</html>  title.retry=<html>Wrong PIN</html> @@ -28,7 +29,7 @@ windowtitle.overwrite=Overwrite file?  windowtitle.viewer=Signature data  windowtitle.help=Help  message.wait=<html>Please wait...</html> -message.insertcard=<html>Please insert your citizen-card into the reader</html> +message.insertcard=<html>Please insert your citizencard into the reader</html>  message.enterpin=<html>Enter {0}</html>  message.hashdatalink=<html><a href=\"anzeige\">Display signature data</a></html>  message.hashdata=<html>Remark: This is a preview of the data to-be signed. For standards compliant display see help.</html>  @@ -63,16 +64,16 @@ error.pcsc=<html>No PC/SC interface for smartcard access provided</html>  error.cardterminal=<html>Could not find smartcard reader</html>  error.unknown=<html>An error occured: {0}</html>  error.test=<html>Error1 {0} - Error2 {1}</html> -error.card.locked=<html>Citizen-card is locked</html> -error.card.notactivated=<html>Citizen-card not activated</html> +error.card.locked=<html>Citizencard is locked</html> +error.card.notactivated=<html>Citizencard not activated</html>  error.viewer=Failed to display contents: {0}  error.external.link=<html>Externer Link {0} wird nicht ge\u00F6ffnet</html>  # Help Topics  help.welcome=Welcome page  help.wait=Wait screen -help.cardnotsupported=Unsupported citizen card -help.insertcard=No citizen card found +help.cardnotsupported=Unsupported citizencard +help.insertcard=No citizencard found  help.cardpin=Pin entry  help.signpin=Signature pin entry  help.retry=Wrong Pin | 
