/* * (c) Rob Gordon 2005 */ package org.oddjob.monitor.model; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import org.oddjob.monitor.actions.ExplorerAction; import org.oddjob.monitor.context.ExplorerContext; /** * The interface for an action which can be performed * on a selected job node. This interface defines * a view independent sequence for the action. * */ abstract public class JobAction implements ExplorerAction { private final PropertyChangeSupport propertySupport = new PropertyChangeSupport(this); private boolean enabled = false; private boolean visible = false; private boolean prepared = false; private ExplorerContext explorerContext; /** * Is this action currently enabled? * * @return true if this action is enabled, false if it isn't. */ final public boolean isEnabled() { return enabled; } protected void setEnabled(boolean enabled) { if (this.enabled == enabled) { return; } PropertyChangeEvent event = new PropertyChangeEvent( this, ENABLED_PROPERTY, this.enabled, enabled); this.enabled = enabled; propertySupport.firePropertyChange(event); } final public boolean isVisible() { return visible; } protected void setVisible(boolean visible) { if (this.visible == visible) { return; } PropertyChangeEvent event = new PropertyChangeEvent( this, VISIBLE_PROPERTY, this.visible, visible); this.visible = visible; propertySupport.firePropertyChange(event); } public void addPropertyChangeListener( PropertyChangeListener listener) { propertySupport.addPropertyChangeListener( listener); } public void removePropertyChangeListener( PropertyChangeListener listener) { propertySupport.removePropertyChangeListener( listener); } @Override public final void setSelectedContext(ExplorerContext explorerContext) { if (this.explorerContext != null) { if (prepared) { doFree(this.explorerContext); } this.explorerContext = null; } if (explorerContext == null) { setVisible(false); setEnabled(false); } else { setVisible(true); setEnabled(true); } this.prepared = false; this.explorerContext = explorerContext; } @Override public final void prepare() { if (explorerContext == null) { throw new NullPointerException("This shouldn't be possible."); } doPrepare(explorerContext); prepared = true; } protected ExplorerContext getExplorerContext() { return explorerContext; } protected boolean isPrepared() { return prepared; } abstract protected void doAction() throws Exception; protected final boolean checkPrepare() { if (!prepared) { doPrepare(explorerContext); prepared = true; } return enabled; } @Override public final void action() throws Exception { if (checkPrepare()) { doAction(); } } protected void doPrepare(ExplorerContext explorerContext) { } protected void doFree(ExplorerContext explorerContext) { } }