private MapList<String, T> children = new MapList<String, T>();
public synchronized void addNode(String relName, T child) {
private MapList<String, T> children = new MapList<String, T>();
public synchronized void addNode(String relName, T child) {
- if (child.getParent() != null)
+ if (child == null)
+ throw new NullPointerException("Cannot add null child");
+ if (child.getParent() != null) {
+ if (child.getParent() == this)
+ throw new IllegalArgumentException("Given node is already a child");
child.setParent(this, relName);
children.add(relName, (T) child);
child.setParent(this, relName);
children.add(relName, (T) child);
public synchronized final boolean removeNode(String relName, INode child) {
if (children.remove(relName, (T) child)) {
fireNodeRemoved(child, relName);
public synchronized final boolean removeNode(String relName, INode child) {
if (children.remove(relName, (T) child)) {
fireNodeRemoved(child, relName);
for (T child : nodes) {
if (children.remove(relName, (T) child)) {
fireNodeRemoved(child, relName);
for (T child : nodes) {
if (children.remove(relName, (T) child)) {
fireNodeRemoved(child, relName);