/**
* author: Marcel Genzmehr
* 02.12.2011
*/
package org.freeplane.core.ui;
import java.util.ArrayList;
import java.util.List;
import org.freeplane.features.mode.Controller;
/**
*
*/
public class FreeplaneActionCascade {
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
/***********************************************************************************
* METHODS
**********************************************************************************/
public static void addAction(AFreeplaneAction action) {
AFreeplaneAction previousAction = Controller.getCurrentController().getAction(action.getKey());
if(previousAction != null) {
Controller.getCurrentController().removeAction(action.getKey());
}
Controller.getCurrentController().addAction(new FreeplaneActionMultiCaster(previousAction, action));
}
public static void insertActionBefore(AFreeplaneAction action) {
AFreeplaneAction previousAction = Controller.getCurrentController().getAction(action.getKey());
if(previousAction != null) {
Controller.getCurrentController().removeAction(action.getKey());
}
Controller.getCurrentController().addAction(new FreeplaneActionMultiCaster(action, previousAction));
}
public static boolean hasAction(String key) {
return (Controller.getCurrentController().getAction(key) != null);
}
public static AFreeplaneAction[] getActionsForKey(String key) {
ArrayList<AFreeplaneAction> list = new ArrayList<AFreeplaneAction>();
AFreeplaneAction action = Controller.getCurrentController().getAction(key);
if(action == null) {
return null;
}
if(action instanceof FreeplaneActionMultiCaster) {
traverseCaster(list, (FreeplaneActionMultiCaster) action);
}
else {
list.add(action);
}
return list.toArray(new AFreeplaneAction[]{});
}
private static void traverseCaster(List<AFreeplaneAction> list, FreeplaneActionMultiCaster caster) {
if(caster.getB() != null) {
if(caster.getB() instanceof FreeplaneActionMultiCaster) {
traverseCaster(list, (FreeplaneActionMultiCaster) caster.getB());
}
list.add(caster.getB());
}
if(caster.getA() != null) {
if(caster.getA() instanceof FreeplaneActionMultiCaster) {
traverseCaster(list, (FreeplaneActionMultiCaster) caster.getA());
}
list.add(caster.getA());
}
}
/***********************************************************************************
* REQUIRED METHODS FOR INTERFACES
**********************************************************************************/
}