Revision: 3435
Author: ferguson.sebastian
Date: Tue Apr  6 14:37:05 2010
Log: Fixed a bug that would cause an additional dialog to be opened, added a change password method to the resource.
http://code.google.com/p/power-architect/source/detail?r=3435

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

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java Tue Apr 6 11:05:39 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java Tue Apr 6 14:37:05 2010
@@ -8,7 +8,6 @@
 import java.net.URISyntaxException;
 import java.text.ParseException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -342,12 +341,7 @@
                }
                return workspaces;
        } catch (AccessDeniedException e) {
-           session.createUserPrompter("Unable to locate server.",
-                       UserPromptType.MESSAGE,
-                       UserPromptOptions.OK,
-                       UserPromptResponse.OK,
-                       "OK", "OK").promptUser("");
-           return Collections.emptyList();
+           throw e;
        } finally {
                httpClient.getConnectionManager().shutdown();
        }
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectFrame.java Tue Apr 6 11:05:39 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectFrame.java Tue Apr 6 14:37:05 2010
@@ -64,7 +64,6 @@
 import javax.swing.tree.TreePath;

 import org.apache.log4j.Logger;
-import org.springframework.security.AccessDeniedException;

 import ca.sqlpower.architect.ArchitectProject;
 import ca.sqlpower.architect.ArchitectSession;
@@ -135,9 +134,6 @@
 import ca.sqlpower.sqlobject.undo.NotifyingUndoManager;
 import ca.sqlpower.swingui.SPSUtils;
 import ca.sqlpower.swingui.enterprise.client.SPServerInfoManagerPanel;
