blob: 941d762879bc075d7b2dbe712a3e4665d42c5f40 [file] [log] [blame]
// Copyright (C) 2008 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.Gerrit;
import com.google.gerrit.client.changes.ChangeTable.ApprovalViewType;
import com.google.gerrit.client.rpc.ScreenLoadCallback;
import com.google.gerrit.client.ui.Hyperlink;
import com.google.gerrit.client.ui.Screen;
import com.google.gerrit.common.data.ChangeInfo;
import com.google.gerrit.common.data.SingleListChangeInfo;
import com.google.gerrit.reviewdb.AccountGeneralPreferences;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwtexpui.globalkey.client.KeyCommand;
import java.util.List;
public abstract class AllSingleListScreen extends Screen {
protected static final String MIN_SORTKEY = "";
protected static final String MAX_SORTKEY = "z";
protected final int pageSize;
private ChangeTable table;
private ChangeTable.Section section;
protected Hyperlink prev;
protected Hyperlink next;
protected List<ChangeInfo> changes;
protected final String anchorPrefix;
protected boolean useLoadPrev;
protected String pos;
protected AllSingleListScreen(final String anchorToken,
final String positionToken) {
anchorPrefix = anchorToken;
useLoadPrev = positionToken.startsWith("p,");
pos = positionToken.substring(2);
if (Gerrit.isSignedIn()) {
final AccountGeneralPreferences p =
Gerrit.getUserAccount().getGeneralPreferences();
final short m = p.getMaximumPageSize();
pageSize = 0 < m ? m : AccountGeneralPreferences.DEFAULT_PAGESIZE;
} else {
pageSize = AccountGeneralPreferences.DEFAULT_PAGESIZE;
}
}
@Override
protected void onInitUI() {
super.onInitUI();
prev = new Hyperlink(Util.C.pagedChangeListPrev(), true, "");
prev.setVisible(false);
next = new Hyperlink(Util.C.pagedChangeListNext(), true, "");
next.setVisible(false);
table = new ChangeTable(true) {
{
keysNavigation.add(new DoLinkCommand(0, 'p', Util.C
.changeTablePagePrev(), prev));
keysNavigation.add(new DoLinkCommand(0, 'n', Util.C
.changeTablePageNext(), next));
}
};
section = new ChangeTable.Section(null, ApprovalViewType.STRONGEST, null);
table.addSection(section);
table.setSavePointerId(anchorPrefix);
add(table);
final HorizontalPanel buttons = new HorizontalPanel();
buttons.setStyleName(Gerrit.RESOURCES.css().changeTablePrevNextLinks());
buttons.add(prev);
buttons.add(next);
add(buttons);
}
@Override
protected void onLoad() {
super.onLoad();
if (useLoadPrev) {
loadPrev();
} else {
loadNext();
}
}
@Override
public void registerKeys() {
super.registerKeys();
table.setRegisterKeys(true);
}
protected abstract void loadPrev();
protected abstract void loadNext();
protected AsyncCallback<SingleListChangeInfo> loadCallback() {
return new ScreenLoadCallback<SingleListChangeInfo>(this) {
@Override
protected void preDisplay(final SingleListChangeInfo result) {
display(result);
}
};
}
protected void display(final SingleListChangeInfo result) {
changes = result.getChanges();
if (!changes.isEmpty()) {
final ChangeInfo f = changes.get(0);
final ChangeInfo l = changes.get(changes.size() - 1);
prev.setTargetHistoryToken(anchorPrefix + ",p," + f.getSortKey());
next.setTargetHistoryToken(anchorPrefix + ",n," + l.getSortKey());
if (useLoadPrev) {
prev.setVisible(!result.isAtEnd());
next.setVisible(!MIN_SORTKEY.equals(pos));
} else {
prev.setVisible(!MAX_SORTKEY.equals(pos));
next.setVisible(!result.isAtEnd());
}
}
table.setAccountInfoCache(result.getAccounts());
section.display(result.getChanges());
table.finishDisplay();
}
private static final class DoLinkCommand extends KeyCommand {
private final Hyperlink link;
private DoLinkCommand(int mask, char key, String help, Hyperlink l) {
super(mask, key, help);
link = l;
}
@Override
public void onKeyPress(final KeyPressEvent event) {
if (link.isVisible()) {
History.newItem(link.getTargetHistoryToken());
}
}
}
}