diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-11-27 08:11:24 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2012-11-27 08:11:24 +0000 |
commit | ec9b340b8d2bbbaed560834ad828f7d9857eaf15 (patch) | |
tree | 5d91ed044110432bee783dd086b2fe31349a3f27 | |
parent | 68ce534db7bf2aae75f9a6bf2ccdf3bea9fd69e4 (diff) | |
parent | 785b0b0afbcce7ecfaa30e837ed41387dee03267 (diff) | |
download | vaadin-framework-ec9b340b8d2bbbaed560834ad828f7d9857eaf15.tar.gz vaadin-framework-ec9b340b8d2bbbaed560834ad828f7d9857eaf15.zip |
Merge "Fail if a Window is attached to something else than a UI (#10374)"
-rw-r--r-- | server/src/com/vaadin/ui/UI.java | 16 | ||||
-rw-r--r-- | server/src/com/vaadin/ui/Window.java | 18 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java | 44 |
3 files changed, 78 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/UI.java b/server/src/com/vaadin/ui/UI.java index e99846c84b..55f756010e 100644 --- a/server/src/com/vaadin/ui/UI.java +++ b/server/src/com/vaadin/ui/UI.java @@ -969,4 +969,20 @@ public abstract class UI extends AbstractSingleComponentContainer implements public void detach() { super.detach(); } + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.ui.AbstractSingleComponentContainer#setContent(com.vaadin. + * ui.Component) + */ + @Override + public void setContent(Component content) { + if (content instanceof Window) { + throw new IllegalArgumentException( + "A Window cannot be added using setContent. Use addWindow(Window window) instead"); + } + super.setContent(content); + } } diff --git a/server/src/com/vaadin/ui/Window.java b/server/src/com/vaadin/ui/Window.java index b6f45db86a..30f1fa9e02 100644 --- a/server/src/com/vaadin/ui/Window.java +++ b/server/src/com/vaadin/ui/Window.java @@ -31,6 +31,7 @@ import com.vaadin.event.ShortcutAction; import com.vaadin.event.ShortcutAction.KeyCode; import com.vaadin.event.ShortcutAction.ModifierKey; import com.vaadin.event.ShortcutListener; +import com.vaadin.server.ClientConnector; import com.vaadin.server.PaintException; import com.vaadin.server.PaintTarget; import com.vaadin.shared.MouseEventDetails; @@ -126,6 +127,23 @@ public class Window extends Panel implements FocusNotifier, BlurNotifier, /* * (non-Javadoc) * + * @see + * com.vaadin.ui.AbstractComponent#setParent(com.vaadin.server.ClientConnector + * ) + */ + @Override + public void setParent(ClientConnector parent) { + if (parent == null || parent instanceof UI) { + super.setParent(parent); + } else { + throw new IllegalArgumentException( + "A Window can only be added to a UI using UI.addWindow(Window window)"); + } + } + + /* + * (non-Javadoc) + * * @see com.vaadin.ui.Panel#changeVariables(java.lang.Object, java.util.Map) */ diff --git a/server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java b/server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java new file mode 100644 index 0000000000..a0f4a1d52d --- /dev/null +++ b/server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java @@ -0,0 +1,44 @@ +/* + * Copyright 2012 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.server.component.window; + +import org.junit.Test; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; + +public class WindowAttach { + + private static class MyUI extends UI { + @Override + protected void init(VaadinRequest request) { + } + } + + @Test(expected = IllegalArgumentException.class) + public void testAttachUsingSetContent() { + UI ui = new MyUI(); + ui.setContent(new Window("foo")); + } + + @Test(expected = IllegalArgumentException.class) + public void testAddToLayout() { + VerticalLayout vl = new VerticalLayout(); + vl.addComponent(new Window("foo")); + } +} |