diff options
Diffstat (limited to 'src/com/itmill/toolkit/ui/AbstractComponentContainer.java')
-rw-r--r-- | src/com/itmill/toolkit/ui/AbstractComponentContainer.java | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/com/itmill/toolkit/ui/AbstractComponentContainer.java b/src/com/itmill/toolkit/ui/AbstractComponentContainer.java index 5251e99438..d0169535b7 100644 --- a/src/com/itmill/toolkit/ui/AbstractComponentContainer.java +++ b/src/com/itmill/toolkit/ui/AbstractComponentContainer.java @@ -169,6 +169,30 @@ public abstract class AbstractComponentContainer extends AbstractComponent * @see com.itmill.toolkit.ui.ComponentContainer#addComponent(Component) */ public void addComponent(Component c) { + if (c instanceof ComponentContainer) { + // Make sure we're not adding the component inside it's own content + for (Component parent = this; parent != null; parent = parent + .getParent()) { + if (parent == c) { + throw new IllegalArgumentException( + "Component cannot be added inside it's own content"); + } + } + } + + if (c.getParent() != null) { + // If the component already has a parent, try to remove it + try { + ComponentContainer oldParent = (ComponentContainer) c + .getParent(); + oldParent.removeComponent(c); + } catch (Exception e) { + throw new IllegalStateException( + "Component could be removed from it's old parent."); + } + + } + c.setParent(this); fireComponentAttachEvent(c); } |