/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.undo;
import java.util.*;
public class XTransactionUndo extends XUndoableImpl {
protected boolean progress = true;
protected ArrayList<XUndoable> components = new ArrayList<XUndoable>();
public XTransactionUndo(String description, int kind) {
this.description = description;
this.kind = (kind < 0 || kind > 2) ? ADD : kind;
}
protected void doUndo() {
commit();
for (int i = components.size() - 1; i >= 0; i--) {
XUndoable u = components.get(i);
if(u.canUndo()) u.undo();
}
}
protected void doRedo() {
commit();
for (int i = 0; i < components.size(); i++) {
XUndoable u = components.get(i);
if(u.canRedo()) u.redo();
}
}
protected boolean merge(XUndoableImpl u) {
if(!isInProgress()) return false;
components.add(u);
return true;
}
public void commit() {
progress = false;
}
boolean isInProgress() {
return progress;
}
}