Java tutorial
/** * Copyright (c) 2009--2014 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package com.redhat.rhn.frontend.xmlrpc.preferences.locale; import com.redhat.rhn.common.localization.LocalizationService; import com.redhat.rhn.domain.user.RhnTimeZone; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.frontend.xmlrpc.BaseHandler; import com.redhat.rhn.frontend.xmlrpc.InvalidLocaleCodeException; import com.redhat.rhn.frontend.xmlrpc.InvalidTimeZoneException; import com.redhat.rhn.frontend.xmlrpc.user.XmlRpcUserHelper; import com.redhat.rhn.manager.user.UserManager; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import java.util.List; /** * PreferencesLocaleHandler XMLRPC handler for the "preferences.locale" * namespace. * @xmlrpc.namespace preferences.locale * @xmlrpc.doc Provides methods to access and modify user locale information * @version $Rev$ */ public class PreferencesLocaleHandler extends BaseHandler { /** * Set the TimeZone for the given user. * @param loggedInUser The current user * in user. * @param login The login of the user whose timezone will be changed. * @param tzid TimeZone id * @return Returns 1 if successful (exception otherwise) * * @xmlrpc.doc Set a user's timezone. * @xmlrpc.param #param("string", "sessionKey") * @xmlrpc.param #param_desc("string", "login", "User's login name.") * @xmlrpc.param #param_desc("int", "tzid" "Timezone ID. (from listTimeZones)") * @xmlrpc.returntype #return_int_success() */ public int setTimeZone(User loggedInUser, String login, Integer tzid) { List tzs = UserManager.lookupAllTimeZones(); Object o = CollectionUtils.find(tzs, new TzPredicate(tzid)); if (o == null) { throw new InvalidTimeZoneException(tzid); } User target = XmlRpcUserHelper.getInstance().lookupTargetUser(loggedInUser, login); target.setTimeZone((RhnTimeZone) o); UserManager.storeUser(target); return 1; } /** * Set the language the user will display in the user interface. * @param loggedInUser The current user * in user. * @param login The login of the user whose language will be changed. * @param locale Locale code to be used as the users language. * @return Returns 1 if successful (exception otherwise) * * @xmlrpc.doc Set a user's locale. * @xmlrpc.param #param("string", "sessionKey") * @xmlrpc.param #param_desc("string", "login", "User's login name.") * @xmlrpc.param #param_desc("string", "locale", "Locale to set. (from listLocales)") * @xmlrpc.returntype #return_int_success() */ public int setLocale(User loggedInUser, String login, String locale) { LocalizationService ls = LocalizationService.getInstance(); List locales = ls.getConfiguredLocales(); Object o = CollectionUtils.find(locales, new LocalePredicate(locale)); if (o == null) { throw new InvalidLocaleCodeException(locale); } User target = XmlRpcUserHelper.getInstance().lookupTargetUser(loggedInUser, login); target.setPreferredLocale(locale); UserManager.storeUser(target); return 1; } /** * Returns a list of all understood TimeZones. This should be used * as the input into setTimeZone. * @return list of all understood TimeZones. This should be used * as the input into setTimeZone. * * @xmlrpc.doc Returns a list of all understood timezones. Results can be * used as input to setTimeZone. * @xmlrpc.returntype * #array() * $RhnTimeZoneSerializer * #array_end() */ public Object[] listTimeZones() { return UserManager.lookupAllTimeZones().toArray(); } /** * Returns a list of all understood Locales. This should be used * as the input into setLocale. * @return list of all understood Locales. This should be used * as the input into setLocale. * * @xmlrpc.doc Returns a list of all understood locales. Can be * used as input to setLocale. * @xmlrpc.returntype * #array_single("string", "Locale code.") */ public Object[] listLocales() { LocalizationService ls = LocalizationService.getInstance(); return ls.getConfiguredLocales().toArray(); } /** * TzPredicate - used to find a valid id in the list. * @version $Rev$ */ public static class TzPredicate implements Predicate { private int id = -1; /** * constructor * @param tzid timezone id to be found */ public TzPredicate(int tzid) { id = tzid; } /** {@inheritDoc} */ public boolean evaluate(Object object) { RhnTimeZone tz = (RhnTimeZone) object; return (tz.getTimeZoneId() == id); } } /** * LocalePredicate - used to find a valid id in the list. * @version $Rev$ */ public static class LocalePredicate implements Predicate { private String locale = "en_US"; /** * constructor * @param l locale to be found. */ public LocalePredicate(String l) { locale = l; } /** {@inheritDoc} */ public boolean evaluate(Object object) { return (object.equals(locale)); } } }