/hg/icedtea-web: Unsigned applet warning dialog abstracted and g...
aazores at icedtea.classpath.org
aazores at icedtea.classpath.org
Mon Mar 3 08:38:01 PST 2014
changeset 61bfad46e9cc in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=61bfad46e9cc
author: Andrew Azores <aazores at redhat.com>
date: Mon Mar 03 11:36:14 2014 -0500
Unsigned applet warning dialog abstracted and generalized
UnsignedAppletTrustWarningPanel logic moved into new abstract parent class
AppTrustWarningPanel for reusability.
* netx/net/sourceforge/jnlp/security/AppTrustWarningDialog.java: new class
* netx/net/sourceforge/jnlp/security/AppTrustWarningPanel.java: new class
* netx/net/sourceforge/jnlp/security/UnsignedAppletTrustWarningPanel.java:
major refactor into subclass of AppTrustWarningPanel
* netx/net/sourceforge/jnlp/security/SecurityDialogs.java:
(UnsignedWarningAction) references changed to AppSigningWarningAction
* netx/net/sourceforge/jnlp/security/UnsignedAppletTrustWarningDialog.java: same
* tests/netx/unit/net/sourceforge/jnlp/security/AppTrustWarningPanelTest.java:
new tests for AppTrustWarningPanel
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/ExecuteUnsignedApplet.java:
renamed, changed all references
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/ExecuteAppletAction.java:
(ExecuteUnsignedApplet) renamed to this
* netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletActionTableModel.java:
(ExecuteAppletAction) changed references
* netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java:
(ExecuteAppletAction) changed references
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletActionEntry.java:
(ExecuteAppletAction) changed references
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java:
(ExecuteAppletAction) changed references
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/impl/UnsignedAppletActionStorageExtendedImpl.java:
(ExecuteAppletAction) changed references
* netx/net/sourceforge/jnlp/security/appletextendedsecurity/impl/UnsignedAppletActionStorageImpl.java:
(ExecuteAppletAction) changed references
diffstat:
ChangeLog | 30 +
netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletActionTableModel.java | 8 +-
netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java | 38 +-
netx/net/sourceforge/jnlp/security/AppTrustWarningDialog.java | 68 ++
netx/net/sourceforge/jnlp/security/AppTrustWarningPanel.java | 321 ++++++++++
netx/net/sourceforge/jnlp/security/SecurityDialog.java | 2 +-
netx/net/sourceforge/jnlp/security/SecurityDialogs.java | 11 +-
netx/net/sourceforge/jnlp/security/UnsignedAppletTrustWarningDialog.java | 10 +-
netx/net/sourceforge/jnlp/security/UnsignedAppletTrustWarningPanel.java | 280 +-------
netx/net/sourceforge/jnlp/security/appletextendedsecurity/ExecuteAppletAction.java | 90 ++
netx/net/sourceforge/jnlp/security/appletextendedsecurity/ExecuteUnsignedApplet.java | 90 --
netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletActionEntry.java | 10 +-
netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java | 57 +-
netx/net/sourceforge/jnlp/security/appletextendedsecurity/impl/UnsignedAppletActionStorageExtendedImpl.java | 6 +-
netx/net/sourceforge/jnlp/security/appletextendedsecurity/impl/UnsignedAppletActionStorageImpl.java | 6 +-
tests/netx/unit/net/sourceforge/jnlp/security/AppTrustWarningPanelTest.java | 130 ++++
16 files changed, 755 insertions(+), 402 deletions(-)
diffs (truncated from 1554 to 500 lines):
diff -r ededca6b0659 -r 61bfad46e9cc ChangeLog
--- a/ChangeLog Fri Feb 28 16:45:24 2014 -0500
+++ b/ChangeLog Mon Mar 03 11:36:14 2014 -0500
@@ -1,3 +1,33 @@
+2014-03-03 Andrew Azores <aazores at redhat.com>
+
+ UnsignedAppletTrustWarningPanel logic moved into new abstract parent class
+ AppTrustWarningPanel for reusability.
+ * netx/net/sourceforge/jnlp/security/AppTrustWarningDialog.java: new class
+ * netx/net/sourceforge/jnlp/security/AppTrustWarningPanel.java: new class
+ * netx/net/sourceforge/jnlp/security/UnsignedAppletTrustWarningPanel.java:
+ major refactor into subclass of AppTrustWarningPanel
+ * netx/net/sourceforge/jnlp/security/SecurityDialogs.java:
+ (UnsignedWarningAction) references changed to AppSigningWarningAction
+ * netx/net/sourceforge/jnlp/security/UnsignedAppletTrustWarningDialog.java: same
+ * tests/netx/unit/net/sourceforge/jnlp/security/AppTrustWarningPanelTest.java:
+ new tests for AppTrustWarningPanel
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/ExecuteUnsignedApplet.java:
+ renamed, changed all references
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/ExecuteAppletAction.java:
+ (ExecuteUnsignedApplet) renamed to this
+ * netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletActionTableModel.java:
+ (ExecuteAppletAction) changed references
+ * netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java:
+ (ExecuteAppletAction) changed references
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletActionEntry.java:
+ (ExecuteAppletAction) changed references
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java:
+ (ExecuteAppletAction) changed references
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/impl/UnsignedAppletActionStorageExtendedImpl.java:
+ (ExecuteAppletAction) changed references
+ * netx/net/sourceforge/jnlp/security/appletextendedsecurity/impl/UnsignedAppletActionStorageImpl.java:
+ (ExecuteAppletAction) changed references
+
2014-02-28 Andrew Azores <aazores at redhat.com>
Added "Sandbox" button to CertWarning dialogs, allowing signed applets
diff -r ededca6b0659 -r 61bfad46e9cc netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletActionTableModel.java
--- a/netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletActionTableModel.java Fri Feb 28 16:45:24 2014 -0500
+++ b/netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletActionTableModel.java Mon Mar 03 11:36:14 2014 -0500
@@ -39,7 +39,7 @@
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import net.sourceforge.jnlp.runtime.Translator;
-import net.sourceforge.jnlp.security.appletextendedsecurity.ExecuteUnsignedApplet;
+import net.sourceforge.jnlp.security.appletextendedsecurity.ExecuteAppletAction;
import net.sourceforge.jnlp.security.appletextendedsecurity.UnsignedAppletActionEntry;
import net.sourceforge.jnlp.security.appletextendedsecurity.UrlRegEx;
import net.sourceforge.jnlp.security.appletextendedsecurity.impl.UnsignedAppletActionStorageExtendedImpl;
@@ -75,7 +75,7 @@
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 0) {
- return ExecuteUnsignedApplet.class;
+ return ExecuteAppletAction.class;
}
if (columnIndex == 1) {
return Date.class;
@@ -145,7 +145,7 @@
int i = getRowCount()-1;
String s = "\\Qhttp://localhost:80/\\E.*";
back.add(new UnsignedAppletActionEntry(
- ExecuteUnsignedApplet.NEVER,
+ ExecuteAppletAction.NEVER,
new Date(),
new UrlRegEx(s),
new UrlRegEx(s),
@@ -174,7 +174,7 @@
fireTableRowsDeleted(0, i);
}
- void removeByBehaviour(ExecuteUnsignedApplet unsignedAppletAction) {
+ void removeByBehaviour(ExecuteAppletAction unsignedAppletAction) {
int i = getRowCount()-1;
if (i<0){
return;
diff -r ededca6b0659 -r 61bfad46e9cc netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java
--- a/netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java Fri Feb 28 16:45:24 2014 -0500
+++ b/netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java Mon Mar 03 11:36:14 2014 -0500
@@ -75,7 +75,7 @@
import net.sourceforge.jnlp.config.DeploymentConfiguration;
import net.sourceforge.jnlp.runtime.Translator;
import net.sourceforge.jnlp.security.appletextendedsecurity.AppletSecurityLevel;
-import net.sourceforge.jnlp.security.appletextendedsecurity.ExecuteUnsignedApplet;
+import net.sourceforge.jnlp.security.appletextendedsecurity.ExecuteAppletAction;
import net.sourceforge.jnlp.security.appletextendedsecurity.ExtendedAppletSecurityHelp;
import net.sourceforge.jnlp.security.appletextendedsecurity.UnsignedAppletActionEntry;
import net.sourceforge.jnlp.security.appletextendedsecurity.UrlRegEx;
@@ -520,16 +520,16 @@
removeSelectedFromTable(currentTable);
}
if (deleteTypeComboBox.getSelectedIndex() == 1) {
- removeByBehaviour(ExecuteUnsignedApplet.ALWAYS);
+ removeByBehaviour(ExecuteAppletAction.ALWAYS);
}
if (deleteTypeComboBox.getSelectedIndex() == 2) {
- removeByBehaviour(ExecuteUnsignedApplet.NEVER);
+ removeByBehaviour(ExecuteAppletAction.NEVER);
}
if (deleteTypeComboBox.getSelectedIndex() == 3) {
- removeByBehaviour(ExecuteUnsignedApplet.YES);
+ removeByBehaviour(ExecuteAppletAction.YES);
}
if (deleteTypeComboBox.getSelectedIndex() == 4) {
- removeByBehaviour(ExecuteUnsignedApplet.NO);
+ removeByBehaviour(ExecuteAppletAction.NO);
}
if (deleteTypeComboBox.getSelectedIndex() == 5) {
removeAllItemsFromTable(currentTable, customModel);
@@ -701,7 +701,7 @@
public TableCellEditor getCellEditor(int row, int column) {
int columnx = convertColumnIndexToModel(column);
if (columnx == 0) {
- return new DefaultCellEditor(new JComboBox(new ExecuteUnsignedApplet[]{ExecuteUnsignedApplet.ALWAYS, ExecuteUnsignedApplet.NEVER, ExecuteUnsignedApplet.YES, ExecuteUnsignedApplet.NO}));
+ return new DefaultCellEditor(new JComboBox(new ExecuteAppletAction[]{ExecuteAppletAction.ALWAYS, ExecuteAppletAction.NEVER, ExecuteAppletAction.YES, ExecuteAppletAction.NO}));
}
if (columnx == 2) {
column = convertColumnIndexToModel(column);
@@ -758,7 +758,7 @@
}
- private void removeByBehaviour(ExecuteUnsignedApplet unsignedAppletAction) {
+ private void removeByBehaviour(ExecuteAppletAction unsignedAppletAction) {
UnsignedAppletActionEntry[] items = currentModel.back.toArray();
if (askBeforeActionCheckBox.isSelected()) {
List<UnsignedAppletActionEntry> toBeDeleted = new ArrayList<UnsignedAppletActionEntry>();
@@ -904,16 +904,16 @@
@Override
public boolean include(Entry<? extends UnsignedAppletActionTableModel, ? extends Integer> entry) {
- ExecuteUnsignedApplet o = (ExecuteUnsignedApplet) entry.getModel().getValueAt(entry.getIdentifier(), 0);
- return (o.equals(ExecuteUnsignedApplet.ALWAYS) || o.equals(ExecuteUnsignedApplet.NEVER));
+ ExecuteAppletAction o = (ExecuteAppletAction) entry.getModel().getValueAt(entry.getIdentifier(), 0);
+ return (o.equals(ExecuteAppletAction.ALWAYS) || o.equals(ExecuteAppletAction.NEVER));
}
}
private static final class ShowPermanentA extends MyCommonSorter {
@Override
public boolean include(Entry<? extends UnsignedAppletActionTableModel, ? extends Integer> entry) {
- ExecuteUnsignedApplet o = (ExecuteUnsignedApplet) entry.getModel().getValueAt(entry.getIdentifier(), 0);
- return (o.equals(ExecuteUnsignedApplet.ALWAYS));
+ ExecuteAppletAction o = (ExecuteAppletAction) entry.getModel().getValueAt(entry.getIdentifier(), 0);
+ return (o.equals(ExecuteAppletAction.ALWAYS));
}
}
@@ -921,8 +921,8 @@
@Override
public boolean include(Entry<? extends UnsignedAppletActionTableModel, ? extends Integer> entry) {
- ExecuteUnsignedApplet o = (ExecuteUnsignedApplet) entry.getModel().getValueAt(entry.getIdentifier(), 0);
- return (o.equals(ExecuteUnsignedApplet.NEVER));
+ ExecuteAppletAction o = (ExecuteAppletAction) entry.getModel().getValueAt(entry.getIdentifier(), 0);
+ return (o.equals(ExecuteAppletAction.NEVER));
}
}
@@ -930,8 +930,8 @@
@Override
public boolean include(Entry<? extends UnsignedAppletActionTableModel, ? extends Integer> entry) {
- ExecuteUnsignedApplet o = (ExecuteUnsignedApplet) entry.getModel().getValueAt(entry.getIdentifier(), 0);
- return (o.equals(ExecuteUnsignedApplet.YES) || o.equals(ExecuteUnsignedApplet.NO));
+ ExecuteAppletAction o = (ExecuteAppletAction) entry.getModel().getValueAt(entry.getIdentifier(), 0);
+ return (o.equals(ExecuteAppletAction.YES) || o.equals(ExecuteAppletAction.NO));
}
}
@@ -939,8 +939,8 @@
@Override
public boolean include(Entry<? extends UnsignedAppletActionTableModel, ? extends Integer> entry) {
- ExecuteUnsignedApplet o = (ExecuteUnsignedApplet) entry.getModel().getValueAt(entry.getIdentifier(), 0);
- return (o.equals(ExecuteUnsignedApplet.YES));
+ ExecuteAppletAction o = (ExecuteAppletAction) entry.getModel().getValueAt(entry.getIdentifier(), 0);
+ return (o.equals(ExecuteAppletAction.YES));
}
@@ -950,8 +950,8 @@
@Override
public boolean include(Entry<? extends UnsignedAppletActionTableModel, ? extends Integer> entry) {
- ExecuteUnsignedApplet o = (ExecuteUnsignedApplet) entry.getModel().getValueAt(entry.getIdentifier(), 0);
- return (o.equals(ExecuteUnsignedApplet.NO));
+ ExecuteAppletAction o = (ExecuteAppletAction) entry.getModel().getValueAt(entry.getIdentifier(), 0);
+ return (o.equals(ExecuteAppletAction.NO));
}
}
diff -r ededca6b0659 -r 61bfad46e9cc netx/net/sourceforge/jnlp/security/AppTrustWarningDialog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/netx/net/sourceforge/jnlp/security/AppTrustWarningDialog.java Mon Mar 03 11:36:14 2014 -0500
@@ -0,0 +1,68 @@
+/* Copyright (C) 2013 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+package net.sourceforge.jnlp.security;
+
+import net.sourceforge.jnlp.JNLPFile;
+import net.sourceforge.jnlp.security.AppTrustWarningPanel.ActionChoiceListener;
+import net.sourceforge.jnlp.security.AppTrustWarningPanel.AppSigningWarningAction;
+
+/**
+ * A panel that confirms that the user is OK with unsigned code running.
+ */
+public class AppTrustWarningDialog extends SecurityDialogPanel {
+
+ private AppTrustWarningDialog(final SecurityDialog dialog) {
+ super(dialog);
+ }
+
+ public static AppTrustWarningDialog unsigned(final SecurityDialog dialog, final JNLPFile file) {
+ final AppTrustWarningDialog warningDialog = new AppTrustWarningDialog(dialog);
+ warningDialog.add(new UnsignedAppletTrustWarningPanel(file, warningDialog.getActionChoiceListener()));
+ return warningDialog;
+ }
+
+ private ActionChoiceListener getActionChoiceListener() {
+ return new ActionChoiceListener() {
+ @Override
+ public void actionChosen(final AppSigningWarningAction action) {
+ parent.setValue(action);
+ parent.dispose();
+ }
+ };
+ }
+
+}
diff -r ededca6b0659 -r 61bfad46e9cc netx/net/sourceforge/jnlp/security/AppTrustWarningPanel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/netx/net/sourceforge/jnlp/security/AppTrustWarningPanel.java Mon Mar 03 11:36:14 2014 -0500
@@ -0,0 +1,321 @@
+/* Copyright (C) 2013 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+package net.sourceforge.jnlp.security;
+
+import static net.sourceforge.jnlp.runtime.Translator.R;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.SwingConstants;
+
+import net.sourceforge.jnlp.JNLPFile;
+import net.sourceforge.jnlp.PluginBridge;
+import net.sourceforge.jnlp.security.appletextendedsecurity.ExecuteAppletAction;
+import net.sourceforge.jnlp.security.appletextendedsecurity.ExtendedAppletSecurityHelp;
+import net.sourceforge.jnlp.util.ScreenFinder;
+
+/*
+ * This class is meant to provide a common layout and functionality for warning dialogs
+ * that appear when the user needs to confirm the running of applets/applications.
+ * Subclasses include UnsignedAppletTrustWarningPanel, for unsigned plugin applets, and
+ * PartiallySignedAppTrustWarningPanel, for partially signed JNLP applications as well as
+ * plugin applets. New implementations should be added to the unit test at
+ * unit/net/sourceforge/jnlp/security/AppTrustWarningPanelTest
+ */
+public abstract class AppTrustWarningPanel extends JPanel {
+
+ /*
+ * Details of decided action.
+ */
+ public static class AppSigningWarningAction {
+ private ExecuteAppletAction action;
+ private boolean applyToCodeBase;
+
+ public AppSigningWarningAction(ExecuteAppletAction action,
+ boolean applyToCodeBase) {
+ this.action = action;
+ this.applyToCodeBase = applyToCodeBase;
+ }
+
+ public ExecuteAppletAction getAction() {
+ return action;
+ }
+
+ public boolean rememberForCodeBase() {
+ return applyToCodeBase;
+ }
+ }
+
+ /*
+ * Callback for when action is decided.
+ */
+ public static interface ActionChoiceListener {
+ void actionChosen(AppSigningWarningAction action);
+ }
+
+ protected int PANE_WIDTH = 500;
+
+ protected int TOP_PANEL_HEIGHT = 60;
+ protected int INFO_PANEL_HEIGHT = 140;
+ protected int INFO_PANEL_HINT_HEIGHT = 25;
+ protected int QUESTION_PANEL_HEIGHT = 35;
+
+ private JButton allowButton;
+ private JButton rejectButton;
+ private JButton helpButton;
+ private JCheckBox permanencyCheckBox;
+ private JRadioButton applyToAppletButton;
+ private JRadioButton applyToCodeBaseButton;
+
+ protected JNLPFile file;
+
+ private ActionChoiceListener actionChoiceListener;
+
+ /*
+ * Subclasses should call addComponents() IMMEDIATELY after calling the super() constructor!
+ */
+ public AppTrustWarningPanel(JNLPFile file, ActionChoiceListener actionChoiceListener) {
+ this.file = file;
+ this.actionChoiceListener = actionChoiceListener;
+ }
+
+ /*
+ * Provides an image to be displayed near the upper left corner of the dialog.
+ */
+ protected abstract ImageIcon getInfoImage();
+
+ /*
+ * Provides a short description of why the dialog is appearing. The message is expected to be HTML-formatted.
+ */
+ protected abstract String getTopPanelText();
+
+ /*
+ * Provides in-depth information on why the dialog is appearing. The message is expected to be HTML-formatted.
+ */
+ protected abstract String getInfoPanelText();
+
+ /*
+ * This provides the text for the final prompt to the user. The message is expected to be HTML formatted.
+ * The user's action is a direct response to this question.
+ */
+ protected abstract String getQuestionPanelText();
+
+ public JButton getAllowButton() {
+ return allowButton;
+ }
+
+ public JButton getRejectButton() {
+ return rejectButton;
+ }
+
+ protected static String htmlWrap(String text) {
+ return "<html>" + text + "</html>";
+ }
+
+ private void setupTopPanel() {
+ final String topLabelText = getTopPanelText();
+
+ JLabel topLabel = new JLabel(topLabelText, getInfoImage(),
+ SwingConstants.LEFT);
+ topLabel.setFont(new Font(topLabel.getFont().toString(), Font.BOLD, 12));
+
+ JPanel topPanel = new JPanel(new BorderLayout());
+ topPanel.setBackground(Color.WHITE);
+ topPanel.add(topLabel, BorderLayout.CENTER);
+ topPanel.setPreferredSize(new Dimension(PANE_WIDTH, TOP_PANEL_HEIGHT));
+ topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ add(topPanel);
+ }
+
+ private void setupInfoPanel() {
+ String infoLabelText = getInfoPanelText();
+ int panelHeight = INFO_PANEL_HEIGHT + INFO_PANEL_HINT_HEIGHT;
+
+ JLabel infoLabel = new JLabel(infoLabelText);
+ JPanel infoPanel = new JPanel(new BorderLayout());
+ infoPanel.add(infoLabel, BorderLayout.CENTER);
+ infoPanel.setPreferredSize(new Dimension(PANE_WIDTH, panelHeight));
+ infoPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ add(infoPanel);
+ }
+
+ private void setupQuestionsPanel() {
+ JPanel questionPanel = new JPanel(new BorderLayout());
+
+ final String questionPanelText = getQuestionPanelText();
+ questionPanel.add(new JLabel(questionPanelText), BorderLayout.EAST);
+
+ questionPanel.setPreferredSize(new Dimension(PANE_WIDTH, QUESTION_PANEL_HEIGHT));
+ questionPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
+
+ add(questionPanel);
+ }
+
+ private JPanel createMatchOptionsPanel() {
+ JPanel matchOptionsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+
+ ButtonGroup group = new ButtonGroup();
+ applyToAppletButton = new JRadioButton(R("SRememberAppletOnly"));
+ applyToAppletButton.setSelected(true);
+ applyToAppletButton.setEnabled(false); // Start disabled until 'Remember this option' is selected
+
+ applyToCodeBaseButton = new JRadioButton(htmlWrap(R("SRememberCodebase", file.getCodeBase())));
+ applyToCodeBaseButton.setEnabled(false);
+
+ group.add(applyToAppletButton);
+ group.add(applyToCodeBaseButton);
+
+ matchOptionsPanel.add(applyToAppletButton);
+ matchOptionsPanel.add(applyToCodeBaseButton);
+
+ return matchOptionsPanel;
+ }
+
+ private JPanel createCheckBoxPanel() {
+ JPanel checkBoxPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+
+ permanencyCheckBox = new JCheckBox(htmlWrap(R("SRememberOption")));
+ permanencyCheckBox.addActionListener(permanencyListener());
+ checkBoxPanel.add(permanencyCheckBox);
More information about the distro-pkg-dev
mailing list