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

Last change on this file since 467 was 467, checked in by pharms, 12 years ago

corrected implementation of clone

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