Revision: 3341
Author: silva.josemanuel1
Date: Thu Feb 25 15:27:51 2010
Log: Added a return value to server reversions, indicating the new global version number.
Added an auto-refresh option to RevisionListPanel
http://code.google.com/p/power-architect/source/detail?r=3341

Modified:
 /trunk/src/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
 /trunk/src/ca/sqlpower/architect/swingui/enterprise/RevisionListPanel.java

=======================================
--- /trunk/src/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java Thu Feb 25 09:46:15 2010 +++ /trunk/src/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java Thu Feb 25 15:27:51 2010
@@ -389,8 +389,8 @@
        }
     }

- public void revertServerWorkspace(int revisionNo) throws IOException, URISyntaxException {
-           revertServerWorkspace(projectLocation, revisionNo);
+ public int revertServerWorkspace(int revisionNo) throws IOException, URISyntaxException, JSONException {
+           return revertServerWorkspace(projectLocation, revisionNo);
        }

        /**
@@ -399,25 +399,33 @@
         *
* All sessions should automatically update to the reverted revision due to their Updater.
         *
+ * @returns The new global revision number, right after the reversion, or -1 if the server did not revert.
         * @throws IOException
         * @throws URISyntaxException
+        * @throws JSONException
         */
- public static void revertServerWorkspace(ProjectLocation projectLocation, int revisionNo) throws IOException, URISyntaxException { + public static int revertServerWorkspace(ProjectLocation projectLocation, int revisionNo)
+       throws IOException, URISyntaxException, JSONException {
         SPServerInfo serviceInfo = projectLocation.getServiceInfo();
         HttpClient httpClient = createHttpClient(serviceInfo);

         try {
- executeServerRequest(httpClient, projectLocation.getServiceInfo(), + JSONMessage message = executeServerRequest(httpClient, projectLocation.getServiceInfo(),
                     "/project/" + projectLocation.getUUID() + "/revert",
                     "revisionNo=" + revisionNo,
-                    new JSONResponseHandler());
+                    new JSONResponseHandler());
+            if (message.isSuccessful()) {
+ return new JSONObject(message.getBody()).getInt("currentRevision");
+            } else {
+                return -1;
+            }
         } finally {
             httpClient.getConnectionManager().shutdown();
         }
-
+
        }

-       public int getCurrentRevisionNo() {
+       public int getLocalRevisionNo() {
            return currentRevision;
        }

@@ -638,7 +646,7 @@
URI uri = getServerURI(projectLocation.getServiceInfo(), contextRelativePath,
                                                    "oldRevisionNo=" + 
currentRevision);
                                            HttpUriRequest request = new 
HttpGet(uri);
-
+
JSONMessage message = inboundHttpClient.execute(request, new JSONResponseHandler()); final JSONObject json = new JSONObject(message.getBody());
                         final String jsonArray = json.getString("data");
=======================================
--- /trunk/src/ca/sqlpower/architect/swingui/enterprise/RevisionListPanel.java Thu Feb 25 09:33:27 2010 +++ /trunk/src/ca/sqlpower/architect/swingui/enterprise/RevisionListPanel.java Thu Feb 25 15:27:51 2010
@@ -29,11 +29,14 @@
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JDialog;
 import javax.swing.JFormattedTextField;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import javax.swing.text.NumberFormatter;

 import org.apache.log4j.Logger;
@@ -49,6 +52,36 @@

 public class RevisionListPanel {

+    private class JLongField {
+
+        private JFormattedTextField field;
+
+        public JLongField() {
+ NumberFormatter f = new NumberFormatter(NumberFormat.getInstance());
+            f.setValueClass(Long.class);
+            f.setMinimum(new Long(0));
+            field = new JFormattedTextField(f);
+        }
+
+        public JLongField(long value) {
+            this();
+            setValue(value);
+        }
+
+        public void setValue(long value) {
+            field.setValue(new Long(value));
+        }
+
+        public long getValue() {
+            return ((Long) field.getValue()).longValue();
+        }
+
+        public JFormattedTextField getField() {
+            return field;
+        }
+
+    }
+
private static final Logger logger = Logger.getLogger(RevisionListPanel.class);

     private final Component dialogOwner;
@@ -59,42 +92,46 @@

     private final JPanel panel;

-    private JFormattedTextField fromVersion;
-    private JFormattedTextField toVersion;
+    private JLongField fromVersion;
+    private JLongField toVersion;
+    private int currentVersion;
+
+    private final Runnable autoRefresh;

     private final Action refreshAction = new AbstractAction("Refresh...") {
         public void actionPerformed(ActionEvent e) {
-            int currentVersion = session.getCurrentRevisionNo();
+
             String message = "ok";
-            boolean doRefresh = false;
-
-            long fromVersion = currentVersion - 100;
-            long toVersion = currentVersion;
-
-            try {
- fromVersion = ((Long) RevisionListPanel.this.fromVersion.getValue()).longValue(); - toVersion = ((Long) RevisionListPanel.this.toVersion.getValue()).longValue();
-
-                if (toVersion > currentVersion) {
- message = "Revisions up to " + toVersion + " cannot be shown " + - "because the current revision is only " + currentVersion;
-                } else if (fromVersion > toVersion) {
- message = "Cannot show revisions from a higher version to a lower version";
-                } else {
-                    doRefresh = true;
-                }
-            } catch (ClassCastException ex) {
- // This shoudn't happen because of the way the text field is formatted
-                message = "Input formatted invalidly";
- RevisionListPanel.this.fromVersion.setValue(new Long(fromVersion)); - RevisionListPanel.this.toVersion.setValue(new Long(toVersion));
-                doRefresh = true;
-            }
-            if (doRefresh) {
- revisionsTable.refreshRevisionsList(fromVersion, toVersion);
-                refreshPanel();
-            }
-            if (!message.equals("ok")) {
+
+            // revertAction updates the currentVersion
+            int difference = session.getLocalRevisionNo() - currentVersion;
+            if (e.getSource() != revertAction) {
+                if (difference > 0) {
+                    currentVersion += difference;
+ // If the end of the filter range was the previously most recent revision, + // update the filter range to the new current revision number. + if (toVersion.getValue() == currentVersion - difference) { + fromVersion.setValue(fromVersion.getValue() + difference);
+                        toVersion.setValue(currentVersion);
+                    }
+                } else if (e.getSource() == autoRefresh) {
+                    return;
+                }
+            }
+
+            if (!e.getActionCommand().equals("ignoreWarnings")) {
+                if (toVersion.getValue() > currentVersion) {
+ message = "Revisions up to " + toVersion.getValue() + " cannot be shown " + + "because the current revision is only " + currentVersion;
+                } else if (fromVersion.getValue() > toVersion.getValue()) {
+ message = "Cannot show revisions from a higher version to a lower version";
+                }
+            }
+
+            if (message.equals("ok")) {
+ revisionsTable.refreshRevisionsList(fromVersion.getValue(), toVersion.getValue());
+                refreshPanel();
+            } else {
                 JOptionPane.showMessageDialog(dialogOwner, message);
             }
         }
@@ -106,20 +143,24 @@
             int response = JOptionPane.showConfirmDialog(dialogOwner,
"Are you sure you would like to revert to version " + revisionNo,
                     "Revert...", JOptionPane.OK_CANCEL_OPTION);
-            if (response == JOptionPane.OK_OPTION) {
+            if (response == JOptionPane.OK_OPTION) {
                 try {
-                    session.revertServerWorkspace(revisionNo);
+ int currentVersion = session.revertServerWorkspace(revisionNo);
+                    if (currentVersion == -1) {
+ JOptionPane.showMessageDialog(dialogOwner, "The server did not revert" + + " because the target and current revisions are identical");
+                    } else {
+ RevisionListPanel.this.currentVersion = currentVersion; + long range = toVersion.getValue() - fromVersion.getValue();
+                        fromVersion.setValue(currentVersion - range);
+                        toVersion.setValue(currentVersion);
+ refreshAction.actionPerformed(new ActionEvent(this, 0, "ignoreWarnings"));
+                        int last = revisionsTable.getRowCount() - 1;
+ revisionsTable.getSelectionModel().setSelectionInterval(last, last);
+                    }
                 } catch (Throwable t) {
throw new RuntimeException("Error requesting server revert", t);
-                }
- // TODO make this wait for the client to update before refreshing
-                // Can't do it now because client is currently broken
-                int currentVersion = session.getCurrentRevisionNo();
-                fromVersion.setValue((long) currentVersion - 100);
-                toVersion.setValue((long) currentVersion);
-                refreshAction.actionPerformed(null);
-                int last = revisionsTable.getRowCount() - 1;
- revisionsTable.getSelectionModel().setSelectionInterval(last, last);
+                }
             }
         }
     };
@@ -138,20 +179,9 @@
                     d.dispose();
                 }
             };
-
-            long fromVersion;
-            long toVersion;
-            try {
- fromVersion = ((Long) RevisionListPanel.this.fromVersion.getValue()).longValue();
-            } catch (ClassCastException ex) {
- fromVersion = ((Integer) RevisionListPanel.this.fromVersion.getValue()).longValue();
-            }
-            try {
- toVersion = ((Long) RevisionListPanel.this.toVersion.getValue()).longValue();
-            } catch (ClassCastException ex) {
- toVersion = ((Integer) RevisionListPanel.this.toVersion.getValue()).longValue();
-            }
- CompareRevisionsPanel p = new CompareRevisionsPanel(session, closeAction, fromVersion, toVersion);
+
+ CompareRevisionsPanel p = new CompareRevisionsPanel(session, closeAction,
+                    fromVersion.getValue(), toVersion.getValue());
             d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
             d.setContentPane(p.getPanel());

@@ -173,16 +203,13 @@
                 "pref, 2dlu, default:grow"));


