//This product is provided under the terms of EPL (Eclipse Public License)
//version 1.0.
//
//The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.swingui.actionfactory;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.Action;
public class ActionFactory {
private class GuiAction extends AbstractAction {
private ActionListener impl;
void setImplementation(ActionListener impl) {
this.impl = impl;
}
public void actionPerformed(ActionEvent e) {
if (!isEnabled())
return;
fireBeforeExecution();
try {
performExecution(e);
} finally {
fireAfterExecution();
}
}
private void fireBeforeExecution() {
if (actionExecutionListener != null)
actionExecutionListener.onBeforeExecution();
}
private void performExecution(ActionEvent e) {
if (impl != null)
impl.actionPerformed(e);
}
private void fireAfterExecution() {
if (actionExecutionListener != null)
actionExecutionListener.onAfterExecution();
}
}
private final Map<ActionKey, GuiAction> actions = new HashMap();
private ActionExecutionListener actionExecutionListener;
public Action getAction(ActionKey key) {
return getOrCreateAction(key);
}
public void setImplementation(ActionKey key, ActionListener impl) {
getOrCreateAction(key).setImplementation(impl);
}
public void setEnabled(ActionKey key, boolean b) {
getOrCreateAction(key).setEnabled(b);
}
private GuiAction getOrCreateAction(ActionKey key) {
GuiAction action = actions.get(key);
if (action == null) {
action = new GuiAction();
actions.put(key, action);
}
return action;
}
public void setActionExecutionListener(
ActionExecutionListener actionExecutionListener) {
this.actionExecutionListener = actionExecutionListener;
}
}