opendap/src/main/java/opendap/dap/DAPNode.java
static public DAPNode cloneDAG(CloneMap map, DAPNode src)
        throws CloneNotSupportedException
    {
        DAPNode bt = map.nodes.get(src);
        if(bt == null)
            bt = src.cloneDAG(map);
        return bt;
    }
static public DAPNode cloneDAG(CloneMap map, DAPNode src)
        throws CloneNotSupportedException
    {
        DAPNode bt = map.nodes.get(src);
        if(bt == null)
            bt = src.cloneDAG(map);
        return bt;
    }
This version of cloneDAG() is the primary
point of cloning. If the src is already cloned,
then that existing clone is immediately returned.
Otherwise cloneDAG(map) is called to have the object
clone itself. Note this is static because it uses no
existing state.
@param map list of previously cloned nodes
@return  the clone of the src node
@throws CloneNotSupportedException