Java tutorial
/* * Copyright 2005-2008 Pentaho Corporation. All rights reserved. * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 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 Lesser General Public License for more details. * * Copyright 2008 - 2009 Pentaho Corporation. All rights reserved. * * Created * @author Steven Barkdull */ package org.pentaho.pac.server.common; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.pac.common.config.IConsoleConfig; import org.pentaho.pac.server.config.ConsoleConfigXml; import org.pentaho.pac.server.config.HibernateSettingsXml; import org.pentaho.pac.server.config.PentahoObjectsConfig; import org.pentaho.pac.server.config.SpringSecurityHibernateConfig; import org.pentaho.pac.server.config.WebXml; import org.pentaho.pac.server.i18n.Messages; import org.springframework.security.providers.encoding.PasswordEncoder; /** * By default, this class will initialize itself from <code>resource/config/console.xml</code> (relative to the current * working directory). * * @author Steven Barkdull * @author mlowery * */ public class AppConfigProperties { // ~ Static fields/initializers ====================================================================================== public static final String CONFIG_FILE_NAME = "console.xml"; //$NON-NLS-1$ public static final String WEB_XML_PATH = "/WEB-INF/web.xml"; //$NON-NLS-1$ public static final String HIBERNATE_MANAGED_XML_PATH = "/system/hibernate/hibernate-settings.xml"; //$NON-NLS-1$ public static final String PENTAHO_OBJECTS_SPRING_XML = "/system/pentahoObjects.spring.xml"; //$NON-NLS-1$ public static final String SPRING_SECURITY_HIBERNATE_XML = "/system/applicationContext-spring-security-hibernate.xml"; //$NON-NLS-1$ public static final String JDBC_DRIVER_PATH = "./jdbc"; //$NON-NLS-1$ public static final String KEY_BISERVER_STATUS_CHECK_PERIOD = "biserver-status-check-period"; //$NON-NLS-1$ public static final String KEY_BISERVER_BASE_URL = "biserver-base-url"; //$NON-NLS-1$ public static final String KEY_BISERVER_CONTEXT_PATH = "biserver-context-path"; //$NON-NLS-1$ public static final String KEY_PLATFORM_USERNAME = "platform-username"; //$NON-NLS-1$ public static final String DEFAULT_VALUE_PASSWORD_SERVICE_CLASS = "org.pentaho.platform.util.Base64PasswordService"; //$NON-NLS-1$ public static final String DEFAULT_BISERVER_BASE_URL = "http://localhost:8080/pentaho"; //$NON-NLS-1$ public static final String DEFAULT_BISERVER_CONTEXT_PATH = "/pentaho"; //$NON-NLS-1$ public static final String DEFAULT_PLATFORM_USERNAME = "joe"; //$NON-NLS-1$ public static final String DEFAULT_BISERVER_STATUS_CHECK_PERIOD = "30000"; //$NON-NLS-1$ public static final String DEFAULT_HOMEPAGE_TIMEOUT = "15000"; //$NON-NLS-1$ public static final String DEFAULT_HIBERNATE_CONFIG_PATH = "system/hibernate/hsql.hibernate.cfg.xml"; //$NON-NLS-1$ public static final String DEFAULT_HELP_URL = "http://wiki.pentaho.com/display/ServerDoc2x/The+Pentaho+Administration+Console"; //$NON-NLS-1$ public static final String DEFAULT_HOMEPAGE_URL = "http://www.pentaho.com/console_home"; //$NON-NLS-1$ private IConsoleConfig consoleConfig = null; private HibernateSettingsXml hibernateSettingXml = null; private PentahoObjectsConfig pentahoObjectsConfig = null; private static SpringSecurityHibernateConfig springSecurityHibernateConfig = null; // ~ Instance fields ================================================================================================= private static AppConfigProperties instance = new AppConfigProperties(); private static final Log logger = LogFactory.getLog(AppConfigProperties.class); // ~ Constructors ==================================================================================================== protected AppConfigProperties() { } // ~ Methods ========================================================================================================= public static synchronized AppConfigProperties getInstance() { return instance; } public void refreshConfig() throws AppConfigException { consoleConfig = null; hibernateSettingXml = null; pentahoObjectsConfig = null; try { PasswordServiceFactory.init(getPasswordServiceClass()); } catch (Exception e) { throw new AppConfigException( Messages.getErrorString("AppConfigProperties.ERROR_0004_UNABLE_TO_READ_FILE", //$NON-NLS-1$ getSolutionPath() + PENTAHO_OBJECTS_SPRING_XML), e); } } private String getDefaultInstallDir() { String defaultInstallDir = "./.."; //$NON-NLS-1$ if ((getConsoleConfig().getDefaultBiServerDir() != null) && (getConsoleConfig().getDefaultBiServerDir().trim().length() > 0)) { defaultInstallDir = defaultInstallDir + "/" + getConsoleConfig().getDefaultBiServerDir(); //$NON-NLS-1$ } return defaultInstallDir; } public boolean isValidConfiguration() { boolean solutionPathValid = false; boolean warPathValid = false; File solutionPathFile = new File(getSolutionPath()); if (solutionPathFile != null && solutionPathFile.isDirectory()) { solutionPathValid = true; } File warPathFile = new File(getWarPath()); if (warPathFile != null && warPathFile.isDirectory()) { warPathValid = true; } return solutionPathValid && warPathValid; } public PasswordEncoder getPasswordEncoder() { return getSpringSecurityHibernateConfig().getPasswordEncoder(); } public String getPlatformUsername() { String platormUserName = getConsoleConfig().getPlatformUserName(); if ((platormUserName == null) || (platormUserName.trim().length() == 0)) { platormUserName = DEFAULT_PLATFORM_USERNAME; } return platormUserName; } public String getBiServerContextPath() { String baseUrl = getBiServerBaseUrl(); int start = baseUrl.lastIndexOf(":"); //$NON-NLS-1$ int middle = baseUrl.indexOf("/", start); //$NON-NLS-1$ String biserverContextPath = baseUrl.substring(middle, baseUrl.length() - 1); if (!(biserverContextPath != null && biserverContextPath.length() > 0)) { biserverContextPath = DEFAULT_BISERVER_CONTEXT_PATH; } return biserverContextPath; } public String getBiServerBaseUrl() { String baseUrl = DEFAULT_BISERVER_BASE_URL; // If this setting existe in console.xml, use it String consoleXmlBaseUrl = getConsoleConfig().getBaseUrl(); if (consoleXmlBaseUrl != null) { return consoleXmlBaseUrl; } try { WebXml webXml = new WebXml(new File(getWarPath() + WEB_XML_PATH)); baseUrl = webXml.getBaseUrl(); if (!(baseUrl != null && baseUrl.length() > 0)) { baseUrl = DEFAULT_BISERVER_BASE_URL; } } catch (Exception e) { // Do nothing; } return baseUrl; } public String getBiServerStatusCheckPeriod() { Long period = getConsoleConfig().getServerStatusCheckPeriod(); return period != null ? period.toString() : DEFAULT_BISERVER_STATUS_CHECK_PERIOD; } /** * Returns a comma-separated list of roles to apply to newly created users. */ public String getDefaultRolesString() { return getConsoleConfig().getDefaultRoles(); } /** * Convenience wrapper around getDefaultRolesString that parses the default roles string into individual roles. */ public List<String> getDefaultRoles() { String defaultRolesString = getDefaultRolesString(); List<String> defaultRoles = new ArrayList<String>(); if ((defaultRolesString != null) && (defaultRolesString.trim().length() > 0)) { StringTokenizer tokenizer = new StringTokenizer(defaultRolesString, ","); //$NON-NLS-1$ while (tokenizer.hasMoreTokens()) { defaultRoles.add(tokenizer.nextToken()); } } return defaultRoles; } public String getHomepageUrl() { String homepageUrl = getConsoleConfig().getHomePageUrl(); if ((homepageUrl == null) || (homepageUrl.trim().length() == 0)) { homepageUrl = DEFAULT_HOMEPAGE_URL; } return homepageUrl; } public String getHomepageTimeout() { Integer timeout = getConsoleConfig().getHomePageTimeout(); return timeout != null ? timeout.toString() : DEFAULT_HOMEPAGE_TIMEOUT; } public String getHibernateConfigPath() { String hibernateConfigPath = DEFAULT_HIBERNATE_CONFIG_PATH; String hibernateConfigFile = getHibernateSettingsXml().getHibernateConfigFile(); if (hibernateConfigFile != null && hibernateConfigFile.length() > 0) { hibernateConfigPath = hibernateConfigFile; } return hibernateConfigPath; } public boolean isHibernateManaged() { return getHibernateSettingsXml().getHibernateManaged(); } public String getSolutionPath() { String pentahoSolutionPath = getConsoleConfig().getSolutionPath(); if ((pentahoSolutionPath == null) || (pentahoSolutionPath.trim().length() == 0)) { pentahoSolutionPath = getDefaultInstallDir() + "/pentaho-solutions"; //$NON-NLS-1$ } return pentahoSolutionPath; } public String getWarPath() { String pentahoWarPath = getConsoleConfig().getWebAppPath(); if ((pentahoWarPath == null) || (pentahoWarPath.trim().length() == 0)) { pentahoWarPath = getDefaultInstallDir() + "/tomcat/webapps/pentaho"; //$NON-NLS-1$ } return pentahoWarPath; } public String getPasswordServiceClass() { String passwordServiceClass = getPentahoObjectsConfig().getPasswordService(); if (StringUtils.isEmpty(passwordServiceClass)) { passwordServiceClass = DEFAULT_VALUE_PASSWORD_SERVICE_CLASS; } return passwordServiceClass; } public String getJdbcDriverPath() { return JDBC_DRIVER_PATH; } public String getHelpUrl() { String helpUrl = getConsoleConfig().getHelpUrl(); if ((helpUrl == null) || (helpUrl.trim().length() == 0)) { helpUrl = DEFAULT_HELP_URL; } return helpUrl; } IConsoleConfig getConsoleConfig() { if (consoleConfig == null) { try { consoleConfig = new ConsoleConfigXml( new File(ClassLoader.getSystemResource(CONFIG_FILE_NAME).toURI())); } catch (Exception ex) { logger.warn(Messages.getErrorString("AppConfigProperties.ERROR_0004_UNABLE_TO_READ_FILE", //$NON-NLS-1$ CONFIG_FILE_NAME)); consoleConfig = new ConsoleConfigXml(); } } return consoleConfig; } HibernateSettingsXml getHibernateSettingsXml() { if (hibernateSettingXml == null) { try { hibernateSettingXml = new HibernateSettingsXml( new File(getSolutionPath() + HIBERNATE_MANAGED_XML_PATH)); } catch (Exception e) { hibernateSettingXml = new HibernateSettingsXml(); } } return hibernateSettingXml; } PentahoObjectsConfig getPentahoObjectsConfig() { if (pentahoObjectsConfig == null) { try { pentahoObjectsConfig = new PentahoObjectsConfig( new File(getSolutionPath() + PENTAHO_OBJECTS_SPRING_XML)); } catch (Exception e) { pentahoObjectsConfig = new PentahoObjectsConfig(); } } return pentahoObjectsConfig; } SpringSecurityHibernateConfig getSpringSecurityHibernateConfig() { if (springSecurityHibernateConfig == null) { try { springSecurityHibernateConfig = new SpringSecurityHibernateConfig( new File(getSolutionPath() + SPRING_SECURITY_HIBERNATE_XML)); } catch (Exception e) { logger.warn(Messages.getErrorString("AppConfigProperties.ERROR_0004_UNABLE_TO_READ_FILE", //$NON-NLS-1$ getSolutionPath() + SPRING_SECURITY_HIBERNATE_XML)); springSecurityHibernateConfig = new SpringSecurityHibernateConfig(); } } return springSecurityHibernateConfig; } }