/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