--- /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; + } + + } +}