org.icepdf.ri.common.MyGUISecurityCallback Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of icepdf-viewer Show documentation
Show all versions of icepdf-viewer Show documentation
ICEpdf Java Swing/AWT reference implementation.
The newest version!
/*
* Copyright 2006-2019 ICEsoft Technologies Canada Corp.
*
* 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.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 final Frame parentFrame;
private final 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.
* @param messageBundle message bundle for i18n.
*/
public MyGUISecurityCallback(Frame 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.
*/
@SuppressWarnings("serial")
class PasswordDialog extends EscapeJDialog implements WindowListener {
// layouts constraint
private final GridBagConstraints constraints;
// capture password information
private final JPasswordField passwordField;
// dialog was canceled
private boolean isCanceled = false;
/**
* Creates the permissions dialog.
*/
public PasswordDialog(Frame 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(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(e -> {
if (e.getSource() == cancelButton) {
setVisible(false);
isCanceled = true;
dispose();
}
});
// setup password field
passwordField = new JPasswordField(30);
passwordField.addActionListener(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"));
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.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;
}
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();
}
// not currently used
public void windowActivated(java.awt.event.WindowEvent ev) {
}
public void windowClosed(java.awt.event.WindowEvent ev) {
}
public void windowDeactivated(java.awt.event.WindowEvent ev) {
}
public void windowDeiconified(java.awt.event.WindowEvent ev) {
}
public void windowIconified(java.awt.event.WindowEvent ev) {
}
public void windowOpened(java.awt.event.WindowEvent ev) {
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy