/*
* Grand Central Station for our CDS root nodes.
*
* Copyright 2000 Andy Gill
*
* $Revision: 1.1 $
* $Date: 2000/09/15 16:14:16 $
*/
import java.util.*;
/**
* @version 0.1
* @author Andy Gill
*/
public class AllCDS {
private HoodTopLevel htl;
/** mapping from Name(String) to CDS */
private Hashtable cdsRoots = new Hashtable();
/** mapping from Id(Int) to CDS */
private Hashtable nodes = new Hashtable();
AllCDS(HoodTopLevel htl) {
this.htl = htl;
resetNodes();
}
public void resetNodes() {
cdsRoots = new Hashtable();
nodes = new Hashtable();
}
// We presume that strings are already intern'ed,
// allowing cmp with == and !=.
// Adds an observe node, which augments a new element
// to the root node associated with
public void addObserveNode(int nodeId,String text) {
CDS set = (CDS) cdsRoots.get(text);
if (set == null) {
// Hey, we've got a new observe point
set = new CDSMany(nodeId);
cdsRoots.put(text,set);
htl.newRootSet(text);
}
// Add to our master list of nodes
nodes.put(new Integer(nodeId),set);
htl.newNode();
}
public void addFunNode(int nodeId,int parentNodeId,int parentPort) {
CDS parent = (CDS) nodes.get(new Integer(parentNodeId));
if (parent == null) {
Message.abort("Can't find parent node");
}
CDS node = new CDSFun(nodeId);
parent.addChild(node,parentPort);
// Add to our master list of nodes
nodes.put(new Integer(nodeId),node);
htl.newNode();
}
public void addEnterNode(int nodeId,int parentNodeId,int parentPort) {
CDS parent = (CDS) nodes.get(new Integer(parentNodeId));
if (parent == null) {
Message.abort("Can't find parent node");
}
CDS node = new CDSEnter(nodeId);
parent.addChild(node,parentPort);
// Add to our master list of nodes
nodes.put(new Integer(nodeId),node);
htl.newNode();
}
public void addConsNode(int nodeId
,int parentNodeId
,int parentPort
,int ports
,String consName) {
CDS parent = (CDS) nodes.get(new Integer(parentNodeId));
if (parent == null) {
Message.abort("Can't find parent node");
}
CDS node = new CDSCons(nodeId,consName,ports);
parent.addChild(node,parentPort);
// Add to our master list of nodes
nodes.put(new Integer(nodeId),node);
htl.newNode();
}
/**
* This looks up the collection, and gets the *first* node
* of a collection.
*/
public CDS getContents(String key) {
CDS set = (CDS) cdsRoots.get(key);
return set;
}
}
|