/**
* author: Marcel Genzmehr
* 26.01.2012
*/
package org.freeplane.plugin.workspace.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
/**
*
*/
public class IOController {
private final HashMap<Class<? extends AWorkspaceTreeNode>, HashMap<Integer, List<IWorkspaceNodeActionListener>>> listenerMap = new HashMap<Class<? extends AWorkspaceTreeNode>, HashMap<Integer, List<IWorkspaceNodeActionListener>>>();
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
/***********************************************************************************
* METHODS
* @param eventType
* @param node
**********************************************************************************/
public List<IWorkspaceNodeActionListener> getNodeActionListeners(Class<? extends AWorkspaceTreeNode> clazz, Integer eventType) {
HashMap<Integer, List<IWorkspaceNodeActionListener>> wildcard = listenerMap.get(AWorkspaceTreeNode.class);
HashMap<Integer, List<IWorkspaceNodeActionListener>> levelOne = listenerMap.get(clazz);
if(levelOne != null) {
List<IWorkspaceNodeActionListener> result = new ArrayList<IWorkspaceNodeActionListener>();
if(wildcard != null) {
List<IWorkspaceNodeActionListener> wildcardListeners = wildcard.get(eventType);
if(wildcardListeners != null) {
result.addAll(wildcardListeners);
}
}
if (levelOne.get(eventType) != null) {
result.addAll(levelOne.get(eventType));
}
if(result.size() == 0) {
return null;
}
return result;
}
else if(wildcard != null) {
return wildcard.get(eventType);
}
return null;
}
public void registerNodeActionListener(Class<? extends AWorkspaceTreeNode> clazz, Integer eventType, IWorkspaceNodeActionListener listener) {
HashMap<Integer, List<IWorkspaceNodeActionListener>> levelOne = listenerMap.get(clazz);
if(levelOne == null) {
HashMap<Integer, List<IWorkspaceNodeActionListener>> levelTwo = new HashMap<Integer, List<IWorkspaceNodeActionListener>>();
Vector<IWorkspaceNodeActionListener> vec = new Vector<IWorkspaceNodeActionListener>();
vec.add(listener);
levelTwo.put(eventType, vec);
listenerMap.put(clazz, levelTwo);
}
else {
List<IWorkspaceNodeActionListener> listeners = levelOne.get(eventType);
if(!listeners.contains(listener)) {
listeners.add(listener);
}
}
}
/***********************************************************************************
* REQUIRED METHODS FOR INTERFACES
**********************************************************************************/
}