blob: 56b21a432a54e17a95fb71dfb794ceb467595f8a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 Sybase, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.facesconfig.ui.pageflow.command;
import java.util.EventObject;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.commands.CommandStackListener;
import org.eclipse.gef.commands.UnexecutableCommand;
/**
* This is a delegating command stack, which delegates everything to another
* CommandStack except event listners.
* <p>
* Event listeners registered to a <code>DelegatingCommandStack</code> will be
* informed whenever the underlying <code>CommandStack</code> changes. They
* will not be registered to the underlying <code>CommandStack</code> directly
* but they will be informed about change events of them.
*
*/
public class DelegatingCommandStack extends CommandStack implements
CommandStackListener {
/** the empty object array */
private static final Object[] EMPTY_OBJECT_ARRAY = new Object[] {};
/** the current command stack */
private CommandStack currentCommandStack = null;
/**
* Returns the current <code>CommandStack</code>.
*
* @return - the current <code>CommandStack</code>
*/
public CommandStack getCurrentCommandStack() {
return currentCommandStack;
}
/**
* Sets the current <code>CommandStack</code>.
*
* @param stack -
* the <code>CommandStack</code> to set
*/
public void setCurrentCommandStack(CommandStack stack) {
if (currentCommandStack == stack) {
return;
}
// remove from old command stack
if (null != currentCommandStack) {
currentCommandStack.removeCommandStackListener(this);
}
// set new command stack
currentCommandStack = stack;
if (currentCommandStack != null) {
// watch new command stack
currentCommandStack.addCommandStackListener(this);
// the command stack changed
notifyListeners();
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#canRedo()
*/
public boolean canRedo() {
if (null == currentCommandStack) {
return false;
}
return currentCommandStack.canRedo();
}
/*
* (non-Javadoc)
*
* @see CommandStack#canUndo()
*/
public boolean canUndo() {
if (null == currentCommandStack) {
return false;
}
return currentCommandStack.canUndo();
}
/*
* (non-Javadoc)
*
* @see CommandStack#dispose()
*/
public void dispose() {
if (null != currentCommandStack) {
currentCommandStack.dispose();
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#execute(org.eclipse.gef.commands.Command)
*/
public void execute(Command command) {
if (null != currentCommandStack) {
currentCommandStack.execute(command);
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#flush()
*/
public void flush() {
if (null != currentCommandStack) {
currentCommandStack.flush();
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#getCommands()
*/
public Object[] getCommands() {
if (null == currentCommandStack) {
return EMPTY_OBJECT_ARRAY;
}
return currentCommandStack.getCommands();
}
/*
* (non-Javadoc)
*
* @see CommandStack#getRedoCommand()
*/
public Command getRedoCommand() {
if (null == currentCommandStack) {
return UnexecutableCommand.INSTANCE;
}
return currentCommandStack.getRedoCommand();
}
/*
* (non-Javadoc)
*
* @see CommandStack#getUndoCommand()
*/
public Command getUndoCommand() {
if (null == currentCommandStack) {
return UnexecutableCommand.INSTANCE;
}
return currentCommandStack.getUndoCommand();
}
/*
* (non-Javadoc)
*
* @see CommandStack#getUndoLimit()
*/
public int getUndoLimit() {
if (null == currentCommandStack) {
return -1;
}
return currentCommandStack.getUndoLimit();
}
/*
* (non-Javadoc)
*
* @see CommandStack#isDirty()
*/
public boolean isDirty() {
if (null == currentCommandStack) {
return false;
}
return currentCommandStack.isDirty();
}
/*
* (non-Javadoc)
*
* @see CommandStack#markSaveLocation()
*/
public void markSaveLocation() {
if (null != currentCommandStack) {
currentCommandStack.markSaveLocation();
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#redo()
*/
public void redo() {
if (null != currentCommandStack) {
currentCommandStack.redo();
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#setUndoLimit(int)
*/
public void setUndoLimit(int undoLimit) {
if (null != currentCommandStack) {
currentCommandStack.setUndoLimit(undoLimit);
}
}
/*
* (non-Javadoc)
*
* @see CommandStack#undo()
*/
public void undo() {
if (null != currentCommandStack) {
currentCommandStack.undo();
}
}
/*
* (non-Javadoc)
*
* @see Object#toString()
*/
public String toString() {
return "DelegatingCommandStack(" + currentCommandStack + ")";
}
/*
* (non-Javadoc)
*
* @see CommandStackListener#commandStackChanged(java.util.EventObject)
*/
public void commandStackChanged(EventObject event) {
notifyListeners();
}
}