Sat, 31 Mar 2018 19:35:04 +0200
module synchronization with database
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2017 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.LightPITModule; import de.uapcore.lightpit.AbstractLightPITServlet; import de.uapcore.lightpit.Constants; import de.uapcore.lightpit.Functions; import de.uapcore.lightpit.HttpMethod; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import de.uapcore.lightpit.RequestMapping; import de.uapcore.lightpit.ResponseType; import java.util.ArrayList; import java.util.IllformedLocaleException; import java.util.List; import java.util.Locale; import java.util.Optional; import javax.servlet.ServletException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @LightPITModule( bundleBaseName = "de.uapcore.lightpit.resources.localization.language", modulePath = "language" ) @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 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 lanaguge {} in context parameter cannot be mapped to an existing locale - skipping.", lang); } } } else { languages.add(Locale.ENGLISH); LOG.warn("Context parameter 'available-languges' not found. Only english will be available."); } } @Override public void destroy() { super.destroy(); languages.clear(); } @RequestMapping(method = HttpMethod.GET) public ResponseType handle(HttpServletRequest req, HttpServletResponse resp) { req.setAttribute("languages", languages); req.setAttribute("browserLanguage", req.getLocale()); setStylesheet(req, "language"); setDynamicFragment(req, "language"); return ResponseType.HTML_FULL; } @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, resp); } }