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.