Java tutorial
/* * This software was designed and created by Jason Carroll. * Copyright (c) 2002, 2003, 2004 Jason Carroll. * The author can be reached at jcarroll@cowsultants.com * ITracker website: http://www.cowsultants.com * ITracker forums: http://www.cowsultants.com/phpBB/index.php * * This program is free software; you can redistribute it and/or modify * it only under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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 General Public License for more details. */ package org.itracker.web.actions.admin.language; import org.apache.commons.beanutils.PropertyUtils; import org.apache.log4j.Logger; import org.apache.struts.action.*; import org.itracker.core.resources.ITrackerResources; import org.itracker.model.Language; import org.itracker.model.util.PropertiesFileHandler; import org.itracker.model.util.SystemConfigurationUtilities; import org.itracker.services.ConfigurationService; import org.itracker.web.actions.base.ItrackerBaseAction; import org.itracker.web.forms.LanguageForm; import org.itracker.web.util.Constants; import org.itracker.web.util.ServletContextUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.*; public class EditLanguageFormAction extends ItrackerBaseAction { private static final Logger log = Logger.getLogger(EditLanguageFormAction.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ActionMessages errors = new ActionMessages(); try { ConfigurationService configurationService = ServletContextUtils.getItrackerServices() .getConfigurationService(); HttpSession session = request.getSession(true); LanguageForm languageForm = (LanguageForm) form; if (languageForm == null) { languageForm = new LanguageForm(); } String locale = (String) PropertyUtils.getSimpleProperty(form, "locale"); int localeType = SystemConfigurationUtilities.getLocaleType(locale); if (localeType == SystemConfigurationUtilities.LOCALE_TYPE_INVALID) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidlocale")); } else { if ("create".equals(PropertyUtils.getSimpleProperty(form, "action"))) { // The locale passed in on a create action is actually the parent locale. Reset the parent // locale, increment the type (since we are creating the next type, and clear the locale localeType++; languageForm.setParentLocale(locale); if (localeType == SystemConfigurationUtilities.LOCALE_TYPE_LOCALE) { languageForm.setLocale(locale + "_"); } else { languageForm.setLocale(""); } } String[] sortedKeys = configurationService.getSortedKeys(); Map<String, String> baseItems = new HashMap<>(); Map<String, String> langItems = new HashMap<>(); Map<String, String> locItems = new HashMap<>(); Map<String, String> items = new HashMap<>(); log.debug("Loading language elements for edit. Edit type is " + localeType); if (localeType >= SystemConfigurationUtilities.LOCALE_TYPE_BASE) { baseItems = configurationService.getDefinedKeys(null); // putPropertiesKeys(baseItems, ITrackerResources.BASE_LOCALE); items = new HashMap<>(); log.debug("Base Locale has " + baseItems.size() + " keys defined."); } if (localeType >= SystemConfigurationUtilities.LOCALE_TYPE_LANGUAGE) { if (!locale.equalsIgnoreCase(ITrackerResources.BASE_LOCALE)) { String parentLocale = SystemConfigurationUtilities.getLocalePart(locale, SystemConfigurationUtilities.LOCALE_TYPE_LANGUAGE); languageForm.setParentLocale(parentLocale); langItems = configurationService.getDefinedKeys(parentLocale); // putPropertiesKeys(langItems, parentLocale); items = new HashMap<>(); log.debug("Language " + parentLocale + " has " + langItems.size() + " keys defined."); } } if (localeType == SystemConfigurationUtilities.LOCALE_TYPE_LOCALE) { locItems = configurationService.getDefinedKeys(locale); // putPropertiesKeys(locItems, locale); items = locItems; log.debug("Locale " + locale + " has " + locItems.size() + " keys defined."); } if (!"create".equals(PropertyUtils.getSimpleProperty(form, "action"))) { Map<String, String> formItems = new HashMap<>(); for (Enumeration<String> en = ITrackerResources.getBundle(locale).getKeys(); en .hasMoreElements();) { String key = en.nextElement(); formItems.put(key, ""); } formItems.putAll(items); languageForm.setItems(new TreeMap<>(formItems)); } else { String parentLocale = null; if (!locale.equalsIgnoreCase(ITrackerResources.BASE_LOCALE)) { parentLocale = SystemConfigurationUtilities.getLocalePart(locale, SystemConfigurationUtilities.LOCALE_TYPE_LANGUAGE); } langItems = configurationService.getDefinedKeys(parentLocale); Map<String, String> formItems = new HashMap<>(); if (log.isDebugEnabled()) { log.debug("putPropertiesKeys: items: " + items); } for (Enumeration<String> en = ITrackerResources.getBundle(locale).getKeys(); en .hasMoreElements();) { String key = en.nextElement(); formItems.put(key, ""); } formItems.putAll(items); languageForm.setItems(new TreeMap<>(formItems)); } Locale curLocale = ITrackerResources.getLocale(locale); Language languageItem = new Language(locale, "itracker.locale.name", ITrackerResources.getString("itracker.locale.name", curLocale));// configurationService.getLanguageItemByKey("itracker.locale.name", curLocale); languageForm.setLocaleTitle(languageItem.getResourceValue()); languageItem = new Language(locale, "itracker.locale.name", ITrackerResources .getString("itracker.locale.name." + locale, ITrackerResources.BASE_LOCALE));// configurationService.getLanguageItemByKey("itracker.locale.name", curLocale); languageForm.setLocaleBaseTitle(languageItem.getResourceValue()); session.setAttribute(Constants.EDIT_LANGUAGE_KEYS_KEY, sortedKeys); session.setAttribute(Constants.EDIT_LANGUAGE_BASE_KEY, baseItems); session.setAttribute(Constants.EDIT_LANGUAGE_LANG_KEY, langItems); session.setAttribute(Constants.EDIT_LANGUAGE_LOC_KEY, locItems); session.setAttribute(Constants.EDIT_LANGUAGE_TYPE_KEY, localeType); request.setAttribute("languageForm", languageForm); if (log.isDebugEnabled()) { log.debug("Locale = " + languageForm.getLocale()); } saveToken(request); return mapping.getInputForward(); } } catch (RuntimeException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { log.error("Exception while creating edit language form.", e); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system")); } if (!errors.isEmpty()) { saveErrors(request, errors); } return mapping.findForward("error"); } @SuppressWarnings("unchecked") void putPropertiesKeys(Map<String, String> locItems, String locale) { try { Hashtable<Object, Object> p; try { String path = File.separatorChar + ITrackerResources.RESOURCE_BUNDLE_NAME.replace('.', File.separatorChar) + (null != locale && !(ITrackerResources.BASE_LOCALE.equals(locale)) ? "_" + locale : "") + ".properties"; if (log.isDebugEnabled()) { log.debug("putPropertiesKeys: loading: " + path); } p = new PropertiesFileHandler(path).getProperties(); p = new Hashtable<>(p); if (log.isDebugEnabled()) { log.debug("putPropertiesKeys: loaded properties: " + p); } } catch (Exception e) { if (log.isDebugEnabled()) { log.debug("putPropertiesKeys", e); } p = new Properties(); } // overload properties by loc items from db if (log.isDebugEnabled()) { log.debug("putPropertiesKeys: overloading locItems: " + locItems); } p.putAll(locItems); locItems.putAll(Collections.checkedMap((Map) p, String.class, String.class)); } catch (RuntimeException e) { log.error("addPropertiesKeys: caught ", e); } } }