Merge branch '556-thread-safety-blocking-issues' into 'master'

Forum controller thread safety and tree safety

This branch solves the concurrent forum issues by code restructure and refactoring.

Closes #556 
Closes #552 

See merge request !262
This commit is contained in:
akwizgran
2016-09-29 09:30:51 +00:00
14 changed files with 812 additions and 819 deletions

View File

@@ -26,13 +26,13 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
};
@Override
public void clear() {
public synchronized void clear() {
roots.clear();
nodeMap.clear();
}
@Override
public void add(Collection<T> nodes) {
public synchronized void add(Collection<T> nodes) {
// add all nodes to the node map
for (T node : nodes) {
nodeMap.put(node.getId(), new ArrayList<T>());
@@ -45,7 +45,7 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
}
@Override
public void add(T node) {
public synchronized void add(T node) {
add(Collections.singletonList(node));
}
@@ -77,15 +77,18 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
}
private void traverse(List<T> list, T node) {
private void traverse(List<T> list, T node, int level) {
list.add(node);
for (T child : nodeMap.get(node.getId())) {
traverse(list, child);
List<T> children = nodeMap.get(node.getId());
node.setLevel(level);
node.setDescendantCount(children.size());
for (T child : children) {
traverse(list, child, level+1);
}
}
@Override
public void setComparator(Comparator<T> comparator) {
public synchronized void setComparator(Comparator<T> comparator) {
this.comparator = comparator;
// Sort all lists with the new comparator
Collections.sort(roots, comparator);
@@ -95,10 +98,10 @@ public class MessageTreeImpl<T extends MessageTree.MessageNode>
}
@Override
public Collection<T> depthFirstOrder() {
public synchronized Collection<T> depthFirstOrder() {
List<T> orderedList = new ArrayList<T>();
for (T root : roots) {
traverse(orderedList, root);
traverse(orderedList, root, 0);
}
return Collections.unmodifiableList(orderedList);
}