diff options
author | Artur Signell <artur@vaadin.com> | 2015-02-05 01:48:58 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-02-05 14:18:46 +0000 |
commit | 713b8f0bbb714a0266145d956fe6699b98941d82 (patch) | |
tree | 2219096785abf374b55af6029ac772a1d5093b14 | |
parent | db7899e6140294989664939d49c7bf1c9229d91f (diff) | |
download | vaadin-framework-713b8f0bbb714a0266145d956fe6699b98941d82.tar.gz vaadin-framework-713b8f0bbb714a0266145d956fe6699b98941d82.zip |
Declarative support for Link (#16322)
Change-Id: I02f36b5e89bdf2673696de6dd8fd217835e759d1
-rw-r--r-- | server/src/com/vaadin/ui/Link.java | 36 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/server/component/link/LinkDeclarativeTest.java | 66 |
2 files changed, 102 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/Link.java b/server/src/com/vaadin/ui/Link.java index 2731e93ef2..b6e127fd38 100644 --- a/server/src/com/vaadin/ui/Link.java +++ b/server/src/com/vaadin/ui/Link.java @@ -16,10 +16,16 @@ package com.vaadin.ui; +import java.util.Collection; + +import org.jsoup.nodes.Element; + import com.vaadin.server.Resource; import com.vaadin.shared.ui.BorderStyle; import com.vaadin.shared.ui.link.LinkConstants; import com.vaadin.shared.ui.link.LinkState; +import com.vaadin.ui.declarative.DesignAttributeHandler; +import com.vaadin.ui.declarative.DesignContext; /** * Link is used to create external or internal URL links. @@ -202,4 +208,34 @@ public class Link extends AbstractComponent { setResource(LinkConstants.HREF_RESOURCE, resource); } + @Override + public void readDesign(Element design, DesignContext designContext) { + super.readDesign(design, designContext); + if (design.hasAttr("target")) { + setTargetName(DesignAttributeHandler.getFormatter().parse( + design.attr("target"), String.class)); + } + if (design.hasAttr("href")) { + setResource(DesignAttributeHandler.getFormatter().parse( + design.attr("href"), Resource.class)); + } + } + + @Override + public void writeDesign(Element design, DesignContext designContext) { + super.writeDesign(design, designContext); + Link def = designContext.getDefaultInstance(this); + DesignAttributeHandler.writeAttribute("target", design.attributes(), + getTargetName(), def.getTargetName(), String.class); + DesignAttributeHandler.writeAttribute("href", design.attributes(), + getResource(), def.getResource(), Resource.class); + } + + @Override + protected Collection<String> getCustomAttributes() { + Collection<String> a = super.getCustomAttributes(); + a.add("target-name"); + a.add("resource"); + return a; + } } diff --git a/server/tests/src/com/vaadin/tests/server/component/link/LinkDeclarativeTest.java b/server/tests/src/com/vaadin/tests/server/component/link/LinkDeclarativeTest.java new file mode 100644 index 0000000000..17fea29168 --- /dev/null +++ b/server/tests/src/com/vaadin/tests/server/component/link/LinkDeclarativeTest.java @@ -0,0 +1,66 @@ +/* + * 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.tests.server.component.link; + +import org.junit.Test; + +import com.vaadin.server.ExternalResource; +import com.vaadin.shared.ui.BorderStyle; +import com.vaadin.tests.design.DeclarativeTestBase; +import com.vaadin.ui.Link; + +/** + * Test cases for reading the properties of selection components. + * + * @author Vaadin Ltd + */ +public class LinkDeclarativeTest extends DeclarativeTestBase<Link> { + private String getBasicDesign() { + return "<v-link href='http://vaadin.com' target='vaadin-window' target-height=500" + + " target-width=800 target-border='none' />"; + } + + private Link getBasicExpected() { + Link l = new Link(); + l.setResource(new ExternalResource("http://vaadin.com")); + l.setTargetName("vaadin-window"); + l.setTargetBorder(BorderStyle.NONE); + l.setTargetHeight(500); + l.setTargetWidth(800); + return l; + } + + @Test + public void readBasic() throws Exception { + testRead(getBasicDesign(), getBasicExpected()); + } + + @Test + public void writeBasic() throws Exception { + testWrite(getBasicDesign(), getBasicExpected()); + } + + @Test + public void testReadEmpty() { + testRead("<v-link />", new Link()); + } + + @Test + public void testWriteEmpty() { + testWrite("<v-link />", new Link()); + } + +}
\ No newline at end of file |