Fri, 23 Oct 2020 18:40:50 +0200
migrate WebColor
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2018 Mike Becker. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ package de.uapcore.lightpit.modules; import de.uapcore.lightpit.*; import de.uapcore.lightpit.viewmodel.LanguageView; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; @WebServlet( name = "LanguageModule", urlPatterns = "/language/*" ) public final class LanguageModule extends AbstractLightPITServlet { private static final Logger LOG = LoggerFactory.getLogger(LanguageModule.class); private final List<Locale> languages = new ArrayList<>(); @Override protected String getResourceBundleName() { return "localization.language"; } @Override public void init() throws ServletException { super.init(); Optional<String[]> langs = Functions.availableLanguages(getServletContext()); if (langs.isPresent()) { for (String lang : langs.get()) { try { Locale locale = Locale.forLanguageTag(lang); if (locale.getLanguage().isEmpty()) { throw new IllformedLocaleException(); } languages.add(locale); } catch (IllformedLocaleException ex) { LOG.warn("Specified language {} in context parameter cannot be mapped to an existing locale - skipping.", lang); } } } else { languages.add(Locale.ENGLISH); LOG.warn("Context parameter 'available-languages' not found. Only english will be available."); } } @Override public void destroy() { super.destroy(); languages.clear(); } @RequestMapping(method = HttpMethod.GET) public ResponseType handle(HttpServletRequest req) { final var viewModel = new LanguageView(); viewModel.setLanguages(languages); viewModel.setBrowserLanguage(req.getLocale()); viewModel.setCurrentLanguage((Locale)req.getSession().getAttribute(Constants.SESSION_ATTR_LANGUAGE)); setViewModel(req, viewModel); setStylesheet(req, "language"); setContentPage(req, "language"); return ResponseType.HTML; } @RequestMapping(method = HttpMethod.POST) public ResponseType switchLanguage(HttpServletRequest req, HttpServletResponse resp) { Optional<Locale> chosenLanguage = Optional.ofNullable(req.getParameter("language")) .map(Locale::forLanguageTag) .filter((l) -> !l.getLanguage().isEmpty()); chosenLanguage.ifPresent((l) -> req.getSession().setAttribute(Constants.SESSION_ATTR_LANGUAGE, l)); chosenLanguage.ifPresent(resp::setLocale); return handle(req); } }