/* * Copyright (C) 2006 Sun Microsystems, Inc. All rights reserved. Use is * subject to license terms. */ package org.jdesktop.application; 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; /** * Marks a method that will be used to define a Swing * <code>Action</code> object's <code>actionPerformed</code> * method. It also identifies the resources that * will be used to initialize the Action's properties. * Additional <code>@Action</code> parameters can be used * to specify the name of the bound properties (from the * same class) that indicate if the Action is to be * enabled/selected, and if the GUI should be blocked * while the Action's background {@link Task} is running. * * <p> * The {@link ApplicationActionMap} class creates an * <code>ActionMap</code> that contains one {@link ApplicationAction} * for each @Action found in a target or "actions" class. * Typically applications will use {@link * ApplicationContext#getActionMap(Class, Object) getActionMap} to * lazily construct and cache ApplicationActionMaps, rather than * constructing them directly. By default the ApplicationActionMap's * {@link ApplicationActionMap#get key} for an @Action is the * name of the method. The <code>name</code> parameter can be used to * specify a different key. * * <p> * The <code>ApplicationAction's</code> properties are initialized with * resources loaded from a ResourceBundle with the same name as the * actions class. The list of properties initialized this way * is documented by the {@link ApplicationAction ApplicationAction's} * constructor. * * <p> * The method marked with @Action, can have no parameters, * or a single ActionEvent parameter. The method's return type * can be <code>void</code> or {@link Task}. If the return type * is Task, the Task will be executed by the ApplicationAction's * <code>actionPerformed</code> method. * * <p> * [TBD the block parameter, and the Parameter annotation] * * @see ApplicationAction * @see ApplicationActionMap * @see ApplicationContext * @author Hans Muller (Hans.Muller@Sun.COM) */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Action { String name() default ""; String enabledProperty() default ""; String selectedProperty() default ""; Task.BlockingScope block() default Task.BlockingScope.NONE; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) @interface Parameter { String value() default ""; } }