1 /* 2 * Copyright (c) 2002-2015, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.util; 35 36 import fr.paris.lutece.portal.service.util.AppLogService; 37 import fr.paris.lutece.portal.service.util.AppPropertiesService; 38 39 import org.apache.commons.lang.StringUtils; 40 41 import java.io.File; 42 import java.io.FileInputStream; 43 import java.io.FileNotFoundException; 44 import java.io.IOException; 45 46 import java.util.LinkedHashMap; 47 import java.util.Map; 48 import java.util.Properties; 49 50 51 /** 52 * This class provides utility methods to read values of the properties stored in the .properties file of the 53 * application. 54 */ 55 public class PropertiesService 56 { 57 // Static variables 58 private static String _strRootPath; 59 private static volatile Properties _properties = new Properties( ); 60 private static Map<String, String> _mapPropertiesFiles = new LinkedHashMap<String, String>( ); 61 62 /** 63 * Constructor should define the base root path for properties files 64 * @param strRootPath The root path 65 */ 66 public PropertiesService( String strRootPath ) 67 { 68 _strRootPath = ( strRootPath.endsWith( "/" ) ) ? strRootPath : ( strRootPath + "/" ); 69 } 70 71 /** 72 * Add properties from a properties file 73 * @param strRelativePath Relative path from the root path 74 * @param strFilename The filename of the properties file (ie: config.properties) 75 * @throws java.io.FileNotFoundException If the file is not found 76 * @throws java.io.IOException If an error occurs reading the file 77 */ 78 public void addPropertiesFile( String strRelativePath, String strFilename ) 79 throws FileNotFoundException, IOException 80 { 81 String strFullPath = _strRootPath + 82 ( ( strRelativePath.endsWith( "/" ) ) ? strRelativePath : ( strRelativePath + "/" ) ) + strFilename; 83 _mapPropertiesFiles.put( strFilename, strFullPath ); 84 loadFile( strFullPath ); 85 } 86 87 /** 88 * Add properties from all files found in a given directory 89 * @param strRelativePath Relative path from the root path 90 * @throws IOException If an error occurs reading the file 91 */ 92 public void addPropertiesDirectory( String strRelativePath ) 93 throws IOException 94 { 95 File directory = new File( _strRootPath + strRelativePath ); 96 97 if ( directory.exists( ) ) 98 { 99 File[] listFile = directory.listFiles( ); 100 101 for ( int i = 0; i < listFile.length; i++ ) 102 { 103 File file = listFile[i]; 104 105 if ( file.getName( ).endsWith( ".properties" ) ) 106 { 107 String strFullPath = file.getAbsolutePath( ); 108 _mapPropertiesFiles.put( file.getName( ), strFullPath ); 109 loadFile( strFullPath ); 110 } 111 } 112 } 113 } 114 115 /** 116 * Load properties of a file 117 * @param strFullPath The absolute path of the properties file 118 * @throws java.io.IOException If an error occurs reading the file 119 * @throws java.io.FileNotFoundException If the file is not found 120 */ 121 private void loadFile( String strFullPath ) throws FileNotFoundException, IOException 122 { 123 loadFile( strFullPath, _properties ); 124 } 125 126 /** 127 * Load properties of a file 128 * @param strFullPath The absolute path of the properties file 129 * @param props properties to load into 130 * @throws java.io.IOException If an error occurs reading the file 131 * @throws java.io.FileNotFoundException If the file is not found 132 */ 133 private void loadFile( String strFullPath, Properties props ) 134 throws FileNotFoundException, IOException 135 { 136 FileInputStream fis = new FileInputStream( new File( strFullPath ) ); 137 props.load( fis ); 138 } 139 140 /** 141 * Reload a properties file . 142 * @param strFilename The filename of the properties file 143 * @throws IOException If an error occurs reading the file 144 */ 145 public void reload( String strFilename ) throws IOException 146 { 147 String strFullPath = _mapPropertiesFiles.get( strFilename ); 148 loadFile( strFullPath ); 149 } 150 151 /** 152 * Reload all properties files 153 * @throws IOException If an error occurs reading the file 154 */ 155 public void reloadAll( ) throws IOException 156 { 157 Properties newProperties = new Properties( ); 158 159 for ( String strFullPath : _mapPropertiesFiles.values( ) ) 160 { 161 loadFile( strFullPath, newProperties ); 162 } 163 164 _properties = newProperties; 165 } 166 167 /** 168 * Returns the value of a variable defined in the .properties file of the application as a String 169 * 170 * @param strProperty The variable name 171 * @return The variable value read in the properties file 172 */ 173 public String getProperty( String strProperty ) 174 { 175 return _properties.getProperty( strProperty ); 176 } 177 178 /** 179 * Returns the value of a variable defined in the .properties file of the application as a String 180 * 181 * @param strProperty The variable name 182 * @param strDefault The default value which is returned if no value is found for the variable in the .properties 183 * file. 184 * @return The variable value read in the properties file 185 */ 186 public String getProperty( String strProperty, String strDefault ) 187 { 188 return _properties.getProperty( strProperty, strDefault ); 189 } 190 191 /** 192 * Returns the value of a variable defined in the .properties file of the application as an int 193 * 194 * @param strProperty The variable name 195 * @param nDefault The default value which is returned if no value is found for the variable in the 196 * .properties file, or if the value is not numeric 197 * @return The variable value read in the properties file 198 */ 199 public int getPropertyInt( String strProperty, int nDefault ) 200 { 201 String strValue = AppPropertiesService.getProperty( strProperty ); 202 int nValue = nDefault; 203 204 try 205 { 206 if ( StringUtils.isNumeric( strValue ) ) 207 { 208 nValue = Integer.parseInt( strValue ); 209 } 210 } 211 catch ( NumberFormatException e ) 212 { 213 AppLogService.info( e ); 214 } 215 216 return nValue; 217 } 218 219 /** 220 * Returns the value of a variable defined in the .properties file of the application as an long 221 * 222 * @param strProperty The variable name 223 * @param lDefault The default value which is returned if no value is found for the variable in the le downloadFile 224 * .properties. .properties file. 225 * @return The variable value read in the properties file 226 */ 227 public long getPropertyLong( String strProperty, long lDefault ) 228 { 229 String strValue = AppPropertiesService.getProperty( strProperty ); 230 long lValue = lDefault; 231 232 try 233 { 234 if ( strValue != null ) 235 { 236 lValue = Long.parseLong( strValue ); 237 } 238 } 239 catch ( NumberFormatException e ) 240 { 241 AppLogService.info( e ); 242 } 243 244 return lValue; 245 } 246 247 /** 248 * Returns the value of a variable defined in the .properties file of the application as an boolean 249 * 250 * @param strProperty The variable name 251 * @param bDefault The default value which is returned if no value is found for the variable in the le downloadFile 252 * .properties. .properties file. 253 * @return The variable value read in the properties file 254 */ 255 public boolean getPropertyBoolean( String strProperty, boolean bDefault ) 256 { 257 String strValue = AppPropertiesService.getProperty( strProperty ); 258 boolean bValue = bDefault; 259 260 if ( strValue != null ) 261 { 262 bValue = strValue.equalsIgnoreCase( "true" ); 263 } 264 265 return bValue; 266 } 267 268 /** 269 * Gets properties 270 * @return All properties 271 */ 272 public Properties getProperties( ) 273 { 274 return _properties; 275 } 276 }