1 18 19 package cowsultants.itracker.web.actions; 20 21 import java.io.*; 22 import java.rmi.*; 23 import java.util.*; 24 import javax.ejb.*; 25 import javax.rmi.*; 26 import javax.naming.*; 27 import javax.servlet.*; 28 import javax.servlet.http.*; 29 30 import org.apache.commons.beanutils.*; 31 import org.apache.struts.action.*; 32 import org.apache.struts.upload.*; 33 import org.apache.struts.util.*; 34 35 import cowsultants.itracker.ejb.client.exceptions.*; 36 import cowsultants.itracker.ejb.client.interfaces.*; 37 import cowsultants.itracker.ejb.client.models.*; 38 import cowsultants.itracker.ejb.client.resources.*; 39 import cowsultants.itracker.ejb.client.util.*; 40 import cowsultants.itracker.web.util.*; 41 42 43 public class EditLanguageAction extends ITrackerAction { 44 45 public EditLanguageAction() { 46 } 47 48 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 49 ActionErrors errors = new ActionErrors(); 50 51 if(! isLoggedIn(request, response)) { 52 return mapping.findForward("login"); 53 } 54 if(! isTokenValid(request)) { 55 Logger.logDebug("Invalid request token while editing language."); 56 return mapping.findForward("listlanguages"); 57 } 58 resetToken(request); 59 HttpSession session = request.getSession(true); 60 61 try { 62 InitialContext ic = new InitialContext(); 63 64 Object scRef = ic.lookup("java:comp/env/" + SystemConfiguration.JNDI_NAME); 65 SystemConfigurationHome scHome = (SystemConfigurationHome) PortableRemoteObject.narrow(scRef, SystemConfigurationHome.class); 66 SystemConfiguration sc = scHome.create(); 67 68 String action = (String ) PropertyUtils.getSimpleProperty(form, "action"); 69 String locale = (String ) PropertyUtils.getSimpleProperty(form, "locale"); 70 HashMap items = (HashMap) PropertyUtils.getSimpleProperty(form, "items"); 71 72 if(items == null) { 73 return mapping.findForward("listlanguages"); 74 } 75 76 79 if(locale == null || "".equals(locale.trim())) { 80 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.invalidlocale")); 81 } else if("create".equals(action)) { 82 if(locale.length() != 2 || (locale.length() != 5 && locale.indexOf('_') == 2)) { 83 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.invalidlocale")); 84 } else { 85 ConfigurationModel localeConfig = new ConfigurationModel(SystemConfigurationUtilities.TYPE_LOCALE, locale); 86 if(sc.configurationItemExists(localeConfig)) { 87 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.invalidlocale")); 88 } else { 89 for(Iterator iter = items.keySet().iterator(); iter.hasNext(); ) { 90 String key = (String ) iter.next(); 91 if(key != null) { 92 String value = (String ) items.get(key); 93 if(value != null && ! value.trim().equals("")) { 94 sc.updateLanguageItem(new LanguageModel(locale, key.replace('/', '.'), value)); 95 } 96 } 97 } 98 sc.createConfigurationItem(localeConfig); 99 clearSessionObjects(session); 100 return mapping.findForward("listlanguages"); 101 } 102 } 103 } else if("update".equals(action)) { 104 Locale updateLocale = ITrackerResources.getLocale(locale); 105 for(Iterator iter = items.keySet().iterator(); iter.hasNext(); ) { 106 String key = (String ) iter.next(); 107 if(key != null) { 108 String value = (String ) items.get(key); 109 try { 110 String currValue = ITrackerResources.getCheckForKey(key.replace('/', '.'), updateLocale); 111 if(value == null || value.trim().equals("")) { 112 sc.removeLanguageItem(new LanguageModel(locale, key.replace('/', '.'))); 113 ITrackerResources.clearKeyFromBundles(key.replace('/', '.'), true); 114 } else if(! value.equals(currValue)) { 115 sc.updateLanguageItem(new LanguageModel(locale, key.replace('/', '.'), value)); 116 ITrackerResources.clearKeyFromBundles(key.replace('/', '.'), true); 117 } 118 } catch(MissingResourceException mre) { 119 if(value != null && ! value.trim().equals("")) { 120 sc.updateLanguageItem(new LanguageModel(locale, key.replace('/', '.'), value)); 121 ITrackerResources.clearKeyFromBundles(key.replace('/', '.'), true); 122 } 123 } 124 } 125 } 126 clearSessionObjects(session); 127 return mapping.findForward("listlanguages"); 128 } else { 129 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.invalidaction")); 130 } 131 } catch(Exception e) { 132 Logger.logError("Exception processing form data", e); 133 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("itracker.web.error.system")); 134 } 135 136 if(! errors.isEmpty()) { 137 saveErrors(request, errors); 138 saveToken(request); 139 return mapping.getInputForward(); 140 } 141 142 clearSessionObjects(session); 143 return mapping.findForward("error"); 144 } 145 146 147 private void clearSessionObjects(HttpSession session) { 148 session.removeAttribute(Constants.EDIT_LANGUAGE_KEYS_KEY); 149 session.removeAttribute(Constants.EDIT_LANGUAGE_BASE_KEY); 150 session.removeAttribute(Constants.EDIT_LANGUAGE_LANG_KEY); 151 session.removeAttribute(Constants.EDIT_LANGUAGE_LOC_KEY); 152 session.removeAttribute(Constants.EDIT_LANGUAGE_TYPE_KEY); 153 } 154 } 155 | Popular Tags |