src/main/java/de/uapcore/lightpit/LightPITModule.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 51
dd0a45ae25d7
child 70
821c4950b619
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 javax.servlet.annotation.WebServlet;
import java.lang.annotation.*;


/**
 * Contains information about a LightPIT module.
 * <p>
 * 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.
     * <p>
     * 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 menu label.
     * <p>
     * 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.
     * <p>
     * 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;

    /**
     * Optionally specifies a default priority for this module.
     * The priority is used to order the menu entries.
     *
     * @return an integer priority
     */
    int defaultPriority() default 1000;

    /**
     * Class representing the annotation.
     * This is necessary, because the EL resolver cannot deal with
     * annotation objects.
     * <p>
     * Note, that only the properties which are interesting for the JSP pages
     * are proxied by this object.
     */
    class ELProxy {
        private final String bundleBaseName, modulePath, menuKey, titleKey;

        public ELProxy(LightPITModule annotation) {
            bundleBaseName = annotation.bundleBaseName();
            modulePath = annotation.modulePath();
            menuKey = annotation.menuKey();
            titleKey = annotation.titleKey();
        }

        public String getBundleBaseName() {
            return bundleBaseName;
        }

        public String getMenuKey() {
            return menuKey;
        }

        public String getModulePath() {
            return modulePath;
        }

        public String getTitleKey() {
            return titleKey;
        }
    }
}

mercurial