diff options
author | Android Code Review <code-review@android.com> | 2009-10-03 11:40:07 -0700 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2009-10-03 11:40:07 -0700 |
commit | fb4e700f379400e38efd2128fec8761fd699737a (patch) | |
tree | fdc0be64a5248b7bf12fcceb3956c861983a38ed | |
parent | db9f9a046f57deae46e41a43ae5e9fca4314e331 (diff) | |
parent | ea13baa0e4dc24958a77c222a3b4ea9a91d21cb6 (diff) |
Merge change I574b992d
* changes:
Adding support to list merged and abandoned changes for a project.
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) { |