-        int currentRevision = session.getCurrentRevisionNo();
- NumberFormatter f = new NumberFormatter(NumberFormat.getInstance());
-        f.setValueClass(Long.class);
-        f.setMinimum(new Long(0));
-        fromVersion = new JFormattedTextField(f);
-        toVersion = new JFormattedTextField(f);
-        fromVersion.setValue(new Long(currentRevision - 100));
-        toVersion.setValue(new Long(currentRevision));
-
- revisionsTable = new RevisionsTable(this.session, currentRevision - 100, currentRevision);
+        int currentRevision = session.getLocalRevisionNo();
+        long from = currentRevision - 100;
+        if (from < 0) from = 0;
+        fromVersion = new JLongField(from);
+        toVersion = new JLongField(currentRevision);
+
+ revisionsTable = new RevisionsTable(this.session, from, currentRevision);
         revisionsTable.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
@@ -195,20 +222,43 @@
         builder.add(revisionsTable.getScrollPane(), cc.xy(1, 3));

DefaultFormBuilder textFieldBuilder = new DefaultFormBuilder(new FormLayout("pref, pref"));
-        textFieldBuilder.append(new JLabel("from version "), fromVersion);
-        textFieldBuilder.append(new JLabel("to version "), toVersion);
+ textFieldBuilder.append(new JLabel("from version "), fromVersion.getField()); + textFieldBuilder.append(new JLabel("to version "), toVersion.getField());

