package com.laboki.eclipse.plugin.smartsave.preferences; import java.util.logging.Level; import java.util.logging.Logger; import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.osgi.service.prefs.BackingStoreException; import com.laboki.eclipse.plugin.smartsave.contexts.EditorContext; public enum Store { INSTANCE; private static final boolean CAN_SAVE_IF_WARNINGS_DEFAULT_VALUE = true; private static final boolean CAN_SAVE_IF_ERRORS_DEFAULT_VALUE = false; private static final boolean CAN_SAVE_AUTOMATICALLY_DEFAULT_VALUE = true; private static final int SAVE_INTERVAL_IN_SECONDS_DEFAULT_VALUE = 3; private static final String CONTENT_TYPE_BLACKLIST_DEFAULT_VALUE = ""; private static final String SAVE_AUTOMATICALLY_KEY = "saveAutomatically"; private static final String WARNINGS_KEY = "saveIfWarnings"; private static final String ERRORS_KEY = "saveIfErrors"; private static final String SAVE_INTERVAL_KEY = "saveIntervalInSeconds"; private static final String CONTENT_TYPE_BLACKLIST_KEY = "contentTypeBlacklist"; private static final Logger LOGGER = Logger.getLogger(Store.class.getName()); public static String getContentTypeBlacklist() { return Store.getString(Store.CONTENT_TYPE_BLACKLIST_KEY, Store.CONTENT_TYPE_BLACKLIST_DEFAULT_VALUE).trim(); } public static void setContentTypeBlacklist(final String contentTypeBlacklist) { if (Store.getContentTypeBlacklist().equals(contentTypeBlacklist.trim())) return; Store.setString(Store.CONTENT_TYPE_BLACKLIST_KEY, contentTypeBlacklist.trim()); } public static void setCanSaveAutomatically(final boolean saveAutomatically) { if (Store.getCanSaveAutomatically() == saveAutomatically) return; Store.setBoolean(Store.SAVE_AUTOMATICALLY_KEY, saveAutomatically); } public static boolean getCanSaveAutomatically() { return Store.getBoolean(Store.SAVE_AUTOMATICALLY_KEY, Store.CAN_SAVE_AUTOMATICALLY_DEFAULT_VALUE); } public static void toggleCanSaveAutomatically() { Store.setCanSaveAutomatically(!Store.getCanSaveAutomatically()); } public static void setCanSaveIfWarnings(final boolean checkWarnings) { if (Store.getCanSaveIfWarnings() == checkWarnings) return; Store.setBoolean(Store.WARNINGS_KEY, checkWarnings); } public static boolean getCanSaveIfWarnings() { return Store.getBoolean(Store.WARNINGS_KEY, Store.CAN_SAVE_IF_WARNINGS_DEFAULT_VALUE); } public static void setCanSaveIfErrors(final boolean checkErrors) { if (Store.getCanSaveIfErrors() == checkErrors) return; Store.setBoolean(Store.ERRORS_KEY, checkErrors); } public static boolean getCanSaveIfErrors() { return Store.getBoolean(Store.ERRORS_KEY, Store.CAN_SAVE_IF_ERRORS_DEFAULT_VALUE); } public static void setSaveIntervalInSeconds(final int saveIntervalInSeconds) { if (Store.getSaveIntervalInSeconds() == saveIntervalInSeconds) return; Store.setInt(Store.SAVE_INTERVAL_KEY, saveIntervalInSeconds); } public static int getSaveIntervalInSeconds() { return Store.getInt(Store.SAVE_INTERVAL_KEY, Store.SAVE_INTERVAL_IN_SECONDS_DEFAULT_VALUE); } private static void setBoolean(final String key, final boolean value) { final IEclipsePreferences pref = Store.getPreferences(); pref.putBoolean(key, value); Store.update(pref); } private static boolean getBoolean(final String key, final boolean defaultValue) { final IEclipsePreferences pref = Store.getPreferences(); Store.update(pref); return pref.getBoolean(key, defaultValue); } private static void setInt(final String key, final int value) { final IEclipsePreferences pref = Store.getPreferences(); pref.putInt(key, value); Store.update(pref); } private static int getInt(final String key, final int defaultValue) { final IEclipsePreferences pref = Store.getPreferences(); Store.update(pref); return pref.getInt(key, defaultValue); } private static void setString(final String key, final String value) { final IEclipsePreferences pref = Store.getPreferences(); pref.put(key, value); Store.update(pref); } private static String getString(final String key, final String defaultValue) { final IEclipsePreferences pref = Store.getPreferences(); Store.update(pref); return pref.get(key, defaultValue); } public static void clear() { try { Store.tryToClear(); } catch (final BackingStoreException e) { Store.LOGGER.log(Level.OFF, e.getMessage(), e); } } private static void tryToClear() throws BackingStoreException { final IEclipsePreferences pref = Store.getPreferences(); pref.clear(); Store.update(pref); } public static IEclipsePreferences getPreferences() { return ConfigurationScope.INSTANCE.getNode(EditorContext.PLUGIN_ID); } private static void update(final IEclipsePreferences preferences) { try { Store.tryToUpdate(preferences); } catch (final BackingStoreException e) { Store.LOGGER.log(Level.OFF, e.getMessage(), e); } } private static void tryToUpdate(final IEclipsePreferences preferences) throws BackingStoreException { preferences.flush(); preferences.sync(); } }