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

changeset 29
27a0fdd7bca7
parent 24
8137ec335416
child 33
fd8c40ff78c3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/uapcore/lightpit/Functions.java	Sat May 09 14:26:31 2020 +0200
@@ -0,0 +1,113 @@
+/*
+ * 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 java.util.Optional;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 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 jspfPath(String filename) {
+        return enforceExt(Constants.JSPF_PATH_PREFIX + filename, ".jspf");
+    }
+    
+    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 fullPath(LightPITModule module, RequestMapping mapping) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(module.modulePath());
+        sb.append('/');
+        if (!mapping.requestPath().isEmpty()) {
+            sb.append(mapping.requestPath().isEmpty());
+            sb.append('/');
+        }
+        return sb.toString();
+    }
+    
+    public static String fullPath(HttpServletRequest req) {
+        return req.getServletPath() + Optional.ofNullable(req.getPathInfo()).orElse("");
+    }
+    
+    /**
+     * Returns the module path of the given LightPIT Servlet module.
+     * 
+     * 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