[Buix-commits] r797 - trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer
Author: tchemit Date: 2008-07-25 21:20:58 +0000 (Fri, 25 Jul 2008) New Revision: 797 Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/AbstractActionInitializer.java trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionConfigInitializer.java trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionInitializer.java trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/SelectActionConfigInitializer.java trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ToggleActionConfigInitializer.java Log: ActionInitializer must be search annotation of instance of Action, and not on his class since Action could not be holder of configuration (with delegation)... add javadoc. Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/AbstractActionInitializer.java =================================================================== --- trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/AbstractActionInitializer.java 2008-07-25 17:55:55 UTC (rev 796) +++ trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/AbstractActionInitializer.java 2008-07-25 21:20:58 UTC (rev 797) @@ -14,35 +14,50 @@ */ package org.codelutin.jaxx.action.initializer; -import javax.swing.AbstractAction; +import org.codelutin.jaxx.action.MyAbstractAction; + import javax.swing.JComponent; /** - * Initializer of a MyAbstractAction described by a typed Annotation <code>A</code> and for a certain type - * <code>C</code> of component. + * Common abstract class of a resolver of action configuration. + * <p/> + * The class implements the logic of research of the configuration annotation. * * @author chemit */ public abstract class AbstractActionInitializer<A extends java.lang.annotation.Annotation, C extends JComponent> implements ActionInitializer<A, C> { - final Class<A> annotationImpl; - final Class<C> componentImpl; + /** the type of configuration's annotation */ + protected final Class<A> annotationImpl; - protected abstract A initAction0(C component, AbstractAction action); + /** the type of component that can fire an action */ + protected final Class<C> componentImpl; + /** + * The typed method (on component) to apply configuration on the action and component. + * + * @param component the component which fires the action + * @param action the given action + * @return the configuration's annotation + */ + protected abstract A applyConfiguration0(C component, MyAbstractAction action); + protected AbstractActionInitializer(Class<A> annotationImpl, Class<C> componentImpl) { this.annotationImpl = annotationImpl; this.componentImpl = componentImpl; } - public A getAnnotation(Class<? extends AbstractAction> action) { - return action.getAnnotation(annotationImpl); + public A resolveConfiguration(MyAbstractAction action) { + if (action.hasDelegate()) { + return resolveConfiguration(action.getDelegate()); + } + return action.getClass().getAnnotation(annotationImpl); } @SuppressWarnings({"unchecked"}) - public A initAction(JComponent component, AbstractAction action) { + public A applyConfiguration(JComponent component, MyAbstractAction action) { if (component != null && componentImpl.isAssignableFrom(component.getClass())) - return initAction0((C) component, action); + return applyConfiguration0((C) component, action); return null; } Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionConfigInitializer.java =================================================================== --- trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionConfigInitializer.java 2008-07-25 17:55:55 UTC (rev 796) +++ trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionConfigInitializer.java 2008-07-25 21:20:58 UTC (rev 797) @@ -16,20 +16,24 @@ import static org.codelutin.i18n.I18n._; import org.codelutin.jaxx.action.ActionConfig; +import org.codelutin.jaxx.action.MyAbstractAction; -import javax.swing.AbstractAction; import javax.swing.AbstractButton; import javax.swing.Action; -/** @author chemit */ +/** + * Implementation of configuration's resolver for annotation {@link ActionConfig} + * + * @author chemit + */ public class ActionConfigInitializer extends AbstractActionInitializer<ActionConfig, AbstractButton> { public ActionConfigInitializer() { super(ActionConfig.class, AbstractButton.class); } - protected ActionConfig initAction0(AbstractButton component, AbstractAction action) { - ActionConfig anno = getAnnotation(action.getClass()); + protected ActionConfig applyConfiguration0(AbstractButton component, MyAbstractAction action) { + ActionConfig anno = resolveConfiguration(action); if (anno == null) { return null; } Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionInitializer.java =================================================================== --- trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionInitializer.java 2008-07-25 17:55:55 UTC (rev 796) +++ trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ActionInitializer.java 2008-07-25 21:20:58 UTC (rev 797) @@ -14,17 +14,41 @@ */ package org.codelutin.jaxx.action.initializer; -import javax.swing.AbstractAction; +import org.codelutin.jaxx.action.MyAbstractAction; + import javax.swing.JComponent; -/** @author chemit */ +/** + * The contract to be realized to resolve an {@link MyAbstractAction} configuration. + * <p/> + * Configuration is done by a Annotation of type {@link A} placed on the action class. + * <p/> + * If the instanciated action box the real action, we should always search on the boxed action. + * <p/> + * Moreover, a action can only be fired by a certain type of component (for example a Button or a ComboBox), the class + * of the component type is given by the {@link C} class. + * + * @author chemit + */ public interface ActionInitializer<A extends java.lang.annotation.Annotation, C extends JComponent> { + /** + * Search the annotation that configure the given action (or the boxed action). + * + * @param action current action + * @return the configuration of the action + */ + A resolveConfiguration(MyAbstractAction action); - A getAnnotation(Class<? extends AbstractAction> action); + /** + * @param component widget that requires the action + * @param action given action + * @return the configuration of the action + */ + A applyConfiguration(JComponent component, MyAbstractAction action); - A initAction(JComponent component, AbstractAction action); - + /** @return the configuration annotation dealed by this resolver */ Class<A> getAnnotationImpl(); + /** @return the class of the component which can fired the action */ Class<C> getComponentImpl(); } Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/SelectActionConfigInitializer.java =================================================================== --- trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/SelectActionConfigInitializer.java 2008-07-25 17:55:55 UTC (rev 796) +++ trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/SelectActionConfigInitializer.java 2008-07-25 21:20:58 UTC (rev 797) @@ -15,21 +15,25 @@ package org.codelutin.jaxx.action.initializer; import static org.codelutin.i18n.I18n._; +import org.codelutin.jaxx.action.MyAbstractAction; import org.codelutin.jaxx.action.SelectActionConfig; -import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JComboBox; -/** @author chemit */ +/** + * Implementation of configuration's resolver for annotation {@link SelectActionConfig} + * + * @author chemit + */ public class SelectActionConfigInitializer extends AbstractActionInitializer<SelectActionConfig, JComboBox> { public SelectActionConfigInitializer() { super(SelectActionConfig.class, JComboBox.class); } - protected SelectActionConfig initAction0(JComboBox component, AbstractAction action) { - SelectActionConfig anno = getAnnotation(action.getClass()); + protected SelectActionConfig applyConfiguration0(JComboBox component, MyAbstractAction action) { + SelectActionConfig anno = resolveConfiguration(action); if (anno == null) { return null; } Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ToggleActionConfigInitializer.java =================================================================== --- trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ToggleActionConfigInitializer.java 2008-07-25 17:55:55 UTC (rev 796) +++ trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/initializer/ToggleActionConfigInitializer.java 2008-07-25 21:20:58 UTC (rev 797) @@ -15,21 +15,25 @@ package org.codelutin.jaxx.action.initializer; import static org.codelutin.i18n.I18n._; +import org.codelutin.jaxx.action.MyAbstractAction; import org.codelutin.jaxx.action.ToggleActionConfig; -import javax.swing.AbstractAction; import javax.swing.AbstractButton; import javax.swing.Action; -/** @author chemit */ +/** + * Implementation of configuration's resolver for annotation {@link ToggleActionConfig} + * + * @author chemit + */ public class ToggleActionConfigInitializer extends AbstractActionInitializer<ToggleActionConfig, AbstractButton> { public ToggleActionConfigInitializer() { super(ToggleActionConfig.class, AbstractButton.class); } - protected ToggleActionConfig initAction0(AbstractButton component, AbstractAction action) { - ToggleActionConfig anno = getAnnotation(action.getClass()); + protected ToggleActionConfig applyConfiguration0(AbstractButton component, MyAbstractAction action) { + ToggleActionConfig anno = resolveConfiguration(action); if (anno == null) { return null; }
participants (1)
-
tchemit@users.labs.libre-entreprise.org