super.extend(target);
}
+ /**
+ * Sets the provided URL {@code url} for this instance. The {@code url} will
+ * be opened in a new browser window/tab when the extended component is
+ * clicked.
+ *
+ * @param url
+ * URL to open
+ */
+ public void setUrl(String url) {
+ setResource(new ExternalResource(url));
+ }
+
+ /**
+ * Sets the provided {@code resource} for this instance. The
+ * {@code resource} will be opened in a new browser window/tab when the
+ * extended component is clicked.
+ *
+ * @param resource
+ * resource to open
+ */
+ public void setResource(Resource resource) {
+ setResource(BrowserWindowOpenerState.locationResource, resource);
+ }
+
+ /**
+ * Returns the resource for this instance.
+ *
+ * @return resource to open browser window
+ */
+ public Resource getResource() {
+ return getResource(BrowserWindowOpenerState.locationResource);
+ }
+
+ /**
+ * Returns the URL for this BrowserWindowOpener instance. Returns
+ * {@code null} if this instance is not URL resource based (a non URL based
+ * resource has been set for it).
+ *
+ * @return URL to open in the new browser window/tab when the extended
+ * component is clicked
+ */
+ public String getUrl() {
+ Resource resource = getResource();
+ if (resource instanceof ExternalResource) {
+ return ((ExternalResource) resource).getURL();
+ }
+ return null;
+ }
+
/**
* Sets the target window name that will be used. If a window has already
* been opened with the same name, the contents of that window will be
--- /dev/null
+/*
+ * Copyright 2000-2014 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.server;
+
+import static org.junit.Assert.assertEquals;
+
+import org.easymock.EasyMock;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.shared.communication.URLReference;
+import com.vaadin.shared.ui.BrowserWindowOpenerState;
+
+/**
+ *
+ * @author Vaadin Ltd
+ */
+public class BrowserWindowOpenerTest {
+
+ @Test
+ public void setResource_urlBasedOpener_resourceIsSetAndUrlIsNull() {
+ BrowserWindowOpener opener = new BrowserWindowOpener("url");
+
+ StreamResource resource = EasyMock.createMock(StreamResource.class);
+ opener.setResource(resource);
+
+ assertEquals("Unexpected resource is got on getResource() method",
+ resource, opener.getResource());
+ Assert.assertNull("Unexpected resource is got on getUrl() method",
+ opener.getUrl());
+
+ URLReference ref = opener.getState(false).resources
+ .get(BrowserWindowOpenerState.locationResource);
+ Assert.assertTrue(
+ "Url reference in the state is not ResourceReference",
+ ref instanceof ResourceReference);
+ Assert.assertEquals("Unexpected resource saved in state", resource,
+ ((ResourceReference) ref).getResource());
+ }
+
+ @Test
+ public void setUrl_urlBasedOpener_urlIsSet() {
+ BrowserWindowOpener opener = new BrowserWindowOpener("url");
+
+ String url = "newUrl";
+ opener.setUrl(url);
+
+ assertEquals("Unexpected URL is got on getURL() method", url,
+ opener.getUrl());
+ Assert.assertNotNull(
+ "Unexpected resource is got on getResource() method",
+ opener.getResource());
+
+ URLReference ref = opener.getState(false).resources
+ .get(BrowserWindowOpenerState.locationResource);
+ Assert.assertTrue(
+ "Url reference in the state is not ResourceReference",
+ ref instanceof ResourceReference);
+ Resource resource = ((ResourceReference) ref).getResource();
+ Assert.assertTrue("Resource reference is not ExternalResource",
+ resource instanceof ExternalResource);
+ Assert.assertEquals("Unexpected URL in resource saved in state", url,
+ ((ExternalResource) resource).getURL());
+ }
+
+}