/hg/icedtea-web: Added Rename, Copy, and Paste actions to Policy...

aazores at icedtea.classpath.org aazores at icedtea.classpath.org
Thu Jun 5 14:49:47 UTC 2014


changeset 098125135681 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=098125135681
author: Andrew Azores <aazores at redhat.com>
date: Thu Jun 05 10:49:33 2014 -0400

	Added Rename, Copy, and Paste actions to PolicyEditor

	2014-06-05  Andrew Azores  <aazores at redhat.com>

	    Added Rename, Copy, and Paste actions for codebases in PolicyEditor
	    * netx/net/sourceforge/jnlp/resources/Messages.properties (PEEditMenu,
	    PERenameCodebaseItem, PECopyCodebaseItem, PEPasteCodebaseItem,
	    PERenameCodebase, PEPasteCodebase, PEEditMenuMnemonic): new messages
	    * netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java
	    (codebaseClipboard): new field to facilitate copy/pasting codebases.
	    (renameCodebaseButtonAction, copyCodebaseButtonAction,
	    pasteCodebaseButtonAction): new ActionListener fields for new actions.
	    (interactivelyAddCodebase): renamed to addNewCodebaseInteractive.
	    (validateCodebase): new utility method for validating codebases.
	    (addNewCodebase, addNewCodebaseInteractive): use validateCodebase.
	    (createMenuBar): add Edit menu and items.


diffstat:

 ChangeLog                                                         |   15 +
 netx/net/sourceforge/jnlp/resources/Messages.properties           |    8 +
 netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java |  106 ++++++++-
 3 files changed, 109 insertions(+), 20 deletions(-)

diffs (222 lines):

diff -r 5216f615240c -r 098125135681 ChangeLog
--- a/ChangeLog	Wed Jun 04 15:18:50 2014 -0400
+++ b/ChangeLog	Thu Jun 05 10:49:33 2014 -0400
@@ -1,3 +1,18 @@
+2014-06-05  Andrew Azores  <aazores at redhat.com>
+
+	Added Rename, Copy, and Paste actions for codebases in PolicyEditor
+	* netx/net/sourceforge/jnlp/resources/Messages.properties (PEEditMenu,
+	PERenameCodebaseItem, PECopyCodebaseItem, PEPasteCodebaseItem,
+	PERenameCodebase, PEPasteCodebase, PEEditMenuMnemonic): new messages
+	* netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java
+	(codebaseClipboard): new field to facilitate copy/pasting codebases.
+	(renameCodebaseButtonAction, copyCodebaseButtonAction,
+	pasteCodebaseButtonAction): new ActionListener fields for new actions.
+	(interactivelyAddCodebase): renamed to addNewCodebaseInteractive.
+	(validateCodebase): new utility method for validating codebases.
+	(addNewCodebase, addNewCodebaseInteractive): use validateCodebase.
+	(createMenuBar): add Edit menu and items.
+
 2014-06-04  Lukasz Dracz  <ldracz at redhat.com>
 
 	Fixed Time Zone difference failure in unit test CreatePluginHeaderTestOk
diff -r 5216f615240c -r 098125135681 netx/net/sourceforge/jnlp/resources/Messages.properties
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties	Wed Jun 04 15:18:50 2014 -0400
+++ b/netx/net/sourceforge/jnlp/resources/Messages.properties	Thu Jun 05 10:49:33 2014 -0400
@@ -570,6 +570,12 @@
 PESaveMenuItem=Save
 PESaveAsMenuItem=Save As...
 PEExitMenuItem=Exit
+PEEditMenu=Edit
+PERenameCodebaseItem=Rename codebase
+PECopyCodebaseItem=Copy codebase
+PEPasteCodebaseItem=Paste codebase
+PERenameCodebase=Rename codebase to:
+PEPasteCodebase=Paste copied codebase as:
 PEViewMenu=View
 PECustomPermissionsItem=Custom Permissions...
 PEFileModified=File Modification Warning
