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

Sat, 16 May 2020 15:45:06 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 16 May 2020 15:45:06 +0200
changeset 53
6a8498291606
parent 47
57cfb94ab99f
child 74
91d1fc2a3a14
permissions
-rw-r--r--

fixes bug where displaying an error page for missing data source would also require that data source (error pages don't try to get database connections now)

also improves error pages in general

/*
 * 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;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.util.Optional;

/**
 * Contains common static functions.
 */
public final class Functions {

    private static final Logger LOG = LoggerFactory.getLogger(Functions.class);

    public static Optional<String[]> availableLanguages(ServletContext ctx) {
        return Optional.ofNullable(ctx.getInitParameter(Constants.CTX_ATTR_LANGUAGES)).map((x) -> x.split("\\s*,\\s*"));
    }

    public static String enforceExt(String filename, String ext) {
        return filename.endsWith(ext) ? filename : filename + ext;
    }

    public static String jspPath(String filename) {
        return enforceExt(Constants.JSP_PATH_PREFIX + filename, ".jsp");
    }

    public static String dynFragmentPath(String filename) {
        return enforceExt(Constants.DYN_FRAGMENT_PATH_PREFIX + filename, ".jsp");
    }

    public static String fqn(String base, String name) {
        return base + "." + name;
    }

    public static String fqn(Class<?> clazz, String name) {
        return fqn(clazz.getName(), name);
    }

    public static String baseHref(HttpServletRequest req) {
        return String.format("%s://%s:%d%s/",
                req.getScheme(),
                req.getServerName(),
                req.getServerPort(),
                req.getContextPath());
    }

    public static String fullPath(HttpServletRequest req) {
        return req.getServletPath() + Optional.ofNullable(req.getPathInfo()).orElse("");
    }

    /**
     * Returns the module path of the given LightPIT Servlet module.
     * <p>
     * If you specify a malformed LightPIT servlet, which does not have a module
     * annotation, the path to the <code>/error/404.html</code> page is returned.
     *
     * @param clazz the servlet class
     * @return the module path
     */
    public static String modulePathOf(Class<? extends AbstractLightPITServlet> clazz) {
        Optional<LightPITModule> moduleInfo = Optional.ofNullable(clazz.getAnnotation(LightPITModule.class));
        if (moduleInfo.isPresent()) {
            return moduleInfo.get().modulePath();
        } else {
            LOG.warn(
                    "{} is a LightPIT Servlet but is missing the module annotation.",
                    clazz.getName()
            );
            return "/error/404.html";
        }
    }

    /**
     * This class is not instantiatable.
     */
    private Functions() {
    }
}

mercurial