if (found.size() > 1) {
throw new IllegalStateException("The data-object " + d + " is multiple times in the tree");
}
DefaultMutableTreeNode node = found.get(0);
DataObject dObj = nodeMap.get(node);
final List<DefaultMutableTreeNode> currentChildren = Collections.list(node.children());
final List<DataObject> shouldChildren = createListOfShouldChildren(dObj);
final List<DataObject> currentChildrenValues = new ArrayList<DataObject>();
for (DefaultMutableTreeNode child : currentChildren) {
currentChildrenValues.add((DataObject) child.getUserObject());
}
for (DefaultMutableTreeNode child : currentChildren) {
DataObject childMob = (DataObject) child.getUserObject();
// Das Objekt, welches in dem Knoten enthalten ist, ist
// nicht mehr in der Liste der Elemente des ManagedDataObjects,
// (mob) daher kann es gelöscht werden.
if (!shouldChildren.contains(childMob)) {
childMob.removeObserver(this);
removeQueue.add(child);
removeNodeFromParent(child);
//Logic.unlockReading();
//return;
}
}
// Wenn die Liste leer ist, bedeutet es, dass keine
// neuen Einträge hinzugefügt worden sind, also lediglich
// die Grunddaten des Knotens geändert wurden
// Da die Liste noch Einträge beinhält, werden diese mit
// in den Baum an dem aktuellen Knoten eingehängt.
for (int i = 0; i < shouldChildren.size(); i++) {
DataObject child = shouldChildren.get(i);
if (!currentChildrenValues.contains(child)) {
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(child);
newNode.setUserObject(child);
addList.add(newNode);
// For the calculation of the index we assume that only one new
// new is inserted. Otherwise the index may be wrong.
insertNodeInto(newNode, node, i);
}
}
if (!addList.isEmpty() || !removeQueue.isEmpty()) {
nodeStructureChanged(node);
}
// Lists are up to date. Do the rest of the book-keeping
// Neue Einträge in die nodeMap einfügen
for (DefaultMutableTreeNode treeNode : addList) {
DataObject obj = (DataObject) treeNode.getUserObject();
obj.addObserver(this);
DataObject oldVal = nodeMap.put(treeNode, obj);
if (oldVal != null) {
oldVal.removeObserver(this);
}
}
// Obsolete Einträge aus der Map löschen
while (!removeQueue.isEmpty()) {