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);
         }

Reply via email to