1 /* |
1 /* |
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
3 * |
3 * |
4 * Copyright 2018 Mike Becker. All rights reserved. |
4 * Copyright 2018 Mike Becker. All rights reserved. |
5 * |
5 * |
6 * Redistribution and use in source and binary forms, with or without |
6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions are met: |
7 * modification, are permitted provided that the following conditions are met: |
8 * |
8 * |
9 * 1. Redistributions of source code must retain the above copyright |
9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. |
10 * notice, this list of conditions and the following disclaimer. |
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 * |
27 * |
28 */ |
28 */ |
29 package de.uapcore.lightpit; |
29 package de.uapcore.lightpit; |
30 |
30 |
31 import org.slf4j.Logger; |
31 import org.slf4j.Logger; |
32 import org.slf4j.LoggerFactory; |
32 import org.slf4j.LoggerFactory; |
37 |
37 |
38 /** |
38 /** |
39 * Contains common static functions. |
39 * Contains common static functions. |
40 */ |
40 */ |
41 public final class Functions { |
41 public final class Functions { |
42 |
42 |
43 private static final Logger LOG = LoggerFactory.getLogger(Functions.class); |
43 private static final Logger LOG = LoggerFactory.getLogger(Functions.class); |
44 |
44 |
45 public static Optional<String[]> availableLanguages(ServletContext ctx) { |
45 public static Optional<String[]> availableLanguages(ServletContext ctx) { |
46 return Optional.ofNullable(ctx.getInitParameter(Constants.CTX_ATTR_LANGUAGES)).map((x) -> x.split("\\s*,\\s*")); |
46 return Optional.ofNullable(ctx.getInitParameter(Constants.CTX_ATTR_LANGUAGES)).map((x) -> x.split("\\s*,\\s*")); |
47 } |
47 } |
48 |
48 |
49 public static String enforceExt(String filename, String ext) { |
49 public static String enforceExt(String filename, String ext) { |
50 return filename.endsWith(ext) ? filename : filename + ext; |
50 return filename.endsWith(ext) ? filename : filename + ext; |
51 } |
51 } |
52 |
52 |
53 public static String jspPath(String filename) { |
53 public static String jspPath(String filename) { |
54 return enforceExt(Constants.JSP_PATH_PREFIX + filename, ".jsp"); |
54 return enforceExt(Constants.JSP_PATH_PREFIX + filename, ".jsp"); |
55 } |
55 } |
56 |
56 |
57 public static String jspfPath(String filename) { |
57 public static String jspfPath(String filename) { |
58 return enforceExt(Constants.JSPF_PATH_PREFIX + filename, ".jspf"); |
58 return enforceExt(Constants.JSPF_PATH_PREFIX + filename, ".jspf"); |
59 } |
59 } |
60 |
60 |
61 public static String dynFragmentPath(String filename) { |
61 public static String dynFragmentPath(String filename) { |
62 return enforceExt(Constants.DYN_FRAGMENT_PATH_PREFIX + filename, ".jsp"); |
62 return enforceExt(Constants.DYN_FRAGMENT_PATH_PREFIX + filename, ".jsp"); |
63 } |
63 } |
64 |
64 |
65 public static String fqn(String base, String name) { |
65 public static String fqn(String base, String name) { |
66 return base+"."+name; |
66 return base + "." + name; |
67 } |
67 } |
68 |
68 |
69 public static String fqn(Class<?> clazz, String name) { |
69 public static String fqn(Class<?> clazz, String name) { |
70 return fqn(clazz.getName(), name); |
70 return fqn(clazz.getName(), name); |
71 } |
71 } |
72 |
72 |
73 public static String fullPath(LightPITModule module, RequestMapping mapping) { |
73 public static String fullPath(LightPITModule module, RequestMapping mapping) { |
74 StringBuilder sb = new StringBuilder(); |
74 StringBuilder sb = new StringBuilder(); |
75 sb.append(module.modulePath()); |
75 sb.append(module.modulePath()); |
76 sb.append('/'); |
76 sb.append('/'); |
77 if (!mapping.requestPath().isEmpty()) { |
77 if (!mapping.requestPath().isEmpty()) { |
78 sb.append(mapping.requestPath().isEmpty()); |
78 sb.append(mapping.requestPath().isEmpty()); |
79 sb.append('/'); |
79 sb.append('/'); |
80 } |
80 } |
81 return sb.toString(); |
81 return sb.toString(); |
82 } |
82 } |
83 |
83 |
84 public static String fullPath(HttpServletRequest req) { |
84 public static String fullPath(HttpServletRequest req) { |
85 return req.getServletPath() + Optional.ofNullable(req.getPathInfo()).orElse(""); |
85 return req.getServletPath() + Optional.ofNullable(req.getPathInfo()).orElse(""); |
86 } |
86 } |
87 |
87 |
88 /** |
88 /** |
89 * Returns the module path of the given LightPIT Servlet module. |
89 * Returns the module path of the given LightPIT Servlet module. |
90 * |
90 * <p> |
91 * If you specify a malformed LightPIT servlet, which does not have a module |
91 * If you specify a malformed LightPIT servlet, which does not have a module |
92 * annotation, the path to the <code>/error/404.html</code> page is returned. |
92 * annotation, the path to the <code>/error/404.html</code> page is returned. |
93 * |
93 * |
94 * @param clazz the servlet class |
94 * @param clazz the servlet class |
95 * @return the module path |
95 * @return the module path |
96 */ |
96 */ |
97 public static String modulePathOf(Class<? extends AbstractLightPITServlet> clazz) { |
97 public static String modulePathOf(Class<? extends AbstractLightPITServlet> clazz) { |
98 Optional<LightPITModule> moduleInfo = Optional.ofNullable(clazz.getAnnotation(LightPITModule.class)); |
98 Optional<LightPITModule> moduleInfo = Optional.ofNullable(clazz.getAnnotation(LightPITModule.class)); |