001package jmri.jmrit.logixng.implementation;
002
003import java.util.prefs.Preferences;
004
005import jmri.beans.PreferencesBean;
006import jmri.jmrit.logixng.LogixNGPreferences;
007import jmri.jmrit.logixng.MaleSocket.ErrorHandlingType;
008import jmri.jmrit.logixng.actions.IfThenElse;
009import jmri.profile.ProfileManager;
010import jmri.profile.ProfileUtils;
011
012/**
013 * Preferences for LogixNG
014 *
015 * @author Daniel Bergqvist Copyright 2018
016 */
017public final class DefaultLogixNGPreferences extends PreferencesBean implements LogixNGPreferences {
018
019    private static final String START_LOGIXNG_ON_LOAD = "startLogixNGOnStartup";
020    private static final String INSTALL_DEBUGGER = "installDebugger";
021    private static final String SHOW_SYSTEM_USER_NAMES = "showSystemUserNames";
022    private static final String ERROR_HANDLING_TYPE = "errorHandlingType";
023    private static final String TREE_EDITOR_HIGHLIGHT_ROW = "treeEditorHighlightRow";
024    private static final String SHOW_SYSTEM_NAME_IN_EXCEPTION = "showSystemNameInExceptions";
025    private static final String STRICT_TYPING_GLOBAL_VARIABLES = "strictTypingGlobalVariables";
026    private static final String STRICT_TYPING_LOCAL_VARIABLES = "strictTypingLocalVariables";
027    private static final String IF_THEN_ELSE_EXECUTE_TYPE_DEFAULT = "ifThenElseExecuteTypeDefault";
028
029    private boolean _startLogixNGOnLoad = true;
030    private boolean _showSystemUserNames = false;
031    private boolean _installDebugger = true;
032    private ErrorHandlingType _errorHandlingType = ErrorHandlingType.ShowDialogBox;
033    private boolean _treeEditorHighlightRow = false;
034    private boolean _showSystemNameInException = false;
035    private boolean _strictTypingGlobalVariables = false;
036    private boolean _strictTypingLocalVariables = false;
037    private IfThenElse.ExecuteType _ifThenElseExecuteTypeDefault = IfThenElse.ExecuteType.ExecuteOnChange;
038
039
040    public DefaultLogixNGPreferences() {
041        super(ProfileManager.getDefault().getActiveProfile());
042//        System.out.format("LogixNG preferences%n");
043        Preferences sharedPreferences = ProfileUtils.getPreferences(
044                super.getProfile(), this.getClass(), true);
045        this.readPreferences(sharedPreferences);
046    }
047
048    private void readPreferences(Preferences sharedPreferences) {
049        _startLogixNGOnLoad = sharedPreferences.getBoolean(START_LOGIXNG_ON_LOAD, _startLogixNGOnLoad);
050        _installDebugger = sharedPreferences.getBoolean(INSTALL_DEBUGGER, _installDebugger);
051        _showSystemUserNames = sharedPreferences.getBoolean(SHOW_SYSTEM_USER_NAMES, _showSystemUserNames);
052        _errorHandlingType = ErrorHandlingType.valueOf(
053                sharedPreferences.get(ERROR_HANDLING_TYPE, _errorHandlingType.name()));
054        _treeEditorHighlightRow = sharedPreferences.getBoolean(TREE_EDITOR_HIGHLIGHT_ROW, _treeEditorHighlightRow);
055        _showSystemNameInException = sharedPreferences.getBoolean(SHOW_SYSTEM_NAME_IN_EXCEPTION, _showSystemNameInException);
056        _strictTypingGlobalVariables = sharedPreferences.getBoolean(STRICT_TYPING_GLOBAL_VARIABLES, _strictTypingGlobalVariables);
057        _strictTypingLocalVariables = sharedPreferences.getBoolean(STRICT_TYPING_LOCAL_VARIABLES, _strictTypingLocalVariables);
058        _ifThenElseExecuteTypeDefault = IfThenElse.ExecuteType.valueOf(
059                sharedPreferences.get(IF_THEN_ELSE_EXECUTE_TYPE_DEFAULT, _ifThenElseExecuteTypeDefault.name()));
060
061        setIsDirty(false);
062    }
063
064    @Override
065    public boolean compareValuesDifferent(LogixNGPreferences prefs) {
066        if (getStartLogixNGOnStartup() != prefs.getStartLogixNGOnStartup()) {
067            return true;
068        }
069        if (getInstallDebugger() != prefs.getInstallDebugger()) {
070            return true;
071        }
072        if (getShowSystemUserNames() != prefs.getShowSystemUserNames()) {
073            return true;
074        }
075        if (getTreeEditorHighlightRow() != prefs.getTreeEditorHighlightRow()) {
076            return true;
077        }
078        if (getShowSystemNameInException() != prefs.getShowSystemNameInException()) {
079            return true;
080        }
081        if (getStrictTypingGlobalVariables() != prefs.getStrictTypingGlobalVariables()) {
082            return true;
083        }
084        if (getStrictTypingLocalVariables() != prefs.getStrictTypingLocalVariables()) {
085            return true;
086        }
087        if (getIfThenElseExecuteTypeDefault() != prefs.getIfThenElseExecuteTypeDefault()) {
088            return true;
089        }
090        return (getErrorHandlingType() != prefs.getErrorHandlingType());
091    }
092
093    @Override
094    public void apply(LogixNGPreferences prefs) {
095        setStartLogixNGOnStartup(prefs.getStartLogixNGOnStartup());
096        setInstallDebugger(prefs.getInstallDebugger());
097        setShowSystemUserNames(prefs.getShowSystemUserNames());
098        this.setErrorHandlingType(prefs.getErrorHandlingType());
099        setTreeEditorHighlightRow(prefs.getTreeEditorHighlightRow());
100        setShowSystemNameInException(prefs.getShowSystemNameInException());
101        setStrictTypingGlobalVariables(prefs.getStrictTypingGlobalVariables());
102        setStrictTypingLocalVariables(prefs.getStrictTypingLocalVariables());
103        setIfThenElseExecuteTypeDefault(prefs.getIfThenElseExecuteTypeDefault());
104    }
105
106    @Override
107    public void save() {
108        Preferences sharedPreferences = ProfileUtils.getPreferences(this.getProfile(), this.getClass(), true);
109        sharedPreferences.putBoolean(START_LOGIXNG_ON_LOAD, this.getStartLogixNGOnStartup());
110        sharedPreferences.putBoolean(INSTALL_DEBUGGER, this.getInstallDebugger());
111        sharedPreferences.putBoolean(SHOW_SYSTEM_USER_NAMES, this.getShowSystemUserNames());
112        sharedPreferences.put(ERROR_HANDLING_TYPE, this.getErrorHandlingType().name());
113        sharedPreferences.putBoolean(TREE_EDITOR_HIGHLIGHT_ROW, this.getTreeEditorHighlightRow());
114        sharedPreferences.putBoolean(SHOW_SYSTEM_NAME_IN_EXCEPTION, this.getShowSystemNameInException());
115        sharedPreferences.putBoolean(STRICT_TYPING_GLOBAL_VARIABLES, this.getStrictTypingGlobalVariables());
116        sharedPreferences.putBoolean(STRICT_TYPING_LOCAL_VARIABLES, this.getStrictTypingLocalVariables());
117        sharedPreferences.put(IF_THEN_ELSE_EXECUTE_TYPE_DEFAULT, this.getIfThenElseExecuteTypeDefault().name());
118        setIsDirty(false);
119    }
120
121    @Override
122    public void setStartLogixNGOnStartup(boolean value) {
123        _startLogixNGOnLoad = value;
124        setIsDirty(true);
125    }
126
127    @Override
128    public boolean getStartLogixNGOnStartup() {
129        return _startLogixNGOnLoad;
130    }
131
132    @Override
133    public void setShowSystemUserNames(boolean value) {
134        _showSystemUserNames = value;
135        setIsDirty(true);
136    }
137
138    @Override
139    public boolean getShowSystemUserNames() {
140        return _showSystemUserNames;
141    }
142
143    @Override
144    public void setInstallDebugger(boolean value) {
145        _installDebugger = value;
146        setIsDirty(true);
147    }
148
149    @Override
150    public boolean getInstallDebugger() {
151        return _installDebugger;
152    }
153
154    @Override
155    public void setErrorHandlingType(ErrorHandlingType type) {
156        _errorHandlingType = type;
157        setIsDirty(true);
158    }
159
160    @Override
161    public ErrorHandlingType getErrorHandlingType() {
162        return _errorHandlingType;
163    }
164
165    @Override
166    public void setTreeEditorHighlightRow(boolean value) {
167        _treeEditorHighlightRow = value;
168        setIsDirty(true);
169    }
170
171    @Override
172    public boolean getTreeEditorHighlightRow() {
173        return _treeEditorHighlightRow;
174    }
175
176    @Override
177    public void setShowSystemNameInException(boolean value) {
178        _showSystemNameInException = value;
179        setIsDirty(true);
180    }
181
182    @Override
183    public boolean getShowSystemNameInException() {
184        return _showSystemNameInException;
185    }
186
187    @Override
188    public void setStrictTypingGlobalVariables(boolean value) {
189        _strictTypingGlobalVariables = value;
190        setIsDirty(true);
191    }
192
193    @Override
194    public boolean getStrictTypingGlobalVariables() {
195        return _strictTypingGlobalVariables;
196    }
197
198    @Override
199    public void setStrictTypingLocalVariables(boolean value) {
200        _strictTypingLocalVariables = value;
201        setIsDirty(true);
202    }
203
204    @Override
205    public boolean getStrictTypingLocalVariables() {
206        return _strictTypingLocalVariables;
207    }
208
209    @Override
210    public void setIfThenElseExecuteTypeDefault(IfThenElse.ExecuteType value) {
211        _ifThenElseExecuteTypeDefault = value;
212        setIsDirty(true);
213    }
214
215    @Override
216    public IfThenElse.ExecuteType getIfThenElseExecuteTypeDefault() {
217        return _ifThenElseExecuteTypeDefault;
218    }
219
220//    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogixNGPreferences.class);
221}