-import ca.sqlpower.util.UserPrompter.UserPromptOptions;
-import ca.sqlpower.util.UserPrompter.UserPromptResponse;
-import ca.sqlpower.util.UserPrompterFactory.UserPromptType;

 /**
* The Main Window for the Architect Application; contains a main() method that is
@@ -250,37 +246,25 @@

                         boolean accessible = true;

-                        try {
- ((ArchitectSwingSessionContextImpl) session.getContext()).createSecuritySession(si);
-                        } catch (AccessDeniedException ex) {
- session.createUserPrompter("Unable to login to server.",
-                                    UserPromptType.MESSAGE,
-                                    UserPromptOptions.OK,
-                                    UserPromptResponse.OK,
-                                    "OK", "OK").promptUser("");
-                            accessible = false;
-                        }
-
                         if (accessible) {
final JDialog dialog = SPSUtils.makeOwnedDialog(ArchitectFrame.this, "Projects"); Action closeAction = new AbstractAction("Close") { public void actionPerformed(ActionEvent e) {
                                     dialog.dispose();
-
-// if (!((JButton) e.getSource()).getAction().getValue(Action.NAME).equals("Close")) {
-//                                    d.dispose();
-//                                }
                                 }
                             };
+
ServerProjectsManagerPanel spm = new ServerProjectsManagerPanel(si, session, session.getContext(),
                                     ArchitectFrame.this, closeAction);
- dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
-                            dialog.setContentPane(spm.getPanel());
-
-                            SPSUtils.makeJDialogCancellable(dialog, null);
-                            dialog.pack();
- dialog.setLocationRelativeTo(ArchitectFrame.this);
-                            dialog.setVisible(true);
+                            if (spm.isConnected()) {
+ dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+                                dialog.setContentPane(spm.getPanel());
+
+ SPSUtils.makeJDialogCancellable(dialog, null);
+                                dialog.pack();
+ dialog.setLocationRelativeTo(ArchitectFrame.this);
+                                dialog.setVisible(true);
+                            }
                         }
                     } else {
JOptionPane.showMessageDialog(ArchitectFrame.this, "Please select a server", "", JOptionPane.INFORMATION_MESSAGE);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/SecurityPanel.java Mon Apr 5 14:24:45 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/SecurityPanel.java Tue Apr 6 14:37:05 2010
@@ -295,7 +295,7 @@
                 "Specify the User's Name and Password.",
                 namePanel, passPanel};

-        String[] options = { "Accept", "Cancel",};
+        String[] options = { "OK", "Cancel",};
         int option = JOptionPane.showOptionDialog(getPanel(), messages,
"Specify the User's Name and Password", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java Tue Apr 6 11:05:39 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java Tue Apr 6 14:37:05 2010
@@ -42,8 +42,6 @@
 import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;

-import org.springframework.security.AccessDeniedException;
-
 import ca.sqlpower.architect.ArchitectSession;
 import ca.sqlpower.architect.ArchitectSessionContext;
 import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
@@ -339,6 +337,10 @@
         builder.setDefaultDialogBorder();
         panel = builder.getPanel();
     }
+
+    public boolean isConnected() {
+        return connected;
+    }

     public JPanel getPanel() {
         return panel;
@@ -363,7 +365,6 @@
             newAction.setEnabled(false);
             openAction.setEnabled(false);
             deleteAction.setEnabled(false);
-
             projects.setEnabled(false);
         }
     }
@@ -376,44 +377,30 @@
         if (serviceInfo != null) {
             try {

-                boolean accessible = true;
-
-                try {
- ((ArchitectSwingSessionContextImpl) session.getContext()).createSecuritySession(serviceInfo);
-                } catch (AccessDeniedException ex) {
- session.createUserPrompter("Unable to login to server.",
-                            UserPromptType.MESSAGE,
-                            UserPromptOptions.OK,
-                            UserPromptResponse.OK,
-                            "OK", "OK").promptUser("");
-                    accessible = false;
-                }
-
-                if (accessible) {
-                    // Sorts the project locations alphabetically
- List<ProjectLocation> projects = ArchitectClientSideSession.getWorkspaceNames(serviceInfo, session); - Collections.sort(projects, new Comparator<ProjectLocation>() { - public int compare(ProjectLocation proj1, ProjectLocation proj2) { - return proj1.getName().toUpperCase().compareTo(proj2.getName().toUpperCase());
-                        }
-                    });
-
-                    for (ProjectLocation pl : projects) {
-                        model.addElement(pl);
-                    }
+ ((ArchitectSwingSessionContextImpl) session.getContext()).createSecuritySession(serviceInfo);
+
+                // Sorts the project locations alphabetically
+ List<ProjectLocation> projects = ArchitectClientSideSession.getWorkspaceNames(serviceInfo, session); + Collections.sort(projects, new Comparator<ProjectLocation>() { + public int compare(ProjectLocation proj1, ProjectLocation proj2) { + return proj1.getName().toUpperCase().compareTo(proj2.getName().toUpperCase());
+                    }
+                });
+
+                for (ProjectLocation pl : projects) {
+                    model.addElement(pl);
                 }

                 connected = true;
             } catch (Exception ex) {
                 model.removeAllElements();
                 model.addElement("Unable to get projects from server");
-
                 connected = false;
-
- // XXX: Having an exception thrown whenever the server cannot be found seems a little
-                //      extreme, but it can be useful for debugging.
-
- throw new RuntimeException("There has been a problem retrieving projects from the selected server", ex);
+                session.createUserPrompter("Server Unavailable",
+                        UserPromptType.MESSAGE,
+                        UserPromptOptions.OK,
+                        UserPromptResponse.OK,
+                        "OK", "OK").promptUser("");
             }

             refreshPanel();
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/UserEditorPanel.java Tue Apr 6 10:20:51 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/UserEditorPanel.java Tue Apr 6 14:37:05 2010
@@ -21,6 +21,9 @@

 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
+import java.net.URI;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.List;

@@ -30,16 +33,28 @@
 import javax.swing.JButton;
 import javax.swing.JLabel;
 import javax.swing.JList;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JPasswordField;
 import javax.swing.JScrollPane;
 import javax.swing.JTextField;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;

+import org.apache.commons.codec.binary.Hex;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.entity.StringEntity;
+import org.json.JSONObject;
+
 import ca.sqlpower.architect.ArchitectProject;
+import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
+import ca.sqlpower.architect.enterprise.JSONResponseHandler;
 import ca.sqlpower.enterprise.client.Grant;
 import ca.sqlpower.enterprise.client.Group;
 import ca.sqlpower.enterprise.client.GroupMember;
+import ca.sqlpower.enterprise.client.SPServerInfo;
 import ca.sqlpower.enterprise.client.User;
 import ca.sqlpower.swingui.DataEntryPanel;

@@ -113,6 +128,66 @@
                 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") {
@@ -196,13 +271,14 @@

         CellConstraints cc = new CellConstraints();
DefaultFormBuilder upperPanelBuilder = new DefaultFormBuilder(new FormLayout(
-                "pref, 5dlu, pref", "pref, pref, pref, pref, 5dlu"));
+                "pref, 5dlu, pref", "pref, pref, pref, pref, pref, 5dlu"));
         upperPanelBuilder.add(usernameLabel, cc.xy(1, 1));
         upperPanelBuilder.add(usernameField, cc.xyw(3, 1, 1));
         upperPanelBuilder.add(fullnameLabel, cc.xy(1, 3));
         upperPanelBuilder.add(fullnameField, cc.xyw(3, 3, 1));
         upperPanelBuilder.add(emailLabel, cc.xy(1, 4));
         upperPanelBuilder.add(emailField, cc.xy(3, 4));
+ upperPanelBuilder.add(new JButton(changePasswordAction), cc.xy(3, 5));

DefaultFormBuilder buttonPanelBuilder = new DefaultFormBuilder(new FormLayout(
                 "pref", "pref:grow, pref, 5dlu, pref, pref:grow"));
@@ -348,23 +424,23 @@
     }

     public void disableIfNecessary() {
-        User user = null;
+        User creatingUser = null;
         List<Grant> grantsForUser = new ArrayList<Grant>();
         for (User aUser : securityWorkspace.getChildren(User.class)) {
             if (aUser.getUsername().equals(username)) {
-                user = aUser;
+                creatingUser = aUser;
             }
         }

- if (user == null) throw new IllegalStateException("User cannot possibly be null");
-
-        for (Grant g : user.getChildren(Grant.class)) {
+ if (creatingUser == null) throw new IllegalStateException("User cannot possibly be null");
+
+        for (Grant g : creatingUser.getChildren(Grant.class)) {
             grantsForUser.add(g);
         }

         for (Group g : securityWorkspace.getChildren(Group.class)) {
             for (GroupMember gm : g.getChildren(GroupMember.class)) {
-                if (gm.getUser().getUUID().equals(user.getUsername())) {
+ if (gm.getUser().getUUID().equals(creatingUser.getUsername())) {
                     for (Grant gr : g.getChildren(Grant.class)) {
                         grantsForUser.add(gr);
                     }


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

Reply via email to