DefaultFormBuilder filterBuilder = new DefaultFormBuilder(new FormLayout("pref"));
-        filterBuilder.append(new JLabel("Display revisions "));
+        filterBuilder.append(new JLabel("Display revisions "));
         filterBuilder.append(textFieldBuilder.getPanel());
-
- DefaultFormBuilder buttonBarBuilder = new DefaultFormBuilder(new FormLayout("pref"));
+
+ final JCheckBox autoRefreshBox = new JCheckBox("Auto-refresh", false);
+        autoRefresh = new Runnable() {
+            public void run() {
+                while (autoRefreshBox.isSelected()) {
+ refreshAction.actionPerformed(new ActionEvent(this, 0, "ignoreWarnings"));
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException ex) {
+                        break;
+                    }
+                }
+            }
+        };
+        autoRefreshBox.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                new Thread(autoRefresh).start();
+            }
+        });
+        autoRefreshBox.setSelected(true);
+
+ DefaultFormBuilder buttonBarBuilder = new DefaultFormBuilder(new FormLayout("pref"));
+        buttonBarBuilder.append(filterBuilder.getPanel());
+        buttonBarBuilder.append(new JLabel("\n"));
         buttonBarBuilder.append(new JButton(refreshAction));
         buttonBarBuilder.append(new JButton(revertAction));
         buttonBarBuilder.append(new JButton(openAction));
         buttonBarBuilder.append(new JButton(compareAction));
-        buttonBarBuilder.append(new JButton(closeAction));
-        buttonBarBuilder.append(filterBuilder.getPanel());
+        buttonBarBuilder.append(new JButton(closeAction));
+        buttonBarBuilder.append(autoRefreshBox);
+
         builder.add(buttonBarBuilder.getPanel(), cc.xy(3, 3));
         builder.setDefaultDialogBorder();

Reply via email to