1 package com.dotmarketing.util; 2 3 import java.io.File ; 4 import java.io.FileInputStream ; 5 import java.io.IOException ; 6 import java.io.InputStream ; 7 import java.io.InputStreamReader ; 8 import java.util.Calendar ; 9 import java.util.Date ; 10 import java.util.GregorianCalendar ; 11 import java.util.HashMap ; 12 import java.util.Iterator ; 13 import java.util.Map ; 14 15 import org.apache.commons.configuration.PropertiesConfiguration; 16 17 public class LanguageProperties { 18 19 private static Map <Integer , Date > lastRefreshTimes = new HashMap <Integer , Date >(); 21 private static Map <Integer , PropertiesConfiguration> languageProps = new HashMap <Integer , PropertiesConfiguration>(); 22 23 public static void initializeConfig() { 25 } 26 27 private static Date getLastRefreshTime(int languageId) { 28 return lastRefreshTimes.get(languageId); 29 } 30 31 private static void setLastRefreshTime(int languageId, Date newTime) { 32 lastRefreshTimes.put(languageId, newTime); 33 } 34 35 private static void _loadProperties(int languageId) { 36 String globalVarsPath = Config.getStringProperty("GLOBAL_VARIABLES_PATH"); 37 if (!UtilMethods.isSet(globalVarsPath)) { 38 globalVarsPath = "/../common/ext-ejb/content/"; 39 } 40 if (!globalVarsPath.endsWith("/")) 41 globalVarsPath = globalVarsPath + File.separator; 42 43 String filePath = globalVarsPath + "cms_language_" + languageId + ".properties"; 44 File f = new File (filePath); 45 try { 46 if (!f.exists()) { 47 Logger.info("The properties file: " + filePath + " doesn't exist, creating it!"); 48 if (!f.createNewFile()) { 49 Logger.error("Unable to create the file, doing nothing!"); 50 return; 51 } 52 } else { 53 if (!f.canRead()) { 54 Logger.error("Unable to read the file, the properties will not to be reloaded."); 55 return; 56 } 57 } 58 } catch (IOException e) { 59 Logger.warn("Unable to reload the properties. Returning without reload.", e); 60 return; 61 } 62 63 PropertiesConfiguration props = new PropertiesConfiguration(); 64 65 Date lastModified = new Date (f.lastModified()); 66 Date lastRefreshTime = getLastRefreshTime(languageId); 67 if (lastRefreshTime == null || lastModified.after(lastRefreshTime)) { 68 try { 69 Logger.info(Config.class, "Loading Language: " + languageId + " Properties..."); 70 InputStream propsInputStream = new FileInputStream (f); 71 props.load(new InputStreamReader (propsInputStream)); 72 propsInputStream.close(); 73 languageProps.put(languageId, props); 74 Logger.info(Config.class, "Language: " + languageId + " Properties Loaded"); 75 } catch (Exception e) { 76 Logger.error(Config.class, "Unable to load the properties at: " + filePath, e); 77 } 78 } 79 80 setLastRefreshTime(languageId, new Date ()); 81 82 } 83 84 private static PropertiesConfiguration _refreshProperties(int languageId) { 85 int refreshInterval = Config.getIntProperty("LANGUAGES_REFRESH_INTERVAL"); 86 Calendar cal = new GregorianCalendar (); 87 Calendar calNow = new GregorianCalendar (); 88 calNow.setTimeInMillis(System.currentTimeMillis()); 89 Date lastRefreshTime = getLastRefreshTime(languageId); 90 if (lastRefreshTime != null) 91 cal.setTime(lastRefreshTime); 92 cal.add(Calendar.MINUTE, refreshInterval); 93 if (lastRefreshTime == null || cal.before(calNow)) { 94 _loadProperties(languageId); 95 } 96 return languageProps.get(languageId); 97 } 98 99 public static String getStringProperty(int languageId, String name) { 101 PropertiesConfiguration props = _refreshProperties(languageId); 102 String [] propsArr = props.getStringArray(name); 103 String property = new String (); 104 int i = 0; 105 for (String propItem : propsArr) { 106 if (i > 0) 107 property += ","; 108 property += propItem; 109 i++; 110 } 111 return property; 112 } 113 114 public static String [] getStringArrayProperty(int languageId, String name) { 115 PropertiesConfiguration props = _refreshProperties(languageId); 116 return props.getStringArray(name); 117 } 118 119 public static int getIntProperty(int languageId, String name) { 120 PropertiesConfiguration props = _refreshProperties(languageId); 121 return props.getInt(name); 122 } 123 124 public static int getIntProperty(int languageId, String name, int defaultVal) { 125 PropertiesConfiguration props = _refreshProperties(languageId); 126 return props.getInt(name, defaultVal); 127 } 128 129 public static float getFloatProperty(int languageId, String name) { 130 PropertiesConfiguration props = _refreshProperties(languageId); 131 return props.getFloat(name); 132 } 133 134 public static float getFloatProperty(int languageId, String name, float defaultVal) { 135 PropertiesConfiguration props = _refreshProperties(languageId); 136 return props.getFloat(name, defaultVal); 137 } 138 139 public static boolean getBooleanProperty(int languageId, String name) { 140 PropertiesConfiguration props = _refreshProperties(languageId); 141 return props.getBoolean(name); 142 } 143 144 public static boolean getBooleanProperty(int languageId, String name, boolean defaultVal) { 145 PropertiesConfiguration props = _refreshProperties(languageId); 146 return props.getBoolean(name, defaultVal); 147 } 148 149 public static Iterator getKeys(int languageId) { 150 PropertiesConfiguration props = _refreshProperties(languageId); 151 return props.getKeys(); 152 } 153 154 } 155
| Popular Tags
|