public void setParent(Trigger newParent) { if (this.parent != null) parent.removeChild(this); if (newParent == null) { this.parent = newParent; return; } if (newParent.getTriggerType() == TRIGGER_TYPE_BASIC) throw new IllegalArgumentException("Parent trigger must be a COMPOSITE trigger"); Trigger tmpParent = newParent; while (tmpParent != null) { if (tmpParent.getId().equals(this.getId())) { throw new IllegalArgumentException( "Parent reference loop occurred for " + tmpParent.getName() + " (" + tmpParent.getId() + ")"); } tmpParent = tmpParent.getParent(); } this.parent = newParent; this.parent.addChild(this); }