Browse Source

Fail if a Window is attached to something else than a UI (#10374)

Change-Id: Ibe0fcbda1222e2aa781ae14f479fbedd99715ff9
tags/7.0.0.beta11
Artur Signell 11 years ago
parent
commit
785b0b0afb

+ 16
- 0
server/src/com/vaadin/ui/UI.java View 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);
}
}

+ 18
- 0
server/src/com/vaadin/ui/Window.java View 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)
*

+ 44
- 0
server/tests/src/com/vaadin/tests/server/component/window/WindowAttach.java View File

@@ -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"));
}
}

Loading…
Cancel
Save