KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > cowsultants > itracker > web > actions > EditLanguageAction


1 /*
2  * This software was designed and created by Jason Carroll.
3  * Copyright (c) 2002, 2003, 2004 Jason Carroll.
4  * The author can be reached at jcarroll@cowsultants.com
5  * ITracker website: http://www.cowsultants.com
6  * ITracker forums: http://www.cowsultants.com/phpBB/index.php
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it only under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  */

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 JavaDoc 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 JavaDoc action = (String JavaDoc) PropertyUtils.getSimpleProperty(form, "action");
69             String JavaDoc locale = (String JavaDoc) 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             // Fixes added for bug in beanutils. Can remove all of the replace calls in the following
77
// code once the bug is fixed. Make sure the fix in EditLanguageFormAction is also removed.
78

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 JavaDoc key = (String JavaDoc) iter.next();
91                             if(key != null) {
92                                 String JavaDoc value = (String JavaDoc) 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 JavaDoc key = (String JavaDoc) iter.next();
107                     if(key != null) {
108                         String JavaDoc value = (String JavaDoc) items.get(key);
109                         try {
110                             String JavaDoc 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 JavaDoc 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