Add the default context preference to user accounts
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -22,6 +22,7 @@ public interface AccountConstants extends Constants {
|
||||
String fullName();
|
||||
String preferredEmail();
|
||||
String registeredOn();
|
||||
String defaultContext();
|
||||
|
||||
String tabPreferences();
|
||||
String tabSshKeys();
|
||||
|
@@ -3,6 +3,7 @@ accountSettingsHeading = Account Settings
|
||||
fullName = Full Name
|
||||
preferredEmail = Email Address
|
||||
registeredOn = Registered
|
||||
defaultContext = Default Context
|
||||
|
||||
tabPreferences = Preferences
|
||||
tabSshKeys = SSH Keys
|
||||
|
@@ -0,0 +1,21 @@
|
||||
// Copyright 2008 Google Inc.
|
||||
//
|
||||
// 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.account;
|
||||
|
||||
import com.google.gwt.i18n.client.Messages;
|
||||
|
||||
public interface AccountMessages extends Messages {
|
||||
String lines(short cnt);
|
||||
}
|
@@ -0,0 +1 @@
|
||||
lines = {0} lines
|
@@ -15,16 +15,15 @@
|
||||
package com.google.gerrit.client.account;
|
||||
|
||||
import com.google.gerrit.client.reviewdb.Account;
|
||||
import com.google.gerrit.client.reviewdb.AccountSshKey;
|
||||
import com.google.gerrit.client.rpc.SignInRequired;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwtjsonrpc.client.RemoteJsonService;
|
||||
import com.google.gwtjsonrpc.client.VoidResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public interface AccountService extends RemoteJsonService {
|
||||
@SignInRequired
|
||||
void myAccount(AsyncCallback<Account> callback);
|
||||
|
||||
@SignInRequired
|
||||
void changeDefaultContext(short newSetting, AsyncCallback<VoidResult> callback);
|
||||
}
|
||||
|
@@ -19,9 +19,12 @@ import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||
import com.google.gerrit.client.rpc.BaseServiceImplementation;
|
||||
import com.google.gerrit.client.rpc.RpcUtil;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwtjsonrpc.client.VoidResult;
|
||||
import com.google.gwtorm.client.OrmException;
|
||||
import com.google.gwtorm.client.SchemaFactory;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class AccountServiceImpl extends BaseServiceImplementation implements
|
||||
AccountService {
|
||||
public AccountServiceImpl(final SchemaFactory<ReviewDb> rdf) {
|
||||
@@ -35,4 +38,16 @@ public class AccountServiceImpl extends BaseServiceImplementation implements
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void changeDefaultContext(final short newSetting,
|
||||
final AsyncCallback<VoidResult> callback) {
|
||||
run(callback, new Action<VoidResult>() {
|
||||
public VoidResult run(final ReviewDb db) throws OrmException {
|
||||
final Account a = db.accounts().get(RpcUtil.getAccountId());
|
||||
a.setDefaultContext(newSetting);
|
||||
db.accounts().update(Collections.singleton(a));
|
||||
return VoidResult.INSTANCE;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -14,11 +14,13 @@
|
||||
|
||||
package com.google.gerrit.client.account;
|
||||
|
||||
import com.google.gerrit.client.FormatUtil;
|
||||
import static com.google.gerrit.client.FormatUtil.mediumFormat;
|
||||
|
||||
import com.google.gerrit.client.Gerrit;
|
||||
import com.google.gerrit.client.reviewdb.Account;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gerrit.client.ui.AccountScreen;
|
||||
import com.google.gwt.i18n.client.LocaleInfo;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
@@ -27,17 +29,26 @@ import com.google.gwt.user.client.ui.TabPanel;
|
||||
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
|
||||
|
||||
public class AccountSettings extends AccountScreen {
|
||||
private final int labelIdx, fieldIdx;
|
||||
private final Grid info;
|
||||
|
||||
private TabPanel tabs;
|
||||
|
||||
private Panel prefsPanel;
|
||||
private PreferencePanel prefsPanel;
|
||||
private Panel agreementsPanel;
|
||||
private SshKeyPanel keysPanel;
|
||||
|
||||
public AccountSettings() {
|
||||
super(Util.C.accountSettingsHeading());
|
||||
|
||||
if (LocaleInfo.getCurrentLocale().isRTL()) {
|
||||
labelIdx = 1;
|
||||
fieldIdx = 0;
|
||||
} else {
|
||||
labelIdx = 0;
|
||||
fieldIdx = 1;
|
||||
}
|
||||
|
||||
info = new Grid(3, 2);
|
||||
info.setStyleName("gerrit-InfoBlock");
|
||||
info.addStyleName("gerrit-AccountInfoBlock");
|
||||
@@ -52,9 +63,7 @@ public class AccountSettings extends AccountScreen {
|
||||
fmt.addStyleName(0, 1, "topmost");
|
||||
fmt.addStyleName(2, 0, "bottomheader");
|
||||
|
||||
prefsPanel = new FlowPanel();
|
||||
prefsPanel.add(new Label("Not Implemented"));
|
||||
|
||||
prefsPanel = new PreferencePanel();
|
||||
keysPanel = new SshKeyPanel();
|
||||
|
||||
agreementsPanel = new FlowPanel();
|
||||
@@ -76,7 +85,7 @@ public class AccountSettings extends AccountScreen {
|
||||
}
|
||||
|
||||
private void infoRow(final int row, final String name) {
|
||||
info.setText(row, 0, name);
|
||||
info.setText(row, labelIdx, name);
|
||||
info.getCellFormatter().addStyleName(row, 0, "header");
|
||||
}
|
||||
|
||||
@@ -98,8 +107,9 @@ public class AccountSettings extends AccountScreen {
|
||||
}
|
||||
|
||||
void display(final Account account) {
|
||||
info.setText(0, 1, account.getFullName());
|
||||
info.setText(1, 1, account.getPreferredEmail());
|
||||
info.setText(2, 1, FormatUtil.mediumFormat(account.getRegisteredOn()));
|
||||
info.setText(0, fieldIdx, account.getFullName());
|
||||
info.setText(1, fieldIdx, account.getPreferredEmail());
|
||||
info.setText(2, fieldIdx, mediumFormat(account.getRegisteredOn()));
|
||||
prefsPanel.display(account);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,100 @@
|
||||
// Copyright 2008 Google Inc.
|
||||
//
|
||||
// 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.account;
|
||||
|
||||
import com.google.gerrit.client.Gerrit;
|
||||
import com.google.gerrit.client.reviewdb.Account;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gwt.i18n.client.LocaleInfo;
|
||||
import com.google.gwt.user.client.ui.ChangeListener;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtjsonrpc.client.VoidResult;
|
||||
|
||||
public class PreferencePanel extends Composite {
|
||||
private ListBox defaultContext;
|
||||
private short oldDefaultContext;
|
||||
|
||||
public PreferencePanel() {
|
||||
final FlowPanel body = new FlowPanel();
|
||||
|
||||
defaultContext = new ListBox();
|
||||
for (final short v : Account.CONTEXT_CHOICES) {
|
||||
defaultContext.addItem(Util.M.lines(v), String.valueOf(v));
|
||||
}
|
||||
defaultContext.addChangeListener(new ChangeListener() {
|
||||
public void onChange(Widget sender) {
|
||||
final int idx = defaultContext.getSelectedIndex();
|
||||
if (idx < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
final short newLines = Short.parseShort(defaultContext.getValue(idx));
|
||||
if (newLines == oldDefaultContext) {
|
||||
return;
|
||||
}
|
||||
|
||||
Util.ACCOUNT_SVC.changeDefaultContext(newLines,
|
||||
new GerritCallback<VoidResult>() {
|
||||
public void onSuccess(final VoidResult result) {
|
||||
oldDefaultContext = newLines;
|
||||
Gerrit.getUserAccount().setDefaultContext(newLines);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(final Throwable caught) {
|
||||
setDefaultContext(oldDefaultContext);
|
||||
super.onFailure(caught);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
final int labelIdx, fieldIdx;
|
||||
if (LocaleInfo.getCurrentLocale().isRTL()) {
|
||||
labelIdx = 1;
|
||||
fieldIdx = 0;
|
||||
} else {
|
||||
labelIdx = 0;
|
||||
fieldIdx = 1;
|
||||
}
|
||||
final Grid formGrid = new Grid(1, 2);
|
||||
|
||||
formGrid.setText(0, labelIdx, Util.C.defaultContext());
|
||||
formGrid.setWidget(0, fieldIdx, defaultContext);
|
||||
|
||||
body.add(formGrid);
|
||||
|
||||
initWidget(body);
|
||||
}
|
||||
|
||||
void display(final Account account) {
|
||||
setDefaultContext(account.getDefaultContext());
|
||||
}
|
||||
|
||||
private void setDefaultContext(final short lines) {
|
||||
for (int i = 0; i < Account.CONTEXT_CHOICES.length; i++) {
|
||||
if (Account.CONTEXT_CHOICES[i] == lines) {
|
||||
oldDefaultContext = lines;
|
||||
defaultContext.setSelectedIndex(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
setDefaultContext(Account.DEFAULT_CONTEXT);
|
||||
}
|
||||
}
|
@@ -19,6 +19,7 @@ import com.google.gwtjsonrpc.client.JsonUtil;
|
||||
|
||||
public class Util {
|
||||
public static final AccountConstants C = GWT.create(AccountConstants.class);
|
||||
public static final AccountMessages M = GWT.create(AccountMessages.class);
|
||||
public static final AccountService ACCOUNT_SVC;
|
||||
public static final AccountSecurity ACCOUNT_SEC;
|
||||
public static final LoginService LOGIN_SVC;
|
||||
|
@@ -21,6 +21,12 @@ import java.sql.Timestamp;
|
||||
|
||||
/** Preferences and information about a single user. */
|
||||
public final class Account {
|
||||
/** Default number of lines of context. */
|
||||
public static final short DEFAULT_CONTEXT = 10;
|
||||
|
||||
/** Typical valid choices for the default context setting. */
|
||||
public static final short[] CONTEXT_CHOICES = {3, 10, 25, 50, 75, 100};
|
||||
|
||||
/** Key local to Gerrit to identify a user. */
|
||||
public static class Id extends IntKey<com.google.gwtorm.client.Key<?>> {
|
||||
@Column
|
||||
@@ -66,6 +72,10 @@ public final class Account {
|
||||
@Column(notNull = false)
|
||||
protected String preferredEmail;
|
||||
|
||||
/** Default number of lines of context when viewing a patch. */
|
||||
@Column
|
||||
protected short defaultContext;
|
||||
|
||||
/** Non-Internet based contact details for the account's owner. */
|
||||
@Column(notNull = false)
|
||||
protected ContactInformation contact;
|
||||
@@ -81,6 +91,7 @@ public final class Account {
|
||||
public Account(final Account.Id newId) {
|
||||
accountId = newId;
|
||||
registeredOn = new Timestamp(System.currentTimeMillis());
|
||||
defaultContext = DEFAULT_CONTEXT;
|
||||
}
|
||||
|
||||
/** Get local id of this account, to link with in other entities */
|
||||
@@ -113,6 +124,16 @@ public final class Account {
|
||||
return registeredOn;
|
||||
}
|
||||
|
||||
/** Get the default number of lines of context when viewing a patch. */
|
||||
public short getDefaultContext() {
|
||||
return defaultContext;
|
||||
}
|
||||
|
||||
/** Set the number of lines of context when viewing a patch. */
|
||||
public void setDefaultContext(final short s) {
|
||||
defaultContext = s;
|
||||
}
|
||||
|
||||
public ContactInformation getContactInformation() {
|
||||
return contact;
|
||||
}
|
||||
|
Reference in New Issue
Block a user