@@ -604,6 +610,8 @@
 PECancelButtonMnemonic=67
 # F
 PEFileMenuMnemonic=70
+# E
+PEEditMenuMnemonic=69
 # I
 PEViewMenuMnemonic=73
 # O
diff -r 5216f615240c -r 098125135681 netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java
--- a/netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java	Wed Jun 04 15:18:50 2014 -0400
+++ b/netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java	Thu Jun 05 10:49:33 2014 -0400
@@ -170,9 +170,11 @@
     private final JFileChooser fileChooser;
     private CustomPolicyViewer cpViewer = null;
     private final WeakReference<PolicyEditor> weakThis = new WeakReference<>(this);
+    private Map<PolicyEditorPermissions, Boolean> codebaseClipboard = null;
 
     private final ActionListener okButtonAction, addCodebaseButtonAction,
-            removeCodebaseButtonAction, openButtonAction, saveAsButtonAction, viewCustomButtonAction;
+            removeCodebaseButtonAction, openButtonAction, saveAsButtonAction, viewCustomButtonAction,
+            renameCodebaseButtonAction, copyCodebaseButtonAction, pasteCodebaseButtonAction;
     private ActionListener closeButtonAction;
 
     private static class JCheckBoxWithGroup extends JCheckBox {
@@ -258,7 +260,7 @@
         addCodebaseButtonAction = new ActionListener() {
             @Override
             public void actionPerformed(final ActionEvent e) {
-                interactivelyAddCodebase();
+                addNewCodebaseInteractive();
             }
         };
         addCodebaseButton.setText(R("PEAddCodebase"));
@@ -312,6 +314,59 @@
             }
         };
 
