Merge "Create a ChangeCache for ChangeDetails in ChangeScreen"

This commit is contained in:
Edwin Kempin
2012-03-08 01:10:02 -08:00
committed by gerrit code review
3 changed files with 135 additions and 20 deletions

View File

@@ -0,0 +1,53 @@
// Copyright (C) 2012 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.reviewdb.Change;
import java.util.HashMap;
import java.util.Map;
/** A Cache to store common client side data by change */
public class ChangeCache {
private static Map<Change.Id, ChangeCache> caches =
new HashMap<Change.Id, ChangeCache>();
public static ChangeCache get(Change.Id chg) {
ChangeCache cache = caches.get(chg);
if (cache == null) {
cache = new ChangeCache(chg);
caches.put(chg, cache);
}
return cache;
}
private Change.Id changeId;
private ChangeDetailCache detail;
protected ChangeCache(Change.Id chg) {
changeId = chg;
}
public Change.Id getChangeId() {
return changeId;
}
public ChangeDetailCache getChangeDetailCache() {
if (detail == null) {
detail = new ChangeDetailCache(changeId);
}
return detail;
}
}

View File

@@ -0,0 +1,57 @@
// Copyright (C) 2012 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.ui.ListenableValue;
import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.reviewdb.Change;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class ChangeDetailCache extends ListenableValue<ChangeDetail> {
public static class GerritCallback extends
com.google.gerrit.client.rpc.GerritCallback<ChangeDetail> {
@Override
public void onSuccess(ChangeDetail detail) {
setChangeDetail(detail);
}
}
public static class IgnoreErrorCallback implements AsyncCallback<ChangeDetail> {
@Override
public void onSuccess(ChangeDetail detail) {
setChangeDetail(detail);
}
@Override
public void onFailure(Throwable caught) {
}
}
public static void setChangeDetail(ChangeDetail detail) {
Change.Id chgId = detail.getChange().getId();
ChangeCache.get(chgId).getChangeDetailCache().set(detail);
}
private final Change.Id changeId;
public ChangeDetailCache(final Change.Id chg) {
changeId = chg;
}
public void refresh() {
Util.DETAIL_SVC.changeDetail(changeId, new GerritCallback());
}
}

View File

@@ -17,7 +17,6 @@ package com.google.gerrit.client.changes;
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.rpc.ScreenLoadCallback;
import com.google.gerrit.client.ui.CommentPanel;
import com.google.gerrit.client.ui.ComplexDisclosurePanel;
import com.google.gerrit.client.ui.ExpandAllCommand;
@@ -39,6 +38,8 @@ import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.user.client.ui.DisclosurePanel;
@@ -59,9 +60,11 @@ import java.sql.Timestamp;
import java.util.List;
public class ChangeScreen extends Screen {
public class ChangeScreen extends Screen
implements ValueChangeHandler<ChangeDetail> {
private final Change.Id changeId;
private final PatchSet.Id openPatchSetId;
private ChangeDetailCache detailCache;
private Image starChange;
private boolean starred;
@@ -130,7 +133,7 @@ public class ChangeScreen extends Screen {
@Override
protected void onLoad() {
super.onLoad();
refresh();
detailCache.refresh();
}
@Override
@@ -156,21 +159,6 @@ public class ChangeScreen extends Screen {
}
}
public void refresh() {
Util.DETAIL_SVC.changeDetail(changeId,
new ScreenLoadCallback<ChangeDetail>(this) {
@Override
protected void preDisplay(final ChangeDetail r) {
display(r);
}
@Override
protected void postDisplay() {
patchSetsBlock.setRegisterKeys(true);
}
});
}
private void setStarred(final boolean s) {
if (s) {
starChange.setResource(Gerrit.RESOURCES.starFilled());
@@ -183,6 +171,12 @@ public class ChangeScreen extends Screen {
@Override
protected void onInitUI() {
super.onInitUI();
ChangeCache cache = ChangeCache.get(changeId);
detailCache = cache.getChangeDetailCache();
detailCache.addValueChangeHandler(this);
addStyleName(Gerrit.RESOURCES.css().changeScreen());
keysNavigation = new KeyCommandSet(Gerrit.C.sectionNavigation());
@@ -283,9 +277,15 @@ public class ChangeScreen extends Screen {
setPageTitle(titleBuf.toString());
}
@Override
public void onValueChange(ValueChangeEvent<ChangeDetail> event) {
if (isAttached()) {
display(event.getValue());
}
}
void update(final ChangeDetail detail) {
display(detail);
patchSetsBlock.setRegisterKeys(true);
detailCache.set(detail);
}
private void display(final ChangeDetail detail) {
@@ -352,6 +352,11 @@ public class ChangeScreen extends Screen {
dependenciesPanel.getHeader().add(new InlineLabel(
Util.M.outdatedHeader(outdated)));
}
if (!isCurrentView()) {
display();
}
patchSetsBlock.setRegisterKeys(true);
}
private void addComments(final ChangeDetail detail) {