diff options
Diffstat (limited to 'src/main/java/com/google/gerrit/client/account/AccountSettings.java')
-rw-r--r-- | src/main/java/com/google/gerrit/client/account/AccountSettings.java | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/src/main/java/com/google/gerrit/client/account/AccountSettings.java b/src/main/java/com/google/gerrit/client/account/AccountSettings.java new file mode 100644 index 0000000000..0ee7d22944 --- /dev/null +++ b/src/main/java/com/google/gerrit/client/account/AccountSettings.java @@ -0,0 +1,177 @@ +// 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 static com.google.gerrit.client.FormatUtil.mediumFormat; + +import com.google.gerrit.client.Gerrit; +import com.google.gerrit.client.Link; +import com.google.gerrit.client.reviewdb.Account; +import com.google.gerrit.client.rpc.Common; +import com.google.gerrit.client.rpc.GerritCallback; +import com.google.gerrit.client.ui.AccountScreen; +import com.google.gerrit.client.ui.LazyTabChild; +import com.google.gerrit.client.ui.Screen; +import com.google.gwt.i18n.client.LocaleInfo; +import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.SourcesTabEvents; +import com.google.gwt.user.client.ui.TabListener; +import com.google.gwt.user.client.ui.TabPanel; +import com.google.gwt.user.client.ui.HTMLTable.CellFormatter; + +import java.util.ArrayList; +import java.util.List; + +public class AccountSettings extends AccountScreen { + private String initialTabToken; + private int labelIdx, fieldIdx; + private Grid info; + + private List<String> tabTokens; + private TabPanel tabs; + private PreferencePanel prefsPanel; + + public AccountSettings(final String tabToken) { + super(Util.C.accountSettingsHeading()); + initialTabToken = tabToken; + } + + @Override + public Object getScreenCacheToken() { + return getClass(); + } + + @Override + public Screen recycleThis(final Screen newScreen) { + final AccountSettings s = (AccountSettings) newScreen; + initialTabToken = s.initialTabToken; + return this; + } + + @Override + public void onLoad() { + if (info == null) { + initUI(); + } + + super.onLoad(); + display(Gerrit.getUserAccount()); + tabs.selectTab(tabTokens.indexOf(initialTabToken)); + + Util.ACCOUNT_SVC.myAccount(new GerritCallback<Account>() { + public void onSuccess(final Account result) { + if (isAttached()) { + display(result); + } + } + }); + } + + private void initUI() { + if (LocaleInfo.getCurrentLocale().isRTL()) { + labelIdx = 1; + fieldIdx = 0; + } else { + labelIdx = 0; + fieldIdx = 1; + } + + info = new Grid(4, 2); + info.setStyleName("gerrit-InfoBlock"); + info.addStyleName("gerrit-AccountInfoBlock"); + add(info); + + infoRow(0, Util.C.fullName()); + infoRow(1, Util.C.preferredEmail()); + infoRow(2, Util.C.sshUserName()); + infoRow(3, Util.C.registeredOn()); + + final CellFormatter fmt = info.getCellFormatter(); + fmt.addStyleName(0, 0, "topmost"); + fmt.addStyleName(0, 1, "topmost"); + fmt.addStyleName(2, 0, "bottomheader"); + + prefsPanel = new PreferencePanel(); + + tabTokens = new ArrayList<String>(); + tabs = new TabPanel(); + tabs.setWidth("98%"); + add(tabs); + + tabs.add(prefsPanel, Util.C.tabPreferences()); + tabTokens.add(Link.SETTINGS); + + tabs.add(new LazyTabChild<ContactPanel>() { + @Override + protected ContactPanel create() { + return new ContactPanel(AccountSettings.this); + } + }, Util.C.tabContactInformation()); + tabTokens.add(Link.SETTINGS_CONTACT); + + tabs.add(new LazyTabChild<SshKeyPanel>() { + @Override + protected SshKeyPanel create() { + return new SshKeyPanel(); + } + }, Util.C.tabSshKeys()); + tabTokens.add(Link.SETTINGS_SSHKEYS); + + switch (Common.getGerritConfig().getLoginType()) { + case OPENID: + tabs.add(new LazyTabChild<ExternalIdPanel>() { + @Override + protected ExternalIdPanel create() { + return new ExternalIdPanel(); + } + }, Util.C.tabWebIdentities()); + tabTokens.add(Link.SETTINGS_WEBIDENT); + break; + } + + if (Common.getGerritConfig().isUseContributorAgreements()) { + tabs.add(new LazyTabChild<AgreementPanel>() { + @Override + protected AgreementPanel create() { + return new AgreementPanel(); + } + }, Util.C.tabAgreements()); + tabTokens.add(Link.SETTINGS_AGREEMENTS); + } + + tabs.addTabListener(new TabListener() { + public boolean onBeforeTabSelected(SourcesTabEvents sender, int tabIndex) { + return true; + } + + public void onTabSelected(SourcesTabEvents sender, int tabIndex) { + Gerrit.display(tabTokens.get(tabIndex), false); + } + }); + } + + private void infoRow(final int row, final String name) { + info.setText(row, labelIdx, name); + info.getCellFormatter().addStyleName(row, 0, "header"); + } + + void display(final Account account) { + info.setText(0, fieldIdx, account.getFullName()); + info.setText(1, fieldIdx, account.getPreferredEmail()); + info.setText(2, fieldIdx, account.getSshUserName()); + info.setText(3, fieldIdx, mediumFormat(account.getRegisteredOn())); + prefsPanel.display(account); + } +} |