gt:             ActionListener actionListener = new ActionListener() {
context: /*
   * Copyright 2006-2014 ICEsoft Technologies Inc.
   *
   * 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 org.icepdf.ri.common;
  
  import org.icepdf.core.SecurityCallback;
  import org.icepdf.core.pobjects.Document;
  
  import javax.swing.*;
  import java.awt.*;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.KeyEvent;
  import java.awt.event.WindowListener;
  import java.util.ResourceBundle;
  
  /**
   * This class is reference code for displaying a password dialog box for
   * encrypted PDF documents.
   *
   * @since 1.1
   */
  public class MyGUISecurityCallback implements SecurityCallback {
  
      private JFrame parentFrame;
      private ResourceBundle messageBundle;
  
      /**
       * Create a new instance of a SecurityCallback.  This class displays a
       * dialog when the requestPassword method is called to retrieve the document's
       * password from the user.
       *
       * @param frame frame that the dialog will be centered on.
       */
      public MyGUISecurityCallback(JFrame frame, ResourceBundle messageBundle) {
          parentFrame = frame;
          this.messageBundle = messageBundle;
      }
  
      public String requestPassword(Document document) {
          // get password from dialog
          PasswordDialog passwordDialog = new PasswordDialog(parentFrame);
          // show the dialog in blocking mode
          passwordDialog.setVisible(true);
  
          // if the dialog was cancelled return null
          if (passwordDialog.isCanceled) {
              return null;
          }
          // otherwise return the password
          else {
              return passwordDialog.getPassword();
          }
      }
  
      /**
       * Builds a new JDialog which displays a gui for entering a password.
       */
      class PasswordDialog extends JDialog implements WindowListener {
  
          // layouts constraint
          private GridBagConstraints constraints;
  
          // capture password information
          private JPasswordField passwordField;
  
          // dialog was canceled
          private boolean isCanceled = false;
  
  
          /**
           * Creates the permissions dialog.
           */
          public PasswordDialog(JFrame frame) {
              super(frame, true);
              setTitle(messageBundle.getString("viewer.dialog.security.title"));
  
              // Create GUI elements
              // ok button
              final JButton okButton = new JButton(messageBundle.getString("viewer.dialog.security.okButton.label"));
              okButton.setMnemonic(messageBundle.getString("viewer.dialog.security.okButton.mnemonic").charAt(0));
              okButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      if (e.getSource() == okButton) {
                          setVisible(false);
                          dispose();
                      }
  
                  }
              });
  
              // cancel button
              final JButton cancelButton = new JButton(messageBundle.getString("viewer.dialog.security.cancelButton.label"));
              cancelButton.setMnemonic(messageBundle.getString("viewer.dialog.security.cancelButton.mnemonic").charAt(0));
              cancelButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      if (e.getSource() == cancelButton) {
                          setVisible(false);
                          isCanceled = true;
                          dispose();
                      }
  
                  }
              });
              // setup password field
              passwordField = new JPasswordField(30);
              passwordField.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      if (e.getSource() == passwordField) {
                          setVisible(false);
                          dispose();
                      }
  
                  }
              });
              JLabel msg1 = new JLabel(messageBundle.getString("viewer.dialog.security.msg"));
              JLabel msg2 = new JLabel(messageBundle.getString("viewer.dialog.security.password.label"));
  
              /**
               * Place GUI elements on dialog
               */
  
              JPanel passwordPanel = new JPanel();
  
              passwordPanel.setAlignmentY(JPanel.TOP_ALIGNMENT);
              passwordPanel.setAlignmentX(JPanel.CENTER_ALIGNMENT);
              GridBagLayout layout = new GridBagLayout();
              passwordPanel.setLayout(layout);
              this.getContentPane().add(passwordPanel);
  
              constraints = new GridBagConstraints();
              constraints.fill = GridBagConstraints.NONE;
              constraints.weightx = 1.0;
              constraints.anchor = GridBagConstraints.NORTH;
              constraints.anchor = GridBagConstraints.WEST;
              constraints.insets = new Insets(1, 10, 1, 1);
  
              // add components
              addGB(passwordPanel, msg1, 0, 0, 3, 1);
  
              addGB(passwordPanel, msg2, 0, 1, 1, 1);
              constraints.fill = GridBagConstraints.HORIZONTAL;
              constraints.insets = new Insets(1, 10, 1, 10);
              addGB(passwordPanel, passwordField, 1, 1, 2, 1);
  
              constraints.insets = new Insets(10, 1, 1, 1);
              constraints.fill = GridBagConstraints.NONE;
              addGB(passwordPanel, okButton, 1, 2, 1, 1);
              addGB(passwordPanel, cancelButton, 2, 2, 1, 1);
  
              pack();
              setLocationRelativeTo(frame);
              setResizable(false);
              setSize(306, 150);
  
              this.addWindowListener(this);
          }
  
          /**
           * Gets the password string from the dialogs password text field.
           *
           * @return password that was type in the dialog password text field.
           */
          public String getPassword() {
              return new String(passwordField.getPassword());
          }
  
          /**
           * Has the dialog been cancelled by either the cancel button or
           * by closing the window.
           *
           * @return true if the dialog was closed, true if the OK button was
           *         pressed.
           */
          public boolean isCancelled() {
              return isCanceled;
          }
  
  
          /**
           * Gridbag constructor helper
           *
           * @param component component to add to grid
           * @param x         row
           * @param y         col
           * @param rowSpan
           * @param colSpan
           */
          private void addGB(JPanel layout, Component component,
                             int x, int y,
                             int colSpan, int rowSpan) {
              constraints.gridx = x;
              constraints.gridy = y;
              constraints.gridwidth = colSpan;
              constraints.gridheight = rowSpan;
              layout.add(component, constraints);
          }
  
          /**
           * Make sure that the isCanceled flag is set on closing of the window
           *
           * @param ev window closing event
           */
          public void windowClosing(java.awt.event.WindowEvent ev) {
              setVisible(false);
              isCanceled = true;
              dispose();
          }
  
          /**
           * Override createRootPane so that "escape" key can be used to
           * close this window.
           */
          protected JRootPane createRootPane() {
  