package org.sigmah.client.ui.view.admin.users;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.extjs.gxt.ui.client.Style;
import java.util.Set;
import org.sigmah.client.i18n.I18N;
import org.sigmah.client.ui.presenter.admin.users.ProfileEditPresenter;
import org.sigmah.client.ui.res.icon.IconImageBundle;
import org.sigmah.client.ui.view.base.AbstractPopupView;
import org.sigmah.client.ui.widget.button.Button;
import org.sigmah.client.ui.widget.button.ClickableLabel;
import org.sigmah.client.ui.widget.form.ComboboxButtonField;
import org.sigmah.client.ui.widget.form.FormPanel;
import org.sigmah.client.ui.widget.form.Forms;
import org.sigmah.client.ui.widget.popup.PopupWidget;
import org.sigmah.client.util.EnumModel;
import org.sigmah.shared.dto.profile.PrivacyGroupDTO;
import org.sigmah.shared.dto.referential.GlobalPermissionEnum;
import org.sigmah.shared.dto.referential.PrivacyGroupPermissionEnum;
import org.sigmah.shared.util.Pair;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.inject.Singleton;
/**
* Profile create/edit popup view implementation.
*
* @author Mehdi Benabdeslam (mehdi.benabdeslam@netapsys.fr) (v2.0)
* @author Denis Colliot (dcolliot@ideia.fr) (v2.0)
*/
@Singleton
public class ProfileEditView extends AbstractPopupView<PopupWidget> implements ProfileEditPresenter.View {
private FormPanel formPanel;
private Field<String> nameField;
private PermissionTree permissionTree;
private ComboboxButtonField privacyGroupsField;
private FlowPanel privacyGroupsSelectionPanel;
private Button createButton;
/**
* View popup initialization.
*/
protected ProfileEditView() {
super(new PopupWidget(true));
popup.setWidth(null); // Enables auto-width.
}
/**
* {@inheritDoc}
*/
@Override
public void initialize() {
formPanel = Forms.panel(150);
// --
// Name field.
// --
nameField = Forms.text(I18N.CONSTANTS.adminProfilesName(), true);
// --
// Global Permissions fields.
// --
permissionTree = new PermissionTree();
permissionTree.expandAll();
// --
// Privacy groups / permissions field.
// --
privacyGroupsField =
new ComboboxButtonField(I18N.CONSTANTS.adminProfilesPrivacyGroups(), new Pair<String, String>(PrivacyGroupDTO.ID, PrivacyGroupDTO.TITLE),
new Pair<String, String>(EnumModel.VALUE_FIELD, EnumModel.DISPLAY_FIELD));
getPrivacyGroupsComboBox().setEmptyText(I18N.CONSTANTS.adminPrivacyGroupChoice());
privacyGroupsSelectionPanel = new FlowPanel();
// --
// Create button.
// --
createButton = Forms.button(I18N.CONSTANTS.save(), IconImageBundle.ICONS.save());
// --
// Form initialization.
// --
// #670: Resized panels to make the popup smaller.
formPanel.add(nameField);
formPanel.add(Forms.adapterWithScrollbars(I18N.CONSTANTS.adminProfilesGlobalPermissions(), permissionTree, 400, 300));
formPanel.add(privacyGroupsField);
formPanel.add(Forms.adapterWithScrollbars(null, privacyGroupsSelectionPanel, 400, 120));
formPanel.addButton(createButton);
initPopup(formPanel);
}
/**
* {@inheritDoc}
*/
@Override
public void clearForm() {
nameField.clear();
privacyGroupsField.clearSelections();
privacyGroupsSelectionPanel.clear();
permissionTree.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void addPrivacyGroup(final PrivacyGroupDTO privacyGroup, final PrivacyGroupPermissionEnum permission, final ClickHandler deleteHandler) {
final ClickableLabel label =
new ClickableLabel(privacyGroup.getCode() + "-" + privacyGroup.getTitle() + " : " + PrivacyGroupPermissionEnum.getName(permission));
label.addClickHandler(new ClickHandler() {
@Override
public void onClick(final ClickEvent event) {
if (deleteHandler != null) {
deleteHandler.onClick(event);
label.removeFromParent();
}
}
});
privacyGroupsSelectionPanel.add(label);
}
/**
* {@inheritDoc}
*/
@Override
public void setPermissionValue(final GlobalPermissionEnum globalPermission, final Boolean value) {
permissionTree.setPermission(globalPermission, value);
}
/**
* {@inheritDoc}
*/
@Override
public Button getCreateButton() {
return createButton;
}
/**
* {@inheritDoc}
*/
@Override
public Field<String> getNameField() {
return nameField;
}
/**
* {@inheritDoc}
*/
@Override
public FormPanel getForm() {
return formPanel;
}
/**
* {@inheritDoc}
*/
@Override
public Set<GlobalPermissionEnum> getSelectedGlobalPermissions() {
return permissionTree.getPermissions();
}
/**
* {@inheritDoc}
*/
@Override
public ComboBox<PrivacyGroupDTO> getPrivacyGroupsComboBox() {
return privacyGroupsField.getComboBox(0);
}
/**
* {@inheritDoc}
*/
@Override
public ComboBox<EnumModel<PrivacyGroupPermissionEnum>> getPrivacyGroupsPermissionsComboBox() {
return privacyGroupsField.getComboBox(1);
}
/**
* {@inheritDoc}
*/
@Override
public Button getPrivacyGroupsAddButton() {
return privacyGroupsField.getButton();
}
}