content: /*
   *  Copyright (C) 2013-2016, 2019 Stichting Akvo (Akvo Foundation)
   *
   *  This file is part of Akvo FLOW.
   *
   *  Akvo FLOW is free software: you can redistribute it and modify it under the terms of
   *  the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
   *  either version 3 of the License or any later version.
   *
   *  Akvo FLOW 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 Affero General Public License included below for more details.
   *
   *  The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
   */
  
  package org.waterforpeople.mapping.app.web;
  
  import java.io.IOException;
  import java.util.Arrays;
  import java.util.HashSet;
  import java.util.Set;
  import java.util.logging.Logger;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import com.gallatinsystems.user.dao.UserDao;
  import com.gallatinsystems.user.domain.User;
  
  /**
   * Change the locale setting of the current user to a requested one.
   */
  public class StringsServlet extends HttpServlet {
  
      private static final long serialVersionUID = -5814616069972956097L;
      private static final Logger log = Logger.getLogger(StringsServlet.class
              .getClass().getName());
      final Set<String> enabledLocales = new HashSet<String>(
              Arrays.asList("en", "es", "fr", "pt", "id", "vi"));
  
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp)
              throws ServletException, IOException {
  
          // if specific locale is requested we simply end
          String locale = req.getParameter("locale");
          if (locale == null || !isAllowedLocale(locale.trim())) {
              return;
          }
  
          final User currentUser = CurrentUserServlet.getCurrentUser();
  
          if (currentUser == null) {
              return;
          }
  
          currentUser.setLanguage(locale);
          final UserDao uDao = new UserDao();
          uDao.save(currentUser);
          log.info("Changed locale setting for user to '" + locale.toUpperCase() + "'");
      }
  
      private boolean isAllowedLocale(String locale) {
          return enabledLocales.contains(locale);
      }
  }
  