summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-11-27 08:11:24 +0000
committerVaadin Code Review <review@vaadin.com>2012-11-27 08:11:24 +0000
commitec9b340b8d2bbbaed560834ad828f7d9857eaf15 (patch)
tree5d91ed044110432bee783dd086b2fe31349a3f27
parent68ce534db7bf2aae75f9a6bf2ccdf3bea9fd69e4 (diff)
parent785b0b0afbcce7ecfaa30e837ed41387dee03267 (diff)
downloadvaadin-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.java16
-rw-r--r--server/src/com/vaadin/ui/Window.java18
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java44
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"));
+ }
+}