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

changeset 29
27a0fdd7bca7
parent 24
8137ec335416
child 31
58f78f0142e8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/uapcore/lightpit/LightPITModule.java	Sat May 09 14:26:31 2020 +0200
@@ -0,0 +1,170 @@
+/*
+ * 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.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.servlet.annotation.WebServlet;
+
+
+/**
+ * Contains information about a LightPIT module.
+ * 
+ * This annotation is typically used to annotate the {@link WebServlet} which
+ * implements the module's functionality.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface LightPITModule {
+    /**
+     * Base name of the module specific resource bundle.
+     * @return a base name suitable for the JSTL tag 'setBundle'.
+     */
+    String bundleBaseName();
+    
+    /**
+     * An array of required modules, identified by the string representation of
+     * their class names.
+     * @return an array of class names of required modules
+     */
+    String[] requires() default {};
+    
+    /**
+     * The path for this module, which will also be used for the menu entry.
+     * 
+     * This path must adhere to the URL pattern of the Servlet but must not
+     * contain any starting or trailing slashes.
+     * 
+     * @return the relative module path
+     */
+    String modulePath();
+    
+    /**
+     * Returns the properties key for the module name.
+     * 
+     * @return the properties key
+     */
+    String nameKey() default "name";
+    
+    /**
+     * Returns the properties key for the module description.
+     * 
+     * @return the properties key
+     */
+    String descKey() default "description";
+    
+    
+    /**
+     * Returns the properties key for the menu label.
+     * 
+     * Set this string to empty string, if the module should be hidden from
+     * the menu.
+     * 
+     * @return the properties key
+     */
+    String menuKey() default "menuLabel";
+    
+    /**
+     * Returns the properties key for the page title.
+     * 
+     * By default this is the same as the menu label.
+     * 
+     * @return the properties key
+     */
+    String titleKey() default "menuLabel";
+    
+    /**
+     * If set to <code>true</code>, this module is always loaded, but never
+     * visible in the menu or the Web UI module manager.
+     * 
+     * @return true, if this is a system module
+     */
+    boolean systemModule() default false;
+    
+    /**
+     * Class representing the annotation.
+     * This is necessary, because the EL resolver cannot deal with
+     * annotation objects.
+     * 
+     * Note, that only the properties which are interesting for the JSP pages
+     * are proxied by this object.
+     */
+    public static class ELProxy {
+        private final String bundleBaseName, modulePath, menuKey, titleKey, nameKey, descKey;
+        
+        public static ELProxy convert(LightPITModule annotation) {
+            return new ELProxy(
+                    annotation.bundleBaseName(),
+                    annotation.modulePath(),
+                    annotation.menuKey(),
+                    annotation.titleKey(),
+                    annotation.nameKey(),
+                    annotation.descKey()
+            );
+        }
+
+        private ELProxy(String bundleBaseName, String modulePath, String menuKey, String titleKey, String nameKey, String descKey) {
+            this.bundleBaseName = bundleBaseName;
+            this.modulePath = modulePath;
+            this.menuKey = menuKey;
+            this.titleKey = titleKey;
+            this.nameKey = nameKey;
+            this.descKey = descKey;
+        }
+
+        public String getBundleBaseName() {
+            return bundleBaseName;
+        }
+
+        public String getMenuKey() {
+            return menuKey;
+        }
+
+        public String getModulePath() {
+            return modulePath;
+        }
+
+        public String getTitleKey() {
+            return titleKey;
+        }
+
+        public String getNameKey() {
+            return nameKey;
+        }
+
+        public String getDescKey() {
+            return descKey;
+        }
+        
+    }
+}

mercurial