org.sigmah.client.ui.view.admin.ParametersAdminView.java Source code

Java tutorial

Introduction

Here is the source code for org.sigmah.client.ui.view.admin.ParametersAdminView.java

Source

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;
    }

}