    001    // Copyright 2010, 2011 The Apache Software Foundation
    002    //
    003    // Licensed under the Apache License, Version 2.0 (the "License");
    004    // you may not use this file except in compliance with the License.
    005    // You may obtain a copy of the License at
    006    //
    007    // http://www.apache.org/licenses/LICENSE-2.0
    008    //
    009    // Unless required by applicable law or agreed to in writing, software
    010    // distributed under the License is distributed on an "AS IS" BASIS,
    011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012    // See the License for the specific language governing permissions and
    013    // limitations under the License.
    014
    015    package org.apache.tapestry5.annotations;
    016
    017    import org.apache.tapestry5.ioc.annotations.UseWith;
    018    import org.apache.tapestry5.services.javascript.JavaScriptStack;
    019    import org.apache.tapestry5.services.javascript.JavaScriptSupport;
    020
    021    import java.lang.annotation.*;
    022
    023    import static org.apache.tapestry5.ioc.annotations.AnnotationUseContext.*;
    024
    025    /**
    026     * Annotations to control the importing of JavaScript stacks and libraries as well as stylesheets. This annotation may
    027     * be placed on a class, in which case importing will occur as part of the {@link SetupRender} render phase.
    028     * Alternately, the annotation maybe placed on any method (though typically it will be placed on a render phase
    029     * method) and the import operations will be associated of that method.
    030     * <p/>
    031     * Assets are localized during the {@link org.apache.tapestry5.runtime.PageLifecycleAdapter#containingPageDidLoad()} lifecycle
    032     * method.
    033     *
    034     * @see JavaScriptSupport
    035     * @since 5.2.0
    036     */
    037    @Target(
    038            {ElementType.TYPE, ElementType.METHOD})
    039    @Retention(RetentionPolicy.RUNTIME)
    040    @Documented
    041    @UseWith(
    042            {COMPONENT, MIXIN, PAGE})
    043    public @interface Import
    044    {
    045        /**
    046         * JavaScript Stacks to import. Stacks are imported before individual libraries. Note that
    047         * stacks themselves may have {@linkplain JavaScriptStack#getStacks() dependencies on other
    048         * stacks}.
    049         *
    050         * @see JavaScriptStack
    051         * @see JavaScriptSupport#importStack(String)
    052         */
    053        String[] stack() default {};
    054
    055        /**
    056         * JavaScript libraries to import. Each value is an asset path; symbols in each path are expanded. The library may
    057         * be localized.
    058         *
    059         * @see JavaScriptSupport#importJavaScriptLibrary(org.apache.tapestry5.Asset)
    060         */
    061        String[] library() default {};
    062
    063        /**
    064         * Stylesheets to import. Each value is an asset path; symbols in each path are expanded. The stylesheet may be
    065         * localized. The stylesheet is imported with no options.
    066         *
    067         * @see JavaScriptSupport#importStylesheet(org.apache.tapestry5.Asset)
    068         */
    069        String[] stylesheet() default {};
    070    }