Package com.dci.intellij.dbn.common.locale.options

Source Code of com.dci.intellij.dbn.common.locale.options.RegionalSettings

package com.dci.intellij.dbn.common.locale.options;

import com.dci.intellij.dbn.common.locale.DBDateFormat;
import com.dci.intellij.dbn.common.locale.DBNumberFormat;
import com.dci.intellij.dbn.common.locale.Formatter;
import com.dci.intellij.dbn.common.locale.options.ui.RegionalSettingsEditorForm;
import com.dci.intellij.dbn.common.options.Configuration;
import com.dci.intellij.dbn.common.options.setting.BooleanSetting;
import com.dci.intellij.dbn.common.options.setting.SettingsUtil;
import com.dci.intellij.dbn.common.options.setting.StringSetting;
import com.dci.intellij.dbn.options.general.GeneralProjectSettings;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import org.jdom.Element;

import java.util.Locale;

public class RegionalSettings extends Configuration<RegionalSettingsEditorForm> {
    private Locale locale = Locale.getDefault();
    private DBDateFormat dateFormatOption = DBDateFormat.MEDIUM;
    private DBNumberFormat numberFormatOption = DBNumberFormat.UNGROUPED;

    private BooleanSetting useCustomFormats = new BooleanSetting("use-custom-formats", false);
    private StringSetting customNumberFormat = new StringSetting("custom-number-format", null);
    private StringSetting customDateFormat = new StringSetting("custom-date-format", null);
    private StringSetting customTimeFormat = new StringSetting("custom-time-format", null);

    private Formatter formatter;

    public static RegionalSettings getInstance(Project project) {
        return GeneralProjectSettings.getInstance(project).getRegionalSettings();
    }

    @Override
    public void apply() throws ConfigurationException {
        super.apply();
        formatter = useCustomFormats.value() ?
                new Formatter(locale, customDateFormat.value(), customTimeFormat.value(), customNumberFormat.value()) :
                new Formatter(locale, dateFormatOption, numberFormatOption);

    }

    public Formatter getFormatter(){
        if (formatter == null) formatter = new Formatter(locale, dateFormatOption, numberFormatOption);
        return formatter;
    }

    public Locale getLocale() {
        return locale;
    }

    public void setLocale(Locale locale) {
        this.locale = locale;
    }

    public DBDateFormat getDateFormatOption() {
        return dateFormatOption;
    }

    public void setDateFormatOption(DBDateFormat dateFormatOption) {
        this.dateFormatOption = dateFormatOption;
    }

    public DBNumberFormat getNumberFormatOption() {
        return numberFormatOption;
    }

    public void setNumberFormatOption(DBNumberFormat numberFormatOption) {
        this.numberFormatOption = numberFormatOption;
    }

    public BooleanSetting getUseCustomFormats() {
        return useCustomFormats;
    }

    public StringSetting getCustomDateFormat() {
        return customDateFormat;
    }

    public StringSetting getCustomTimeFormat() {
        return customTimeFormat;
    }

    public StringSetting getCustomNumberFormat() {
        return customNumberFormat;
    }

    /*********************************************************
     *                      Configuration                    *
     *********************************************************/
    public RegionalSettingsEditorForm createConfigurationEditor() {
        return new RegionalSettingsEditorForm(this);
    }

    @Override
    public String getConfigElementName() {
        return "regional-settings";
    }

    public void readConfiguration(Element element) throws InvalidDataException {
        String localeString = SettingsUtil.getString(element, "locale", Locale.getDefault().toString());
        boolean useSystemLocale = localeString.equals("SYSTEM_DEFAULT");
        if (useSystemLocale) {
             this.locale = Locale.getDefault();
        } else {
            for (Locale locale : Locale.getAvailableLocales()) {
                if (locale.toString().equals(localeString)) {
                    this.locale = locale;
                    break;
                }
            }
        }

        dateFormatOption = SettingsUtil.getEnum(element, "date-format", DBDateFormat.MEDIUM);
        numberFormatOption = SettingsUtil.getEnum(element, "number-format", DBNumberFormat.UNGROUPED);
        useCustomFormats.readConfiguration(element);

        if (useCustomFormats.value()) {
            customNumberFormat.readConfiguration(element);
            customDateFormat.readConfiguration(element);
            customTimeFormat.readConfiguration(element);
        }
    }

    public void writeConfiguration(Element element) throws WriteExternalException {
        SettingsUtil.setEnum(element, "date-format", dateFormatOption);
        SettingsUtil.setEnum(element, "number-format", numberFormatOption);

        String localeString = this.locale.equals(Locale.getDefault()) ? "SYSTEM_DEFAULT" : locale.toString();
        SettingsUtil.setString(element, "locale", localeString);

        useCustomFormats.writeConfiguration(element);
        if (useCustomFormats.value()) {
            customNumberFormat.writeConfiguration(element);
            customDateFormat.writeConfiguration(element);
            customTimeFormat.writeConfiguration(element);
        }

    }


}
TOP

Related Classes of com.dci.intellij.dbn.common.locale.options.RegionalSettings

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.