/** * */ package org.javabuilders.swing.handler.event; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.AbstractButton; import javax.swing.JComboBox; import javax.swing.JTextField; import org.javabuilders.BuildException; import org.javabuilders.BuildProcess; import org.javabuilders.Builder; import org.javabuilders.BuilderConfig; import org.javabuilders.IPropertyList; import org.javabuilders.Node; import org.javabuilders.ValueListDefinition; import org.javabuilders.Values; import org.javabuilders.event.ObjectMethod; import org.javabuilders.handler.AbstractPropertyHandler; import org.javabuilders.swing.SwingAction; import org.javabuilders.swing.SwingAction.IActionHandler; import org.javabuilders.util.BuilderUtils; /** * Handles the onAction event (via an ActionListener) on all Swing controls that support it * @author Jacek Furmankiewicz * */ public class CommonActionListenerHandler extends AbstractPropertyHandler implements IPropertyList { private final static List<ValueListDefinition> defs = ValueListDefinition.getCommonEventDefinitions(ActionEvent.class); private final static CommonActionListenerHandler singleton = new CommonActionListenerHandler(); /** * @return Singleton */ public static CommonActionListenerHandler getInstance() { return singleton; } /** * Constructor */ private CommonActionListenerHandler() { super(Builder.ON_ACTION); } /* (non-Javadoc) * @see org.javabuilders.handler.IPropertyHandler#handle(org.javabuilders.BuilderConfig, org.javabuilders.BuildResult, org.javabuilders.Node, java.lang.String) */ @SuppressWarnings("unchecked") public void handle(final BuilderConfig config, final BuildProcess process, final Node node, String key) throws BuildException { final Values<String,ObjectMethod> values = (Values<String, ObjectMethod>) node.getProperty(key); if (values.size() > 0) { if (node.getMainObject() instanceof SwingAction) { //Our custom Swing Action SwingAction.IActionHandler handler = new IActionHandler() { public void onAction(ActionEvent e) { BuilderUtils.invokeCallerEventMethods(process.getBuildResult(), node.getMainObject(), values.values(), e); } }; ((SwingAction)node.getMainObject()).setActionHandler(handler); } else { //regular Swing controls ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { BuilderUtils.invokeCallerEventMethods(process.getBuildResult(), node.getMainObject(), values.values(), e); } }; if (node.getMainObject() instanceof AbstractButton) { ((AbstractButton)node.getMainObject()).addActionListener(listener); } else if (node.getMainObject() instanceof JComboBox) { ((JComboBox)node.getMainObject()).addActionListener(listener); } else if (node.getMainObject() instanceof JTextField) { ((JTextField)node.getMainObject()).addActionListener(listener); } } } } /* (non-Javadoc) * @see org.javabuilders.IPropertyList#isList(java.lang.String) */ public boolean isList(String propertyName) { return true; } /* (non-Javadoc) * @see org.javabuilders.IPropertyList#getValueListDefinitions(java.lang.String) */ public List<ValueListDefinition> getValueListDefinitions(String propertyName) { return defs; } }