/*
* $Id: ChildrenFactory.java,v 1.2 2006/09/25 08:52:36 acaproni Exp $
*
* $Date: 2006/09/25 08:52:36 $
* $Revision: 1.2 $
* $Author: acaproni $
*
* Copyright CERN, All Rights Reserved.
*/
package cern.gp.nodes.children;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import org.openide.nodes.Children;
import org.openide.nodes.Index;
import org.openide.nodes.Node;
import cern.gp.nodes.GPNode;
/**
* <i><font size="-1" color="#FF0000">**For internal use only** </font></i>
* Factory for building the right children for a given NodeManager
*
* @version $Revision: 1.2 $ $Date: 2006/09/25 08:52:36 $
* @author Lionel Mestre
*/
public class ChildrenFactory {
/** cannot be instantiated */
private ChildrenFactory() {
}
/**
* Instantiates ths right children for the given NodeManager
* @param nodeManager the nodeManager controlling the children to build
* @return the children controlled by the given manager
*/
public static Children createChildren(ChildrenManager nodeManager) {
Comparator comparator = nodeManager.getComparator();
if (nodeManager instanceof ChildrenListManager) {
if (comparator == null) {
return new ArrayChildren((ChildrenListManager) nodeManager);
} else {
return new SortedArrayChildren((ChildrenListManager) nodeManager, comparator);
}
} else if (nodeManager instanceof ChildrenMapManager) {
if (comparator == null) {
return new MapChildren((ChildrenMapManager) nodeManager);
} else {
return new SortedMapChildren((ChildrenMapManager) nodeManager, comparator);
}
} else {
throw new IllegalArgumentException(
"The class " + nodeManager.getClass().getName() + " is not a supported manager");
}
}
private static final Node[] convertGPNodeArrayToNodeArray(GPNode[] nodes) {
Node[] temp = new Node[nodes.length];
for (int i = 0; i < temp.length; i++) {
temp[i] = nodes[i].getPeerNode();
}
return temp;
}
//
// -- INNER CLASSES -----------------------------------------------
//
/**
*
* ArrayChildren
*
* @author lmestre, vbaggiol
*/
private static class ArrayChildren extends Index.ArrayChildren implements NodeList {
private ChildrenListManager manager;
private final Node[] nodeArray = new Node[1];
//
// -- CONSTRUCTORS -----------------------------------------------
//
public ArrayChildren(ChildrenListManager manager) {
this.manager = manager;
}
//
// -- PUBLIC METHODS -----------------------------------------------
//
//
// -- implements NodeCollection ------------------------------------------------
//
public void refreshOrdering() {
}
public ChildrenManager getChildrenManager() {
return manager;
}
public GPNode findChildByName(String name) {
return (GPNode) super.findChild(name);
}
//
// -- implements NodeList ------------------------------------------------
//
public GPNode getParentNode() {
return (GPNode) getNode();
}
public void addNode(GPNode node) {
nodeArray[0] = node.getPeerNode();
add(nodeArray);
}
public void addNodes(GPNode[] gpNodes) {
add(convertGPNodeArrayToNodeArray(gpNodes));
}
public boolean removeNode(GPNode node) {
nodeArray[0] = node.getPeerNode();
return remove(nodeArray);
}
public boolean removeNodes(GPNode[] gpNodes) {
return remove(convertGPNodeArrayToNodeArray(gpNodes));
}
public void clear() {
nodes.clear();
refresh();
}
public Iterator iterator() {
return nodes.iterator();
}
//
// -- PROTECTED METHODS -----------------------------------------------
//
protected void addNotify() {
super.addNotify();
manager.initChildrenList(this);
}
protected void removeNotify() {
nodes.clear();
super.removeNotify();
}
} // end inner class ArrayChildren
/**
*
* SortedArrayChildren
*
* @author lmestre
*/
private static class SortedArrayChildren extends Children.SortedArray implements NodeList {
private ChildrenListManager manager;
private final Node[] nodeArray = new Node[1];
//
// -- CONSTRUCTORS -----------------------------------------------
//
public SortedArrayChildren(ChildrenListManager manager, Comparator comparator) {
super(new ArrayList());
this.manager = manager;
setComparator(comparator);
}
//
// -- PUBLIC METHODS -----------------------------------------------
//
//
// -- implements NodeCollection ------------------------------------------------
//
public void refreshOrdering() {
refresh();
}
public ChildrenManager getChildrenManager() {
return manager;
}
public GPNode findChildByName(String name) {
return (GPNode) super.findChild(name);
}
//
// -- implements NodeList ------------------------------------------------
//
public GPNode getParentNode() {
return (GPNode) getNode();
}
public void addNode(GPNode node) {
nodeArray[0] = node.getPeerNode();
add(nodeArray);
}
public void addNodes(GPNode[] gpNodes) {
add(convertGPNodeArrayToNodeArray(gpNodes));
}
public boolean removeNode(GPNode node) {
nodeArray[0] = node.getPeerNode();
return remove(nodeArray);
}
public boolean removeNodes(GPNode[] gpNodes) {
return remove(convertGPNodeArrayToNodeArray(gpNodes));
}
public void clear() {
nodes.clear();
refresh();
}
public Iterator iterator() {
return nodes.iterator();
}
//
// -- PROTECTED METHODS -----------------------------------------------
//
protected void addNotify() {
super.addNotify();
manager.initChildrenList(this);
}
protected void removeNotify() {
nodes.clear();
super.removeNotify();
}
} // end inner class SortedArrayChildren
/**
*
* MapChildren
*
* @author lmestre
*/
private static class MapChildren extends Children.Map implements NodeMap {
private ChildrenMapManager manager;
//
// -- CONSTRUCTORS -----------------------------------------------
//
public MapChildren(ChildrenMapManager manager) {
super(new HashMap());
this.manager = manager;
}
//
// -- PUBLIC METHODS -----------------------------------------------
//
//
// -- implements NodeCollection ------------------------------------------------
//
public void refreshOrdering() {
}
public ChildrenManager getChildrenManager() {
return manager;
}
public GPNode findChildByName(String name) {
return (GPNode) super.findChild(name);
}
//
// -- implements NodeMap ------------------------------------------------
//
/* (non-Javadoc)
* @see cern.gp.nodes.children.NodeMap#addNodes(java.util.Map)
*/
public void addNodes(java.util.Map nodesMap) {
putAll(nodes);
}
public GPNode getParentNode() {
return (GPNode) getNode();
}
public final void addNode(Object key, GPNode node) {
put(key, node.getPeerNode());
}
public void addNode(GPNode node) {
put(node.getName(), node.getPeerNode());
}
public void addNodes(GPNode[] gpNodes) {
java.util.Map tempMap = new java.util.HashMap();
for (int i = 0; i < gpNodes.length; i++) {
tempMap.put(gpNodes[i].getName(), gpNodes[i].getPeerNode());
}
putAll(tempMap);
}
public final GPNode removeNode(Object key) {
GPNode nodeToRemove = (GPNode) getNode(key);
if (nodeToRemove == null)
return null;
remove(key);
return nodeToRemove;
}
public final void removeNodes(Object[] keys) {
removeAll(java.util.Arrays.asList(keys));
}
public final GPNode getNode(Object key) {
return (GPNode) nodes.get(key);
}
public void clear() {
nodes.clear();
refresh();
}
public Set keySet() {
return nodes.keySet();
}
//
// -- PROTECTED METHODS -----------------------------------------------
//
protected void addNotify() {
super.addNotify();
manager.initChildrenMap(this);
}
protected void removeNotify() {
nodes.clear();
super.removeNotify();
}
} // end inner class MapChildren
/**
*
* SortedMapChildren
*
* @author lmestre
*/
private static class SortedMapChildren extends Children.SortedMap implements NodeMap {
private ChildrenMapManager manager;
//
// -- CONSTRUCTORS -----------------------------------------------
//
public SortedMapChildren(ChildrenMapManager manager, Comparator comparator) {
super(new HashMap());
this.manager = manager;
setComparator(comparator);
}
//
// -- PUBLIC METHODS -----------------------------------------------
//
//
// -- implements NodeCollection ------------------------------------------------
//
public void refreshOrdering() {
refresh();
}
public ChildrenManager getChildrenManager() {
return manager;
}
public GPNode findChildByName(String name) {
return (GPNode) super.findChild(name);
}
//
// -- implements NodeMap ------------------------------------------------
//
public GPNode getParentNode() {
return (GPNode) getNode();
}
public final void addNode(Object key, GPNode node) {
put(key, node.getPeerNode());
}
/* (non-Javadoc)
* @see cern.gp.nodes.children.NodeMap#addNodes(java.util.Map)
*/
public void addNodes(java.util.Map nodesMap) {
putAll(nodes);
}
public void addNode(GPNode node) {
put(node.getName(), node.getPeerNode());
}
public void addNodes(GPNode[] gpNodes) {
java.util.Map tempMap = new java.util.HashMap();
for (int i = 0; i < gpNodes.length; i++) {
tempMap.put(gpNodes[i].getName(), gpNodes[i].getPeerNode());
}
putAll(tempMap);
}
public final GPNode removeNode(Object key) {
GPNode nodeToRemove = (GPNode) getNode(key);
if (nodeToRemove == null)
return null;
remove(key);
return nodeToRemove;
}
public final void removeNodes(Object[] keys) {
removeAll(java.util.Arrays.asList(keys));
}
public final GPNode getNode(Object key) {
return (GPNode) nodes.get(key);
}
public void clear() {
nodes.clear();
refresh();
}
public Set keySet() {
return nodes.keySet();
}
//
// -- PROTECTED METHODS -----------------------------------------------
//
protected void addNotify() {
super.addNotify();
manager.initChildrenMap(this);
}
protected void removeNotify() {
nodes.clear();
super.removeNotify();
}
} // end inner class SortedMapChildren
}