/*
* JAME 6.2.1
* http://jame.sourceforge.net
*
* Copyright 2001, 2016 Andrea Medeghini
*
* This file is part of JAME.
*
* JAME is an application for creating fractals and other graphics artifacts.
*
* JAME is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JAME is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with JAME. If not, see <http://www.gnu.org/licenses/>.
*
*/
package net.sf.jame.test;
import net.sf.jame.core.DefaultTree;
import net.sf.jame.core.config.ConfigContext;
import net.sf.jame.core.config.DefaultConfigContext;
import net.sf.jame.core.tree.NodeAction;
import net.sf.jame.twister.ControllerListener;
import net.sf.jame.twister.TwisterConfig;
import net.sf.jame.twister.TwisterConfigBuilder;
import net.sf.jame.twister.TwisterConfigNodeBuilder;
import net.sf.jame.twister.TwisterController;
import net.sf.jame.twister.TwisterSessionController;
import org.junit.Test;
/**
* @author Andrea Medeghini
*/
public class TestSessionController {
@Test
public void testUndoRedoAction() throws Exception {
final TwisterConfigBuilder configBuilder = new TwisterConfigBuilder();
final ConfigContext context = new DefaultConfigContext();
final TwisterConfig config = configBuilder.createDefaultConfig();
final TwisterConfigNodeBuilder builder = new TwisterConfigNodeBuilder(config);
config.setContext(context);
DefaultTree tree = null;
TwisterSessionController controller = null;
controller = new DebugSessionController(config);
controller.init();
long time = 0;
tree = new DefaultTree();
builder.createNodes(tree.getRootNode());
tree.getRootNode().setContext(context);
tree.getRootNode().setSession(controller);
controller.setRefTimestamp(System.currentTimeMillis());
Thread.sleep(500);
context.updateTimestamp();
config.getFrameConfigElement().getLayerConfigElement(0).setVisible(false);
Thread.sleep(500);
context.updateTimestamp();
config.getFrameConfigElement().getLayerConfigElement(0).setVisible(true);
Thread.sleep(500);
config.getFrameConfigElement().getLayerConfigElement(0).setVisible(false);
Thread.sleep(500);
context.updateTimestamp();
config.getFrameConfigElement().getLayerConfigElement(0).setVisible(true);
Thread.sleep(1000);
System.out.println("controller.undoAction(true)");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
undoAction(controller, time, true);
}
controller.undoAll();
System.out.println("controller.redoAction(true)");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
redoAction(controller, time, true);
}
controller.redoAll();
System.out.println("controller.undoAction(false)");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
undoAction(controller, time, false);
}
controller.undoAll();
System.out.println("controller.redoAction(false)");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
redoAction(controller, time, false);
}
controller.redoAll();
System.out.println("controller.undoActionAndSleep()");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
undoActionAndSleep(controller, time);
}
controller.undoAll();
System.out.println("controller.redoActionAndSleep()");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
redoActionAndSleep(controller, time);
}
controller.redoAll();
System.out.println("controller.undoAction(500)");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
undoAction(controller, time, 500);
}
controller.undoAll();
System.out.println("controller.redoAction(500)");
time = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
redoAction(controller, time, 500);
}
}
private void print(final TwisterController controller, final long time, final long tvalue, final boolean value) {
System.out.println((System.currentTimeMillis() - time) + ": " + (value ? tvalue : "-"));
}
private void redoAction(final TwisterController controller, final long time, final long timestamp) {
final boolean value = controller.redoAction(timestamp, true);
final long tvalue = controller.getTime();
print(controller, time, tvalue, value);
}
private void undoAction(final TwisterController controller, final long time, final long timestamp) {
final boolean value = controller.undoAction(timestamp, true);
final long tvalue = controller.getTime();
print(controller, time, tvalue, value);
}
private void redoActionAndSleep(final TwisterController controller, final long time) {
final boolean value = controller.redoActionAndSleep();
final long tvalue = controller.getTime();
print(controller, time, tvalue, value);
}
private void undoActionAndSleep(final TwisterController controller, final long time) {
final boolean value = controller.undoActionAndSleep();
final long tvalue = controller.getTime();
print(controller, time, tvalue, value);
}
private void redoAction(final TwisterController controller, final long time, final boolean sameTimestamp) {
final boolean value = controller.redoAction(sameTimestamp);
final long tvalue = controller.getTime();
print(controller, time, tvalue, value);
}
private void undoAction(final TwisterController controller, final long time, final boolean sameTimestamp) {
final boolean value = controller.undoAction(sameTimestamp);
final long tvalue = controller.getTime();
print(controller, time, tvalue, value);
}
private class DebugSessionController extends TwisterSessionController {
public DebugSessionController(final TwisterConfig config) {
super("controller", config);
addControllerListener(new ControllerListener() {
public void actionRedone(final NodeAction action) {
System.out.println("Redo: " + action);
}
public void actionUndone(final NodeAction action) {
System.out.println("Undo: " + action);
}
public void configChanged() {
System.out.println("Config changed");
}
});
}
/**
* @see net.sf.jame.twister.TwisterSessionController#appendAction(net.sf.jame.core.tree.NodeAction)
*/
@Override
public void appendAction(final NodeAction action) {
System.out.println(action);
super.appendAction(action);
}
}
}