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}