/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo 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 3 of the License, or * (at your option) any later version. * * OpenFlexo 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 OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo; import java.awt.Font; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.UIManager; import org.openflexo.foundation.utils.FlexoFont; import org.openflexo.prefs.ContextPreferences; import org.openflexo.prefs.FlexoPreferences; import org.openflexo.swing.CustomPopup; import org.openflexo.swing.LookAndFeel; import org.openflexo.toolbox.FileResource; import org.openflexo.toolbox.ProxyUtils; import org.openflexo.toolbox.ToolBox; public class AdvancedPrefs extends ContextPreferences { private static final Logger logger = Logger.getLogger(GeneralPreferences.class.getPackage().getName()); private static final Class<AdvancedPrefs> ADVANCED_PREFERENCES = AdvancedPrefs.class; public static final String LAST_VISITED_DIRECTORY_KEY = "lastVisitedDirectory"; public static final String ECLIPSE_WORKSPACE_DIRECTORY_KEY = "eclipseWorkspaceDirectory"; public static final String BROWSERFONT_KEY = "browser_font"; public static final String BUG_REPORT_URL_KEY = "bug_report_url"; public static final String BUG_REPORT_USER = "bug_report_user"; public static final String BUG_REPORT_PASWORD = "bug_report_password"; public static final String WEB_SERVICE_INSTANCE = "webServiceInstance"; public static final String WEB_SERVICE_URL_KEY = "webServiceUrl"; public static final String WEB_SERVICE_LOGIN_KEY = "webServiceLogin"; public static final String WEB_SERVICE_PWD_KEY = "webServicePwd"; public static final String WEB_SERVICE_REMEMBERANDDONTASKPARAMSANYMORE_KEY = "rememberAndDontAskWebServiceParamsAnymore"; public static final String FLEXO_SERVER_INSTANCE_URL = "flexoserver_instance_url"; public static final String ENABLE_UNDO_MANAGER = "enableUndoManager"; public static final String UNDO_LEVELS = "undoLevels"; public static final String SYNCHRONIZED_BROWSER = "synchronizedBrowser"; public static final String HIGHLIGHT_UNCOMMENTED_ITEMS = "hightlightUncommentedItem"; public static final String CLOSE_POPUP_ON_MOUSE_OUT = "close_popup_on_mouse_out"; public static final String LOOK_AND_FEEL = "look_and_feel"; public static final String HIDE_FILTERED_OBJECTS = "hideFilteredObjects"; private static final String USE_DEFAULT_PROXY_SETTINGS = "UseDefaultProxySettings"; private static final String NO_PROXY = "NoProxy"; private static final String NO_PROXY_HOSTS = "NoProxyHosts"; private static final String HTTP_PROXY_HOST = "HTTPProxyHost"; private static final String HTTP_PROXY_PORT = "HTTPProxyPort"; private static final String HTTPS_PROXY_HOST = "HTTPSProxyHost"; private static final String HTTPS_PROXY_PORT = "HTTPSProxyPort"; private static final String PROXY_LOGIN = "ProxyLogin"; private static final String PROXY_PASSWORD = "ProxyPassword"; public static final String SHOW_ALL_TABS = "show_all_tabs"; public static final String PREFERENCE_OVERRIDE_FROM_FLEXO_PROPERTIES_DONE = "preference_override_from_flexo_properties_done"; @Override public String getName() { return "advanced"; } @Override public File getInspectorFile() { return new FileResource("Config/Preferences/AdvancedPrefs.inspector"); } public static File getLastVisitedDirectory() { if (logger.isLoggable(Level.FINE)) { logger.fine("getLastVisitedDirectory"); } return getPreferences().getDirectoryProperty(LAST_VISITED_DIRECTORY_KEY, true); } public static void setLastVisitedDirectory(File f) { if (logger.isLoggable(Level.FINE)) { logger.fine("setLastVisitedDirectory"); } getPreferences().setDirectoryProperty(LAST_VISITED_DIRECTORY_KEY, f, true); } public static File getEclipseWorkspaceDirectory() { if (logger.isLoggable(Level.FINE)) { logger.fine("getEclipseWorkspaceDirectory"); } return getPreferences().getDirectoryProperty(ECLIPSE_WORKSPACE_DIRECTORY_KEY, true); } public static void setEclipseWorkspaceDirectory(File f) { if (logger.isLoggable(Level.FINE)) { logger.fine("setEclipseWorkspaceDirectory"); } getPreferences().setDirectoryProperty(ECLIPSE_WORKSPACE_DIRECTORY_KEY, f, true); } public static String getBugReportUrl() { String answer = getPreferences().getProperty(BUG_REPORT_URL_KEY); if (answer == null) { setBugReportUrl(answer = "https://bugs.openflexo.com"); } return answer; } public static void setBugReportUrl(String bugReportURL) { getPreferences().setProperty(BUG_REPORT_URL_KEY, bugReportURL); } public static String getBugReportPassword() { return getPreferences().getPasswordProperty(BUG_REPORT_PASWORD); } public static void setBugReportPassword(String password) { getPreferences().setPasswordProperty(BUG_REPORT_PASWORD, password); } public static String getBugReportUser() { return getPreferences().getProperty(BUG_REPORT_USER); } public static void setBugReportUser(String user) { getPreferences().setProperty(BUG_REPORT_USER, user); } public static boolean getSynchronizedBrowser() { if (logger.isLoggable(Level.FINE)) { logger.fine("getSynchronizedBrowser"); } return getPreferences().getProperty(SYNCHRONIZED_BROWSER) != "false"; } public static void setSynchronizedBrowser(boolean synchronizedBrowser) { if (logger.isLoggable(Level.FINE)) { logger.fine("setSynchronizedBrowser"); } getPreferences().setProperty(SYNCHRONIZED_BROWSER, synchronizedBrowser ? "true" : "false"); } public static FlexoFont getBrowserFont() { if (logger.isLoggable(Level.FINER)) { logger.finer("getBrowserFont"); } FlexoFont reply = FlexoFont.get(getPreferences().getProperty(BROWSERFONT_KEY)); return reply == null ? new FlexoFont("Sans Serif", Font.PLAIN, 11) : reply; } public static void setBrowserFont(FlexoFont font) { if (logger.isLoggable(Level.FINE)) { logger.fine("setBrowserFont"); } getPreferences().setProperty(BROWSERFONT_KEY, font.toString()); } public static boolean getCloseOnMouseOut() { String answer = getPreferences().getProperty(CLOSE_POPUP_ON_MOUSE_OUT); if (answer == null) { setCloseOnMouseOut(false); return false; } return Boolean.parseBoolean(answer); } public static void setCloseOnMouseOut(boolean closeOnMouseOut) { getPreferences().setProperty(CLOSE_POPUP_ON_MOUSE_OUT, String.valueOf(closeOnMouseOut)); CustomPopup.configuration.setCloseWhenPointerLeavesPopup(closeOnMouseOut); } public static boolean getEnableUndoManager() { String answer = getPreferences().getProperty(ENABLE_UNDO_MANAGER); if (answer == null) { setEnableUndoManager(true); return getEnableUndoManager(); } return Boolean.parseBoolean(answer); } public static void setEnableUndoManager(boolean enableUndoManager) { getPreferences().setProperty(ENABLE_UNDO_MANAGER, String.valueOf(enableUndoManager)); } public static boolean getHightlightUncommentedItem() { String answer = getPreferences().getProperty(HIGHLIGHT_UNCOMMENTED_ITEMS); if (answer == null) { setHightlightUncommentedItem(false); return getHightlightUncommentedItem(); } return Boolean.parseBoolean(answer); } public static void setHightlightUncommentedItem(boolean enableUndoManager) { getPreferences().setProperty(HIGHLIGHT_UNCOMMENTED_ITEMS, String.valueOf(enableUndoManager)); } public static Integer getUndoLevels() { Integer answer = getPreferences().getIntegerProperty(UNDO_LEVELS); if (answer == null) { setUndoLevels(20); return getUndoLevels(); } return answer; } public static void setUndoLevels(Integer undoLevels) { getPreferences().setProperty(UNDO_LEVELS, String.valueOf(undoLevels.intValue())); } public static LookAndFeel getLookAndFeel() { String returned = getPreferences().getProperty(ToolBox.getPLATFORM() + LOOK_AND_FEEL); if (returned == null) { returned = getPreferences().getProperty(LOOK_AND_FEEL); } if (returned == null) { returned = UIManager.getSystemLookAndFeelClassName(); } setLookAndFeel(LookAndFeel.get(returned)); return LookAndFeel.get(returned); } public static String getLookAndFeelString() { return LookAndFeel.lookAndFeelConverter.convertToString(getLookAndFeel()); } public static void setLookAndFeel(LookAndFeel value) { if (value == null) { value = LookAndFeel.getDefaultLookAndFeel(); } getPreferences().setProperty(ToolBox.getPLATFORM() + LOOK_AND_FEEL, LookAndFeel.lookAndFeelConverter.convertToString(value)); Flexo.initUILAF(LookAndFeel.lookAndFeelConverter.convertToString(value)); } public static void save() { FlexoPreferences.savePreferences(true); } public static boolean hideFilteredObjects() { Boolean hideFilteredObjects = getPreferences().getBooleanProperty(HIDE_FILTERED_OBJECTS); if (hideFilteredObjects == null) { setHideFilteredObjects(true); hideFilteredObjects = Boolean.TRUE; } return hideFilteredObjects; } public static void setHideFilteredObjects(boolean enabled) { getPreferences().setBooleanProperty(HIDE_FILTERED_OBJECTS, enabled); } public static String getWebServiceUrl() { String answer = getPreferences().getProperty(WEB_SERVICE_URL_KEY); if (answer == null) { setWebServiceUrl("https://server.openflexo.com/Flexo/WebObjects/FlexoServer.woa/ws/PPMWebService"); return getWebServiceUrl(); } return answer; } public static AdvancedPrefs getPreferences() { return preferences(ADVANCED_PREFERENCES); } public static void setWebServiceUrl(String webServiceUrl) { getPreferences().setProperty(WEB_SERVICE_URL_KEY, webServiceUrl); } public static String getWebServiceLogin() { String answer = getPreferences().getProperty(WEB_SERVICE_LOGIN_KEY); return answer; } public static void setWebServiceLogin(String webServiceLogin) { getPreferences().setProperty(WEB_SERVICE_LOGIN_KEY, webServiceLogin); } public static String getWebServiceMd5Password() { String answer = getPreferences().getProperty(WEB_SERVICE_PWD_KEY); return answer; } public static void setWebServiceMd5Password(String webServiceMd5Password) { getPreferences().setProperty(WEB_SERVICE_PWD_KEY, webServiceMd5Password); } public static boolean getRememberAndDontAskWebServiceParamsAnymore() { Boolean b = getPreferences().getBooleanProperty(WEB_SERVICE_REMEMBERANDDONTASKPARAMSANYMORE_KEY); if (b == null) { setRememberAndDontAskWebServiceParamsAnymore(false); return getRememberAndDontAskWebServiceParamsAnymore(); } return b; } public static void setRememberAndDontAskWebServiceParamsAnymore(boolean rememberAndDontAskWebServiceParamsAnymore) { getPreferences().setBooleanProperty(WEB_SERVICE_REMEMBERANDDONTASKPARAMSANYMORE_KEY, rememberAndDontAskWebServiceParamsAnymore); } private static boolean isApplying = false; public static void applyProxySettings() { if (!isApplying) { isApplying = true; try { System.setProperty("java.net.useSystemProxies", String.valueOf(getUseDefaultProxySettings())); if (!getUseDefaultProxySettings() && !getNoProxy()) { String proxyHost = getProxyHost(); if (proxyHost != null) { System.setProperty("http.proxyHost", proxyHost); } String sProxyHost = getSProxyHost(); if (sProxyHost != null) { System.setProperty("https.proxyHost", sProxyHost); } Integer proxyPort = getProxyPort(); if (proxyPort != null) { System.setProperty("http.proxyPort", String.valueOf(proxyPort)); } Integer sProxyPort = getSProxyPort(); if (sProxyPort != null) { System.setProperty("https.proxyPort", String.valueOf(sProxyPort)); } List<String> noProxyHosts = getNoProxyHosts(); if (noProxyHosts != null && noProxyHosts.size() > 0) { StringBuilder sb = new StringBuilder(); for (String noProxyHost : noProxyHosts) { if (sb.length() > 0) { sb.append('|'); } sb.append(noProxyHost); } System.setProperty("http.nonProxyHosts", sb.toString()); } else { System.clearProperty("http.nonProxyHosts"); } } else { System.clearProperty("http.proxyHost"); System.clearProperty("http.proxyPort"); System.clearProperty("https.proxyHost"); System.clearProperty("https.proxyPort"); System.clearProperty("http.nonProxyHosts"); } } finally { isApplying = false; } } } public static boolean getUseDefaultProxySettings() { Boolean b = getPreferences().getBooleanProperty(USE_DEFAULT_PROXY_SETTINGS); if (b == null) { setUseDefaultProxySettings(ProxyUtils.getAutoConfigURL() == null); return getUseDefaultProxySettings(); } return b; } public static void setUseDefaultProxySettings(boolean useDefault) { getPreferences().setBooleanProperty(USE_DEFAULT_PROXY_SETTINGS, useDefault); applyProxySettings(); } public static boolean getNoProxy() { Boolean b = getPreferences().getBooleanProperty(NO_PROXY); if (b == null) { boolean noProxy = true; if (ToolBox.getPLATFORM() == ToolBox.WINDOWS) { try { noProxy = !ProxyUtils.isProxyEnabled(); if (logger.isLoggable(Level.INFO)) { logger.info("This machine seems to use a proxy? " + !noProxy); } } catch (RuntimeException e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, e.getMessage(), e); } } } setNoProxy(noProxy); return getNoProxy(); } return b; } public static void setNoProxy(boolean noProxy) { getPreferences().setBooleanProperty(NO_PROXY, noProxy); applyProxySettings(); } public static String getProxyHost() { String proxyHost = getPreferences().getProperty(HTTP_PROXY_HOST); if (proxyHost == null) { if (ToolBox.getPLATFORM() == ToolBox.WINDOWS) { try { if (ProxyUtils.autoDetectSettingsEnabled()) { List<String[]> proxies = ProxyUtils.getProxiesFromAutoConfigURL(ProxyUtils.getAutoConfigURL(), 80); if (proxies.size() > 0) { proxyHost = proxies.get(proxies.size() - 1)[0]; } } if (proxyHost == null) { String[] s = ProxyUtils.getHTTPProxyPort(false); if (s != null && s.length > 0) { proxyHost = s[0]; } } } catch (RuntimeException e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, e.getMessage(), e); } } } setProxyHost(proxyHost); } return proxyHost; } public static void setProxyHost(String proxyHost) { getPreferences().setProperty(HTTP_PROXY_HOST, proxyHost, "proxyHost"); applyProxySettings(); } public static Integer getProxyPort() { Integer proxyPort = getPreferences().getIntegerProperty(HTTP_PROXY_PORT); if (proxyPort == null) { if (ToolBox.getPLATFORM() == ToolBox.WINDOWS) { try { if (ProxyUtils.autoDetectSettingsEnabled()) { List<String[]> proxies = ProxyUtils.getProxiesFromAutoConfigURL(ProxyUtils.getAutoConfigURL(), 80); if (proxies.size() > 0) { proxyPort = Integer.parseInt(proxies.get(proxies.size() - 1)[1]); } } if (proxyPort == null) { String[] s = ProxyUtils.getHTTPProxyPort(false); if (s != null && s.length > 1) { proxyPort = Integer.parseInt(s[1]); } } } catch (RuntimeException e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, e.getMessage(), e); } } } setProxyPort(proxyPort); } return proxyPort; } public static void setProxyPort(Integer proxyPort) { getPreferences().setIntegerProperty(HTTP_PROXY_PORT, proxyPort, "proxyPort"); applyProxySettings(); } public static String getSProxyHost() { String proxyHost = getPreferences().getProperty(HTTPS_PROXY_HOST); if (proxyHost == null) { if (ToolBox.getPLATFORM() == ToolBox.WINDOWS) { try { if (ProxyUtils.autoDetectSettingsEnabled()) { List<String[]> proxies = ProxyUtils.getProxiesFromAutoConfigURL(ProxyUtils.getAutoConfigURL(), 443); if (proxies.size() > 0) { proxyHost = proxies.get(proxies.size() - 1)[0]; } } if (proxyHost == null) { String[] s = ProxyUtils.getHTTPProxyPort(true); if (s != null && s.length > 0) { proxyHost = s[0]; } } } catch (RuntimeException e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, e.getMessage(), e); } } } setSProxyHost(proxyHost); } return proxyHost; } public static void setSProxyHost(String proxyHost) { getPreferences().setProperty(HTTPS_PROXY_HOST, proxyHost, "sProxyHost"); applyProxySettings(); } public static Integer getSProxyPort() { Integer proxyPort = getPreferences().getIntegerProperty(HTTPS_PROXY_PORT); if (proxyPort == null) { if (ToolBox.getPLATFORM() == ToolBox.WINDOWS) { try { if (ProxyUtils.autoDetectSettingsEnabled()) { List<String[]> proxies = ProxyUtils.getProxiesFromAutoConfigURL(ProxyUtils.getAutoConfigURL(), 443); if (proxies.size() > 0) { proxyPort = Integer.parseInt(proxies.get(proxies.size() - 1)[1]); } } if (proxyPort == null) { String[] s = ProxyUtils.getHTTPProxyPort(true); if (s != null && s.length > 1) { proxyPort = Integer.parseInt(s[1]); } } } catch (RuntimeException e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, e.getMessage(), e); } } } setSProxyPort(proxyPort); } return proxyPort; } public static void setSProxyPort(Integer proxyPort) { getPreferences().setIntegerProperty(HTTPS_PROXY_PORT, proxyPort, "sProxyPort"); applyProxySettings(); } public static String getNoProxyHostsString() { String answer = getPreferences().getProperty(NO_PROXY_HOSTS); if (answer == null) { StringBuilder sb = new StringBuilder(); sb.append("localhost,127.0.0.1"); String localDomain = ProxyUtils.getLocalDomain(); if (localDomain != null) { sb.append(",*.").append(localDomain); } setNoProxyHostsString(sb.toString()); } return answer; } public static void setNoProxyHostsString(String string) { getPreferences().setProperty(NO_PROXY_HOSTS, string, "noProxyHostsString"); applyProxySettings(); } public static List<String> getNoProxyHosts() { String string = getNoProxyHostsString(); if (string != null && string.trim().length() > 0) { List<String> list = new ArrayList<String>(); String[] s = string.split(","); for (String string2 : s) { list.add(string2.trim()); } return list; } return null; } public static void redetectProxySettings() { setProxyHost(null); setProxyPort(null); setSProxyHost(null); setSProxyPort(null); setNoProxyHostsString(null); } public static String getProxyLogin() { return getPreferences().getProperty(PROXY_LOGIN); } public static void setProxyLogin(String proxyLogin) { getPreferences().setProperty(PROXY_LOGIN, proxyLogin); applyProxySettings(); } public static String getProxyPassword() { return getPreferences().getPasswordProperty(PROXY_PASSWORD); } public static void setProxyPassword(String proxyPassword) { getPreferences().setPasswordProperty(PROXY_PASSWORD, proxyPassword); applyProxySettings(); } public static String getFlexoServerInstanceURL() { String answer = getPreferences().getProperty(FLEXO_SERVER_INSTANCE_URL); if (answer == null || answer.trim().isEmpty()) { setFlexoServerInstanceURL("http://flexoserverinstances.openflexo.com"); return getFlexoServerInstanceURL(); } return answer; } public static void setFlexoServerInstanceURL(String url) { getPreferences().setProperty(FLEXO_SERVER_INSTANCE_URL, url); } public static String getWebServiceInstance() { String answer = getPreferences().getProperty(WEB_SERVICE_INSTANCE); if (answer == null || answer.trim().isEmpty()) { setWebServiceInstance("prod"); return getWebServiceInstance(); } return answer; } public static void setWebServiceInstance(String wsInstanceID) { getPreferences().setProperty(WEB_SERVICE_INSTANCE, wsInstanceID); } public static boolean getShowAllTabs() { Boolean answer = getPreferences().getBooleanProperty(SHOW_ALL_TABS); if (answer == null) { setShowAllTabs(false); return false; } return answer; } public static void setShowAllTabs(boolean showAllTabs) { getPreferences().setBooleanProperty(SHOW_ALL_TABS, showAllTabs); } public static boolean getPreferenceOverrideFromFlexoPropertiesDone() { Boolean answer = getPreferences().getBooleanProperty(PREFERENCE_OVERRIDE_FROM_FLEXO_PROPERTIES_DONE); if (answer == null) { return false; } return answer; } public static void setPreferenceOverrideFromFlexoPropertiesDone(boolean preferenceOverrideFromFlexoPropertiesDone) { getPreferences().setBooleanProperty(PREFERENCE_OVERRIDE_FROM_FLEXO_PROPERTIES_DONE, preferenceOverrideFromFlexoPropertiesDone); } }