1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/main/java/de/uapcore/lightpit/Functions.java Sat May 09 14:26:31 2020 +0200 1.3 @@ -0,0 +1,113 @@ 1.4 +/* 1.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 1.6 + * 1.7 + * Copyright 2018 Mike Becker. All rights reserved. 1.8 + * 1.9 + * Redistribution and use in source and binary forms, with or without 1.10 + * modification, are permitted provided that the following conditions are met: 1.11 + * 1.12 + * 1. Redistributions of source code must retain the above copyright 1.13 + * notice, this list of conditions and the following disclaimer. 1.14 + * 1.15 + * 2. Redistributions in binary form must reproduce the above copyright 1.16 + * notice, this list of conditions and the following disclaimer in the 1.17 + * documentation and/or other materials provided with the distribution. 1.18 + * 1.19 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1.20 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.21 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.22 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 1.23 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1.24 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1.25 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1.26 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1.27 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1.28 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 1.29 + * POSSIBILITY OF SUCH DAMAGE. 1.30 + * 1.31 + */ 1.32 +package de.uapcore.lightpit; 1.33 + 1.34 +import java.util.Optional; 1.35 +import javax.servlet.ServletContext; 1.36 +import javax.servlet.http.HttpServletRequest; 1.37 +import org.slf4j.Logger; 1.38 +import org.slf4j.LoggerFactory; 1.39 + 1.40 +/** 1.41 + * Contains common static functions. 1.42 + */ 1.43 +public final class Functions { 1.44 + 1.45 + private static final Logger LOG = LoggerFactory.getLogger(Functions.class); 1.46 + 1.47 + public static Optional<String[]> availableLanguages(ServletContext ctx) { 1.48 + return Optional.ofNullable(ctx.getInitParameter(Constants.CTX_ATTR_LANGUAGES)).map((x) -> x.split("\\s*,\\s*")); 1.49 + } 1.50 + 1.51 + public static String enforceExt(String filename, String ext) { 1.52 + return filename.endsWith(ext) ? filename : filename + ext; 1.53 + } 1.54 + 1.55 + public static String jspPath(String filename) { 1.56 + return enforceExt(Constants.JSP_PATH_PREFIX + filename, ".jsp"); 1.57 + } 1.58 + 1.59 + public static String jspfPath(String filename) { 1.60 + return enforceExt(Constants.JSPF_PATH_PREFIX + filename, ".jspf"); 1.61 + } 1.62 + 1.63 + public static String dynFragmentPath(String filename) { 1.64 + return enforceExt(Constants.DYN_FRAGMENT_PATH_PREFIX + filename, ".jsp"); 1.65 + } 1.66 + 1.67 + public static String fqn(String base, String name) { 1.68 + return base+"."+name; 1.69 + } 1.70 + 1.71 + public static String fqn(Class clazz, String name) { 1.72 + return fqn(clazz.getName(), name); 1.73 + } 1.74 + 1.75 + public static String fullPath(LightPITModule module, RequestMapping mapping) { 1.76 + StringBuilder sb = new StringBuilder(); 1.77 + sb.append(module.modulePath()); 1.78 + sb.append('/'); 1.79 + if (!mapping.requestPath().isEmpty()) { 1.80 + sb.append(mapping.requestPath().isEmpty()); 1.81 + sb.append('/'); 1.82 + } 1.83 + return sb.toString(); 1.84 + } 1.85 + 1.86 + public static String fullPath(HttpServletRequest req) { 1.87 + return req.getServletPath() + Optional.ofNullable(req.getPathInfo()).orElse(""); 1.88 + } 1.89 + 1.90 + /** 1.91 + * Returns the module path of the given LightPIT Servlet module. 1.92 + * 1.93 + * If you specify a malformed LightPIT servlet, which does not have a module 1.94 + * annotation, the path to the <code>/error/404.html</code> page is returned. 1.95 + * 1.96 + * @param clazz the servlet class 1.97 + * @return the module path 1.98 + */ 1.99 + public static String modulePathOf(Class<? extends AbstractLightPITServlet> clazz) { 1.100 + Optional<LightPITModule> moduleInfo = Optional.ofNullable(clazz.getAnnotation(LightPITModule.class)); 1.101 + if (moduleInfo.isPresent()) { 1.102 + return moduleInfo.get().modulePath(); 1.103 + } else { 1.104 + LOG.warn( 1.105 + "{} is a LightPIT Servlet but is missing the module annotation.", 1.106 + clazz.getName() 1.107 + ); 1.108 + return "/error/404.html"; 1.109 + } 1.110 + } 1.111 + 1.112 + /** 1.113 + * This class is not instantiatable. 1.114 + */ 1.115 + private Functions() {} 1.116 +}