|
From: <ra...@us...> - 2009-03-09 18:12:19
|
Revision: 2179
http://itracker.svn.sourceforge.net/itracker/?rev=2179&view=rev
Author: ranks
Date: 2009-03-09 18:12:03 +0000 (Mon, 09 Mar 2009)
Log Message:
-----------
Major updates on core resources (ItrackerResources)
and language-admin section.
Minor fixes on JSPs, internationalizations, permissions.
Tests re-enabled or changed.
Fixes some charset issues when using UTF-8 database, databases should be updated manually to support UTF-8.
Language-keys will not be initialized on database, the defaults are consumed from the properties (fallback) and are overridden by database if re-defined in language-admin. (unchanged keys should be removed from database manually by querying on updated date)
Modified Paths:
--------------
itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResourceBundle.java
itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResources.java
itracker/trunk/src/main/java/org/itracker/model/Language.java
itracker/trunk/src/main/java/org/itracker/model/Permission.java
itracker/trunk/src/main/java/org/itracker/model/util/PropertiesFileHandler.java
itracker/trunk/src/main/java/org/itracker/services/implementations/ConfigurationServiceImpl.java
itracker/trunk/src/main/java/org/itracker/services/implementations/NotificationServiceImpl.java
itracker/trunk/src/main/java/org/itracker/services/implementations/UserServiceImpl.java
itracker/trunk/src/main/java/org/itracker/services/util/SystemConfigurationUtilities.java
itracker/trunk/src/main/java/org/itracker/web/actions/admin/language/EditLanguageAction.java
itracker/trunk/src/main/java/org/itracker/web/actions/admin/language/EditLanguageFormAction.java
itracker/trunk/src/main/java/org/itracker/web/actions/admin/language/ListLanguagesAction.java
itracker/trunk/src/main/java/org/itracker/web/actions/preferences/EditPreferencesFormAction.java
itracker/trunk/src/main/java/org/itracker/web/actions/user/SelfRegisterAction.java
itracker/trunk/src/main/java/org/itracker/web/actions/user/SelfRegisterFormAction.java
itracker/trunk/src/main/java/org/itracker/web/forms/LanguageForm.java
itracker/trunk/src/main/java/org/itracker/web/taglib/FormatImageActionTag.java
itracker/trunk/src/main/java/org/itracker/web/taglib/FormatLinkTag.java
itracker/trunk/src/main/resources/org/itracker/core/resources/ITracker.properties
itracker/trunk/src/main/resources/org/itracker/core/resources/ITracker_ca.properties
itracker/trunk/src/main/resources/org/itracker/core/resources/ITracker_de.properties
itracker/trunk/src/main/resources/org/itracker/core/resources/ITracker_tr.properties
itracker/trunk/src/main/webapp/error.jsp
itracker/trunk/src/main/webapp/module-admin/admin_language/edit_language.jsp
itracker/trunk/src/main/webapp/module-admin/admin_language/list_languages.jsp
itracker/trunk/src/main/webapp/module-preferences/edit_preferences.jsp
itracker/trunk/src/main/webapp/themes/defaulttheme/includes/header.jsp
itracker/trunk/src/test/java/org/itracker/core/resources/ITrackerResourcesTest.java
itracker/trunk/src/test/java/org/itracker/model/IssueAttachmentTest.java
itracker/trunk/src/test/java/org/itracker/persistence/dao/PermissionDAOImplTest.java
itracker/trunk/src/test/java/org/itracker/persistence/dao/UserDAOImplTest.java
itracker/trunk/src/test/java/org/itracker/services/implementations/ConfigurationServiceImplTest.java
itracker/trunk/src/test/java/org/itracker/services/implementations/NotificationServiceTest.java
itracker/trunk/src/test/java/org/itracker/services/implementations/ProjectServiceImplTest.java
itracker/trunk/src/test/java/org/itracker/services/implementations/UserServiceImplTest.java
itracker/trunk/src/test/java/org/itracker/services/util/IssueUtilitiesTest.java
itracker/trunk/src/test/java/org/itracker/services/util/ProjectUtilitiesTest.java
itracker/trunk/src/test/java/org/itracker/services/util/WorkflowUtilitiesTest.java
Modified: itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResourceBundle.java
===================================================================
--- itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResourceBundle.java 2009-03-02 13:16:02 UTC (rev 2178)
+++ itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResourceBundle.java 2009-03-09 18:12:03 UTC (rev 2179)
@@ -18,212 +18,267 @@
package org.itracker.core.resources;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.Hashtable;
import java.util.List;
import java.util.Locale;
+import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TreeSet;
+import org.apache.log4j.Logger;
import org.itracker.model.Language;
import org.itracker.services.exceptions.ITrackerDirtyResourceException;
public class ITrackerResourceBundle extends ResourceBundle {
-
- private HashMap<String,Object> data = new HashMap<String,Object>();
- /**
- * TODO should dataArray be re-factored out?
- */
- private Object[][] dataArray = null;
-
- static ResourceBundle loadBundle() {
- return new ITrackerResourceBundle();
- }
- static ResourceBundle loadBundle(Locale locale) {
- return new ITrackerResourceBundle(locale);
- }
- static ResourceBundle loadBundle(Locale locale, Object[][] data) {
- return new ITrackerResourceBundle(locale, data);
- }
+ private static final Logger log = Logger
+ .getLogger(ITrackerResourceBundle.class);
+ private final HashMap<String, Object> data = new HashMap<String, Object>();
+ /**
+ * TODO should dataArray be re-factored out?
+ */
+ private Object[][] dataArray = null;
+ private ResourceBundle propertiesBundle;
- static ResourceBundle loadBundle(Locale locale, List<Language> items) {
- return new ITrackerResourceBundle(locale, items);
- }
- private ITrackerResourceBundle() {
- super.setParent(ResourceBundle.getBundle(ITrackerResources.RESOURCE_BUNDLE_NAME, new Locale(ITrackerResources.getDefaultLocale())));
- }
- /**
- * @param locale
- */
- private ITrackerResourceBundle(Locale locale) {
- if (null == locale) {
- locale = new Locale(ITrackerResources.getDefaultLocale());
- }
- setParent(ResourceBundle.getBundle(ITrackerResources.RESOURCE_BUNDLE_NAME, locale));
- }
- /**
- * @param locale
- * @param data
- * @deprecated used still for testing
- */
- public ITrackerResourceBundle(Locale locale, Object[][] data) {
- this(locale);
- setContents(data);
- }
+ static ResourceBundle loadBundle() {
+ return new ITrackerResourceBundle();
+ }
- /**
- * @param locale
- * @param items
- */
- private ITrackerResourceBundle(Locale locale, List<Language> items) {
- this(locale);
- setContents(items);
- }
+ static ResourceBundle loadBundle(Locale locale) {
+ return new ITrackerResourceBundle(locale);
+ }
+ static ResourceBundle loadBundle(Locale locale, Object[][] data) {
+ return new ITrackerResourceBundle(locale, data);
+ }
- /**
- *
- * @return should be private or removed
- * @deprecated
- */
- public Object[][] getContents() {
- // Only load the array if it is requested for some reason.
- if(dataArray == null) {
- int i = 0;
- Object[][] newData = new Object[2][data.size()];
- Enumeration<String> keys = getKeys();
- while (keys.hasMoreElements()) {
- newData[0][i] = keys.nextElement();
- newData[1][i] = data.get(newData[0][i]);
+ static ResourceBundle loadBundle(Locale locale, List<Language> items) {
+ return new ITrackerResourceBundle(locale, items);
+ }
+
+ private ITrackerResourceBundle() {
+ super.setParent(ResourceBundle.getBundle(
+ ITrackerResources.RESOURCE_BUNDLE_NAME, new Locale(
+ ITrackerResources.getDefaultLocale())));
+ }
+
+ /**
+ * @param locale
+ */
+ private ITrackerResourceBundle(Locale locale) {
+ if (null == locale) {
+ locale = ITrackerResources.getLocale(ITrackerResources
+ .getDefaultLocale());
+ }
+ this.propertiesBundle = ResourceBundle.getBundle(
+ ITrackerResources.RESOURCE_BUNDLE_NAME, locale);
+
+ if (!locale.equals(ITrackerResources
+ .getLocale(ITrackerResources.BASE_LOCALE))) {
+ if (locale.getCountry().length() > 0) {
+ setParent(ITrackerResources.getBundle(new Locale(locale
+ .getLanguage())));
+ } else if (locale.getLanguage().length() > 0) {
+ setParent(ITrackerResources.getBundle(ITrackerResources
+ .getLocale(ITrackerResources.BASE_LOCALE)));
}
-
-
- this.dataArray = newData;
- }
-
- return dataArray.clone();
- }
+ }
- /**
- * @deprecated should be private
- * @param content
- */
- public void setContents(List<Language> content) {
- if(content != null ) {
- synchronized (data) {
- data.clear();
- this.dataArray = null;
- for(int i = 0; i < content.size(); i++) {
- data.put(content.get(i).getResourceKey(), content.get(i).getResourceValue());
- }
- }
- }
- }
+ }
- /**
- * @deprecated
- * @param content should be private
- */
- private void setContents(Object[][] content) {
- if(content != null && content.length == 2 && content[0].length == content[1].length) {
- synchronized (data) {
- data.clear();
- this.dataArray = null;
- for(int i = 0; i < content[0].length; i++) {
- data.put((String)content[0][i], content[1][i]);
- }
- }
- }
- }
+ public static ResourceBundle getBundle() {
+ return ITrackerResources.getBundle();
+ }
+ public static ResourceBundle getBundle(Locale locale) {
+ return ITrackerResources.getBundle(locale);
+ }
- @Override
- public Locale getLocale() {
- Locale l = super.getLocale();
- if (null == l && null != parent) {
- return parent.getLocale();
- }
- return l;
- }
+ /**
+ * @param locale
+ * @param data
+ * @deprecated used still for testing
+ */
+ public ITrackerResourceBundle(Locale locale, Object[][] data) {
+ this(locale);
+ setContents(data);
+ }
- public boolean isDirty(String key) {
- try {
- handleGetObject(key);
- } catch (ITrackerDirtyResourceException exception) {
- return true;
- }
- return false;
- }
-
- //public void updateValue(String key, Object value) {
- // synchronized (data) {
- // data.put(key, value);
- // }
- // }
-
- public void updateValue(String key, String value) {
- synchronized (data) {
- data.put(key, value);
- this.dataArray = null;
- }
- }
+ /**
+ * @param locale
+ * @param items
+ */
+ private ITrackerResourceBundle(Locale locale, List<Language> items) {
+ this(locale);
+ setContents(items);
+ }
- public void updateValue(Language model) {
- if(model != null) {
- synchronized (data) {
- data.put(model.getResourceKey(), model.getResourceValue());
- this.dataArray = null;
- }
- }
- }
-
- public void removeValue(String key, boolean markDirty) {
- if (key != null) {
- synchronized (data) {
- if(markDirty) {
- data.put(key, new DirtyKey(){});
- } else {
- data.remove(key);
- }
- this.dataArray = null;
- }
- }
- }
+ /**
+ *
+ * @return should be private or removed
+ * @deprecated
+ */
+ public Object[][] getContents() {
+ // Only load the array if it is requested for some reason.
+ if (dataArray == null) {
+ int i = 0;
+ Object[][] newData = new Object[2][data.size()];
+ Enumeration<String> keys = getKeys();
+ while (keys.hasMoreElements()) {
+ newData[0][i] = keys.nextElement();
+ newData[1][i] = data.get(newData[0][i]);
+ }
- /**
- * Implementation of ResourceBundle.handleGetObject. Returns
- * the request key from the internal data map.
- */
- public final Object handleGetObject(String key) {
- Object value = data.get(key);
- if(value instanceof DirtyKey) {
- throw new ITrackerDirtyResourceException("The requested key has been marked dirty.",
- "ITrackerResourceBundle_" + getLocale(),
- key);
- }
- return value;
- }
+ this.dataArray = newData;
+ }
- /**
- * Implementation of ResourceBundle.getKeys. Since it returns an enumeration,
- * It creates a new Hashtable, and returns that collections enumerator.
- */
- public Enumeration<String> getKeys() {
- Hashtable<String, Object> table = new Hashtable<String, Object>(data.size());
- if (null != parent) {
- Enumeration<String> keys = parent.getKeys();
- String key;
- while (keys.hasMoreElements()) {
- key = keys.nextElement();
- table.put(key, parent.getString(key));
-
+ return dataArray.clone();
+ }
+
+ /**
+ * @deprecated should be private
+ * @param content
+ */
+ public void setContents(List<Language> content) {
+ if (content != null) {
+ synchronized (data) {
+ data.clear();
+ this.dataArray = null;
+ for (int i = 0; i < content.size(); i++) {
+ data.put(content.get(i).getResourceKey(), content.get(i)
+ .getResourceValue());
+ }
}
- }
- table.putAll(data);
- return table.keys();
- }
+ }
+ }
- public static interface DirtyKey {
- }
+ /**
+ * @deprecated
+ * @param content
+ * should be private
+ */
+ private void setContents(Object[][] content) {
+ if (content != null && content.length == 2
+ && content[0].length == content[1].length) {
+ synchronized (data) {
+ data.clear();
+ this.dataArray = null;
+ for (int i = 0; i < content[0].length; i++) {
+ data.put((String) content[0][i], content[1][i]);
+ }
+ }
+ }
+ }
+
+ @Override
+ public Locale getLocale() {
+ Locale l = super.getLocale();
+ if (null == l && null != propertiesBundle) {
+ l = propertiesBundle.getLocale();
+ }
+ return l;
+ }
+
+ public boolean isDirty(String key) {
+ try {
+ handleGetObject(key);
+ } catch (ITrackerDirtyResourceException exception) {
+ return true;
+ }
+ return false;
+ }
+
+ // public void updateValue(String key, Object value) {
+ // synchronized (data) {
+ // data.put(key, value);
+ // }
+ // }
+
+ public void updateValue(String key, String value) {
+ synchronized (data) {
+ data.put(key, value);
+ this.dataArray = null;
+ }
+ }
+
+ public void updateValue(Language model) {
+ if (model != null) {
+ synchronized (data) {
+ data.put(model.getResourceKey(), model.getResourceValue());
+ this.dataArray = null;
+ }
+ }
+ }
+
+ public void removeValue(String key, boolean markDirty) {
+ if (key != null) {
+ synchronized (data) {
+ if (markDirty) {
+ data.put(key, new DirtyKey() {
+ });
+ } else {
+ data.remove(key);
+ }
+ this.dataArray = null;
+ }
+ }
+ }
+
+ /**
+ * Implementation of ResourceBundle.handleGetObject. Returns the request key
+ * from the internal data map.
+ */
+ public final Object handleGetObject(String key) {
+ Object value = data.get(key);
+ if (value instanceof DirtyKey) {
+ throw new ITrackerDirtyResourceException(
+ "The requested key has been marked dirty.",
+ "ITrackerResourceBundle_" + getLocale(), key);
+ }
+ if (null == value) {
+ try {
+ value = propertiesBundle.getObject(key);
+
+ // log.debug("handleGetObject2: "
+ // + key + "=" + value);
+ } catch (MissingResourceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("handleGetObject: " + key, e);
+ }
+ }
+ }
+ return value;
+ }
+
+ /**
+ * Implementation of ResourceBundle.getKeys. Since it returns an
+ * enumeration, It creates a new Set, and returns that collections
+ * enumerator.
+ */
+ public Enumeration<String> getKeys() {
+ Set<String> set = new TreeSet<String>(data.keySet());
+ if (null != parent) {
+ Enumeration<String> keys = parent.getKeys();
+ String key;
+ while (keys.hasMoreElements()) {
+ key = keys.nextElement();
+ set.add(key);
+ }
+ }
+ if (null != propertiesBundle) {
+ Enumeration<String> keys = propertiesBundle.getKeys();
+ String key;
+ while (keys.hasMoreElements()) {
+ key = keys.nextElement();
+ set.add(key);
+ }
+ }
+ return Collections.enumeration(set);
+ }
+
+ public static interface DirtyKey {
+ }
}
Modified: itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResources.java
===================================================================
--- itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResources.java 2009-03-02 13:16:02 UTC (rev 2178)
+++ itracker/trunk/src/main/java/org/itracker/core/resources/ITrackerResources.java 2009-03-09 18:12:03 UTC (rev 2179)
@@ -20,416 +20,564 @@
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import java.util.Set;
import org.apache.log4j.Logger;
import org.itracker.model.Language;
import org.itracker.persistence.dao.NoSuchEntityException;
import org.itracker.services.exceptions.ITrackerDirtyResourceException;
+import org.itracker.web.util.LoginUtilities;
import org.itracker.web.util.ServletContextUtils;
/**
*
* Please comment this class here. What is it for?
+ *
* @author ready
- *
+ *
*/
public class ITrackerResources {
-
- private static final Logger logger = Logger.getLogger(ITrackerResources.class);
-
- public static final String RESOURCE_BUNDLE_NAME = "org.itracker.core.resources.ITracker";
- public static final String DEFINED_LOCALES_KEY = "itracker.locales";
+ private static final Logger logger = Logger
+ .getLogger(ITrackerResources.class);
- public static final String DEFAULT_LOCALE = "en_US";
+ public static final String RESOURCE_BUNDLE_NAME = "org.itracker.core.resources.ITracker";
- public static final String BASE_LOCALE = "BASE";
+ public static final String DEFINED_LOCALES_KEY = "itracker.locales";
- public static final String NO_LOCALE = "ZZ_ZZ";
+ public static final String DEFAULT_LOCALE = "en_US";
- public static final String KEY_BASE_CUSTOMFIELD_TYPE = "itracker.web.generic.";
+ public static final String BASE_LOCALE = "BASE";
- public static final String KEY_BASE_WORKFLOW_EVENT = "itracker.workflow.field.event.";
+ public static final String NO_LOCALE = "ZZ_ZZ";
- public static final String KEY_BASE_PROJECT_STATUS = "itracker.project.status.";
+ public static final String KEY_BASE_CUSTOMFIELD_TYPE = "itracker.web.generic.";
- public static final String KEY_BASE_PERMISSION = "itracker.user.permission.";
+ public static final String KEY_BASE_WORKFLOW_EVENT = "itracker.workflow.field.event.";
- public static final String KEY_BASE_PRIORITY = "itracker.script.priority.";
+ public static final String KEY_BASE_PROJECT_STATUS = "itracker.project.status.";
- public static final String KEY_BASE_PRIORITY_LABEL = ".label";
+ public static final String KEY_BASE_PERMISSION = "itracker.user.permission.";
- public static final String KEY_BASE_PRIORITY_SIZE = "size";
+ public static final String KEY_BASE_PRIORITY = "itracker.script.priority.";
- public static final String KEY_BASE_RESOLUTION = "itracker.resolution.";
+ public static final String KEY_BASE_PRIORITY_LABEL = ".label";
- public static final String KEY_BASE_ISSUE_RELATION = "itracker.issuerelation.";
+ public static final String KEY_BASE_PRIORITY_SIZE = "size";
- public static final String KEY_BASE_SEVERITY = "itracker.severity.";
+ public static final String KEY_BASE_RESOLUTION = "itracker.resolution.";
- public static final String KEY_BASE_STATUS = "itracker.status.";
+ public static final String KEY_BASE_ISSUE_RELATION = "itracker.issuerelation.";
- public static final String KEY_BASE_USER_STATUS = "itracker.user.status.";
+ public static final String KEY_BASE_SEVERITY = "itracker.severity.";
- public static final String KEY_BASE_CUSTOMFIELD = "itracker.customfield.";
+ public static final String KEY_BASE_STATUS = "itracker.status.";
- public static final String KEY_BASE_CUSTOMFIELD_OPTION = ".option.";
+ public static final String KEY_BASE_USER_STATUS = "itracker.user.status.";
- public static final String KEY_BASE_CUSTOMFIELD_LABEL = ".label";
+ public static final String KEY_BASE_CUSTOMFIELD = "itracker.customfield.";
- private static String defaultLocale = null;
+ public static final String KEY_BASE_CUSTOMFIELD_OPTION = ".option.";
- private static HashMap<String,Locale> locales = new HashMap<String,Locale>();
+ public static final String KEY_BASE_CUSTOMFIELD_LABEL = ".label";
- private static HashMap<Locale,ResourceBundle> languages = new HashMap<Locale,ResourceBundle>();
+ public static final String KEY_BASE_LOCALE_NAME = "itracker.locale.name";
- private static boolean initialized = false;
+ private static String defaultLocale = DEFAULT_LOCALE;
- private static Object bundleLock = new Object();
+ private static HashMap<String, Locale> locales = new HashMap<String, Locale>();
-// private static ConfigurationService configurationService;
+ private static HashMap<Locale, ResourceBundle> languages = new HashMap<Locale, ResourceBundle>();
- public static Locale getLocale() {
- return getLocale(getDefaultLocale());
- }
+ private static boolean initialized = false;
- public static Locale getLocale(String localeString) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("getLocale: " + localeString);
- }
- if (localeString == null || localeString.trim().equals("")) {
- return getLocale(getDefaultLocale());
- }
+ private static Object bundleLock = new Object();
- Locale locale = locales.get(localeString);
- if (locale == null && localeString != null && !localeString.trim().equals("")) {
- try {
- if (logger.isDebugEnabled()) {
- logger.debug("Creating new locale for '" + localeString + "'");
- }
- if (localeString.length() == 5) {
- locale = new Locale(localeString.substring(0, 2), localeString.substring(3));
- } else if (localeString.length() == 2) {
- locale = new Locale(localeString, "");
- } else if (localeString.equals(BASE_LOCALE)) {
- locale = new Locale("", "");
- } else {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Invalid locale '" + localeString + "' specified. It must be either LN or LN_CN.");
- }
- throw new Exception("Invalid locale string");
- }
- } catch (Exception ex) {
- if (!localeString.equals(getDefaultLocale())) {
- logger.error("Failed creating new locale for '" + localeString
- + "' attempting for default locale '" + getDefaultLocale() + "'", ex);
- return getLocale(getDefaultLocale());
- } else {
- logger.error("Failed creating new default locale for '" + getDefaultLocale()
- + "' attempting for DEFAULT_LOCALE '" + DEFAULT_LOCALE + "'", ex);
- return getLocale(DEFAULT_LOCALE);
- }
- }
- locales.put(localeString, locale);
- }
- return locale;
- }
+ // private static ConfigurationService configurationService;
- public static String getDefaultLocale() {
- return (defaultLocale == null ? DEFAULT_LOCALE : defaultLocale);
- }
+ public static Locale getLocale() {
+ return getLocale(getDefaultLocale());
+ }
- public static void setDefaultLocale(String value) {
- defaultLocale = value;
- }
+ public static Locale getLocale(String localeString) {
- public static ResourceBundle getBundle() {
- return getBundle(getDefaultLocale());
- }
+// if (logger.isDebugEnabled()) {
+// logger.debug("getLocale: " + localeString);
+// }
+ if (localeString == null || localeString.trim().equals("")) {
+ return getLocale(getDefaultLocale());
+ }
- public static ResourceBundle getBundle(String locale) {
- if (locale == null || locale.equals("")) {
- locale = getDefaultLocale();
- }
+ Locale locale = locales.get(localeString);
+ if (locale == null && localeString != null
+ && !localeString.trim().equals("")) {
+ try {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Creating new locale for '" + localeString
+ + "'");
+ }
+ if (localeString.length() == 5) {
+ locale = new Locale(localeString.substring(0, 2),
+ localeString.substring(3));
+ } else if (localeString.length() == 2) {
+ locale = new Locale(localeString, "");
+ } else if (localeString.equals(BASE_LOCALE)) {
+ locale = new Locale("", "");
+ } else {
- return getBundle(getLocale(locale));
- }
+ logger
+ .error("Invalid locale '"
+ + localeString
+ + "' specified. It must be either LN or LN_CN.");
+ throw new Exception("Invalid locale string");
+ }
+ } catch (Exception ex) {
+ if (!localeString.equals(getDefaultLocale())) {
+ logger.error("Failed creating new locale for '"
+ + localeString
+ + "' attempting for default locale '"
+ + getDefaultLocale() + "'", ex);
+ return getLocale(getDefaultLocale());
+ } else {
+ logger.error("Failed creating new default locale for '"
+ + getDefaultLocale()
+ + "' attempting for DEFAULT_LOCALE '"
+ + DEFAULT_LOCALE + "'", ex);
+ return getLocale(DEFAULT_LOCALE);
+ }
+ }
+ locales.put(localeString, locale);
+ }
+ return locale;
+ }
- public static ResourceBundle getBundle(Locale locale) {
- if (locale == null) {
- locale = getLocale(getDefaultLocale());
- }
- ResourceBundle bundle = (ResourceBundle) languages.get(locale);
- if (bundle == null) {
- logger.debug("Loading new resource bundle for locale " + locale + " from the database.");
- List<Language> languageItems = ServletContextUtils.getItrackerServices().getConfigurationService().getLanguage(locale);
- bundle = ITrackerResourceBundle.loadBundle(locale, languageItems);
- if (bundle != null) {
- putBundle(locale, bundle);
- } else if (!locale.toString().equals(getDefaultLocale())) {
- bundle = getBundle(getLocale());
- }
- }
+ public static String getDefaultLocale() {
+ return (defaultLocale == null ? DEFAULT_LOCALE : defaultLocale);
+ }
- return bundle;
- }
+ public static void setDefaultLocale(String value) {
+ defaultLocale = value;
+ }
- public static ResourceBundle getEditBundle(Locale locale) {
- if (locale == null) {
- locale = getLocale(getDefaultLocale());
- }
- ResourceBundle bundle = (ResourceBundle) languages.get(locale);
- logger.debug("Loading new resource bundle for locale " + locale + " from the database.");
- List<Language> languageItems = ServletContextUtils.getItrackerServices().getConfigurationService().getLanguage(locale);
- bundle = ITrackerResourceBundle.loadBundle(locale, languageItems);
- if (bundle != null) {
- putBundle(locale, bundle);
- } else if (!locale.toString().equals(getDefaultLocale())) {
- bundle = getBundle(getLocale());
- }
+ public static String getLocaleDN(String locale, Locale displayLocale) {
+ String name;
+ if (null == displayLocale) {
+ displayLocale = getLocale();
+ }
+ try {
+ name = getBundle(displayLocale).getString(
+ KEY_BASE_LOCALE_NAME + "." + locale);
+ } catch (RuntimeException e) {
+ name = getLocaleNativeName(getLocale(locale));
+ }
- return bundle;
- }
+ return name;
+ }
- public static void putBundle(Locale locale, ResourceBundle bundle) {
- if (locale != null && bundle != null) {
- synchronized (bundleLock) {
- languages.put(locale, bundle);
- String localeString = locale.toString();
- if (localeString.length() == 5) {
- localeString = localeString.substring(0, 2) + "_" + localeString.substring(3).toUpperCase();
- }
- locales.put(localeString, locale);
- }
- }
- }
+ public static String getLocaleDN(Locale locale, Locale displayLocale) {
- /**
- * Clears a single cached resource bundle. The next time the bundle is
- * accessed, it will be reloaded and placed into the cache.
- */
- public static void clearBundle(Locale locale) {
- if (locale != null) {
- synchronized (bundleLock) {
- languages.remove(locale);
- }
- }
- }
+ if (null == displayLocale) {
+ return getLocaleNativeName(displayLocale);
+ }
+ return getLocaleDN(locale.toString(), displayLocale);
- /**
- * Clears all cached resource bundles. The next time a bundle is accessed,
- * it will be reloaded and placed into the cache.
- */
- public static void clearBundles() {
- synchronized (bundleLock) {
- languages.clear();
- }
- }
+ }
+ public static String getLocaleFullDN(Locale locale, Locale displayLocale) {
- /**
- * Clears a single key from all cached resource bundles. The key is then
- * marked that it is dirty and should be reloaded on hte next access.
- */
- public static void clearKeyFromBundles(String key, boolean markDirty) {
- if (key != null) {
- synchronized (bundleLock) {
- for (Iterator<ResourceBundle> iter = languages.values().iterator(); iter.hasNext();) {
- ((ITrackerResourceBundle) iter.next()).removeValue(key, markDirty);
- }
- }
- }
- }
+ if (null == locale) {
+ locale = new Locale("");
+ }
+ String fullName = getLocaleNativeName(locale);
+ if (null == displayLocale || locale.getLanguage().equals(displayLocale.getLanguage())) {
+ return fullName;
+ }
+ if (fullName.equals(locale.toString())) {
+ fullName = getLocaleDN(locale, displayLocale);
+ } else {
+ String localizedName = getLocaleDN(locale, displayLocale);
+ if (null != fullName && null != localizedName && !localizedName.trim().equals(fullName.trim())) {
+ return fullName.trim() + " (" + localizedName.trim() + ")";
+ } else if (null != localizedName) {
+ return localizedName.trim();
+ } else if (null != fullName) {
+ return fullName.trim();
+ }
+
+ }
+
+ return "Unknown: " + locale.toString();
- public static String getString(String key) {
- return getString(key, getLocale(defaultLocale));
- }
+ }
+ public static String getLocaleNativeName(Locale locale) {
+ try {
+ return getString(KEY_BASE_LOCALE_NAME, locale);
+// return getBundle(locale).getString(KEY_BASE_LOCALE_NAME);
+ } catch (MissingResourceException e) {
+ return locale.toString();
+// return locale.getDisplayName(locale);
+ }
+ }
- public static String getString(String key, String locale) {
- if (key == null) {
- return "";
- }
+ public static final Map<String, String> getLocaleNamesMap(Locale locale, Set<String> languageCodes,Map<String, List<String>> languagesMap ) {
+ Map<String, String> ret = new LinkedHashMap<String, String>();
+ for (String languageCode : languageCodes) {
+ List<String> languagelist = languagesMap.get(languageCode);
+
+ String name = getLocaleFullDN(ITrackerResources.getLocale(languageCode), locale);
- if (locale == null || locale.equals("")) {
- locale = getDefaultLocale();
- }
+ ret.put(languageCode, name);
+ for (String languageitem : languagelist) {
+ name = getLocaleFullDN(ITrackerResources.getLocale(languageitem), locale);
+ ret.put(languageitem, name);
+ }
- return getString(key, getLocale(locale));
- }
+ }
+ if (ret.size() == 0) {
+ ret.put(getDefaultLocale(), getLocaleNativeName(getLocale(getDefaultLocale())));
+ }
+ return ret;
+
+ }
+ public static ResourceBundle getBundle() {
+ return getBundle(getDefaultLocale());
+ }
- public static String getString(String key, Locale locale) {
- if (key == null) {
- return "";
- }
+ public static ResourceBundle getBundle(String locale) {
+ if (locale == null || locale.equals("")) {
+ locale = getDefaultLocale();
+ }
- if (locale == null) {
- locale = getLocale(getDefaultLocale());
- }
- String val;
- try {
- try {
-// if (logger.isDebugEnabled()) {
-// logger.debug("getString: " + key + " for locale " + locale);
-// }
- val = getBundle(locale).getString(key);
- if (null != val) {
+ return getBundle(getLocale(locale));
+ }
-// if (logger.isDebugEnabled()) {
-// logger.debug("getString: found " + val + " for key" + key + ", locale " + locale);
-// }
- return val;
- } else {
- val = ITrackerResources.getString(key);
+ public static ResourceBundle getBundle(Locale locale) {
+ if (locale == null) {
+ locale = getLocale(getDefaultLocale());
+ }
+ ResourceBundle bundle = (ResourceBundle) languages.get(locale);
+ if (bundle == null) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("getBundle: Loading new resource bundle for locale " + locale
+ + " from the database.");
+ }
+ List<Language> languageItems = ServletContextUtils
+ .getItrackerServices().getConfigurationService()
+ .getLanguage(locale);
+// if (locale.getLanguage().equals("")) {
+// locale = getLocale()
+// }
+ bundle = ITrackerResourceBundle.loadBundle(locale, languageItems);
+ if (logger.isDebugEnabled()) {
+ logger.debug("getBundle: got loaded for locale " + locale
+ + " with items " + languageItems + " from the database.");
+ }
+ if (bundle != null) {
+ putBundle(locale, bundle);
+ } else if (!locale.toString().equals(getDefaultLocale())) {
+ bundle = getBundle(getLocale());
+ }
+ }
-// if (logger.isDebugEnabled()) {
-// logger.debug("getString: found in base: " + val + " for key" + key);
-// }
- }
- } catch (ITrackerDirtyResourceException idre) {
+ return bundle;
+ }
-// logger.debug("Loading new key to replace dirty key " + key + " for resource bundle for locale "
-// + locale);
- Language languageItem = ServletContextUtils.getItrackerServices().getConfigurationService().getLanguageItemByKey(key, locale);
- ((ITrackerResourceBundle) getBundle(locale)).updateValue(languageItem);
- }
- return getBundle(locale).getString(key);
- } catch (NullPointerException ex) {
- logger.error("Unable to get any resources. The requested locale was " + locale, ex);
- return "MISSING BUNDLE: " + locale;
- } catch (MissingResourceException ex) {
- logger.warn("MissingResourceException caught while retrieving translation key '" + key + "' for locale "
- + locale, ex);
- return "MISSING KEY: " + key;
- } catch (NoSuchEntityException ex) {
- logger.info("getString: not found " + key + " locale: " + locale, ex);
- try {
- return getEditBundle(locale).getString(key);
- } catch (Exception ex2) {
- logger.warn("getString: caught while retrieving translation key '" + key + "' for locale "
- + locale, ex2);
- return "MISSING KEY: " + key;
- }
- }
- }
+ public static ResourceBundle getEditBundle(Locale locale) {
+ if (locale == null) {
+ locale = getLocale(getDefaultLocale());
+ }
+ ResourceBundle bundle = (ResourceBundle) languages.get(locale);
+ logger.debug("Loading new resource bundle for locale " + locale
+ + " from the database.");
+ List<Language> languageItems = ServletContextUtils
+ .getItrackerServices().getConfigurationService().getLanguage(
+ locale);
+ bundle = ITrackerResourceBundle.loadBundle(locale, languageItems);
+ if (bundle != null) {
+ putBundle(locale, bundle);
+ } else if (!locale.toString().equals(getDefaultLocale())) {
+ bundle = getBundle(getLocale());
+ }
- public static String getString(String key, Object[] options) {
- return getString(key, getLocale(getDefaultLocale()), options);
- }
+ return bundle;
+ }
- public static String getString(String key, String locale, Object[] options) {
- return getString(key, getLocale(locale), options);
- }
+ public static void putBundle(Locale locale, ResourceBundle bundle) {
+ if (locale != null && bundle != null) {
+ synchronized (bundleLock) {
+ languages.put(locale, bundle);
+// if (bundle instanceof ITrackerResourceBundle) {
+// setData((ITrackerResourceBundle)bundle);
+// }
+ String localeString = locale.toString();
+ if (localeString.length() == 5) {
+ localeString = localeString.substring(0, 2) + "_"
+ + localeString.substring(3).toUpperCase();
+ }
+ locales.put(localeString, locale);
+ }
+ }
+ }
- public static String getString(String key, Locale locale, Object[] options) {
- String message = getString(key, locale);
- return MessageFormat.format(message, options, locale);
- }
+ static void setData(ITrackerResourceBundle bundle) {
- public static String getString(String key, String locale, String option) {
- String message = getString(key, locale);
- return MessageFormat.format(message, new Object[] { option }, getLocale(locale));
- }
+ List<Language> languageItems = ServletContextUtils
+ .getItrackerServices().getConfigurationService()
+ .getLanguage(bundle.getLocale());
+ bundle.setContents(languageItems);
+ }
+ /**
+ * Clears a single cached resource bundle. The next time the bundle is
+ * accessed, it will be reloaded and placed into the cache.
+ */
+ public static void clearBundle(Locale locale) {
+ if (locale != null) {
+ synchronized (bundleLock) {
+ ResourceBundle bundle = languages.get(locale);
+// if (bundle instanceof ITrackerResourceBundle) {
+// ((ITrackerResourceBundle)bundle).
+// }
+ languages.remove(locale);
+ }
+ }
+ }
- public static String getString(String key, Locale locale, String option) {
- String message = getString(key, locale);
- return MessageFormat.format(message, new Object[] { option }, locale);
- }
+ /**
+ * Clears all cached resource bundles. The next time a bundle is accessed,
+ * it will be reloaded and placed into the cache.
+ */
+ public static void clearBundles() {
+ synchronized (bundleLock) {
- public static String getCheckForKey(String key) throws MissingResourceException {
- return getCheckForKey(key, getLocale());
- }
+ languages.clear();
+
+ }
+ }
- public static String getCheckForKey(String key, Locale locale) throws MissingResourceException {
- try {
- return getBundle(locale).getString(key);
- } catch (ITrackerDirtyResourceException idre) {
- return getString(key, locale);
- } catch (NullPointerException ex) {
- logger.error("Unable to get ResourceBundle for locale " + locale, ex);
- throw new MissingResourceException("MISSING LOCALE: " + locale, "ITrackerResources", key);
- }
- }
+ /**
+ * Clears a single key from all cached resource bundles. The key is then
+ * marked that it is dirty and should be reloaded on hte next access.
+ */
+ public static void clearKeyFromBundles(String key, boolean markDirty) {
+ if (key != null) {
+ synchronized (bundleLock) {
+ for (Iterator<ResourceBundle> iter = languages.values()
+ .iterator(); iter.hasNext();) {
+ ((ITrackerResourceBundle) iter.next()).removeValue(key,
+ markDirty);
+ }
+ }
+ }
+ }
- public static boolean isLongString(String key) {
- String value = getString(key);
- if (value.length() > 80 || value.indexOf('\n') > 0) {
- return true;
- }
- return false;
- }
+ public static String getString(String key) {
+ return getString(key, getLocale(defaultLocale));
+ }
- public static String escapeUnicodeString(String str, boolean escapeAll) {
- if(str == null) {
- return "";
- }
-
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < str.length(); i++) {
- char ch = str.charAt(i);
- if (!escapeAll && ((ch >= 0x0020) && (ch <= 0x007e))) {
- sb.append(ch);
- } else {
- sb.append('\\').append('u');
- sb.append(encodeHex((ch >> 12) & 0xF));
- sb.append(encodeHex((ch >> 8) & 0xF));
- sb.append(encodeHex((ch >> 4) & 0xF));
- sb.append(encodeHex(ch & 0xF));
- }
- }
- return sb.toString();
- }
+ public static String getString(String key, String locale) {
+ if (key == null) {
+ return "";
+ }
- public static String unescapeUnicodeString(String str) {
- StringBuffer sb = new StringBuffer();
+ if (locale == null || locale.equals("")) {
+ locale = getDefaultLocale();
+ }
- for (int i = 0; i < str.length();) {
- char ch = str.charAt(i++);
- if (ch == '\\') {
- if (str.charAt(i++) == 'u') {
- int value = 0;
- for (int j = 0; j < 4; j++) {
- value = (value << 4) + decodeHex(str.charAt(i++));
- }
- sb.append((char) value);
- } else {
- sb.append("\\" + str.charAt(i));
- }
- } else {
- sb.append(ch);
- }
- }
- return sb.toString();
- }
+ return getString(key, getLocale(locale));
+ }
- public static final String HEXCHARS = "0123456789ABCDEF";
+ public static String getString(String key, Locale locale) {
+ if (key == null) {
+ return "";
+ }
- public static char encodeHex(int value) {
- return HEXCHARS.charAt(value & 0xf);
- }
+ if (locale == null) {
+ locale = getLocale(getDefaultLocale());
+ }
+ String val;
+ try {
+ try {
+// if (logger.isDebugEnabled()) {
+// logger.debug("getString: " + key + " for locale " + locale);
+// }
+ val = getBundle(locale).getString(key);
+ if (null != val) {
- public static int decodeHex(char ch) {
- int value = -1;
+// if (logger.isDebugEnabled()) {
+// logger.debug("getString: found " + val + " for key" + key
+// + ", locale " + locale);
+// }
+ return val;
+ } else {
+ val = ITrackerResources.getString(key);
- if (ch >= '0' && ch <= '9') {
- value = ch - '0';
- } else if (ch >= 'a' && ch <= 'f') {
- value = ch - 'a' + 10;
- } else if (ch >= 'A' && ch <= 'F') {
- value = ch - 'A' + 10;
- }
+// if (logger.isDebugEnabled()) {
+// logger.debug("getString: found in base: " + val +
+// " for key" + key);
+// }
+ }
+ } catch (ITrackerDirtyResourceException idre) {
- return value;
- }
+// logger.debug("Loading new key to replace dirty key " + key +
+// " for resource bundle for locale "
+// + locale);
+ Language languageItem = ServletContextUtils
+ .getItrackerServices().getConfigurationService()
+ .getLanguageItemByKey(key, locale);
+ ResourceBundle bundle = getBundle(locale);
+ ((ITrackerResourceBundle) bundle)
+ .updateValue(languageItem);
+ val = bundle.getString(key);
+ }
+ return val;
+ } catch (NullPointerException ex) {
+ logger.error(
+ "Unable to get any resources. The requested locale was "
+ + locale, ex);
+ return "MISSING BUNDLE: " + locale;
+ } catch (MissingResourceException ex) {
+ logger.warn(
+ "MissingResourceException caught while retrieving translation key '"
+ + key + "' for locale " + locale, ex);
+ return "MISSING KEY: " + key;
+ } catch (NoSuchEntityException ex) {
+ logger.info("getString: not found " + key + " locale: " + locale,
+ ex);
+ try {
+ return getEditBundle(locale).getString(key);
+ } catch (Exception ex2) {
+ logger.warn(
+ "getString: caught while retrieving translation key '"
+ + key + "' for locale " + locale, ex2);
+ return "MISSING KEY: " + key;
+ }
+ }
+ }
-// public static void setConfigurationService(ConfigurationService configurationService) {
-// ITrackerResources.configurationService = configurationService;
-// }
+ public static String getString(String key, Object[] options) {
+ return getString(key, getLocale(getDefaultLocale()), options);
+ }
+ public static String getString(String key, String locale, Object[] options) {
+ return getString(key, getLocale(locale), options);
+ }
+
+ public static String getString(String key, Locale locale, Object[] options) {
+ String message = getString(key, locale);
+ return MessageFormat.format(message, options, locale);
+ }
+
+ public static String getString(String key, String locale, String option) {
+ String message = getString(key, locale);
+ return MessageFormat.format(message, new Object[] { option },
+ getLocale(locale));
+ }
+
+ public static String getString(String key, Locale locale, String option) {
+ String message = getString(key, locale);
+ return MessageFormat.format(message, new Object[] { option }, locale);
+ }
+
+ public static String getCheckForKey(String key)
+ throws MissingResourceException {
+ return getCheckForKey(key, getLocale());
+ }
+
+ public static String getCheckForKey(String key, Locale locale)
+ throws MissingResourceException {
+ try {
+ return getBundle(locale).getString(key);
+ } catch (ITrackerDirtyResourceException idre) {
+ return getString(key, locale);
+ } catch (NullPointerException ex) {
+ logger.error("Unable to get ResourceBundle for locale " + locale,
+ ex);
+ throw new MissingResourceException("MISSING LOCALE: " + locale,
+ "ITrackerResources", key);
+ }
+ }
+
+ public static boolean isLongString(String key) {
+ String value = getString(key);
+ if (value.length() > 80 || value.indexOf('\n') > 0) {
+ return true;
+ }
+ return false;
+ }
+
+ public static String escapeUnicodeString(String str, boolean escapeAll) {
+ if (str == null) {
+ return "";
+ }
+
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < str.length(); i++) {
+ char ch = str.charAt(i);
+ if (!escapeAll && ((ch >= 0x0020) && (ch <= 0x007e))) {
+ sb.append(ch);
+ } else {
+ sb.append('\\').append('u');
+ sb.append(encodeHex((ch >> 12) & 0xF));
+ sb.append(encodeHex((ch >> 8) & 0xF));
+ sb.append(encodeHex((ch >> 4) & 0xF));
+ sb.append(encodeHex(ch & 0xF));
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String unescapeUnicodeString(String str) {
+ StringBuffer sb = new StringBuffer();
+
+ for (int i = 0; i < str.length();) {
+ char ch = str.charAt(i++);
+ if (ch == '\\') {
+ if (str.charAt(i++) == 'u') {
+ int value = 0;
+ for (int j = 0; j < 4; j++) {
+ value = (value << 4) + decodeHex(str.charAt(i++));
+ }
+ sb.append((char) value);
+ } else {
+ sb.append("\\" + str.charAt(i));
+ }
+ } else {
+ sb.append(ch);
+ }
+ }
+ return sb.toString();
+ }
+
+ public static final String HEXCHARS = "0123456789ABCDEF";
+
+ public static char encodeHex(int value) {
+ return HEXCHARS.charAt(value & 0xf);
+ }
+
+ public static int decodeHex(char ch) {
+ int value = -1;
+
+ if (ch >= '0' && ch <= '9') {
+ value = ch - '0';
+ } else if (ch >= 'a' && ch <= 'f') {
+ value = ch - 'a' + 10;
+ } else if (ch >= 'A' && ch <= 'F') {
+ value = ch - 'A' + 10;
+ }
+
+ return value;
+ }
+
+ // public static void setConfigurationService(ConfigurationService
+ // configurationService) {
+ // ITrackerResources.configurationService = configurationService;
+ // }
+
public static boolean isInitialized() {
return initialized;
}
@@ -438,4 +586,26 @@
ITrackerResources.initialized = initialized;
}
+ public static String getParentLocale(String locale) {
+ String localeCode = locale;
+ if (localeCode == null) {
+ localeCode = getDefaultLocale();
+ } else if (localeCode.equals(getDefaultLocale())) {
+ localeCode = BASE_LOCALE;
+ } else {
+ Locale l = getLocale(locale);
+
+ if (!l.getVariant().equals("")) {
+ localeCode = l.getLanguage() + "_" + l.getCountry();
+ }
+ if (!l.getCountry().equals("")) {
+ localeCode = l.getLanguage();
+ }
+ if (!l.getLanguage().equals("")) {
+ localeCode = getDefaultLocale();
+ }
+ }
+ return localeCode;
+ }
+
}
Modified: itracker/trunk/src/main/java/org/itracker/model/Language.java
===================================================================
--- itracker/trunk/src/main/java/org/itracker/model/Language.java 2009-03-02 13:16:02 UTC (rev 2178)
+++ itracker/trunk/src/main/java/org/itracker/model/Language.java 2009-03-09 18:12:03 UTC (rev 2179)
@@ -18,6 +18,9 @@
package org.itracker.model;
+import java.util.Comparator;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
@@ -27,6 +30,7 @@
*/
public class Language extends AbstractEntity {
+
/**
*
*/
@@ -118,5 +122,28 @@
return new ToStringBuilder(this).append("id", getId()).append("resourceKey",
getResourceKey()).append("locale", getLocale()).append("value", getResourceValue()).toString();
}
+
+ public static final Comparator<Language> KEY_COMPARATOR = new LanguageKeyComparator();
+ private static class LanguageKeyComparator implements Comparator<Language> {
+
+ public int compare(Language o1, Language o2) {
+ return new CompareToBuilder().append(o1.getResourceKey(), o2.getResourceKey()).append(o1.getLocale(), o2.getLocale()).append(o1.getId(), o2.getId()).toComparison();
+ }
+
+ }
+
+ public static final Comparator<Language> VALUE_COMPARATOR = new LanguageValueComparator();
+
+ private static class LanguageValueComparator implements Comparator<Language> {
+
+ public int compare(Language o1, Language o2) {
+ return new CompareToBuilder()
+ .append(o1.getResourceValue(), o2.getResourceValue())
+ .append(o1.getResourceKey(), o2.getResourceKey())
+ .append(o1.getId(), o2.getId()).toComparison();
+ }
+
+ }
+
}
\ No newline at end of file
Modified: itracker/trunk/src/main/java/org/itracker/model/Permission.java
===================================================================
--- itracker/trunk/src/main/java/org/itracker/model/Permission.java 2009-03-02 13:16:02 UTC (rev 2178)
+++ itracker/trunk/src/main/java/org/itracker/model/Permission.java 2009-03-09 18:12:03 UTC (rev 2179)
@@ -44,7 +44,7 @@
/**
* The type of permission granted. TODO: use PermissionType enum
*/
- private int type;
+ private Integer type;
/**
* The project on which this permission is granted. May be <tt>null</tt>
@@ -75,7 +75,7 @@
* @param user
* grantee
*/
- public Permission(int type, User user) {
+ public Permission(Integer type, User user) {
this(type, user, null);
}
@@ -90,17 +90,17 @@
* on which permission is granted, or <tt>null</tt> for all
* projects
*/
- public Permission(int type, User user, Project project) {
+ public Permission(Integer type, User user, Project project) {
setPermissionType(type);
setUser(user);
setProject(project);
}
- public int getPermissionType() {
+ public Integer getPermissionType() {
return type;
}
- public void setPermissionType(int type) {
+ public void setPermissionType(Integer type) {
this.type = type;
}
Modified: itracker/trunk/src/main/java/org/itracker/model/util/PropertiesFileHandler.java
===================================================================
--- itracker/trunk/src/main/java/org/itracker/model/util/PropertiesFileHandler.java 2009-03-02 13:16:02 UTC (rev 2178)
+++ itracker/trunk/src/main/java/org/itracker/model/util/PropertiesFileHandler.java 2009-03-09 18:12:03 UTC (rev 2179)
@@ -40,6 +40,9 @@
public void addProperties(String resource) {
if(resource == null || resource.equals("") || ! resource.endsWith(".properties")) {
+ if (logger.isInfoEnabled()) {
+ logger.info("addProperties: skip " +resource);
+ }
return;
}
Modified: itracker/trunk/src/main/java/org/itracker/services/implementations/ConfigurationServiceImpl.java
===================================================================
--- itracker/trunk/src/main/java/org/itracker/services/implementations/ConfigurationServiceImpl.java 2009-03-02 13:16:02 UTC (rev 2178)
+++ itracker/trunk/src/main/java/org/itracker/services/implementations/ConfigurationServiceImpl.java 2009-03-09 18:12:03 UTC (rev 2179)
@@ -30,6 +30,7 @@
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
+import java.util.ResourceBundle;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@@ -57,6 +58,7 @@
import org.itracker.services.util.IssueUtilities;
import org.itracker.services.util.NamingUtilites;
import org.itracker.services.util.SystemConfigurationUtilities;
+import org.jfree.util.Log;
/**
* Implementation of the ConfigurationService Interface.
@@ -843,19 +845,35 @@
}
public Language getLanguageItemByKey(String key, Locale locale) {
- Language languageItem = null;
+ Language languageItem;
+ try {
+ languageItem = languageDAO.findByKeyAndLocale(key, ITrackerResources.BASE_LOCALE);
+ } catch (RuntimeException e) {
+ languageItem = null;
+ }
- languageItem = languageDAO.findByKeyAndLocale(key, ITrackerResources.BASE_LOCALE);
-
- if (locale != null && !"".equals(locale.getLanguage())) {
- languageItem = languageDAO.findByKeyAndLocale(key, locale.getLanguage());
- if (!"".equals(locale.getCountry())) {
- try {
- languageItem = languageDAO.findByKeyAndLocale(key, locale.toString());
- } catch (Exception ex){
- }
+ if (null == locale){
+
+ locale = ITrackerResources.getLocale(ITrackerResources.BASE_LOCALE);
+
+ }
+ try {
+ return languageDAO.findByKeyAndLocale(key, locale.getLanguage());
+ } catch (RuntimeException re) {
+ if (null == languageItem) {
+ languageItem = new Language(locale.getDisplayName(), key, ITrackerResources.getBundle(locale.getLanguage()).getString(key));
+ }
+ }
+ if (!"".equals(locale.getCountry())) {
+ try {
+ return languageDAO.findByKeyAndLocale(key, locale.toString());
+ } catch (RuntimeException ex){
+ if (null == languageItem){
+ return new Language(locale.getDisplayName(), key, ITrackerResources.getBundle(locale).getString(key));
+ }
}
}
+
return languageItem;
}
@@ -998,50 +1016,54 @@
Map<String,String> language = new HashMap<String,String>();
+
+ if (locale == null) {
+ locale = new Locale("");
+ }
+
+ String localeString = (locale.toString().equals("") ? ITrackerResources.BASE_LOCALE : locale.toString());
- Collection<Language> baseItems = languageDAO.findByLocale(ITrackerResources.BASE_LOCALE);
-
- for (Iterator<Language> iterator = baseItems.iterator(); iterator.hasNext();) {
+ Collection<Language> items = languageDAO.findByLocale(localeString);
+
+ for (Iterator<Language> iterator = items.iterator(); iterator.hasNext();) {
Language item = (Language) iterator.next();
language.put(item.getResourceKey(), item.getResourceValue());
}
+// if (locale != null && !"".equals(locale.getLanguage())) {
+//
+// Collection<Language> languageItems = languageDAO.findByLocale(locale.getLanguage());
+//
+// for (Iterator<Language> iterator = languageItems.iterator(); iterator.hasNext();) {
+//
+// Language item = (Language) iterator.next();
+//
+// language.put(item.getResourceKey(), item.getResourceValue());
+//
+// }
+//
+// if (!"".equals(locale.getCountry())) {
+//
+// Collection<Language> countryItems = languageDAO.findByLocale(locale.toString());
+//
+// for (Iterator<Language> iterator = countryItems.iterator(); iterator.hasNext();) {
+//
+// Language item = (Language) iterator.next();
+//
+// language.put(item.getResourceKey(), item.getResourceValue());
+//
+// }
+//
+// }
+//
+// }
- if (locale != null && !"".equals(locale.getLanguage())) {
-
- Collection<Language> languageItems = languageDAO.findByLocale(locale.getLanguage());
-
- for (Iterator<Language> iterator = languageItems.iterator(); iterator.hasNext();) {
-
- Language item = (Language) iterator.next();
-
- language.put(item.getResourceKey(), item.getResourceValue());
-
- }
-
- if (!"".equals(locale.getCountry())) {
-
- Collection<Language> countryItems = languageDAO.findByLocale(locale.toString());
-
- for (Iterator<Language> iterator = countryItems.iterator(); iterator.hasNext();) {
-
- Language item = (Language) iterator.next();
-
- language.put(item.getResourceKey(), item.getResourceValue());
-
- }
-
- }
-
- }
-
Language[] languageArray = new Language[language.size()];
int i = 0;
- String localeString = (locale == null ? ITrackerResources.BASE_LOCALE : locale.toString());
for (Iterator<String> iterator = language.keySet().iterator(); iterator.hasNext(); i++) {
@@ -1193,36 +1215,31 @@
logger.debug("Loading database with locale " + locale);
- PropertiesFileHandler localePropertiesHandler = new PropertiesFileHandler(
- "/org/itracker/core/resources/ITracker"
- + (ITrackerResources.BASE_LOCALE.equals(locale) ? "" : "_" + locale) + ".properties");
+// PropertiesFileHandler localePropertiesHandler = new PropertiesFileHandler(
+// "/org/itracker/core/resources/ITracker"
+// + (ITrackerResources.BASE_LOCALE.equals(locale) ? "" : "_" + locale) + ".properties");
- if (localePropertiesHandler.hasProperties()) {
+// if (localePropertiesHandler.hasProperties()) {
- Properties localeProperties = localePropertiesHandler.getProperties();
+// ...
[truncated message content] |