]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fail if a Window is attached to something else than a UI (#10374) 86/386/2
authorArtur Signell <artur@vaadin.com>
Mon, 26 Nov 2012 17:39:27 +0000 (19:39 +0200)
committerArtur Signell <artur@vaadin.com>
Tue, 27 Nov 2012 08:09:58 +0000 (10:09 +0200)
Change-Id: Ibe0fcbda1222e2aa781ae14f479fbedd99715ff9

server/src/com/vaadin/ui/UI.java
server/src/com/vaadin/ui/Window.java
server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java [new file with mode: 0644]

index e99846c84b1268c5b65962f5c7d83803826cdeaa..55f756010ed2889b75b76c09ca17145946d071d9 100644 (file)
@@ -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);
+    }
 }
index b6f45db86a64c26aa5d6f3a0e76c03026cf94325..30f1fa9e02e64b0bd961cd1b176801bfde3bb117 100644 (file)
@@ -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;
@@ -123,6 +124,23 @@ public class Window extends Panel implements FocusNotifier, BlurNotifier,
         super.paintContent(target);
     }
 
+    /*
+     * (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)
      * 
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 (file)
index 0000000..a0f4a1d
--- /dev/null
@@ -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"));
+    }
+}