com.vaadin.ui.Link.java Source code

Java tutorial

Introduction

Here is the source code for com.vaadin.ui.Link.java

Source

/*
 * Copyright 2000-2018 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.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.
 *
 * @author Vaadin Ltd.
 * @since 3.0
 */
@SuppressWarnings("serial")
public class Link extends AbstractComponent {

    /**
     * @deprecated As of 7.0, use {@link BorderStyle#NONE} instead
     */
    @Deprecated
    public static final BorderStyle TARGET_BORDER_NONE = BorderStyle.NONE;

    /**
     * @deprecated As of 7.0, use {@link BorderStyle#MINIMAL} instead
     */
    @Deprecated
    public static final BorderStyle TARGET_BORDER_MINIMAL = BorderStyle.MINIMAL;

    /**
     * @deprecated As of 7.0, use {@link BorderStyle#DEFAULT} instead
     */
    @Deprecated
    public static final BorderStyle TARGET_BORDER_DEFAULT = BorderStyle.DEFAULT;

    /**
     * Creates a new link.
     */
    public Link() {

    }

    /**
     * Creates a new instance of Link.
     *
     * @param caption
     * @param resource
     */
    public Link(String caption, Resource resource) {
        setCaption(caption);
        setResource(resource);
    }

    /**
     * Creates a new instance of Link that opens a new window.
     *
     *
     * @param caption
     *            the Link text.
     * @param targetName
     *            the name of the target window where the link opens to. Empty
     *            name of null implies that the target is opened to the window
     *            containing the link.
     * @param width
     *            the Width of the target window.
     * @param height
     *            the Height of the target window.
     * @param border
     *            the Border style of the target window.
     *
     */
    public Link(String caption, Resource resource, String targetName, int width, int height, BorderStyle border) {
        setCaption(caption);
        setResource(resource);
        setTargetName(targetName);
        setTargetWidth(width);
        setTargetHeight(height);
        setTargetBorder(border);
    }

    @Override
    protected LinkState getState() {
        return (LinkState) super.getState();
    }

    @Override
    protected LinkState getState(boolean markAsDirty) {
        return (LinkState) super.getState(markAsDirty);
    }

    /**
     * Returns the target window border.
     *
     * @return the target window border.
     */
    public BorderStyle getTargetBorder() {
        return getState(false).targetBorder;
    }

    /**
     * Returns the target window height or -1 if not set.
     *
     * @return the target window height.
     */
    public int getTargetHeight() {
        return getState(false).targetHeight < 0 ? -1 : getState(false).targetHeight;
    }

    /**
     * Returns the target window name. Empty name of null implies that the
     * target is opened to the window containing the link.
     *
     * @return the target window name.
     */
    public String getTargetName() {
        return getState(false).target;
    }

    /**
     * Returns the target window width or -1 if not set.
     *
     * @return the target window width.
     */
    public int getTargetWidth() {
        return getState(false).targetWidth < 0 ? -1 : getState(false).targetWidth;
    }

    /**
     * Sets the border of the target window.
     *
     * @param targetBorder
     *            the targetBorder to set.
     */
    public void setTargetBorder(BorderStyle targetBorder) {
        getState().targetBorder = targetBorder;
    }

    /**
     * Sets the target window height.
     *
     * @param targetHeight
     *            the targetHeight to set.
     */
    public void setTargetHeight(int targetHeight) {
        getState().targetHeight = targetHeight;
    }

    /**
     * Sets the target window name.
     *
     * @param targetName
     *            the targetName to set.
     */
    public void setTargetName(String targetName) {
        getState().target = targetName;
    }

    /**
     * Sets the target window width.
     *
     * @param targetWidth
     *            the targetWidth to set.
     */
    public void setTargetWidth(int targetWidth) {
        getState().targetWidth = targetWidth;
    }

    /**
     * Returns the resource this link opens.
     *
     * @return the Resource.
     */
    public Resource getResource() {
        return getResource(LinkConstants.HREF_RESOURCE);
    }

    /**
     * Sets the resource this link opens.
     *
     * @param resource
     *            the resource to set.
     */
    public void setResource(Resource resource) {
        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, designContext);
        DesignAttributeHandler.writeAttribute("href", design.attributes(), getResource(), def.getResource(),
                Resource.class, designContext);
    }

    @Override
    protected Collection<String> getCustomAttributes() {
        Collection<String> a = super.getCustomAttributes();
        a.add("target-name");
        a.add("resource");
        // Add custom attributes, see #19107
        a.add("target");
        a.add("href");
        return a;
    }
}