+        renameCodebaseButtonAction = new ActionListener() {
+            @Override
+            public void actionPerformed(final ActionEvent e) {
+                final String oldCodebase = getSelectedCodebase();
+                if (oldCodebase.isEmpty()) {
+                    return;
+                }
+                String newCodebase = "";
+                while (!validateCodebase(newCodebase) || policyFile.getCopyOfPermissions().containsKey(newCodebase)) {
+                    newCodebase = JOptionPane.showInputDialog(weakThis.get(), R("PERenameCodebase"), "http://");
+                    if (newCodebase == null) {
+                        return;
+                    }
+                }
+                final Map<PolicyEditorPermissions, Boolean> standardPermissions = policyFile.getCopyOfPermissions().get(oldCodebase);
+                final Set<CustomPermission> customPermissions = policyFile.getCopyOfCustomPermissions().get(oldCodebase);
+                removeCodebase(oldCodebase);
+                addNewCodebase(newCodebase);
+                for (final Map.Entry<PolicyEditorPermissions, Boolean> entry : standardPermissions.entrySet()) {
+                    policyFile.setPermission(newCodebase, entry.getKey(), entry.getValue());
+                }
+                policyFile.addCustomPermissions(newCodebase, customPermissions);
+                updateCheckboxes(newCodebase);
+                changesMade = true;
+            }
+        };
+
+        copyCodebaseButtonAction = new ActionListener() {
+            @Override
+            public void actionPerformed(final ActionEvent e) {
+                codebaseClipboard = new HashMap<>(policyFile.getCopyOfPermissions().get(getSelectedCodebase()));
+            }
+        };
+
+        pasteCodebaseButtonAction = new ActionListener() {
+            @Override
+            public void actionPerformed(final ActionEvent e) {
+                String newCodebase = "";
+                while (!validateCodebase(newCodebase) || policyFile.getCopyOfPermissions().containsKey(newCodebase)) {
+                    newCodebase = JOptionPane.showInputDialog(weakThis.get(), R("PEPasteCodebase"), "http://");
+                    if (newCodebase == null) {
+                        return;
+                    }
+                }
+                addNewCodebase(newCodebase);
+                for (final Map.Entry<PolicyEditorPermissions, Boolean> entry : codebaseClipboard.entrySet()) {
+                    policyFile.setPermission(newCodebase, entry.getKey(), entry.getValue());
+                }
+                updateCheckboxes(newCodebase);
+                changesMade = true;
+            }
+        };
+
         viewCustomButtonAction = new ActionListener() {
             @Override
             public void actionPerformed(final ActionEvent e) {
@@ -628,7 +683,7 @@
         final Action act = new AbstractAction() {
             @Override
             public void actionPerformed(final ActionEvent e) {
-                interactivelyAddCodebase();
+                addNewCodebaseInteractive();
             }
         };
         setAccelerator(R("PEAddCodebaseMnemonic"), ActionEvent.ALT_MASK, act, "AddCodebaseAccelerator");
@@ -653,13 +708,8 @@
      * @param codebase to be added
      */
     public void addNewCodebase(final String codebase) {
-        try {
-            if (!codebase.isEmpty()) {
-                new URL(codebase);
-            }
-        } catch (final MalformedURLException mfue) {
+        if (!codebase.isEmpty() && !validateCodebase(codebase)) {
             OutputController.getLogger().log("Could not add codebase " + codebase);
-            OutputController.getLogger().log(mfue);
             return;
         }
         final String model;
@@ -705,31 +755,31 @@
         addNewCodebases(Arrays.asList(codebases));
     }
 
+    private static boolean validateCodebase(final String codebase) {
+        try {
+            new URL(codebase);
+        } catch (final MalformedURLException mue) {
+            return false;
+        }
+        return true;
+    }
+
     /**
      * Display an input dialog, which will disappear when the user enters a valid URL
      * or when the user presses cancel. If an invalid URL is entered, the dialog reappears.
      * When a valid URL is entered, it is used to create a new codebase entry in the editor's
      * policy file model.
      */
-    public void interactivelyAddCodebase() {
+    public void addNewCodebaseInteractive() {
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
                 String codebase = "";
-                boolean stopAsking = false;
-                while (!stopAsking) {
+                while (!validateCodebase(codebase)) {
                     codebase = JOptionPane.showInputDialog(weakThis.get(), R("PECodebasePrompt"), "http://");
                     if (codebase == null) {
                         return;
                     }
-                    try {
-                        final URL u = new URL(codebase);
-                        if (u.getProtocol() != null && u.getHost() != null) {
-                            stopAsking = true;
-                        }
-                    } catch (final MalformedURLException mfue) {
-                        // ignore - loop/ask again
-                    }
                 }
                 addNewCodebase(codebase);
             }
@@ -886,6 +936,22 @@
         fileMenu.add(exitItem);
         menuBar.add(fileMenu);
 
+        final JMenu editMenu = new JMenu(R("PEEditMenu"));
+        setComponentMnemonic(editMenu, R("PEEditMenuMnemonic"));
+
+        final JMenuItem renameCodebaseItem = new JMenuItem(R("PERenameCodebaseItem"));
+        renameCodebaseItem.addActionListener(editor.renameCodebaseButtonAction);
+        editMenu.add(renameCodebaseItem);
+
+        final JMenuItem copyCodebaseItem = new JMenuItem(R("PECopyCodebaseItem"));
+        copyCodebaseItem.addActionListener(editor.copyCodebaseButtonAction);
+        editMenu.add(copyCodebaseItem);
+
+        final JMenuItem pasteCodebaseItem = new JMenuItem(R("PEPasteCodebaseItem"));
+        pasteCodebaseItem.addActionListener(editor.pasteCodebaseButtonAction);
+        editMenu.add(pasteCodebaseItem);
+        menuBar.add(editMenu);
+
         final JMenu viewMenu = new JMenu(R("PEViewMenu"));
         setComponentMnemonic(viewMenu, R("PEViewMenuMnemonic"));
 


More information about the distro-pkg-dev mailing list