001package jmri.jmrit.symbolicprog;
002
003import java.util.Set;
004import java.util.prefs.BackingStoreException;
005import java.util.prefs.Preferences;
006import javax.annotation.Nonnull;
007import jmri.implementation.FileLocationsPreferences;
008import jmri.jmrit.symbolicprog.tabbedframe.PaneProgFrame;
009import jmri.profile.Profile;
010import jmri.profile.ProfileUtils;
011import jmri.spi.PreferencesManager;
012import jmri.util.prefs.AbstractPreferencesManager;
013import jmri.util.prefs.InitializationException;
014import org.openide.util.lookup.ServiceProvider;
015import org.slf4j.Logger;
016import org.slf4j.LoggerFactory;
017
018/**
019 *
020 * @author Randall Wood (C) 2015
021 */
022@ServiceProvider(service = PreferencesManager.class)
023public class ProgrammerConfigManager extends AbstractPreferencesManager {
024
025    private final static Logger log = LoggerFactory.getLogger(ProgrammerConfigManager.class);
026    public final static String DEFAULT_FILE = "defaultFile";
027    public final static String SHOW_EMPTY_PANES = "showEmptyPanes";
028    public final static String SHOW_CV_NUMBERS = "showCvNumbers";
029    public final static String CAN_CACHE_DEFAULT = "canCacheDefault";
030    public final static String DO_CONFIRM_READ = "doConfirmRead";
031    public final static String DISABLE_PROGRAMMING_TRACK = "disableProgrammingTrack";
032    public final static String DISABLE_PROGRAMMING_ON_MAIN = "disableProgrammingOnMain";
033    private String defaultFile = null;
034    private boolean showEmptyPanes = true;
035    private boolean showCvNumbers = false;
036    private boolean canCacheDefault = false;
037    private boolean doConfirmRead = false;
038    private boolean disableProgrammingTrack = false;
039    private boolean disableProgrammingOnMain = false;
040
041    @Override
042    public void initialize(Profile profile) throws InitializationException {
043        if (!this.isInitialized(profile)) {
044            Preferences preferences = ProfileUtils.getPreferences(profile, this.getClass(), true);
045            if (preferences.get(DEFAULT_FILE, this.getDefaultFile()) != null) {
046                this.setDefaultFile(preferences.get(DEFAULT_FILE, this.getDefaultFile()));
047                ProgDefault.setDefaultProgFile(this.getDefaultFile());
048            }
049
050            this.setShowEmptyPanes(preferences.getBoolean(SHOW_EMPTY_PANES, this.isShowEmptyPanes()));
051            PaneProgFrame.setShowEmptyPanes(this.isShowEmptyPanes());
052
053            this.setShowCvNumbers(preferences.getBoolean(SHOW_CV_NUMBERS, this.isShowCvNumbers()));
054            PaneProgFrame.setShowCvNumbers(this.isShowCvNumbers());
055
056            this.setCanCacheDefault(preferences.getBoolean(CAN_CACHE_DEFAULT, this.isCanCacheDefault()));
057            PaneProgFrame.setCanCacheDefault(this.isCanCacheDefault());
058
059            this.setDoConfirmRead(preferences.getBoolean(DO_CONFIRM_READ, this.isDoConfirmRead()));
060            PaneProgFrame.setDoConfirmRead(this.isDoConfirmRead());
061
062            this.setDisableProgrammingTrack(preferences.getBoolean(DISABLE_PROGRAMMING_TRACK, this.isDisableProgrammingTrack()));
063            PaneProgFrame.setDisableProgrammingTrack(this.isDisableProgrammingTrack());
064
065            this.setDisableProgrammingOnMain(preferences.getBoolean(DISABLE_PROGRAMMING_ON_MAIN, this.isDisableProgrammingOnMain()));
066            PaneProgFrame.setDisableProgrammingOnMain(this.isDisableProgrammingOnMain());
067
068            this.setInitialized(profile, true);
069        }
070    }
071
072    @Override
073    @Nonnull
074    public Set<Class<? extends PreferencesManager>> getRequires() {
075        Set<Class<? extends PreferencesManager>> requires = super.getRequires();
076        requires.add(FileLocationsPreferences.class);
077        return requires;
078    }
079
080    @Override
081    @Nonnull
082    public Set<Class<?>> getProvides() {
083        Set<Class<?>> provides = super.getProvides();
084        provides.stream().forEach((provide) -> {
085            log.debug("ProgammerConfigManager provides {}", provide);
086        });
087        return provides;
088    }
089
090    @Override
091    public void savePreferences(Profile profile) {
092        Preferences preferences = ProfileUtils.getPreferences(profile, this.getClass(), true);
093        if (this.defaultFile != null) {
094            preferences.put(DEFAULT_FILE, this.defaultFile);
095        } else {
096            preferences.remove(DEFAULT_FILE);
097        }
098        preferences.putBoolean(SHOW_EMPTY_PANES, this.showEmptyPanes);
099        preferences.putBoolean(SHOW_CV_NUMBERS, this.showCvNumbers);
100        preferences.putBoolean(CAN_CACHE_DEFAULT, this.canCacheDefault);
101        preferences.putBoolean(DO_CONFIRM_READ, this.doConfirmRead);
102        preferences.putBoolean(DISABLE_PROGRAMMING_TRACK, this.disableProgrammingTrack);
103        preferences.putBoolean(DISABLE_PROGRAMMING_ON_MAIN, this.disableProgrammingOnMain);
104        try {
105            preferences.sync();
106        } catch (BackingStoreException ex) {
107            log.error("Unable to save preferences.", ex);
108        }
109    }
110
111    /**
112     * @return the defaultFile
113     */
114    public String getDefaultFile() {
115        return defaultFile;
116    }
117
118    /**
119     * @param defaultFile the defaultFile to set
120     */
121    public void setDefaultFile(String defaultFile) {
122        java.lang.String oldDefaultFile = this.defaultFile;
123        this.defaultFile = defaultFile;
124        firePropertyChange(DEFAULT_FILE, oldDefaultFile, defaultFile);
125    }
126
127    /**
128     * @return the showEmptyPanes
129     */
130    public boolean isShowEmptyPanes() {
131        return showEmptyPanes;
132    }
133
134    /**
135     * @param showEmptyPanes the showEmptyPanes to set
136     */
137    public void setShowEmptyPanes(boolean showEmptyPanes) {
138        boolean oldShowEmptyPanes = this.showEmptyPanes;
139        this.showEmptyPanes = showEmptyPanes;
140        firePropertyChange(SHOW_EMPTY_PANES, oldShowEmptyPanes, showEmptyPanes);
141    }
142
143    /**
144     * @return the showCvNumbers
145     */
146    public boolean isShowCvNumbers() {
147        return showCvNumbers;
148    }
149
150    /**
151     * @param showCvNumbers the showCvNumbers to set
152     */
153    public void setShowCvNumbers(boolean showCvNumbers) {
154        boolean oldShowCvNumbers = this.showCvNumbers;
155        this.showCvNumbers = showCvNumbers;
156        firePropertyChange(SHOW_CV_NUMBERS, oldShowCvNumbers, showCvNumbers);
157    }
158
159    /**
160     * @return the canCacheDefault
161     */
162    public boolean isCanCacheDefault() {
163        return canCacheDefault;
164    }
165
166    /**
167     * @param canCacheDefault new value
168     */
169    public void setCanCacheDefault(boolean canCacheDefault) {
170        boolean oldCanCacheDefault = this.canCacheDefault;
171        this.canCacheDefault = canCacheDefault;
172        firePropertyChange(CAN_CACHE_DEFAULT, oldCanCacheDefault, canCacheDefault);
173    }
174
175    /**
176     * @return the doConfirmRead
177     */
178    public boolean isDoConfirmRead() {
179        return doConfirmRead;
180    }
181
182    /**
183     * @return the disableProgrammingTrack
184     */
185    public boolean isDisableProgrammingTrack() {
186        return disableProgrammingTrack;
187    }
188
189    /**
190     * @return the disableProgrammingOnMain
191     */
192    public boolean isDisableProgrammingOnMain() {
193        return disableProgrammingOnMain;
194    }
195
196    /**
197     * @param doConfirmRead new value
198     */
199    public void setDoConfirmRead(boolean doConfirmRead) {
200        boolean oldDoConfirmRead = this.doConfirmRead;
201        this.doConfirmRead = doConfirmRead;
202        firePropertyChange(DO_CONFIRM_READ, oldDoConfirmRead, doConfirmRead);
203    }
204
205    /**
206     * @param disableProgrammingTrack new value
207     */
208    public void setDisableProgrammingTrack(boolean disableProgrammingTrack) {
209        boolean oldDisableProgrammingTrack = this.disableProgrammingTrack;
210        this.disableProgrammingTrack = disableProgrammingTrack;
211        firePropertyChange(DISABLE_PROGRAMMING_TRACK, oldDisableProgrammingTrack, disableProgrammingTrack);
212    }
213
214    /**
215     * @param disableProgrammingOnMain new value
216     */
217    public void setDisableProgrammingOnMain(boolean disableProgrammingOnMain) {
218        boolean oldDisableProgrammingOnMain = this.disableProgrammingOnMain;
219        this.disableProgrammingOnMain = disableProgrammingOnMain;
220        firePropertyChange(DISABLE_PROGRAMMING_ON_MAIN, oldDisableProgrammingOnMain, disableProgrammingOnMain);
221    }
222
223}