Revision: 3438
Author: ferguson.sebastian
Date: Tue Apr  6 15:57:06 2010
Log: Dialog prompting for a password change is now better. Dialogs no longer appear behind their parents.
http://code.google.com/p/power-architect/source/detail?r=3438

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectFrame.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ProjectSecurityPanel.java /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/SecurityPanel.java /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/UserEditorPanel.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectFrame.java Tue Apr 6 14:37:05 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectFrame.java Tue Apr 6 15:57:06 2010
@@ -330,7 +330,7 @@
             };

((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getSystemSession().getUpdater().setPromptSession(session); - SecurityPanel spm = new SecurityPanel(((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getProjectLocation().getServiceInfo(), closeAction, d); + SecurityPanel spm = new SecurityPanel(((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getProjectLocation().getServiceInfo(), closeAction, d, session);
             d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
             d.setContentPane(spm.getSplitPane());

@@ -353,7 +353,7 @@

((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getSystemSession().getUpdater().setPromptSession(session); ProjectSecurityPanel spm = new ProjectSecurityPanel(((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getSystemWorkspace(), - session.getWorkspace(), ArchitectProject.class.getName(), ((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getProjectLocation().getServiceInfo().getUsername(), closeAction); + session.getWorkspace(), ArchitectProject.class.getName(), ((ArchitectClientSideSession) ((ArchitectSwingSessionImpl) session).getDelegateSession()).getProjectLocation().getServiceInfo().getUsername(), d, closeAction);
             d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
             d.setContentPane(spm.getPanel());

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ProjectSecurityPanel.java Tue Apr 6 11:05:39 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ProjectSecurityPanel.java Tue Apr 6 15:57:06 2010
@@ -21,6 +21,7 @@

 import java.awt.Color;
 import java.awt.Component;
+import java.awt.Dialog;
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -80,12 +81,15 @@

     private boolean hasUnsavedChanges = false;

- public ProjectSecurityPanel(ArchitectProject securityWorkspace, SPObject subject, String type, String username, Action closeAction) {
+    private final Dialog d;
+
+ public ProjectSecurityPanel(ArchitectProject securityWorkspace, SPObject subject, String type, String username, Dialog d, Action closeAction) {
         this.securityWorkspace = securityWorkspace;
         this.subject = subject;
         this.type = type;
         this.username = username;
         this.closeAction = closeAction;
+        this.d = d;

panelLabel = new JLabel("Permissions for '" + (subject != null? subject.getName() : type.substring(type.lastIndexOf(".") + 1)) + "'"); panelLabel.setFont(new Font(panelLabel.getFont().getFontName(), Font.BOLD, panelLabel.getFont().getSize() + 1));
@@ -347,7 +351,7 @@
                             "OK", "Cancel"
                     };

- Object selection = JOptionPane.showOptionDialog(getPanel(), message, "", JOptionPane.DEFAULT_OPTION, + Object selection = JOptionPane.showOptionDialog(d, message, "", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, selections, selections[0]);

                     if (((Integer) selection).intValue() == 0) {
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/SecurityPanel.java Tue Apr 6 14:59:57 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/SecurityPanel.java Tue Apr 6 15:57:06 2010
@@ -52,6 +52,7 @@
 import org.apache.commons.codec.binary.Hex;

 import ca.sqlpower.architect.ArchitectProject;
+import ca.sqlpower.architect.ArchitectSession;
 import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
 import ca.sqlpower.enterprise.client.Group;
 import ca.sqlpower.enterprise.client.SPServerInfo;
@@ -206,13 +207,15 @@

     private final MessageDigest digester;
     private final Dialog dialog;
-
- public SecurityPanel(SPServerInfo serverInfo, Action closeAction, Dialog d) {
+    private final ArchitectSession session;
+
+ public SecurityPanel(SPServerInfo serverInfo, Action closeAction, Dialog d, ArchitectSession session) {
         this.closeAction = closeAction;
this.securityWorkspace = ArchitectClientSideSession.getSecuritySessions()
                 .get(serverInfo.getServerAddress()).getWorkspace();
         this.username = serverInfo.getUsername();
         this.dialog = d;
+        this.session = session;

         try {
             digester = MessageDigest.getInstance("SHA-256");
@@ -265,7 +268,7 @@
         if (groupOrUser instanceof Group) {
groupOrUserEditPanel = new GroupEditorPanel((Group) groupOrUser, username, closeAction);
         } else if (groupOrUser instanceof User) {
- groupOrUserEditPanel = new UserEditorPanel((User) groupOrUser, username, closeAction); + groupOrUserEditPanel = new UserEditorPanel((User) groupOrUser, username, closeAction, dialog, session);
         } else {
throw new IllegalStateException("Argument must be instance of Group or User");
         }
@@ -440,7 +443,7 @@
             };

ProjectSecurityPanel spm = new ProjectSecurityPanel(securityWorkspace,
-                    object, objectClass.getName(), username, closeAction);
+ object, objectClass.getName(), username, d, closeAction);
             d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
             d.setContentPane(spm.getPanel());

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/UserEditorPanel.java Tue Apr 6 14:59:57 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/UserEditorPanel.java Tue Apr 6 15:57:06 2010
@@ -19,6 +19,7 @@

 package ca.sqlpower.architect.swingui.enterprise;

+import java.awt.Dialog;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.net.URI;
@@ -31,6 +32,7 @@
 import javax.swing.Action;
 import javax.swing.DefaultListModel;
 import javax.swing.JButton;
+import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JList;
 import javax.swing.JOptionPane;
@@ -49,6 +51,7 @@
 import org.json.JSONObject;

 import ca.sqlpower.architect.ArchitectProject;
+import ca.sqlpower.architect.ArchitectSession;
 import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
 import ca.sqlpower.architect.enterprise.JSONResponseHandler;
 import ca.sqlpower.enterprise.client.Grant;
@@ -57,6 +60,9 @@
 import ca.sqlpower.enterprise.client.SPServerInfo;
 import ca.sqlpower.enterprise.client.User;
 import ca.sqlpower.swingui.DataEntryPanel;
+import ca.sqlpower.util.UserPrompter.UserPromptOptions;
+import ca.sqlpower.util.UserPrompter.UserPromptResponse;
+import ca.sqlpower.util.UserPrompterFactory.UserPromptType;

 import com.jgoodies.forms.builder.ButtonBarBuilder;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
@@ -128,66 +134,6 @@
                 availableGroupsModel.addElement(object);
             }
         }
-    };
-
- private final Action changePasswordAction = new AbstractAction("Change Password") {
-        public void actionPerformed(ActionEvent e) {
-            try {
-                JTextField oldPasswordField = new JPasswordField(21);
-                JTextField newPasswordField = new JPasswordField(21);
-                JTextField newPasswordFiled2 = new JPasswordField(21);
-
-                Object [] messages = {
-                        "Enter the old password",
-                        oldPasswordField,
-                        "Enter a new password",
-                        newPasswordField,
-                        newPasswordFiled2};
-                String[] options = {
-                        "OK",
-                        "Cancel"};
-
- int option = JOptionPane.showOptionDialog(getPanel(), messages, - "Change " + user.getUsername() + "'s password", JOptionPane.DEFAULT_OPTION, - JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
-
-                if (option == 0) {
- if (newPasswordField.getText().equals(newPasswordFiled2.getText())) { - SPServerInfo serviceInfo = ((ArchitectClientSideSession) securityWorkspace.getSession())
-                        .getProjectLocation().getServiceInfo();
-
- HttpClient client = ArchitectClientSideSession.createHttpClient(serviceInfo);
-
-                        MessageDigest digester;
-                        try {
- digester = MessageDigest.getInstance("SHA-256");
-                        } catch (NoSuchAlgorithmException e1) {
-                            throw new RuntimeException(e1);
-                        }
-
-                        JSONObject json = new JSONObject();
-                        json.put("username", user.getUsername());
- json.put("oldPassword", new String(Hex.encodeHex(digester.digest(oldPasswordField.getText().getBytes())))); - json.put("newPassword", new String(Hex.encodeHex(digester.digest(newPasswordField.getText().getBytes()))));
-
-                        URI serverURI = new URI("http", null,
-                                serviceInfo.getServerAddress(),
-                                serviceInfo.getPort(),
- serviceInfo.getPath() + "/project/system/change_password",
-                                null, null);
-                        HttpPost postRequest = new HttpPost(serverURI);
- postRequest.setEntity(new StringEntity(json.toString())); - postRequest.setHeader("Content-Type", "application/json");
-                        HttpUriRequest request = postRequest;
-                        client.execute(request, new JSONResponseHandler());
-                    } else {
- JOptionPane.showMessageDialog(getPanel(), "The the passwords you entered were not the same");
-                    }
-                }
-            } catch (Exception x) {
-                throw new RuntimeException(x);
-            }
-        }
     };

     private final Action okAction = new AbstractAction("OK") {
@@ -211,11 +157,14 @@
public void removeUpdate(DocumentEvent e) { hasUnsavedChanges = true; }
     };

- public UserEditorPanel(User baseUser, String username, Action closeAction) {
+    private final ArchitectSession session;
+
+ public UserEditorPanel(User baseUser, String username, Action closeAction, final Dialog d, final ArchitectSession session) {
         this.user = baseUser;
         this.securityWorkspace = (ArchitectProject) user.getParent();
         this.username = username;
         this.closeAction = closeAction;
+        this.session = session;

         final Dimension prefButtonDimension = new Dimension(25, 25);
         final Dimension prefScrollPaneDimension = new Dimension(250, 300);
@@ -281,7 +230,87 @@

ButtonBarBuilder passwordBuilder = ButtonBarBuilder.createLeftToRightBuilder();
         passwordBuilder.addGlue();
-        passwordBuilder.addGridded(new JButton(changePasswordAction));
+ passwordBuilder.addGridded(new JButton(new AbstractAction("Change Password") {
+            public void actionPerformed(ActionEvent e) {
+
+                final JDialog dialog = new JDialog(d);
+
+                final JTextField oldPasswordField = new JPasswordField(21);
+                final JTextField newPasswordField = new JPasswordField(21);
+ final JTextField newPasswordFiled2 = new JPasswordField(21);
+
+                CellConstraints cc = new CellConstraints();
+ DefaultFormBuilder dialogBuilder = new DefaultFormBuilder(new FormLayout( + "pref:grow", "pref, pref, pref, pref, pref, pref, pref")); + dialogBuilder.add(new JLabel("Enter your old password"), cc.xy(1, 1));
+                dialogBuilder.add(oldPasswordField, cc.xy(1, 2));
+ dialogBuilder.add(new JLabel("Enter your new password"), cc.xy(1, 3));
+                dialogBuilder.add(newPasswordField, cc.xy(1, 4));
+ dialogBuilder.add(new JLabel("Confirm your password"), cc.xy(1, 5));
+                dialogBuilder.add(newPasswordFiled2, cc.xy(1, 6));
+
+ ButtonBarBuilder bbb = ButtonBarBuilder.createLeftToRightBuilder();
+                bbb.addGlue();
+                bbb.addGridded(new JButton(new AbstractAction("OK") {
+                    public void actionPerformed(ActionEvent e) {
+ if (newPasswordField.getText().equals(newPasswordFiled2.getText())) { + SPServerInfo serviceInfo = ((ArchitectClientSideSession) securityWorkspace.getSession())
+                            .getProjectLocation().getServiceInfo();
+
+ HttpClient client = ArchitectClientSideSession.createHttpClient(serviceInfo);
+
+                            MessageDigest digester;
+                            try {
+ digester = MessageDigest.getInstance("SHA-256");
+                            } catch (NoSuchAlgorithmException e1) {
+                                throw new RuntimeException(e1);
+                            }
+
+                            try {
+                                JSONObject json = new JSONObject();
+                                json.put("username", user.getUsername());
+ json.put("oldPassword", new String(Hex.encodeHex(digester.digest(oldPasswordField.getText().getBytes())))); + json.put("newPassword", new String(Hex.encodeHex(digester.digest(newPasswordField.getText().getBytes()))));
+
+                                URI serverURI = new URI("http", null,
+                                        serviceInfo.getServerAddress(),
+                                        serviceInfo.getPort(),
+ serviceInfo.getPath() + "/project/system/change_password",
+                                        null, null);
+ HttpPost postRequest = new HttpPost(serverURI); + postRequest.setEntity(new StringEntity(json.toString())); + postRequest.setHeader("Content-Type", "application/json");
+                                HttpUriRequest request = postRequest;
+ client.execute(request, new JSONResponseHandler());
+                                dialog.dispose();
+                            } catch (Exception x) {
+ session.createUserPrompter("The password you have entered is incorrect.",
+                                        UserPromptType.MESSAGE,
+                                        UserPromptOptions.OK,
+                                        UserPromptResponse.OK,
+                                        "OK", "OK").promptUser("");
+                            }
+                        } else {
+ JOptionPane.showMessageDialog(getPanel(), "The the passwords you entered were not the same");
+                        }
+                    }
+                }));
+                bbb.addRelatedGap();
+                bbb.addGridded(new JButton(new AbstractAction("Cancel") {
+                    public void actionPerformed(ActionEvent e) {
+                        dialog.dispose();
+                    }
+                }));
+                bbb.setDefaultButtonBarGapBorder();
+
+                dialogBuilder.add(bbb.getPanel(), cc.xy(1, 7));
+                dialogBuilder.setDefaultDialogBorder();
+                dialog.setContentPane(dialogBuilder.getPanel());
+                dialog.pack();
+                dialog.setLocationRelativeTo(d);
+                dialog.setVisible(true);
+            }
+            }));

DefaultFormBuilder buttonPanelBuilder = new DefaultFormBuilder(new FormLayout(
                 "pref", "pref:grow, pref, 5dlu, pref, pref:grow"));
@@ -454,6 +483,10 @@

         boolean disableModifyUser = true;
         boolean disableModifyGroups = true;
+
+        if (username.equals(user.getUsername())) {
+            disableModifyUser = false;
+        }

         for (Grant g : grantsForUser) {
if ((g.getSubject() != null && g.getSubject().equals(user.getUUID()))


--
To unsubscribe, reply using "remove me" as the subject.

Reply via email to