KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > tigris > scarab > pipeline > SetLocaleValve


1 package org.tigris.scarab.pipeline;
2
3 /* ================================================================
4  * Copyright (c) 2001 Collab.Net. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16  *
17  * 3. The end-user documentation included with the redistribution, if
18  * any, must include the following acknowlegement: "This product includes
19  * software developed by Collab.Net <http://www.Collab.Net/>."
20  * Alternately, this acknowlegement may appear in the software itself, if
21  * and wherever such third-party acknowlegements normally appear.
22  *
23  * 4. The hosted project names must not be used to endorse or promote
24  * products derived from this software without prior written
25  * permission. For written permission, please contact info@collab.net.
26  *
27  * 5. Products derived from this software may not use the "Tigris" or
28  * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
29  * prior written permission of Collab.Net.
30  *
31  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
32  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
33  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
34  * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
35  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
37  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
38  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
39  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
40  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
41  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  *
43  * ====================================================================
44  *
45  * This software consists of voluntary contributions made by many
46  * individuals on behalf of Collab.Net.
47  */

48
49 import java.io.IOException JavaDoc;
50 import java.util.Locale JavaDoc;
51
52 import javax.servlet.http.HttpServletRequest JavaDoc;
53
54 import org.apache.fulcrum.localization.Localization;
55 import org.apache.fulcrum.localization.LocalizationService;
56 import org.apache.log4j.Logger;
57 import org.apache.turbine.RunData;
58 import org.apache.turbine.TurbineException;
59 import org.apache.turbine.pipeline.AbstractValve;
60 import org.apache.turbine.ValveContext;
61 import org.tigris.scarab.om.ScarabUser;
62 import org.tigris.scarab.om.UserPreference;
63 import org.tigris.scarab.om.UserPreferenceManager;
64
65 /**
66  * This valve checks for changes in the browser locale preference settings.
67  * Every time the user changes their locale settings, Scarab will update
68  * its internal database to reflect these changes. From then on the user
69  * gets their emails in the new preferred language.
70  * @author <a HREF="mailto:dabbous@saxess.com">Hussayn Dabbous</a>
71  */

72 public class SetLocaleValve extends AbstractValve
73 {
74     private static final Logger LOG = Logger.getLogger(SetLocaleValve.class);
75
76     /**
77      * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
78      */

79     public void invoke(RunData data, ValveContext context)
80         throws IOException JavaDoc, TurbineException
81     {
82         ScarabUser user = (ScarabUser) data.getUser();
83
84         // Ensure we only deal with exsiting users
85
if (user != null && user.getUserId() != null)
86         {
87             try
88             {
89                 String JavaDoc acceptLanguage = LocalizationService.ACCEPT_LANGUAGE;
90                 HttpServletRequest JavaDoc request = data.getRequest();
91                 String JavaDoc browserLocaleAsString =
92                     request.getHeader(acceptLanguage);
93
94                 Locale JavaDoc userLocale = user.getLocale();
95                 Locale JavaDoc browserLocale =
96                     Localization.getLocale(browserLocaleAsString);
97
98                 if (!userLocale.equals(browserLocale))
99                 {
100                     storePreferredLocale(user, browserLocaleAsString);
101                 }
102             }
103             catch (Exception JavaDoc e)
104             {
105                 LOG.warn(
106                     "Could not set locale info for user ["
107                         + user.getName()
108                         + "]");
109             }
110         }
111         // Pass control to the next Valve in the Pipeline
112
context.invokeNext(data);
113     }
114
115     /**
116      * Store the locale settings as received from browser into the
117      * database.
118      * @param user
119      * @param localeAsString
120      * @throws Exception
121      */

122     private void storePreferredLocale(ScarabUser user, String JavaDoc localeAsString)
123         throws Exception JavaDoc
124     {
125         // Change the settings in the database
126
UserPreference pref =
127             UserPreferenceManager.getInstance(user.getUserId());
128         pref.setLocale(localeAsString);
129         pref.save();
130
131         // The internal user caches the current locale,
132
// hence we need to modify the user's locale now.
133
Locale JavaDoc locale = Localization.getLocale(localeAsString);
134         user.setLocale(locale);
135     }
136 }
137
Popular Tags