summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid Code Review <code-review@android.com>2009-10-03 11:40:07 -0700
committerAndroid Code Review <code-review@android.com>2009-10-03 11:40:07 -0700
commitfb4e700f379400e38efd2128fec8761fd699737a (patch)
treefdc0be64a5248b7bf12fcceb3956c861983a38ed
parentdb9f9a046f57deae46e41a43ae5e9fca4314e331 (diff)
parentea13baa0e4dc24958a77c222a3b4ea9a91d21cb6 (diff)
Merge change I574b992d
* changes: Adding support to list merged and abandoned changes for a project.
-rw-r--r--src/main/java/com/google/gerrit/client/Link.java34
-rw-r--r--src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java5
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ByProjectAbandonedChangesScreen.java47
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ByProjectMergedChangesScreen.java47
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java4
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ChangeListService.java16
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ChangeMessages.java2
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ChangeMessages.properties2
-rw-r--r--src/main/java/com/google/gerrit/client/changes/ChangeTable.java4
-rw-r--r--src/main/java/com/google/gerrit/client/reviewdb/ChangeAccess.java10
-rw-r--r--src/main/java/com/google/gerrit/client/ui/ProjectLink.java (renamed from src/main/java/com/google/gerrit/client/ui/ProjectOpenLink.java)30
-rw-r--r--src/main/java/com/google/gerrit/server/rpc/ChangeListServiceImpl.java26
12 files changed, 212 insertions, 15 deletions
diff --git a/src/main/java/com/google/gerrit/client/Link.java b/src/main/java/com/google/gerrit/client/Link.java
index 4d333eacec..d5fda50a01 100644
--- a/src/main/java/com/google/gerrit/client/Link.java
+++ b/src/main/java/com/google/gerrit/client/Link.java
@@ -28,6 +28,8 @@ import com.google.gerrit.client.changes.AccountDashboardScreen;
import com.google.gerrit.client.changes.AllAbandonedChangesScreen;
import com.google.gerrit.client.changes.AllMergedChangesScreen;
import com.google.gerrit.client.changes.AllOpenChangesScreen;
+import com.google.gerrit.client.changes.ByProjectAbandonedChangesScreen;
+import com.google.gerrit.client.changes.ByProjectMergedChangesScreen;
import com.google.gerrit.client.changes.ByProjectOpenChangesScreen;
import com.google.gerrit.client.changes.ChangeQueryResultsScreen;
import com.google.gerrit.client.changes.ChangeScreen;
@@ -43,6 +45,7 @@ import com.google.gerrit.client.reviewdb.Change;
import com.google.gerrit.client.reviewdb.Patch;
import com.google.gerrit.client.reviewdb.PatchSet;
import com.google.gerrit.client.reviewdb.Project;
+import com.google.gerrit.client.reviewdb.Change.Status;
import com.google.gerrit.client.ui.Screen;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
@@ -108,8 +111,19 @@ public class Link implements ValueChangeHandler<String> {
return "admin,project," + n.toString() + "," + tab;
}
- public static String toProjectOpen(final Project.NameKey proj) {
- return "project,open," + proj.toString() + ",n,z";
+ public static String toProject(final Project.NameKey proj, Status status) {
+ switch (status) {
+ case ABANDONED:
+ return "project,abandoned," + proj.toString() + ",n,z";
+
+ case MERGED:
+ return "project,merged," + proj.toString() + ",n,z";
+
+ case NEW:
+ case SUBMITTED:
+ default:
+ return "project,open," + proj.toString() + ",n,z";
+ }
}
public static String toChangeQuery(final String query) {
@@ -195,6 +209,22 @@ public class Link implements ValueChangeHandler<String> {
return new ByProjectOpenChangesScreen(Project.NameKey.parse(s
.substring(0, c)), s.substring(c + 1));
}
+
+ p = "project,merged,";
+ if (token.startsWith(p)) {
+ final String s = skip(p, token);
+ final int c = s.indexOf(',');
+ return new ByProjectMergedChangesScreen(Project.NameKey.parse(s
+ .substring(0, c)), s.substring(c + 1));
+ }
+
+ p = "project,abandoned,";
+ if (token.startsWith(p)) {
+ final String s = skip(p, token);
+ final int c = s.indexOf(',');
+ return new ByProjectAbandonedChangesScreen(Project.NameKey.parse(s
+ .substring(0, c)), s.substring(c + 1));
+ }
}
if (token.startsWith("patch,")) {
diff --git a/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java b/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java
index 0409cff3ea..aa45522cf8 100644
--- a/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java
+++ b/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java
@@ -15,10 +15,11 @@
package com.google.gerrit.client.account;
import com.google.gerrit.client.reviewdb.AccountProjectWatch;
+import com.google.gerrit.client.reviewdb.Change.Status;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.ui.FancyFlexTable;
import com.google.gerrit.client.ui.ProjectNameSuggestOracle;
-import com.google.gerrit.client.ui.ProjectOpenLink;
+import com.google.gerrit.client.ui.ProjectLink;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
@@ -222,7 +223,7 @@ class ProjectWatchPanel extends Composite {
void populate(final int row, final AccountProjectWatchInfo k) {
table.setWidget(row, 1, new CheckBox());
- table.setWidget(row, 2, new ProjectOpenLink(k.getProject().getNameKey()));
+ table.setWidget(row, 2, new ProjectLink(k.getProject().getNameKey(), Status.NEW));
{
final CheckBox notifyNewChanges = new CheckBox();
notifyNewChanges.addClickHandler(new ClickHandler() {
diff --git a/src/main/java/com/google/gerrit/client/changes/ByProjectAbandonedChangesScreen.java b/src/main/java/com/google/gerrit/client/changes/ByProjectAbandonedChangesScreen.java
new file mode 100644
index 0000000000..c72beccea8
--- /dev/null
+++ b/src/main/java/com/google/gerrit/client/changes/ByProjectAbandonedChangesScreen.java
@@ -0,0 +1,47 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.client.changes;
+
+import com.google.gerrit.client.reviewdb.Change;
+import com.google.gerrit.client.reviewdb.Project;
+
+
+public class ByProjectAbandonedChangesScreen extends AllSingleListScreen {
+ private final Project.NameKey projectKey;
+
+ public ByProjectAbandonedChangesScreen(final Project.NameKey proj,
+ final String positionToken) {
+ super("project,abandoned," + proj.toString(), positionToken);
+ projectKey = proj;
+ }
+
+ @Override
+ protected void onInitUI() {
+ super.onInitUI();
+ setPageTitle(Util.M.changesAbandonedInProject(projectKey.get()));
+ }
+
+ @Override
+ protected void loadPrev() {
+ Util.LIST_SVC.byProjectClosedPrev(projectKey, Change.Status.ABANDONED, pos,
+ pageSize, loadCallback());
+ }
+
+ @Override
+ protected void loadNext() {
+ Util.LIST_SVC.byProjectClosedNext(projectKey, Change.Status.ABANDONED, pos,
+ pageSize, loadCallback());
+ }
+}
diff --git a/src/main/java/com/google/gerrit/client/changes/ByProjectMergedChangesScreen.java b/src/main/java/com/google/gerrit/client/changes/ByProjectMergedChangesScreen.java
new file mode 100644
index 0000000000..db8cb379dc
--- /dev/null
+++ b/src/main/java/com/google/gerrit/client/changes/ByProjectMergedChangesScreen.java
@@ -0,0 +1,47 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.client.changes;
+
+import com.google.gerrit.client.reviewdb.Change;
+import com.google.gerrit.client.reviewdb.Project;
+
+
+public class ByProjectMergedChangesScreen extends AllSingleListScreen {
+ private final Project.NameKey projectKey;
+
+ public ByProjectMergedChangesScreen(final Project.NameKey proj,
+ final String positionToken) {
+ super("project,merged," + proj.toString(), positionToken);
+ projectKey = proj;
+ }
+
+ @Override
+ protected void onInitUI() {
+ super.onInitUI();
+ setPageTitle(Util.M.changesMergedInProject(projectKey.get()));
+ }
+
+ @Override
+ protected void loadPrev() {
+ Util.LIST_SVC.byProjectClosedPrev(projectKey, Change.Status.MERGED, pos,
+ pageSize, loadCallback());
+ }
+
+ @Override
+ protected void loadNext() {
+ Util.LIST_SVC.byProjectClosedNext(projectKey, Change.Status.MERGED, pos,
+ pageSize, loadCallback());
+ }
+}
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java b/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
index 803ecf5230..a1d08cf85b 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeInfoBlock.java
@@ -21,7 +21,7 @@ import com.google.gerrit.client.reviewdb.Branch;
import com.google.gerrit.client.reviewdb.Change;
import com.google.gerrit.client.ui.AccountDashboardLink;
import com.google.gerrit.client.ui.ChangeLink;
-import com.google.gerrit.client.ui.ProjectOpenLink;
+import com.google.gerrit.client.ui.ProjectLink;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Grid;
@@ -74,7 +74,7 @@ public class ChangeInfoBlock extends Composite {
final Branch.NameKey dst = chg.getDest();
table.setText(R_CHANGE_ID, 1, chg.getKey().get());
table.setWidget(R_OWNER, 1, AccountDashboardLink.link(acc, chg.getOwner()));
- table.setWidget(R_PROJECT, 1, new ProjectOpenLink(chg.getProject()));
+ table.setWidget(R_PROJECT, 1, new ProjectLink(chg.getProject(), chg.getStatus()));
table.setText(R_BRANCH, 1, dst.getShortName());
table.setText(R_UPLOADED, 1, mediumFormat(chg.getCreatedOn()));
table.setText(R_UPDATED, 1, mediumFormat(chg.getLastUpdatedOn()));
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeListService.java b/src/main/java/com/google/gerrit/client/changes/ChangeListService.java
index 679ec2be98..e5f2668e5e 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeListService.java
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeListService.java
@@ -43,6 +43,20 @@ public interface ChangeListService extends RemoteJsonService {
void byProjectOpenNext(Project.NameKey project, String pos, int limit,
AsyncCallback<SingleListChangeInfo> callback);
+ /**
+ * Get all closed changes with same status, more recent than pos, fetching at
+ * most limit rows.
+ */
+ void byProjectClosedPrev(Project.NameKey project, Change.Status status,
+ String pos, int limit, AsyncCallback<SingleListChangeInfo> callback);
+
+ /**
+ * Get all closed changes with same status, older than pos, fetching at most
+ * limit rows.
+ */
+ void byProjectClosedNext(Project.NameKey project, Change.Status status,
+ String pos, int limit, AsyncCallback<SingleListChangeInfo> callback);
+
/** Get all closed changes more recent than pos, fetching at most limit rows. */
void allClosedPrev(Change.Status status, String pos, int limit,
AsyncCallback<SingleListChangeInfo> callback);
@@ -76,7 +90,7 @@ public interface ChangeListService extends RemoteJsonService {
/**
* Add and/or remove changes from the set of starred changes of the caller.
- *
+ *
* @param req the add and remove cluster.
*/
@SignInRequired
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeMessages.java b/src/main/java/com/google/gerrit/client/changes/ChangeMessages.java
index 7ed96b794f..26ffe36a36 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeMessages.java
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeMessages.java
@@ -21,6 +21,8 @@ public interface ChangeMessages extends Messages {
String changesStartedBy(String fullName);
String changesReviewableBy(String fullName);
String changesOpenInProject(String string);
+ String changesMergedInProject(String string);
+ String changesAbandonedInProject(String string);
String changeScreenTitleId(String changeId);
String patchSetHeader(int id);
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeMessages.properties b/src/main/java/com/google/gerrit/client/changes/ChangeMessages.properties
index 7913607927..8f3def15be 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeMessages.properties
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeMessages.properties
@@ -2,6 +2,8 @@ accountDashboardTitle = Code Review Dashboard for {0}
changesStartedBy = Started by {0}
changesReviewableBy = Reviewable by {0}
changesOpenInProject = Open Changes In {0}
+changesMergedInProject = Merged Changes In {0}
+changesAbandonedInProject = Abandoned Changes In {0}
changeScreenTitleId = Change {0}
patchSetHeader = Patch Set {0}
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeTable.java b/src/main/java/com/google/gerrit/client/changes/ChangeTable.java
index 3b80e6267a..664f1ade39 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeTable.java
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeTable.java
@@ -36,7 +36,7 @@ import com.google.gerrit.client.ui.AccountDashboardLink;
import com.google.gerrit.client.ui.ChangeLink;
import com.google.gerrit.client.ui.NavigationTable;
import com.google.gerrit.client.ui.NeedsSignInKeyCommand;
-import com.google.gerrit.client.ui.ProjectOpenLink;
+import com.google.gerrit.client.ui.ProjectLink;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
@@ -233,7 +233,7 @@ public class ChangeTable extends NavigationTable<ChangeInfo> {
table.setWidget(row, C_SUBJECT, new TableChangeLink(s, c));
table.setWidget(row, C_OWNER, link(c.getOwner()));
table.setWidget(row, C_PROJECT,
- new ProjectOpenLink(c.getProject().getKey()));
+ new ProjectLink(c.getProject().getKey(), c.getStatus()));
table.setText(row, C_BRANCH, c.getBranch());
table.setText(row, C_LAST_UPDATE, shortFormat(c.getLastUpdatedOn()));
setRowItem(row, c);
diff --git a/src/main/java/com/google/gerrit/client/reviewdb/ChangeAccess.java b/src/main/java/com/google/gerrit/client/reviewdb/ChangeAccess.java
index 7fe81371c3..97bed628d1 100644
--- a/src/main/java/com/google/gerrit/client/reviewdb/ChangeAccess.java
+++ b/src/main/java/com/google/gerrit/client/reviewdb/ChangeAccess.java
@@ -70,6 +70,16 @@ public interface ChangeAccess extends Access<Change, Change.Id> {
ResultSet<Change> byProjectOpenNext(Project.NameKey p, String sortKey,
int limit) throws OrmException;
+ @Query("WHERE open = false AND status = ? AND dest.projectName = ? AND sortKey > ?"
+ + " ORDER BY sortKey LIMIT ?")
+ ResultSet<Change> byProjectClosedPrev(char status, Project.NameKey p,
+ String sortKey, int limit) throws OrmException;
+
+ @Query("WHERE open = false AND status = ? AND dest.projectName = ? AND sortKey < ?"
+ + " ORDER BY sortKey DESC LIMIT ?")
+ ResultSet<Change> byProjectClosedNext(char status, Project.NameKey p,
+ String sortKey, int limit) throws OrmException;
+
@Query("WHERE open = false AND status = ? AND sortKey > ? ORDER BY sortKey LIMIT ?")
ResultSet<Change> allClosedPrev(char status, String sortKey, int limit)
throws OrmException;
diff --git a/src/main/java/com/google/gerrit/client/ui/ProjectOpenLink.java b/src/main/java/com/google/gerrit/client/ui/ProjectLink.java
index 1d3e214269..d743c5f65f 100644
--- a/src/main/java/com/google/gerrit/client/ui/ProjectOpenLink.java
+++ b/src/main/java/com/google/gerrit/client/ui/ProjectLink.java
@@ -15,24 +15,42 @@
package com.google.gerrit.client.ui;
import com.google.gerrit.client.Link;
+import com.google.gerrit.client.changes.ByProjectAbandonedChangesScreen;
+import com.google.gerrit.client.changes.ByProjectMergedChangesScreen;
import com.google.gerrit.client.changes.ByProjectOpenChangesScreen;
+import com.google.gerrit.client.reviewdb.Change;
import com.google.gerrit.client.reviewdb.Project;
+import com.google.gerrit.client.reviewdb.Change.Status;
/** Link to the open changes of a project. */
-public class ProjectOpenLink extends DirectScreenLink {
+public class ProjectLink extends DirectScreenLink {
private Project.NameKey project;
+ private Status status;
- public ProjectOpenLink(final Project.NameKey proj) {
- this(proj.get(), proj);
+ public ProjectLink(final Project.NameKey proj, Change.Status stat) {
+ this(proj.get(), proj, stat);
}
- public ProjectOpenLink(final String text, final Project.NameKey proj) {
- super(text, Link.toProjectOpen(proj));
+ public ProjectLink(final String text, final Project.NameKey proj,
+ Change.Status stat) {
+ super(text, Link.toProject(proj, stat));
+ status = stat;
project = proj;
}
@Override
protected Screen createScreen() {
- return new ByProjectOpenChangesScreen(project, "n,z");
+ switch (status) {
+ case ABANDONED:
+ return new ByProjectAbandonedChangesScreen(project, "n,z");
+
+ case MERGED:
+ return new ByProjectMergedChangesScreen(project, "n,z");
+
+ case NEW:
+ case SUBMITTED:
+ default:
+ return new ByProjectOpenChangesScreen(project, "n,z");
+ }
}
}
diff --git a/src/main/java/com/google/gerrit/server/rpc/ChangeListServiceImpl.java b/src/main/java/com/google/gerrit/server/rpc/ChangeListServiceImpl.java
index fe5c30d9d8..88b5224cf2 100644
--- a/src/main/java/com/google/gerrit/server/rpc/ChangeListServiceImpl.java
+++ b/src/main/java/com/google/gerrit/server/rpc/ChangeListServiceImpl.java
@@ -154,6 +154,32 @@ public class ChangeListServiceImpl extends BaseServiceImplementation implements
});
}
+ public void byProjectClosedPrev(final Project.NameKey project,
+ final Change.Status s, final String pos, final int pageSize,
+ final AsyncCallback<SingleListChangeInfo> callback) {
+ run(callback, new QueryPrev(pageSize, pos) {
+ @Override
+ ResultSet<Change> query(ReviewDb db, int slim, String sortKey)
+ throws OrmException {
+ return db.changes().byProjectClosedPrev(s.getCode(), project, sortKey,
+ slim);
+ }
+ });
+ }
+
+ public void byProjectClosedNext(final Project.NameKey project,
+ final Change.Status s, final String pos, final int pageSize,
+ final AsyncCallback<SingleListChangeInfo> callback) {
+ run(callback, new QueryNext(pageSize, pos) {
+ @Override
+ ResultSet<Change> query(ReviewDb db, int slim, String sortKey)
+ throws OrmException {
+ return db.changes().byProjectClosedNext(s.getCode(), project, sortKey,
+ slim);
+ }
+ });
+ }
+
public void allClosedPrev(final Change.Status s, final String pos,
final int pageSize, final AsyncCallback<SingleListChangeInfo> callback) {
run(callback, new QueryPrev(pageSize, pos) {