package com.uwsoft.editor.controller.commands; import com.badlogic.gdx.utils.Array; import com.puremvc.patterns.observer.Notification; /** * Created by CyberJoe on 7/25/2015. */ public abstract class TransactiveCommand extends RevertableCommand { protected Array<RevertableCommand> commands = new Array(); @Override public void execute(Notification notification) { this.notification = notification; transaction(); super.execute(notification); } @Override public void doAction() { for(int i = 0; i < commands.size; i++) { commands.get(i).callDoAction(); if(commands.get(i).isCancelled) { // reverting for(int j = i-1; j >= 0; j--) { commands.get(j).callUndoAction(); } cancel(); return; } } onFinish(); } @Override public void undoAction() { for(int i = commands.size-1; i >= 0; i--) { commands.get(i).callUndoAction(); } onFinishUndo(); } public abstract void transaction(); public abstract void onFinish(); public abstract void onFinishUndo(); protected void addInnerCommand(RevertableCommand command) { commands.add(command); } }