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

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

initial import after refactoring of module structure with Steffen

  • Property svn:executable set to *
File size: 8.1 KB
Line 
1//-------------------------------------------------------------------------------------------------
2// Module    : $RCSfile: TreeNode.java,v $
3// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 11:00:46 $
4// Project   : TaskTreePerformanceTest
5// Creation  : 2011 by Patrick
6// Copyright : Patrick Harms, 2011
7//-------------------------------------------------------------------------------------------------
8
9package de.ugoe.cs.quest.tasktrees.treeimpl;
10
11import java.util.ArrayList;
12import java.util.List;
13
14import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
15
16
17//-------------------------------------------------------------------------------------------------
18/**
19 * TODO comment
20 *
21 * @version $Revision: $ $Date: $
22 * @author  2011, last modified by $Author: $
23 */
24//-------------------------------------------------------------------------------------------------
25public abstract class TaskTreeNodeImpl implements TaskTreeNode
26{
27  /** */
28  private static int sTemporalId = 0;
29
30  /** */
31  private String mName;
32
33  /** */
34  private String mDescription;
35 
36  /** */
37  private int mId;
38 
39  /** children */
40  private List<TaskTreeNode> mChildren;
41
42  //-----------------------------------------------------------------------------------------------
43  /**
44   */
45  //-----------------------------------------------------------------------------------------------
46  TaskTreeNodeImpl(String name)
47  {
48    mName = name;
49    mId = getNewId();
50  }
51 
52  //-----------------------------------------------------------------------------------------------
53  /**
54   * TODO: comment
55   *
56   * @return
57   */
58  //-----------------------------------------------------------------------------------------------
59  private static synchronized int getNewId()
60  {
61    if (sTemporalId == Integer.MAX_VALUE)
62    {
63      sTemporalId = 0;
64    }
65   
66    return sTemporalId++;
67  }
68
69  //-----------------------------------------------------------------------------------------------
70  /**
71   * @return Returns the name.
72   */
73  //-----------------------------------------------------------------------------------------------
74  public String getName()
75  {
76    return mName;
77  }
78
79  //-----------------------------------------------------------------------------------------------
80  /* (non-Javadoc)
81   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNode#getDescription()
82   */
83  //-----------------------------------------------------------------------------------------------
84  @Override
85  public String getDescription()
86  {
87    return mDescription;
88  }
89
90  //-----------------------------------------------------------------------------------------------
91  /**
92   */
93  //-----------------------------------------------------------------------------------------------
94  public synchronized List<TaskTreeNode> getChildren()
95  {
96    if ((mChildren == null) || (mChildren.size() == 0))
97    {
98      return new ArrayList<TaskTreeNode>();
99    }
100   
101    return mChildren.subList(0, mChildren.size());
102  }
103 
104  //-----------------------------------------------------------------------------------------------
105  /* (non-Javadoc)
106   * @see java.lang.Object#equals(java.lang.Object)
107   */
108  //-----------------------------------------------------------------------------------------------
109  @Override
110  public synchronized boolean equals(Object other)
111  {
112    if (!this.getClass().isInstance(other))
113    {
114      return false;
115    }
116    else
117    {
118      return equals((TaskTreeNodeImpl) other);
119    }
120  }
121   
122  //-----------------------------------------------------------------------------------------------
123  /* (non-Javadoc)
124   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNode#equals(de.ugoe.cs.tasktree.treeifc.TaskTreeNode)
125   */
126  //-----------------------------------------------------------------------------------------------
127  @Override
128  public boolean equals(TaskTreeNode other)
129  {
130    if (!this.getClass().isInstance(other))
131    {
132      return false;
133    }
134    else
135    {
136      return equals((TaskTreeNodeImpl) other);
137    }
138  }
139
140  //-----------------------------------------------------------------------------------------------
141  /* (non-Javadoc)
142   * @see java.lang.Object#equals(java.lang.Object)
143   */
144  //-----------------------------------------------------------------------------------------------
145  public synchronized boolean equals(TaskTreeNodeImpl other)
146  {
147    if (!this.getClass().isInstance(other))
148    {
149      return false;
150    }
151   
152    if (other.hashCode() != hashCode())
153    {
154      return false;
155    }
156   
157    if (mId != other.mId)
158    {
159      return false;
160    }
161   
162    if (!mName.equals(other.mName))
163    {
164      return false;
165    }
166   
167    synchronized (other)
168    {
169      if ((other.mChildren == null) && (mChildren == null))
170      {
171        return true;
172      }
173     
174      if (((other.mChildren == null) && (mChildren != null)) ||
175          ((other.mChildren != null) && (mChildren == null)))
176      {
177        return false;
178      }
179     
180      if (other.mChildren.size() != mChildren.size())
181      {
182        return false;
183      }
184     
185      for (int i = 0; i < mChildren.size(); i++)
186      {
187        if (!mChildren.get(i).equals(other.mChildren.get(i)))
188        {
189          return false;
190        }
191      }
192    }
193
194    return true;
195  }
196
197  //-----------------------------------------------------------------------------------------------
198  /* (non-Javadoc)
199   * @see java.lang.Object#hashCode()
200   */
201  //-----------------------------------------------------------------------------------------------
202  @Override
203  public synchronized int hashCode()
204  {
205    return getClass().getSimpleName().hashCode();
206  }
207
208  //-----------------------------------------------------------------------------------------------
209  /* (non-Javadoc)
210   * @see java.lang.Object#toString()
211   */
212  //-----------------------------------------------------------------------------------------------
213  @Override
214  public synchronized String toString()
215  {
216    if (mChildren == null)
217    {
218      return mName + "(" + mId + ")";
219    }
220    else
221    {
222      return mName + "(" + mId + ", " + mChildren.size() + " children)";
223    }
224  }
225 
226  //-----------------------------------------------------------------------------------------------
227  /**
228   * TODO: comment
229   *
230   * @param i
231   * @return
232   */
233  //-----------------------------------------------------------------------------------------------
234  void setDescription(String description)
235  {
236    mDescription = description;
237  }
238
239  //-----------------------------------------------------------------------------------------------
240  /**
241   */
242  //-----------------------------------------------------------------------------------------------
243  synchronized void addChild(TaskTreeNode child)
244  {
245    if (mChildren == null)
246    {
247      mChildren = new ArrayList<TaskTreeNode>();
248    }
249   
250    mChildren.add(child);
251  }
252 
253  //-----------------------------------------------------------------------------------------------
254  /**
255   */
256  //-----------------------------------------------------------------------------------------------
257  synchronized void addChild(int index, TaskTreeNode child)
258  {
259    if (mChildren == null)
260    {
261      mChildren = new ArrayList<TaskTreeNode>();
262    }
263   
264    mChildren.add(index, child);
265  }
266 
267  //-----------------------------------------------------------------------------------------------
268  /**
269   * TODO: comment
270   *
271   * @param i
272   * @return
273   */
274  //-----------------------------------------------------------------------------------------------
275  synchronized TaskTreeNode removeChild(int index)
276  {
277    return mChildren.remove(index);
278  }
279
280  //-----------------------------------------------------------------------------------------------
281  /* (non-Javadoc)
282   * @see java.lang.Object#clone()
283   */
284  //-----------------------------------------------------------------------------------------------
285  @Override
286  public abstract TaskTreeNode clone();
287
288}
Note: See TracBrowser for help on using the repository browser.