1 /**
2 * This file Copyright (c) 2003-2011 Magnolia International
3 * Ltd. (http://www.magnolia-cms.com). All rights reserved.
4 *
5 *
6 * This file is dual-licensed under both the Magnolia
7 * Network Agreement and the GNU General Public License.
8 * You may elect to use one or the other of these licenses.
9 *
10 * This file is distributed in the hope that it will be
11 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12 * implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14 * Redistribution, except as permitted by whichever of the GPL
15 * or MNA you select, is prohibited.
16 *
17 * 1. For the GPL license (GPL), you can redistribute and/or
18 * modify this file under the terms of the GNU General
19 * Public License, Version 3, as published by the Free Software
20 * Foundation. You should have received a copy of the GNU
21 * General Public License, Version 3 along with this program;
22 * if not, write to the Free Software Foundation, Inc., 51
23 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24 *
25 * 2. For the Magnolia Network Agreement (MNA), this file
26 * and the accompanying materials are made available under the
27 * terms of the MNA which accompanies this distribution, and
28 * is available at http://www.magnolia-cms.com/mna.html
29 *
30 * Any modifications to this file must keep this entire header
31 * intact.
32 *
33 */
34 package info.magnolia.module.blossom.annotation;
35
36 import java.lang.annotation.ElementType;
37 import java.lang.annotation.Retention;
38 import java.lang.annotation.RetentionPolicy;
39 import java.lang.annotation.Target;
40
41 /**
42 * Declares a class or a method to be used for creating a dialog. The unique id of the dialog is specified in the
43 * annotation.
44 * <p/>
45 * When used on a class it is used in combination with {@link info.magnolia.module.blossom.annotation.TabFactory},
46 * {@link info.magnolia.module.blossom.annotation.TabValidator} and {@link info.magnolia.module.blossom.annotation.DialogValidator}.
47 * All methods annotated with {@link TabFactory} will be detected and called to contribute tabs to the dialog and
48 * methods annotated with {@link info.magnolia.module.blossom.annotation.TabValidator} will be called to perform
49 * validation when the dialog is to be saved. The ordering of tabs inside the dialog can be set using the
50 * {@link info.magnolia.module.blossom.annotation.TabValidator} annotation.
51 * <p/>
52 * For example:
53 * <pre>
54 * @DialogFactory("page-properties")
55 * @TabOrder("Content", "Meta")
56 * public class PagePropertiesDialog {
57 * @TabFactory("Content")
58 * public void contentTab(TabBuilder tab) {...}
59 * @TabFactory("Meta")
60 * public void metaTab(TabBuilder tab) {...}
61 * }
62 * </pre>
63 * <p/>
64 * It can also be used on a method in a template. The method will be called to take care of the full dialog creation.
65 * This includes creating tabs and adding validation callbacks. Valid arguments for such a method is
66 * {@link info.magnolia.module.blossom.dialog.DialogBuilder}, {@link info.magnolia.cms.gui.dialog.Dialog} and
67 * {@link info.magnolia.module.blossom.dialog.DialogCreationContext}.
68 * <p/>
69 * For example:
70 * <pre>
71 * @DialogFactory("page-properties")
72 * public void pageProperties(DialogBuilder dialog) {...}
73 * </pre>
74 * You can use {@link info.magnolia.module.blossom.annotation.I18nBasename} to specify which resource bundle should be
75 * used for localization of the dialogs label and its fields.
76 *
77 * @see info.magnolia.module.blossom.annotation.TabFactory
78 * @see info.magnolia.module.blossom.annotation.TabValidator
79 * @see info.magnolia.module.blossom.annotation.DialogValidator
80 * @see info.magnolia.module.blossom.annotation.TabOrder
81 * @see info.magnolia.module.blossom.annotation.Template
82 * @see info.magnolia.cms.gui.dialog.Dialog
83 * @see info.magnolia.module.blossom.dialog.DialogBuilder
84 * @see info.magnolia.module.blossom.dialog.DialogCreationContext
85 * @since 1.0
86 */
87 @Retention(RetentionPolicy.RUNTIME)
88 @Target({ElementType.TYPE, ElementType.METHOD})
89 public @interface DialogFactory {
90
91 /**
92 * Id of the dialog.
93 */
94 String value();
95
96 /**
97 * Label of the dialog.
98 */
99 String label() default "";
100 }