Mercurial > hg > release > icedtea-web-1.5
changeset 951:fcb9dcf1c83c
PolicyEditor can be made modal.
* netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java:
(PolicyEditorWindow) new interface to facilitate PolicyEditor as a Window
rather than Panel. (PolicyEditorFrame, PolicyEditorDialog)
PolicyEditorWindow implementations. (getPolicyEditorFrame,
getPolicyEditorWindow) new methods to get frame or dialog implementations.
(setComponentMnemonic) made static. (preparePolicyEditorWindow) common
setup for frame and dialog implementations.
* netx/net/sourceforge/jnlp/controlpanel/PolicyPanel.java: refactor to use
PolicyEditorWindow
* netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java:
same
* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java
same
* netx/net/sourceforge/jnlp/util/FileUtils.java: (showReadOnlyDialog,
showCouldNotOpenFileDialog, showCouldNotOpenFilePathDialog,
showCouldNotOpenDialog) use Component rather than JFrame
author | Andrew Azores <aazores@redhat.com> |
---|---|
date | Wed, 26 Mar 2014 11:02:00 -0400 |
parents | 689447c4d6bd |
children | ca18850addad |
files | ChangeLog netx/net/sourceforge/jnlp/controlpanel/PolicyPanel.java netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java netx/net/sourceforge/jnlp/util/FileUtils.java |
diffstat | 6 files changed, 236 insertions(+), 55 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Mar 26 10:45:46 2014 -0400 +++ b/ChangeLog Wed Mar 26 11:02:00 2014 -0400 @@ -1,3 +1,25 @@ +2014-03-26 Andrew Azores <aazores@redhat.com> + Jiri Vanek <jvanek@redhat.com> + + PolicyEditor can be made modal. + * netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java: + (PolicyEditorWindow) new interface to facilitate PolicyEditor as a Window + rather than Panel. (PolicyEditorFrame, PolicyEditorDialog) + PolicyEditorWindow implementations. (getPolicyEditorFrame, + getPolicyEditorWindow) new methods to get frame or dialog implementations. + (setComponentMnemonic) made static. (preparePolicyEditorWindow) common + setup for frame and dialog implementations. + * netx/net/sourceforge/jnlp/controlpanel/PolicyPanel.java: refactor to use + PolicyEditorWindow + * netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: + same + * netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java + same + * netx/net/sourceforge/jnlp/util/FileUtils.java: (showReadOnlyDialog, + showCouldNotOpenFileDialog, showCouldNotOpenFilePathDialog, + showCouldNotOpenDialog) use Component rather than JFrame + + 2014-03-26 Andrew Azores <aazores@redhat.com> Added many new permissions for PolicyEditor
--- a/netx/net/sourceforge/jnlp/controlpanel/PolicyPanel.java Wed Mar 26 10:45:46 2014 -0400 +++ b/netx/net/sourceforge/jnlp/controlpanel/PolicyPanel.java Wed Mar 26 11:02:00 2014 -0400 @@ -54,12 +54,12 @@ import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; -import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; import net.sourceforge.jnlp.config.DeploymentConfiguration; import net.sourceforge.jnlp.security.policyeditor.PolicyEditor; +import net.sourceforge.jnlp.security.policyeditor.PolicyEditor.PolicyEditorWindow; import net.sourceforge.jnlp.util.FileUtils; import net.sourceforge.jnlp.util.FileUtils.OpenFileResult; import net.sourceforge.jnlp.util.logging.OutputController; @@ -72,7 +72,7 @@ */ public class PolicyPanel extends NamedBorderPanel { - private PolicyEditor policyEditor = null; + private PolicyEditorWindow policyEditor = null; public PolicyPanel(final JFrame frame, final DeploymentConfiguration config) { super(R("CPHeadPolicy"), new GridBagLayout()); @@ -161,12 +161,12 @@ * @param filePath a {@link String} representing the path to the file to be opened */ private void launchSimplePolicyEditor(final String filePath) { - if (policyEditor == null || policyEditor.isClosed()) { - policyEditor = PolicyEditor.createInstance(filePath); - policyEditor.setVisible(true); + if (policyEditor == null || policyEditor.getPolicyEditor().isClosed()) { + policyEditor = PolicyEditor.getPolicyEditorFrame(filePath); + policyEditor.asWindow().setVisible(true); } else { - policyEditor.toFront(); - policyEditor.repaint(); + policyEditor.asWindow().toFront(); + policyEditor.asWindow().repaint(); } }
--- a/netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java Wed Mar 26 10:45:46 2014 -0400 +++ b/netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java Wed Mar 26 11:02:00 2014 -0400 @@ -41,6 +41,7 @@ import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Dialog.ModalityType; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; @@ -84,6 +85,7 @@ import net.sourceforge.jnlp.security.SecurityDialogs.AccessType; import net.sourceforge.jnlp.security.SecurityUtil; import net.sourceforge.jnlp.security.policyeditor.PolicyEditor; +import net.sourceforge.jnlp.security.policyeditor.PolicyEditor.PolicyEditorWindow; import net.sourceforge.jnlp.util.FileUtils; import net.sourceforge.jnlp.util.logging.OutputController; @@ -109,7 +111,7 @@ private JButton run, sandbox, advancedOptions, cancel, moreInfo; private boolean alwaysTrustSelected; private String bottomLabelWarningText; - private PolicyEditor policyEditor = null; + private PolicyEditorWindow policyEditor = null; public CertWarningPane(SecurityDialog x, CertVerifier certVerifier, SecurityDelegate securityDelegate) { super(x, certVerifier); @@ -330,14 +332,15 @@ filepath = null; } - if (policyEditor == null || policyEditor.isClosed()) { - policyEditor = PolicyEditor.createInstance(filepath); + if (policyEditor == null || policyEditor.getPolicyEditor().isClosed()) { + policyEditor = PolicyEditor.getPolicyEditorDialog(filepath); } else { - policyEditor.toFront(); - policyEditor.repaint(); + policyEditor.asWindow().toFront(); + policyEditor.asWindow().repaint(); } - policyEditor.addNewCodebase(file.getCodeBase().toString()); - policyEditor.setVisible(true); + policyEditor.setModalityType(ModalityType.DOCUMENT_MODAL); + policyEditor.getPolicyEditor().addNewCodebase(file.getCodeBase().toString()); + policyEditor.asWindow().setVisible(true); policyMenu.setVisible(false); } }
--- a/netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java Wed Mar 26 10:45:46 2014 -0400 +++ b/netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java Wed Mar 26 11:02:00 2014 -0400 @@ -2,6 +2,7 @@ import static net.sourceforge.jnlp.runtime.Translator.R; +import java.awt.Dialog.ModalityType; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; @@ -25,6 +26,7 @@ import net.sourceforge.jnlp.security.appletextendedsecurity.ExecuteAppletAction; import net.sourceforge.jnlp.security.appletextendedsecurity.UnsignedAppletTrustConfirmation; import net.sourceforge.jnlp.security.policyeditor.PolicyEditor; +import net.sourceforge.jnlp.security.policyeditor.PolicyEditor.PolicyEditorWindow; import net.sourceforge.jnlp.tools.CertInformation; import net.sourceforge.jnlp.tools.JarCertVerifier; @@ -34,7 +36,7 @@ private final JButton sandboxButton; private final JButton advancedOptionsButton; private final JPopupMenu policyMenu; - private PolicyEditor policyEditor = null; + private PolicyEditorWindow policyEditor = null; public PartiallySignedAppTrustWarningPanel(JNLPFile file, ActionChoiceListener actionChoiceListener, SecurityDialog securityDialog) { super(file, actionChoiceListener); @@ -175,14 +177,15 @@ filepath = null; } - if (policyEditor == null || policyEditor.isClosed()) { - policyEditor = PolicyEditor.createInstance(filepath); + if (policyEditor == null || policyEditor.getPolicyEditor().isClosed()) { + policyEditor = PolicyEditor.getPolicyEditorDialog(filepath); } else { - policyEditor.toFront(); - policyEditor.repaint(); + policyEditor.asWindow().toFront(); + policyEditor.asWindow().repaint(); } - policyEditor.addNewCodebase(file.getCodeBase().toString()); - policyEditor.setVisible(true); + policyEditor.setModalityType(ModalityType.DOCUMENT_MODAL); + policyEditor.getPolicyEditor().addNewCodebase(file.getCodeBase().toString()); + policyEditor.asWindow().setVisible(true); policyMenu.setVisible(false); } }
--- a/netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java Wed Mar 26 10:45:46 2014 -0400 +++ b/netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java Wed Mar 26 11:02:00 2014 -0400 @@ -36,10 +36,12 @@ package net.sourceforge.jnlp.security.policyeditor; +import java.awt.Dialog.ModalityType; import static net.sourceforge.jnlp.runtime.Translator.R; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; @@ -73,6 +75,7 @@ import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; +import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; @@ -81,7 +84,7 @@ import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; -import javax.swing.JRootPane; +import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; @@ -124,7 +127,7 @@ * Comments will *not* be preserved when PolicyEditor next saves to the * file. */ -public class PolicyEditor extends JFrame { +public class PolicyEditor extends JPanel { /** * Command line switch to print a help message. @@ -161,7 +164,6 @@ private final JList list = new JList(listModel); private final JButton okButton = new JButton(), closeButton = new JButton(), addCodebaseButton = new JButton(), removeCodebaseButton = new JButton(); - private final JMenuBar menuBar = new JMenuBar(); private final JFileChooser fileChooser; private CustomPolicyViewer cpViewer = null; private final WeakReference<PolicyEditor> weakThis = new WeakReference<PolicyEditor>(this); @@ -295,21 +297,158 @@ }; setAccelerators(); - setTitle(R("PETitle")); setupLayout(); list.setSelectedIndex(0); updateCheckboxes(""); - setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + } - addWindowListener(new WindowAdapter() { + private static void preparePolicyEditorWindow(final PolicyEditorWindow w, PolicyEditor e) { + w.setModalityType(ModalityType.MODELESS); //at least some default + w.setPolicyEditor(e); + w.setTitle(R("PETitle")); + w.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + w.setJMenuBar(createMenuBar(w.asWindow(), w.getPolicyEditor())); + setupPolicyEditorWindow(w.asWindow(), w.getPolicyEditor()); + + } + + private static void setupPolicyEditorWindow(final Window window, final PolicyEditor editor) { + window.add(editor); + window.pack(); + editor.setVisible(true); + + window.addWindowListener(new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { - quit(); + editor.quit(); + window.dispose(); + } + }); + + editor.closeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + window.dispose(); } }); } + public static interface PolicyEditorWindow { + + public void setTitle(String s); + + public void setDefaultCloseOperation(int i); + + public PolicyEditor getPolicyEditor(); + + public void setPolicyEditor(PolicyEditor e); + + public void setJMenuBar(JMenuBar menu); + + public Window asWindow(); + + public void setModalityType(ModalityType modalityType); + } + + private static class PolicyEditorFrame extends JFrame implements PolicyEditorWindow { + + private PolicyEditor editor; + + private PolicyEditorFrame(final PolicyEditor editor) { + super(); + preparePolicyEditorWindow((PolicyEditorWindow)this, editor); + } + + @Override + public final void setTitle(String title) { + super.setTitle(title); + } + + @Override + public final PolicyEditor getPolicyEditor() { + return editor; + } + + @Override + public final void setPolicyEditor(PolicyEditor e) { + editor = e; + } + + @Override + public final void setDefaultCloseOperation(int operation) { + super.setDefaultCloseOperation(operation); + } + + @Override + public final void setJMenuBar(JMenuBar menu) { + super.setJMenuBar(menu); + } + + @Override + public final Window asWindow() { + return this; + } + + @Override + public void setModalityType(ModalityType type) { + //no op for frame + } + } + + public static PolicyEditorWindow getPolicyEditorFrame(final String filepath) { + return new PolicyEditorFrame(new PolicyEditor(filepath)); + } + + private static class PolicyEditorDialog extends JDialog implements PolicyEditorWindow { + + private PolicyEditor editor; + + private PolicyEditorDialog(final PolicyEditor editor) { + super(); + preparePolicyEditorWindow((PolicyEditorWindow)this, editor); + } + + @Override + public final void setTitle(String title) { + super.setTitle(title); + } + + @Override + public final PolicyEditor getPolicyEditor() { + return editor; + } + + @Override + public final void setPolicyEditor(PolicyEditor e) { + editor = e; + } + + @Override + public final void setDefaultCloseOperation(int operation) { + super.setDefaultCloseOperation(operation); + } + + @Override + public final void setJMenuBar(JMenuBar menu) { + super.setJMenuBar(menu); + } + + @Override + public final Window asWindow() { + return this; + } + + @Override + public void setModalityType(ModalityType type) { + super.setModalityType(type); + } + } + + public static PolicyEditorWindow getPolicyEditorDialog(final String filepath) { + return new PolicyEditorDialog(new PolicyEditor(filepath)); + } + private void setClosed() { closed = true; } @@ -370,9 +509,8 @@ */ private void setAccelerator(final int trigger, final int modifiers, final Action action, final String identifier) { final KeyStroke key = KeyStroke.getKeyStroke(trigger, modifiers); - final JRootPane root = getRootPane(); - root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(key, identifier); - root.getActionMap().put(identifier, action); + this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(key, identifier); + this.getActionMap().put(identifier, action); } /** @@ -454,7 +592,6 @@ } weakThis.clear(); setClosed(); - dispose(); } /** @@ -649,7 +786,7 @@ * @param component the component for which to set a mnemonic * @param mnemonic the mnemonic to set */ - private void setComponentMnemonic(final AbstractButton component, final String mnemonic) { + private static void setComponentMnemonic(final AbstractButton component, final String mnemonic) { final int trig; try { trig = Integer.parseInt(mnemonic); @@ -660,45 +797,61 @@ component.setMnemonic(trig); } - /** - * Lay out all controls, tooltips, etc. - */ - private void setupLayout() { + private static JMenuBar createMenuBar(final Window window, final PolicyEditor editor) { + final JMenuBar menuBar = new JMenuBar(); + final JMenu fileMenu = new JMenu(R("PEFileMenu")); setComponentMnemonic(fileMenu, R("PEFileMenuMnemonic")); + final JMenuItem openItem = new JMenuItem(R("PEOpenMenuItem")); setComponentMnemonic(openItem, R("PEOpenMenuItemMnemonic")); openItem.setAccelerator(KeyStroke.getKeyStroke(openItem.getMnemonic(), ActionEvent.CTRL_MASK)); - openItem.addActionListener(openButtonAction); + openItem.addActionListener(editor.openButtonAction); fileMenu.add(openItem); + final JMenuItem saveItem = new JMenuItem(R("PESaveMenuItem")); setComponentMnemonic(saveItem, R("PESaveMenuItemMnemonic")); saveItem.setAccelerator(KeyStroke.getKeyStroke(saveItem.getMnemonic(), ActionEvent.CTRL_MASK)); - saveItem.addActionListener(okButtonAction); + saveItem.addActionListener(editor.okButtonAction); fileMenu.add(saveItem); + final JMenuItem saveAsItem = new JMenuItem(R("PESaveAsMenuItem")); setComponentMnemonic(saveAsItem, R("PESaveAsMenuItemMnemonic")); saveAsItem.setAccelerator(KeyStroke.getKeyStroke(saveAsItem.getMnemonic(), ActionEvent.CTRL_MASK)); - saveAsItem.addActionListener(saveAsButtonAction); + saveAsItem.addActionListener(editor.saveAsButtonAction); fileMenu.add(saveAsItem); + final JMenuItem exitItem = new JMenuItem(R("PEExitMenuItem")); setComponentMnemonic(exitItem, R("PEExitMenuItemMnemonic")); exitItem.setAccelerator(KeyStroke.getKeyStroke(exitItem.getMnemonic(), ActionEvent.CTRL_MASK)); - exitItem.addActionListener(closeButtonAction); + exitItem.addActionListener(editor.closeButtonAction); + exitItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + window.dispose(); + } + }); fileMenu.add(exitItem); menuBar.add(fileMenu); final JMenu viewMenu = new JMenu(R("PEViewMenu")); setComponentMnemonic(viewMenu, R("PEViewMenuMnemonic")); + final JMenuItem customPermissionsItem = new JMenuItem(R("PECustomPermissionsItem")); setComponentMnemonic(customPermissionsItem, R("PECustomPermissionsItemMnemonic")); customPermissionsItem.setAccelerator(KeyStroke.getKeyStroke(customPermissionsItem.getMnemonic(), ActionEvent.ALT_MASK)); - customPermissionsItem.addActionListener(viewCustomButtonAction); + customPermissionsItem.addActionListener(editor.viewCustomButtonAction); viewMenu.add(customPermissionsItem); menuBar.add(viewMenu); - this.setJMenuBar(menuBar); + + return menuBar; + } + /** + * Lay out all controls, tooltips, etc. + */ + private void setupLayout() { final JLabel checkboxLabel = new JLabel(); checkboxLabel.setText(R("PECheckboxLabel")); checkboxLabel.setBorder(new EmptyBorder(2, 2, 2, 2)); @@ -796,7 +949,6 @@ add(closeButton, cancelButtonConstraints); setMinimumSize(getPreferredSize()); - pack(); } /** @@ -979,10 +1131,10 @@ } final StringBuilder sb = new StringBuilder(); sb.append(AUTOGENERATED_NOTICE); - sb.append("\n/* Generated by PolicyEditor at " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") - .format(Calendar.getInstance().getTime()) + " */" + System.getProperty("line.separator")); + sb.append("\n/* Generated by PolicyEditor at ").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + .format(Calendar.getInstance().getTime())).append(" */").append(System.getProperty("line.separator")); final Set<PolicyEditorPermissions> enabledPermissions = new HashSet<PolicyEditorPermissions>(); - FileLock fileLock = null; + FileLock fileLock; try { fileLock = FileUtils.getFileLock(file.getAbsolutePath(), false, true); } catch (final FileNotFoundException e) { @@ -1098,12 +1250,12 @@ // maybe the user just forgot the -file flag, so try to open anyway filepath = args[0]; } - final PolicyEditor editor = new PolicyEditor(filepath); - editor.setVisible(true); + final PolicyEditorWindow frame = getPolicyEditorFrame(filepath); + frame.asWindow().setVisible(true); final String codebaseStr = argsMap.get(CODEBASE_FLAG); if (codebaseStr != null) { final String[] urls = codebaseStr.split(" "); - editor.addNewCodebases(urls); + frame.getPolicyEditor().addNewCodebases(urls); } } });
--- a/netx/net/sourceforge/jnlp/util/FileUtils.java Wed Mar 26 10:45:46 2014 -0400 +++ b/netx/net/sourceforge/jnlp/util/FileUtils.java Wed Mar 26 11:02:00 2014 -0400 @@ -16,8 +16,10 @@ package net.sourceforge.jnlp.util; +import java.awt.Component; import static net.sourceforge.jnlp.runtime.Translator.R; +import java.awt.Window; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; @@ -30,7 +32,6 @@ import java.io.OutputStreamWriter; import java.io.RandomAccessFile; import java.io.Writer; -import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.security.DigestInputStream; @@ -347,7 +348,7 @@ * Show a dialog informing the user that the file is currently read-only * @param frame a {@link JFrame} to act as parent to this dialog */ - public static void showReadOnlyDialog(final JFrame frame) { + public static void showReadOnlyDialog(final Component frame) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -361,7 +362,7 @@ * @param frame a {@link JFrame} to act as parent to this dialog * @param filePath a {@link String} representing the path to the file we failed to open */ - public static void showCouldNotOpenFilepathDialog(final JFrame frame, final String filePath) { + public static void showCouldNotOpenFilepathDialog(final Component frame, final String filePath) { showCouldNotOpenDialog(frame, R("RCantOpenFile", filePath)); } @@ -371,7 +372,7 @@ * @param filePath a {@link String} representing the path to the file we failed to open * @param reason a {@link OpenFileResult} specifying more precisely why we failed to open the file */ - public static void showCouldNotOpenFileDialog(final JFrame frame, final String filePath, final OpenFileResult reason) { + public static void showCouldNotOpenFileDialog(final Component frame, final String filePath, final OpenFileResult reason) { final String message; switch (reason) { case CANT_CREATE: @@ -396,7 +397,7 @@ * @param filePath a {@link String} representing the path to the file we failed to open * @param message a {@link String} giving the specific reason the file could not be opened */ - public static void showCouldNotOpenDialog(final JFrame frame, final String message) { + public static void showCouldNotOpenDialog(final Component frame, final String message) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() {