/******************************************************************************* * Copyright (c) 2005, 2012 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.bpel.ui.util; import java.util.EventObject; import org.eclipse.bpel.common.ui.editmodel.EditModelCommandStack; import org.eclipse.bpel.common.ui.editmodel.EditModelCommandStack.SharedCommandStackChangedEvent; import org.eclipse.bpel.common.ui.editmodel.EditModelCommandStack.SharedCommandStackListener; /** * A base class providing convenient hooks for the events of CommandStackListener2. * It also checks to make sure these events arrive in the expected order. */ public abstract class AbstractSharedCommandStackListener implements SharedCommandStackListener { public static final int STATE_NONE = 0; public static final int STATE_EXECUTE = 1; public static final int STATE_UNDO = 2; public static final int STATE_REDO = 3; protected int state = STATE_NONE; protected void startExecute() { } protected void finishExecute() { } protected void startUndo() { } protected void finishUndo() { } protected void startRedo() { } protected void finishRedo() { } protected void flush() { } protected void dropLastUndoStackEntry() { } /* CommandStackListener2 */ public void commandStackChanged(EventObject event) { if (event instanceof EditModelCommandStack.SharedCommandStackChangedEvent) { SharedCommandStackChangedEvent event2 = (SharedCommandStackChangedEvent)event; handleCommandStackEvent(event2.getProperty()); } } protected void handleCommandStackEvent(int event) { switch (event) { case EVENT_START_EXECUTE: // TODO: these asserts are commented out because an exception executing // a command causes them to be triggered later.. //Assert.isTrue(state == STATE_NONE); state = STATE_EXECUTE; startExecute(); break; case EVENT_FINISH_EXECUTE: //Assert.isTrue(state == STATE_EXECUTE); state = STATE_NONE; finishExecute(); break; case EVENT_START_UNDO: //Assert.isTrue(state == STATE_NONE); state = STATE_UNDO; startUndo(); break; case EVENT_FINISH_UNDO: //Assert.isTrue(state == STATE_UNDO); state = STATE_NONE; finishUndo(); break; case EVENT_START_REDO: //Assert.isTrue(state == STATE_NONE); state = STATE_REDO; startRedo(); break; case EVENT_FINISH_REDO: //Assert.isTrue(state == STATE_REDO); state = STATE_NONE; finishRedo(); break; case EVENT_START_FLUSH: flush(); break; case EVENT_FINISH_FLUSH: /* nothing? */ break; case EVENT_DROP_LAST_UNDO_STACK_ENTRY: dropLastUndoStackEntry(); break; } } }