summaryrefslogtreecommitdiffstats
path: root/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AccountGroupInfoScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AccountGroupInfoScreen.java')
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AccountGroupInfoScreen.java469
1 files changed, 469 insertions, 0 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AccountGroupInfoScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AccountGroupInfoScreen.java
new file mode 100644
index 0000000000..936bfe5b90
--- /dev/null
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AccountGroupInfoScreen.java
@@ -0,0 +1,469 @@
+// 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.admin;
+
+import com.google.gerrit.client.Gerrit;
+import com.google.gerrit.client.rpc.GerritCallback;
+import com.google.gerrit.client.ui.AccountGroupSuggestOracle;
+import com.google.gerrit.client.ui.OnEditEnabler;
+import com.google.gerrit.client.ui.RPCSuggestOracle;
+import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gerrit.common.data.GroupDetail;
+import com.google.gerrit.common.data.GroupOptions;
+import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.gwt.event.dom.client.ChangeEvent;
+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.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.CheckBox;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwtexpui.clippy.client.CopyableLabel;
+import com.google.gwtexpui.globalkey.client.NpTextArea;
+import com.google.gwtexpui.globalkey.client.NpTextBox;
+import com.google.gwtjsonrpc.common.VoidResult;
+
+import java.util.List;
+
+public class AccountGroupInfoScreen extends AccountGroupScreen {
+ private CopyableLabel groupUUIDLabel;
+
+ private NpTextBox groupNameTxt;
+ private Button saveName;
+
+ private NpTextBox ownerTxtBox;
+ private SuggestBox ownerTxt;
+ private Button saveOwner;
+
+ private NpTextArea descTxt;
+ private Button saveDesc;
+
+ private Label typeSystem;
+ private ListBox typeSelect;
+ private Button saveType;
+
+ private Panel externalPanel;
+ private Label externalName;
+ private NpTextBox externalNameFilter;
+ private Button externalNameSearch;
+ private Grid externalMatches;
+
+ private CheckBox visibleToAllCheckBox;
+ private Button saveGroupOptions;
+
+ public AccountGroupInfoScreen(final GroupDetail toShow, final String token) {
+ super(toShow, token);
+ }
+
+ @Override
+ protected void onInitUI() {
+ super.onInitUI();
+ initUUID();
+ initName();
+ initOwner();
+ initDescription();
+ initGroupOptions();
+ initGroupType();
+
+ initExternal();
+ }
+
+ private void enableForm(final boolean canModify) {
+ groupNameTxt.setEnabled(canModify);
+ ownerTxtBox.setEnabled(canModify);
+ descTxt.setEnabled(canModify);
+ typeSelect.setEnabled(canModify);
+ externalNameFilter.setEnabled(canModify);
+ externalNameSearch.setEnabled(canModify);
+ visibleToAllCheckBox.setEnabled(canModify);
+ }
+
+ private void initUUID() {
+ final VerticalPanel groupUUIDPanel = new VerticalPanel();
+ groupUUIDPanel.setStyleName(Gerrit.RESOURCES.css().groupUUIDPanel());
+ groupUUIDPanel.add(new SmallHeading(Util.C.headingGroupUUID()));
+ groupUUIDLabel = new CopyableLabel("");
+ groupUUIDPanel.add(groupUUIDLabel);
+ add(groupUUIDPanel);
+ }
+
+ private void initName() {
+ final VerticalPanel groupNamePanel = new VerticalPanel();
+ groupNamePanel.setStyleName(Gerrit.RESOURCES.css().groupNamePanel());
+ groupNameTxt = new NpTextBox();
+ groupNameTxt.setStyleName(Gerrit.RESOURCES.css().groupNameTextBox());
+ groupNameTxt.setVisibleLength(60);
+ groupNamePanel.add(groupNameTxt);
+
+ saveName = new Button(Util.C.buttonRenameGroup());
+ saveName.setEnabled(false);
+ saveName.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ final String newName = groupNameTxt.getText().trim();
+ Util.GROUP_SVC.renameGroup(getGroupId(), newName,
+ new GerritCallback<GroupDetail>() {
+ public void onSuccess(final GroupDetail groupDetail) {
+ saveName.setEnabled(false);
+ setPageTitle(Util.M.group(groupDetail.group.getName()));
+ display(groupDetail);
+ }
+ });
+ }
+ });
+ groupNamePanel.add(saveName);
+ add(groupNamePanel);
+
+ new OnEditEnabler(saveName, groupNameTxt);
+ }
+
+ private void initOwner() {
+ final VerticalPanel ownerPanel = new VerticalPanel();
+ ownerPanel.setStyleName(Gerrit.RESOURCES.css().groupOwnerPanel());
+ ownerPanel.add(new SmallHeading(Util.C.headingOwner()));
+
+ ownerTxtBox = new NpTextBox();
+ ownerTxtBox.setVisibleLength(60);
+ ownerTxt = new SuggestBox(new RPCSuggestOracle(
+ new AccountGroupSuggestOracle()), ownerTxtBox);
+ ownerTxt.setStyleName(Gerrit.RESOURCES.css().groupOwnerTextBox());
+ ownerPanel.add(ownerTxt);
+
+ saveOwner = new Button(Util.C.buttonChangeGroupOwner());
+ saveOwner.setEnabled(false);
+ saveOwner.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ final String newOwner = ownerTxt.getText().trim();
+ if (newOwner.length() > 0) {
+ Util.GROUP_SVC.changeGroupOwner(getGroupId(), newOwner,
+ new GerritCallback<VoidResult>() {
+ public void onSuccess(final VoidResult result) {
+ saveOwner.setEnabled(false);
+ }
+ });
+ }
+ }
+ });
+ ownerPanel.add(saveOwner);
+ add(ownerPanel);
+
+ new OnEditEnabler(saveOwner, ownerTxtBox);
+ }
+
+ private void initDescription() {
+ final VerticalPanel vp = new VerticalPanel();
+ vp.setStyleName(Gerrit.RESOURCES.css().groupDescriptionPanel());
+ vp.add(new SmallHeading(Util.C.headingDescription()));
+
+ descTxt = new NpTextArea();
+ descTxt.setVisibleLines(6);
+ descTxt.setCharacterWidth(60);
+ vp.add(descTxt);
+
+ saveDesc = new Button(Util.C.buttonSaveDescription());
+ saveDesc.setEnabled(false);
+ saveDesc.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ final String txt = descTxt.getText().trim();
+ Util.GROUP_SVC.changeGroupDescription(getGroupId(), txt,
+ new GerritCallback<VoidResult>() {
+ public void onSuccess(final VoidResult result) {
+ saveDesc.setEnabled(false);
+ }
+ });
+ }
+ });
+ vp.add(saveDesc);
+ add(vp);
+
+ new OnEditEnabler(saveDesc, descTxt);
+ }
+
+ private void initGroupOptions() {
+ final VerticalPanel groupOptionsPanel = new VerticalPanel();
+
+ final VerticalPanel vp = new VerticalPanel();
+ vp.setStyleName(Gerrit.RESOURCES.css().groupOptionsPanel());
+ vp.add(new SmallHeading(Util.C.headingGroupOptions()));
+
+ visibleToAllCheckBox = new CheckBox(Util.C.isVisibleToAll());
+ vp.add(visibleToAllCheckBox);
+ groupOptionsPanel.add(vp);
+
+ saveGroupOptions = new Button(Util.C.buttonSaveGroupOptions());
+ saveGroupOptions.setEnabled(false);
+ saveGroupOptions.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(final ClickEvent event) {
+ final GroupOptions groupOptions =
+ new GroupOptions(visibleToAllCheckBox.getValue());
+ Util.GROUP_SVC.changeGroupOptions(getGroupId(), groupOptions,
+ new GerritCallback<VoidResult>() {
+ public void onSuccess(final VoidResult result) {
+ saveGroupOptions.setEnabled(false);
+ }
+ });
+ }
+ });
+ groupOptionsPanel.add(saveGroupOptions);
+
+ add(groupOptionsPanel);
+
+ final OnEditEnabler enabler = new OnEditEnabler(saveGroupOptions);
+ enabler.listenTo(visibleToAllCheckBox);
+ }
+
+ private void initGroupType() {
+ typeSystem = new Label(Util.C.groupType_SYSTEM());
+
+ typeSelect = new ListBox();
+ typeSelect.setStyleName(Gerrit.RESOURCES.css().groupTypeSelectListBox());
+ typeSelect.addItem(Util.C.groupType_INTERNAL(), AccountGroup.Type.INTERNAL.name());
+ typeSelect.addItem(Util.C.groupType_LDAP(), AccountGroup.Type.LDAP.name());
+ typeSelect.addChangeHandler(new ChangeHandler() {
+ @Override
+ public void onChange(ChangeEvent event) {
+ saveType.setEnabled(true);
+ }
+ });
+
+ saveType = new Button(Util.C.buttonChangeGroupType());
+ saveType.setEnabled(false);
+ saveType.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ onSaveType();
+ }
+ });
+
+ switch (Gerrit.getConfig().getAuthType()) {
+ case HTTP_LDAP:
+ case LDAP:
+ case LDAP_BIND:
+ case CLIENT_SSL_CERT_LDAP:
+ break;
+ default:
+ return;
+ }
+
+ final VerticalPanel fp = new VerticalPanel();
+ fp.setStyleName(Gerrit.RESOURCES.css().groupTypePanel());
+ fp.add(new SmallHeading(Util.C.headingGroupType()));
+ fp.add(typeSystem);
+ fp.add(typeSelect);
+ fp.add(saveType);
+ add(fp);
+ }
+
+ private void initExternal() {
+ externalName = new Label();
+
+ externalNameFilter = new NpTextBox();
+ externalNameFilter.setStyleName(Gerrit.RESOURCES.css()
+ .groupExternalNameFilterTextBox());
+ externalNameFilter.setVisibleLength(30);
+ externalNameFilter.addKeyPressHandler(new KeyPressHandler() {
+ @Override
+ public void onKeyPress(final KeyPressEvent event) {
+ if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
+ doExternalSearch();
+ }
+ }
+ });
+
+ externalNameSearch = new Button(Gerrit.C.searchButton());
+ externalNameSearch.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ doExternalSearch();
+ }
+ });
+
+ externalMatches = new Grid();
+ externalMatches.setStyleName(Gerrit.RESOURCES.css().infoTable());
+ externalMatches.setVisible(false);
+
+ final FlowPanel searchLine = new FlowPanel();
+ searchLine.add(externalNameFilter);
+ searchLine.add(externalNameSearch);
+
+ externalPanel = new VerticalPanel();
+ externalPanel.add(new SmallHeading(Util.C.headingExternalGroup()));
+ externalPanel.add(externalName);
+ externalPanel.add(searchLine);
+ externalPanel.add(externalMatches);
+ add(externalPanel);
+ }
+
+ private void setType(final AccountGroup.Type newType) {
+ final boolean system = newType == AccountGroup.Type.SYSTEM;
+
+ typeSystem.setVisible(system);
+ typeSelect.setVisible(!system);
+ saveType.setVisible(!system);
+ externalPanel.setVisible(newType == AccountGroup.Type.LDAP);
+ externalNameFilter.setText(groupNameTxt.getText());
+
+ if (!system) {
+ for (int i = 0; i < typeSelect.getItemCount(); i++) {
+ if (newType.name().equals(typeSelect.getValue(i))) {
+ typeSelect.setSelectedIndex(i);
+ break;
+ }
+ }
+ }
+
+ saveType.setEnabled(false);
+
+ setMembersTabVisible(newType == AccountGroup.Type.INTERNAL);
+ }
+
+ private void onSaveType() {
+ final int idx = typeSelect.getSelectedIndex();
+ final AccountGroup.Type newType =
+ AccountGroup.Type.valueOf(typeSelect.getValue(idx));
+
+ typeSelect.setEnabled(false);
+ saveType.setEnabled(false);
+
+ Util.GROUP_SVC.changeGroupType(getGroupId(), newType,
+ new GerritCallback<VoidResult>() {
+ @Override
+ public void onSuccess(VoidResult result) {
+ typeSelect.setEnabled(true);
+ setType(newType);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ typeSelect.setEnabled(true);
+ saveType.setEnabled(true);
+ super.onFailure(caught);
+ }
+ });
+ }
+
+ private void doExternalSearch() {
+ externalNameFilter.setEnabled(false);
+ externalNameSearch.setEnabled(false);
+ Util.GROUP_SVC.searchExternalGroups(externalNameFilter.getText(),
+ new GerritCallback<List<AccountGroup.ExternalNameKey>>() {
+ @Override
+ public void onSuccess(List<AccountGroup.ExternalNameKey> result) {
+ final CellFormatter fmt = externalMatches.getCellFormatter();
+
+ if (result.isEmpty()) {
+ externalMatches.resize(1, 1);
+ externalMatches.setText(0, 0, Util.C.errorNoMatchingGroups());
+ fmt.setStyleName(0, 0, Gerrit.RESOURCES.css().header());
+ return;
+ }
+
+ externalMatches.resize(1 + result.size(), 2);
+
+ externalMatches.setText(0, 0, Util.C.columnGroupName());
+ externalMatches.setText(0, 1, "");
+ fmt.setStyleName(0, 0, Gerrit.RESOURCES.css().header());
+ fmt.setStyleName(0, 1, Gerrit.RESOURCES.css().header());
+
+ for (int row = 0; row < result.size(); row++) {
+ final AccountGroup.ExternalNameKey key = result.get(row);
+ final Button b = new Button(Util.C.buttonSelectGroup());
+ b.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ setExternalGroup(key);
+ }
+ });
+ externalMatches.setText(1 + row, 0, key.get());
+ externalMatches.setWidget(1 + row, 1, b);
+ fmt.setStyleName(1 + row, 1, Gerrit.RESOURCES.css().rightmost());
+ }
+ externalMatches.setVisible(true);
+
+ externalNameFilter.setEnabled(true);
+ externalNameSearch.setEnabled(true);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ externalNameFilter.setEnabled(true);
+ externalNameSearch.setEnabled(true);
+ super.onFailure(caught);
+ }
+ });
+ }
+
+ private void setExternalGroup(final AccountGroup.ExternalNameKey key) {
+ externalMatches.setVisible(false);
+
+ Util.GROUP_SVC.changeExternalGroup(getGroupId(), key,
+ new GerritCallback<VoidResult>() {
+ @Override
+ public void onSuccess(VoidResult result) {
+ externalName.setText(key.get());
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ externalMatches.setVisible(true);
+ super.onFailure(caught);
+ }
+ });
+ }
+
+ @Override
+ protected void display(final GroupDetail groupDetail) {
+ final AccountGroup group = groupDetail.group;
+ groupUUIDLabel.setText(group.getGroupUUID().get());
+ groupNameTxt.setText(group.getName());
+ if (groupDetail.ownerGroup != null) {
+ ownerTxt.setText(groupDetail.ownerGroup.getName());
+ } else {
+ ownerTxt.setText(Util.M.deletedGroup(group.getOwnerGroupId().get()));
+ }
+ descTxt.setText(group.getDescription());
+
+ visibleToAllCheckBox.setValue(group.isVisibleToAll());
+
+ switch (group.getType()) {
+ case LDAP:
+ externalName.setText(group.getExternalNameKey() != null ? group
+ .getExternalNameKey().get() : Util.C.noGroupSelected());
+ break;
+ }
+
+ setType(group.getType());
+
+ enableForm(groupDetail.canModify);
+ saveName.setVisible(groupDetail.canModify);
+ saveOwner.setVisible(groupDetail.canModify);
+ saveDesc.setVisible(groupDetail.canModify);
+ saveGroupOptions.setVisible(groupDetail.canModify);
+ saveType.setVisible(groupDetail.canModify);
+ }
+}