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