/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * * For information about the authors of this project Have a look * at the AUTHORS file in the root of this project. */ package net.sourceforge.fullsync.impl; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; import java.util.Properties; import net.sourceforge.fullsync.Crypt; import net.sourceforge.fullsync.ExceptionHandler; import net.sourceforge.fullsync.Preferences; import net.sourceforge.fullsync.Util; import org.eclipse.swt.graphics.Rectangle; public class ConfigurationPreferences implements Preferences { private static final String PREFERENCE_DEFAULT_PROFILE_LIST_STYLE = "NiceListView"; private static final String PREFERENCE_DEFAULT_LANGUAGE_CODE = "en"; private static final String PREFERENCE_WINDOW_STATE_HEIGHT = "Interface.WindowState.height"; private static final String PREFERENCE_WINDOW_STATE_WIDTH = "Interface.WindowState.width"; private static final String PREFERENCE_WINDOW_STATE_Y = "Interface.WindowState.y"; private static final String PREFERENCE_WINDOW_STATE_X = "Interface.WindowState.x"; private static final String PREFERENCE_WINDOW_STATE_MINIMIZED = "Interface.WindowState.minimized"; private static final String PREFERENCE_WINDOW_STATE_MAXIMIZED = "Interface.WindowState.maximized"; private static final String PREFERENCE_SKIP_WELCOME_SCREEN = "Interface.SkipWelcomeScreen"; private static final String PREFERENCE_HELP_SHOWN = "Interface.HelpShown"; private static final String PREFERENCE_LANGUAGE_CODE = "Interface.LanguageCode"; private static final String PREFERENCE_AUTOSTART_SCHEDULER = "Interface.AutostartScheduler"; private static final String PREFERENCE_REMOTE_CONNECTION_PASSWORD = "RemoteConnection.password"; private static final String PREFERENCE_REMOTE_CONNECTION_PORT = "RemoteConnection.port"; private static final String PREFERENCE_REMOTE_CONNECTION_ACTIVE = "RemoteConnection.active"; private static final String PREFERENCE_PROFILE_LIST_STYLE = "Interface.ProfileList.Style"; private static final String PREFERENCE_SYSTEM_TRAY_ENABLED = "Interface.SystemTray.Enabled"; private static final String PREFERENCE_MINIMIZE_MINIMIZES_TO_SYSTEM_TRAY = "Interface.MinimizeMinimizesToSystemTray"; private static final String PREFERENCE_CLOSE_MINIMIZES_TO_SYSTEM_TRAY = "Interface.CloseMinimizesToSystemTray"; private static final String PREFERENCE_CONFIRM_EXIT = "Interface.ConfirmExit"; private static final String PREFERENCE_FULLSYNC_VERSION = "FullSync.Version"; private final String configFileName; private final Properties props; private final String lastFullSyncVersion; public ConfigurationPreferences(final String configFile) { configFileName = configFile; props = new Properties(); File file = new File(configFileName); if (file.exists()) { try (Reader reader = new FileReader(file)) { props.load(reader); } catch (IOException e) { ExceptionHandler.reportException(e); } } lastFullSyncVersion = props.getProperty(PREFERENCE_FULLSYNC_VERSION, ""); } private boolean getProperty(String name, boolean defaultValue) { String sValue = props.getProperty(name); return null == sValue ? defaultValue : Boolean.parseBoolean(sValue); } private String getProperty(String name, String defaultValue) { return props.getProperty(name, defaultValue); } private int getProperty(String name, int defaultValue) { String sValue = props.getProperty(name); return null == sValue ? defaultValue : Integer.parseInt(sValue, 10); } private void setProperty(String name, boolean value) { props.setProperty(name, Boolean.toString(value)); } private void setProperty(String name, int value) { props.setProperty(name, Integer.toString(value)); } private void setProperty(String name, String value) { props.setProperty(name, value); } @Override public void save() { String currentFullSyncVersion = Util.getFullSyncVersion(); props.setProperty(PREFERENCE_FULLSYNC_VERSION, currentFullSyncVersion); try (Writer writer = new FileWriter(configFileName)) { props.store(writer, null); writer.flush(); } catch (IOException e) { ExceptionHandler.reportException(e); } } @Override public boolean confirmExit() { return getProperty(PREFERENCE_CONFIRM_EXIT, true); } @Override public void setConfirmExit(final boolean bool) { setProperty(PREFERENCE_CONFIRM_EXIT, bool); } @Override public boolean closeMinimizesToSystemTray() { return getProperty(PREFERENCE_CLOSE_MINIMIZES_TO_SYSTEM_TRAY, false); } @Override public void setCloseMinimizesToSystemTray(final boolean bool) { setProperty(PREFERENCE_CLOSE_MINIMIZES_TO_SYSTEM_TRAY, bool); } @Override public boolean minimizeMinimizesToSystemTray() { return getProperty(PREFERENCE_MINIMIZE_MINIMIZES_TO_SYSTEM_TRAY, false); } @Override public void setMinimizeMinimizesToSystemTray(final boolean bool) { setProperty(PREFERENCE_MINIMIZE_MINIMIZES_TO_SYSTEM_TRAY, bool); } @Override public boolean systemTrayEnabled() { return getProperty(PREFERENCE_SYSTEM_TRAY_ENABLED, true); } @Override public void setSystemTrayEnabled(final boolean bool) { setProperty(PREFERENCE_SYSTEM_TRAY_ENABLED, bool); } @Override public String getProfileListStyle() { return getProperty(PREFERENCE_PROFILE_LIST_STYLE, PREFERENCE_DEFAULT_PROFILE_LIST_STYLE); } @Override public void setProfileListStyle(final String profileListStyle) { setProperty(PREFERENCE_PROFILE_LIST_STYLE, profileListStyle); } @Override public boolean listeningForRemoteConnections() { return getProperty(PREFERENCE_REMOTE_CONNECTION_ACTIVE, false); } @Override public void setListeningForRemoteConnections(final boolean bool) { setProperty(PREFERENCE_REMOTE_CONNECTION_ACTIVE, bool); } @Override public int getRemoteConnectionsPort() { return getProperty(PREFERENCE_REMOTE_CONNECTION_PORT, 10000); } @Override public void setRemoteConnectionsPort(final int port) { setProperty(PREFERENCE_REMOTE_CONNECTION_PORT, port); } @Override public String getRemoteConnectionsPassword() { String passwd = getProperty(PREFERENCE_REMOTE_CONNECTION_PASSWORD, ""); String decryptedPassword = Crypt.decrypt(passwd); return decryptedPassword; } @Override public void setRemoteConnectionsPassword(final String password) { String encryptedPasswd = Crypt.encrypt(password); setProperty(PREFERENCE_REMOTE_CONNECTION_PASSWORD, encryptedPasswd); } @Override public boolean getAutostartScheduler() { return getProperty(PREFERENCE_AUTOSTART_SCHEDULER, false); } @Override public void setAutostartScheduler(final boolean bool) { setProperty(PREFERENCE_AUTOSTART_SCHEDULER, bool); } @Override public String getLanguageCode() { return getProperty(PREFERENCE_LANGUAGE_CODE, PREFERENCE_DEFAULT_LANGUAGE_CODE); } @Override public void setLanguageCode(final String code) { setProperty(PREFERENCE_LANGUAGE_CODE, code); } @Override public boolean getHelpShown() { return getProperty(PREFERENCE_HELP_SHOWN, false); } @Override public void setHelpShown(final boolean shown) { setProperty(PREFERENCE_HELP_SHOWN, shown); } @Override public boolean getSkipWelcomeScreen() { return getProperty(PREFERENCE_SKIP_WELCOME_SCREEN, false); } @Override public void setSkipWelcomeScreen(boolean skip) { setProperty(PREFERENCE_SKIP_WELCOME_SCREEN, skip); } @Override public String getLastVersion() { return lastFullSyncVersion; } @Override public void setWindowMaximized(boolean maximized) { setProperty(PREFERENCE_WINDOW_STATE_MAXIMIZED, maximized); } @Override public boolean getWindowMaximized() { return getProperty(PREFERENCE_WINDOW_STATE_MAXIMIZED, false); } @Override public void setWindowMinimized(boolean minimized) { setProperty(PREFERENCE_WINDOW_STATE_MINIMIZED, minimized); } @Override public boolean getWindowMinimized() { return getProperty(PREFERENCE_WINDOW_STATE_MINIMIZED, false); } @Override public void setWindowBounds(Rectangle b) { setProperty(PREFERENCE_WINDOW_STATE_X, b.x); setProperty(PREFERENCE_WINDOW_STATE_Y, b.y); setProperty(PREFERENCE_WINDOW_STATE_WIDTH, b.width); setProperty(PREFERENCE_WINDOW_STATE_HEIGHT, b.height); } @Override public Rectangle getWindowBounds() { int x = getProperty(PREFERENCE_WINDOW_STATE_X, 0); int y = getProperty(PREFERENCE_WINDOW_STATE_Y, 0); int width = getProperty(PREFERENCE_WINDOW_STATE_WIDTH, 0); int height = getProperty(PREFERENCE_WINDOW_STATE_HEIGHT, 0); return new Rectangle(x, y, width, height); } }