source: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTree.java @ 557

Last change on this file since 557 was 557, checked in by pharms, 12 years ago
  • adapted task tree creation stuff to more general event handling
  • Property svn:executable set to *
File size: 2.8 KB
Line 
1// Module    : $RCSfile: TaskTree.java,v $
2// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
3// Project   : TaskTreeCreator
4// Creation  : 2012 by patrick
5// Copyright : Patrick Harms, 2012
6
7package de.ugoe.cs.quest.tasktrees.treeimpl;
8
9import java.util.HashMap;
10import java.util.Map;
11
12import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeInfo;
13import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
14import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
15
16/**
17 * TODO comment
18 *
19 * @version $Revision: $ $Date: 21.02.2012$
20 * @author 2012, last modified by $Author: patrick$
21 */
22public class TaskTree implements ITaskTree {
23   
24    /** the map of nodes */
25    private Map<ITaskTreeNode, ITaskTreeNodeInfo> taskMap;
26
27    /** the root node of the task tree */
28    private ITaskTreeNode rootNode;
29
30    /**
31     * TODO: comment
32     *
33     */
34    TaskTree(ITaskTreeNode rootNode) {
35        this.rootNode = rootNode;
36    }
37
38    /*
39     * (non-Javadoc)
40     *
41     * @see de.ugoe.cs.tasktree.treeifc.TaskTree#getRoot()
42     */
43    @Override
44    public ITaskTreeNode getRoot() {
45        return rootNode;
46    }
47
48    /*
49     * (non-Javadoc)
50     *
51     * @see de.ugoe.cs.tasktree.treeifc.TaskTree#getTaskMap()
52     */
53    @Override
54    public synchronized Map<ITaskTreeNode, ITaskTreeNodeInfo> getTaskMap() {
55        if (taskMap == null) {
56            taskMap = new HashMap<ITaskTreeNode, ITaskTreeNodeInfo>();
57            addNodeToMap(rootNode, null);
58        }
59        return taskMap;
60    }
61
62    /**
63     * TODO: comment
64     *
65     * @param rootNode
66     */
67    private void addNodeToMap(ITaskTreeNode node, ITaskTreeNode parent) {
68        NodeInfo nodeInfo = (NodeInfo) taskMap.get(node);
69
70        if (nodeInfo == null) {
71            nodeInfo = new NodeInfo(node);
72            taskMap.put(node, nodeInfo);
73        }
74
75        if (parent != null) {
76            // through first removing an existing parent it is assured, that a parent is recorded
77            // only once. This is needed, because parent may be reused in a tree as well, but we
78            // always iterate the whole tree
79            nodeInfo.removeParent(parent);
80            nodeInfo.addParent(parent);
81        }
82
83        for (ITaskTreeNode child : node.getChildren()) {
84            addNodeToMap(child, node);
85        }
86    }
87
88    /*
89     * (non-Javadoc)
90     *
91     * @see java.lang.Object#clone()
92     */
93    @Override
94    public TaskTree clone() {
95        TaskTree clone = null;
96        try {
97            clone = (TaskTree) super.clone();
98
99            clone.rootNode = rootNode.clone();
100
101            // the clone will create the task map itself, when it is first retrieved
102            clone.taskMap = null;
103
104        }
105        catch (CloneNotSupportedException e) {
106            // this should never happen. Therefore simply dump the exception
107            e.printStackTrace();
108        }
109
110        return clone;
111    }
112
113}
Note: See TracBrowser for help on using the repository browser.