src/main/java/de/uapcore/lightpit/Functions.java

changeset 29
27a0fdd7bca7
parent 24
8137ec335416
child 33
fd8c40ff78c3
     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 +}

mercurial