Revision: 3903
Author: [email protected]
Date: Thu Aug 19 11:02:29 2010
Log: Added an upload button to the projects dialog. It will upload a
project to the server, but the server cannot import it correctly yet.
http://code.google.com/p/power-architect/source/detail?r=3903
Modified:
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
Tue Aug 17 20:55:03 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
Thu Aug 19 11:02:29 2010
@@ -2,8 +2,10 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.MessageDigest;
@@ -576,7 +578,40 @@
httpClient.getConnectionManager().shutdown();
}
}
-
+
+ public static ProjectLocation uploadProject(SPServerInfo serviceInfo,
String name, InputStream project, ArchitectSession session)
+ throws URISyntaxException, ClientProtocolException, IOException,
JSONException {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ SQLPowerUtils.copyStream(project, out);
+ String data = out.toString();
+
+ HttpClient httpClient = createHttpClient(serviceInfo);
+ try {
+ List<NameValuePair> properties = new
ArrayList<NameValuePair>();
+ properties.add(new BasicNameValuePair("name", name));
+ properties.add(new BasicNameValuePair("file", data));
+ properties.add(new BasicNameValuePair("randomUUID", "true"));
+
+ HttpPost request = new HttpPost(getServerURI(serviceInfo, "/"
+ REST_TAG + "/jcr", "name=" + name));
+ request.setEntity(new UrlEncodedFormEntity(properties));
+ JSONMessage message = httpClient.execute(request, new
JSONResponseHandler());
+ JSONObject response = new JSONObject(message.getBody());
+ return new ProjectLocation(
+ response.getString("uuid"),
+ response.getString("name"),
+ serviceInfo);
+ } catch (AccessDeniedException e) {
+ session.createUserPrompter("You do not have sufficient
privileges to create a new workspace.",
+ UserPromptType.MESSAGE,
+ UserPromptOptions.OK,
+ UserPromptResponse.OK,
+ "OK", "OK").promptUser("");
+ return null;
+ } finally {
+ httpClient.getConnectionManager().shutdown();
+ }
+ }
+
public int revertServerWorkspace(int revisionNo) throws IOException,
URISyntaxException, JSONException {
return revertServerWorkspace(projectLocation, revisionNo);
}
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java
Fri Aug 13 12:40:03 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java
Thu Aug 19 11:02:29 2010
@@ -21,9 +21,13 @@
import java.awt.Component;
import java.awt.Dimension;
+import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.FileInputStream;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -33,13 +37,17 @@
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
+import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
+import javax.swing.JTextField;
import javax.swing.SwingUtilities;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
import ca.sqlpower.architect.ArchitectSessionContext;
import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
@@ -49,6 +57,7 @@
import ca.sqlpower.architect.swingui.ArchitectSwingSession;
import ca.sqlpower.architect.swingui.ArchitectSwingSessionContextImpl;
import ca.sqlpower.architect.swingui.ArchitectSwingSessionImpl;
+import ca.sqlpower.architect.swingui.action.Messages;
import ca.sqlpower.enterprise.client.SPServerInfo;
import ca.sqlpower.swingui.SPSUtils;
import ca.sqlpower.util.UserPrompter.UserPromptOptions;
@@ -56,6 +65,7 @@
import ca.sqlpower.util.UserPrompterFactory.UserPromptType;
import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
@@ -180,27 +190,116 @@
}
};
+ private final Action uploadAction = new AbstractAction("Upload") {
+
+ public void actionPerformed(ActionEvent e) {
+ final JDialog dialog = new
JDialog(SwingUtilities.getWindowAncestor(dialogOwner), "Upload Project",
ModalityType.DOCUMENT_MODAL);
+
+ JPanel panel = new JPanel();
+ FormLayout layout = new FormLayout("4dlu, pref, 4dlu,
max(150dlu;pref), 4dlu, pref, 4dlu", "pref, pref, pref");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout,
panel);
+ CellConstraints cc = new CellConstraints();
+
+ final JTextField nameField = new JTextField();
+ builder.add(new JLabel("Name"), cc.xy(2, 1));
+ builder.add(nameField, cc.xyw(4, 1, 3));
+
+ final JTextField fileField = new JTextField();
+ JButton fileButton = new JButton("...");
+ fileButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ JFileChooser chooser = new
JFileChooser(session.getProjectLoader().getFile());
+
chooser.addChoosableFileFilter(SPSUtils.ARCHITECT_FILE_FILTER);
+ chooser.setDialogTitle(Messages.getString("Choose
Project to Upload"));
+
+ int response = chooser.showOpenDialog(dialog);
+
+ if (response != JFileChooser.APPROVE_OPTION) {
+ return;
+ }
+
+
fileField.setText(chooser.getSelectedFile().getAbsolutePath());
+ }
+ });
+ builder.add(new JLabel("File"), cc.xy(2, 2));
+ builder.add(fileField, cc.xy(4, 2));
+ builder.add(fileButton, cc.xy(6, 2));
+
+ final JButton okButton = new JButton("Upload");
+ okButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ File f = new File(fileField.getText());
+ if (!f.canRead()) {
+ JOptionPane.showMessageDialog(dialogOwner, "File
cannot be read", "Invalid File", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ try {
+
ArchitectClientSideSession.uploadProject(getSelectedServerInfo(),
nameField.getText(), new FileInputStream(f), session);
+ dialog.dispose();
+ refreshInfoList();
+ } catch (Exception ex) {
+
SPSUtils.showExceptionDialogNoReport(dialog, "Unable to upload project",
ex);
+ }
+ }
+ });
+ JButton cancelButton = new JButton("Cancel");
+ cancelButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ dialog.dispose();
+ }
+ });
+
+ okButton.setEnabled(false);
+ DocumentListener documentListener = new DocumentListener() {
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+ textChanged(e);
+ }
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ textChanged(e);
+ }
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ textChanged(e);
+ }
+ private void textChanged(DocumentEvent e) {
+ okButton.setEnabled(!fileField.getText().isEmpty()
&& !nameField.getText().isEmpty());
+ }
+ };
+ fileField.getDocument().addDocumentListener(documentListener);
+ nameField.getDocument().addDocumentListener(documentListener);
+
+ JPanel buttonBar =
ButtonBarFactory.buildRightAlignedBar(okButton, cancelButton);
+ builder.add(buttonBar, cc.xyw(2, 3, 5));
+ dialog.add(panel);
+ SPSUtils.makeJDialogCancellable(dialog, null);
+ dialog.pack();
+ dialog.setLocationRelativeTo(dialogOwner);
+ dialog.setVisible(true);
+ }
+ };
private final Action deleteAction = new AbstractAction("Delete") {
public void actionPerformed(ActionEvent e) {
if (getSelectedServerInfo() != null) {
- int [] indecies = projects.getSelectedIndices();
-
- if (indecies.length >= 1) {
-
- final Object [] objs = new Object[indecies.length];
- for (int i = 0; i < indecies.length; i++) {
- objs[i] =
projects.getModel().getElementAt(indecies[i]);
+ int [] indices = projects.getSelectedIndices();
+
+ if (indices.length >= 1) {
+
+ final Object [] objs = new Object[indices.length];
+ for (int i = 0; i < indices.length; i++) {
+ objs[i] =
projects.getModel().getElementAt(indices[i]);
}
String promptMessage;
- if (indecies.length == 1) {
+ if (indices.length == 1) {
promptMessage = "Are you sure you want to delete
the selected project?" +
"\nThis action cannot be undone.";
} else {
- promptMessage = "Are you sure you want to delete
these " + indecies.length + " selected projects?" +
+ promptMessage = "Are you sure you want to delete
these " + indices.length + " selected projects?" +
"\nThis action cannot be undone.";
}
@@ -233,7 +332,7 @@
d.dispose();
}
};
-
+
SecurityPanel spm = new SecurityPanel(getSelectedServerInfo(),
closeAction, d, session);
d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
d.setContentPane(spm.getPanel());
@@ -373,6 +472,7 @@
buttonBarBuilder.append(securityButton);
buttonBarBuilder.append(new JButton(newAction));
buttonBarBuilder.append(new JButton(openAction));
+ buttonBarBuilder.append(new JButton(uploadAction));
buttonBarBuilder.append(new JButton(deleteAction));
buttonBarBuilder.append(new JButton(closeAction));
builder.add(buttonBarBuilder.getPanel(), cc.xy(5, 2));
@@ -394,6 +494,7 @@
openSecurityManagerPanelAction.setEnabled(true);
newAction.setEnabled(true);
+ uploadAction.setEnabled(true);
if (projects.isSelectionEmpty()) {
openAction.setEnabled(false);
@@ -408,6 +509,7 @@
openSecurityManagerPanelAction.setEnabled(false);
newAction.setEnabled(false);
openAction.setEnabled(false);
+ uploadAction.setEnabled(false);
deleteAction.setEnabled(false);
projects.setEnabled(false);
}