package org.sigmah.client.ui.view.admin;
/*
* #%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 org.sigmah.client.i18n.I18N;
import org.sigmah.client.ui.presenter.admin.ParametersAdminPresenter;
import org.sigmah.client.ui.res.icon.IconImageBundle;
import org.sigmah.client.ui.view.base.AbstractView;
import org.sigmah.client.ui.widget.BackupStatusWidget;
import org.sigmah.client.ui.widget.button.Button;
import org.sigmah.client.ui.widget.form.FormPanel;
import org.sigmah.client.ui.widget.form.Forms;
import org.sigmah.client.ui.widget.layout.Layouts;
import org.sigmah.client.ui.widget.layout.Layouts.Margin;
import org.sigmah.client.ui.widget.panel.Panels;
import org.sigmah.client.util.ClientUtils;
import org.sigmah.shared.dto.orgunit.OrgUnitDTO;
import org.sigmah.shared.dto.value.FileDTO.LoadingScope;
import org.sigmah.shared.util.ExportUtils.ExportFormat;
import org.sigmah.shared.util.Pair;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.Style.Orientation;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.form.AdapterField;
import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FileUploadField;
import com.extjs.gxt.ui.client.widget.form.Radio;
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
import com.extjs.gxt.ui.client.widget.form.SpinnerField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.inject.Singleton;
import java.util.Arrays;
import java.util.Date;
import org.sigmah.shared.dto.password.ExpirationPolicy;
/**
* {@link ParametersAdminPresenter}'s view implementation.
*
* @author Maxime Lombard (mlombard@ideia.fr)
* @author Denis Colliot (dcolliot@ideia.fr)
*/
@Singleton
public class ParametersAdminView extends AbstractView implements ParametersAdminPresenter.View {
// CSS styles.
private static final String CSS_ADMIN_PARAMETERS = "admin-parameters";
private static final String CSS_PREVIEW_WRAPPER = "preview-wrapper";
private static final int LOGO_IMAGE_HEIGHT = 150;
// General parameters.
private FormPanel generalForm;
private TextField<String> generalOrganizationNameTextField;
private FileUploadField generalLogoFileField;
private Image generalLogoPreview;
private Button generalSaveButton;
// Backup.
private FormPanel backupManagementForm;
private RadioGroup backupManagementRadioGroup;
private Radio backupManagementAllVersionsRadio;
private Radio backupManagementLastVersionRadio;
private ComboBox<OrgUnitDTO> backupManagementOrgUnitsComboBox;
private BackupStatusWidget backupManagementStatus;
private Button backupManagementSaveButton;
// Export.
private FormPanel exportManagementForm;
private RadioGroup exportManagementRadioGroup;
private Radio exportManagementOdsRadio;
private Radio exportManagementXlsRadio;
private Button exportManagementSaveButton;
// Export.
private FormPanel passwordExpirationManagementForm;
private CheckBox resetNewUserPasswordCheckBox;
private SimpleComboBox<ExpirationPolicy> policyTypeCombo;
private SpinnerField frequencyField;
private DateField scheduledDateField;
private Button passwordExpirationSaveButton;
/**
* {@inheritDoc}
*/
@Override
public void initialize() {
final LayoutContainer topContainer = Layouts.hBox();
topContainer.add(createGeneralParametersPanel(), Layouts.hBoxData(Margin.HALF_RIGHT));
topContainer.add(createBackupParametersPanel(), Layouts.hBoxData(Margin.HALF_LEFT));
// final LayoutContainer bottomContainer = Layouts.hBox();
// bottomContainer.add(createExportManagementPanel(), Layouts.hBoxData(Margin.HALF_RIGHT));
// bottomContainer.add(createPasswordExpirationManagementPanel(), Layouts.hBoxData(Margin.HALF_LEFT));
add(topContainer, Layouts.borderLayoutData(LayoutRegion.NORTH, 0.5f, Margin.BOTTOM));
add(createExportManagementPanel(), Layouts.borderLayoutData(LayoutRegion.CENTER, 0.5f));
}
/**
* Creates the general parameters panel.
*
* @return The general parameters panel.
*/
private ContentPanel createGeneralParametersPanel() {
final ContentPanel panel = Panels.content(I18N.CONSTANTS.organizationManagementTitle(), CSS_ADMIN_PARAMETERS);
generalForm = Forms.panel(150);
generalOrganizationNameTextField = Forms.text(I18N.CONSTANTS.organizationManagementOrganizationName(), true);
generalForm.add(generalOrganizationNameTextField);
generalLogoFileField = Forms.upload(I18N.CONSTANTS.organizationManagementLogoUpload());
generalForm.add(generalLogoFileField);
generalLogoPreview = new Image();
final SimplePanel previewWrapper = new SimplePanel(generalLogoPreview);
previewWrapper.setStyleName(CSS_PREVIEW_WRAPPER);
final AdapterField logoImageField = new AdapterField(previewWrapper);
logoImageField.setFieldLabel(I18N.CONSTANTS.organizationManagementActualLogo());
logoImageField.setResizeWidget(false);
generalForm.add(logoImageField);
generalLogoPreview.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(final LoadEvent event) {
final Pair<Integer, Integer> ratio =
ClientUtils.ratio(generalLogoPreview.getWidth(), generalLogoPreview.getHeight(), generalForm.getFieldWidth(), LOGO_IMAGE_HEIGHT);
generalLogoPreview.setPixelSize(ratio.left, ratio.right);
}
});
generalSaveButton = Forms.button(I18N.CONSTANTS.organizationManagementSaveChanges(), IconImageBundle.ICONS.save());
generalForm.addButton(generalSaveButton);
panel.add(generalForm);
return panel;
}
/**
* Creates the backup parameters panel.
*
* @return The backup parameters panel.
*/
private ContentPanel createBackupParametersPanel() {
final ContentPanel panel = Panels.content(I18N.CONSTANTS.backupManagementTitle());
backupManagementForm = Forms.panel(300);
backupManagementAllVersionsRadio = Forms.radio(I18N.CONSTANTS.backupManagementAllVersion());
backupManagementLastVersionRadio = Forms.radio(I18N.CONSTANTS.backupManagementOneVersion());
backupManagementRadioGroup =
Forms.radioGroup(I18N.CONSTANTS.backupManagementDownload(), Orientation.VERTICAL, backupManagementAllVersionsRadio, backupManagementLastVersionRadio);
backupManagementForm.add(backupManagementRadioGroup);
backupManagementOrgUnitsComboBox =
Forms.combobox(I18N.CONSTANTS.backupManagementRootOrganization(), true, OrgUnitDTO.ID, OrgUnitDTO.FULL_NAME, new ListStore<OrgUnitDTO>());
backupManagementForm.add(backupManagementOrgUnitsComboBox);
backupManagementStatus = new BackupStatusWidget();
backupManagementForm.add(Forms.adapter(I18N.CONSTANTS.backupManagement_status_formLabel(), backupManagementStatus));
backupManagementSaveButton = Forms.button(I18N.CONSTANTS.backupManagementBackupAllFiles(), IconImageBundle.ICONS.save());
backupManagementForm.addButton(backupManagementSaveButton);
panel.add(backupManagementForm);
return panel;
}
/**
* Creates the export management panel.
*
* @return The export management panel.
*/
private ContentPanel createExportManagementPanel() {
final ContentPanel panel = Panels.content(I18N.CONSTANTS.defaultExportFormat());
exportManagementForm = Forms.panel(200);
// File format.
exportManagementOdsRadio = Forms.radio(I18N.CONSTANTS.openDocumentSpreadsheet());
exportManagementXlsRadio = Forms.radio(I18N.CONSTANTS.msExcel());
exportManagementRadioGroup = Forms.radioGroup(I18N.CONSTANTS.chooseFileType(), Orientation.VERTICAL, exportManagementOdsRadio, exportManagementXlsRadio);
exportManagementForm.add(exportManagementRadioGroup);
// button
exportManagementSaveButton = Forms.button(I18N.CONSTANTS.saveExportConfiguration(), IconImageBundle.ICONS.save());
exportManagementForm.addButton(exportManagementSaveButton);
panel.add(exportManagementForm);
return panel;
}
/**
* Creates the password expiration policy management panel.
*
* @return The password expiration policy management panel.
*/
private ContentPanel createPasswordExpirationManagementPanel() {
final ContentPanel panel = Panels.content(I18N.CONSTANTS.userPasswordSettings());
passwordExpirationManagementForm = Forms.panel(300);
resetNewUserPasswordCheckBox = Forms.checkbox(I18N.CONSTANTS.resetNewUserPasswords());
resetNewUserPasswordCheckBox.setFieldLabel(I18N.CONSTANTS.resetNewUserPasswords());
policyTypeCombo = new SimpleComboBox<ExpirationPolicy>();
policyTypeCombo.add(Arrays.asList(ExpirationPolicy.values()));
policyTypeCombo.setTriggerAction(ComboBox.TriggerAction.ALL);
policyTypeCombo.setEditable(false);
policyTypeCombo.setAllowBlank(false);
policyTypeCombo.setFieldLabel(I18N.CONSTANTS.automaticExpirationPolicy());
frequencyField = new SpinnerField();
frequencyField.setMinValue(0);
frequencyField.setValue(0);
frequencyField.setWidth(40);
frequencyField.setFormat(NumberFormat.getFormat("0"));
frequencyField.setIncrement(1);
frequencyField.setFieldLabel(I18N.CONSTANTS.every());
scheduledDateField = new DateField();
scheduledDateField.setMinValue(new Date());
scheduledDateField.setFieldLabel(I18N.CONSTANTS.at());
passwordExpirationManagementForm.add(resetNewUserPasswordCheckBox);
passwordExpirationManagementForm.add(policyTypeCombo);
passwordExpirationManagementForm.add(frequencyField);
passwordExpirationManagementForm.add(scheduledDateField);
// button
passwordExpirationSaveButton = Forms.button(I18N.CONSTANTS.saveExportConfiguration(), IconImageBundle.ICONS.save());
passwordExpirationManagementForm.addButton(passwordExpirationSaveButton);
panel.add(passwordExpirationManagementForm);
return panel;
}
// --
// General.
// --
@Override
public FormPanel getGeneralParametersForm() {
return generalForm;
}
@Override
public TextField<String> getOrganizationNameTextField() {
return generalOrganizationNameTextField;
}
@Override
public FileUploadField getLogoFileField() {
return generalLogoFileField;
}
@Override
public Image getLogoPreview() {
return generalLogoPreview;
}
@Override
public Button getGeneralParametersSaveButton() {
return generalSaveButton;
}
// --
// Backup.
// --
@Override
public FormPanel getBackupForm() {
return backupManagementForm;
}
/**
* {@inheritDoc}
*/
@Override
public void setSelectedBackupDownloadFormat(final LoadingScope downloadType) {
backupManagementAllVersionsRadio.setValue(null);
backupManagementLastVersionRadio.setValue(null);
if (downloadType == null) {
return;
}
switch (downloadType) {
case ALL_VERSIONS:
backupManagementAllVersionsRadio.setValue(true);
break;
case LAST_VERSION:
backupManagementLastVersionRadio.setValue(true);
break;
default:
break;
}
}
/**
* {@inheritDoc}
*/
@Override
public LoadingScope getSelectedBackupDownloadType() {
if (backupManagementAllVersionsRadio.equals(backupManagementRadioGroup.getValue())) {
return LoadingScope.ALL_VERSIONS;
} else if (backupManagementLastVersionRadio.equals(backupManagementRadioGroup.getValue())) {
return LoadingScope.LAST_VERSION;
} else {
return null;
}
}
@Override
public ComboBox<OrgUnitDTO> getBackupManagementOrgUnitsComboBox() {
return backupManagementOrgUnitsComboBox;
}
@Override
public Button getBackupSaveButton() {
return backupManagementSaveButton;
}
@Override
public BackupStatusWidget getBackupStatus() {
return backupManagementStatus;
}
// --
// Export.
// --
@Override
public FormPanel getExportManagementForm() {
return exportManagementForm;
}
/**
* {@inheritDoc}
*/
@Override
public void setSelectedExportFormat(final ExportFormat exportFormat) {
exportManagementXlsRadio.setValue(null);
exportManagementOdsRadio.setValue(null);
if (exportFormat == null) {
return;
}
switch (exportFormat) {
case XLS:
exportManagementXlsRadio.setValue(true);
break;
case ODS:
exportManagementOdsRadio.setValue(true);
break;
default:
break;
}
}
/**
* {@inheritDoc}
*/
@Override
public ExportFormat getSelectedExportFormat() {
if (exportManagementOdsRadio.equals(exportManagementRadioGroup.getValue())) {
return ExportFormat.ODS;
} else if (exportManagementXlsRadio.equals(exportManagementRadioGroup.getValue())) {
return ExportFormat.XLS;
} else {
return null;
}
}
@Override
public Button getExportManagementSaveButton() {
return exportManagementSaveButton;
}
}