/****************************************************************************
 * Copyright (C) 2012 ecsec GmbH.
 * All rights reserved.
 * Contact: ecsec GmbH (info@ecsec.de)
 *
 * This file is part of the Open eCard App.
 *
 * GNU General Public License Usage
 * This file may be used under the terms of the GNU General Public
 * License version 3.0 as published by the Free Software Foundation
 * and appearing in the file LICENSE.GPL included in the packaging of
 * this file. Please review the following information to ensure the
 * GNU General Public License version 3.0 requirements will be met:
 * http://www.gnu.org/copyleft/gpl.html.
 *
 * Other Usage
 * Alternatively, this file may be used in accordance with the terms
 * and conditions contained in a signed written agreement between
 * you and ecsec GmbH.
 *
 ***************************************************************************/

package org.openecard.gui.definition;

import java.net.MalformedURLException;
import java.net.URL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * Hyperlink element for user consents.
 * This element should open the address in the default browser when clicked.
 *
 * @author Tobias Wich
 */
public final class Hyperlink extends IDTrait implements InputInfoUnit {

    private static final Logger _logger = LoggerFactory.getLogger(Hyperlink.class);

    private String text;
    private URL href;

    /**
     * Gets the text displayed of the hyperlink.
     * In an anchor tag, this would be the element text.
     *
     * @return The displayed text of the link.
     */
    public String getText() {
	return text;
    }
    /**
     * Sets the text displayed of the hyperlink.
     * In an anchor tag, this would be the element text.
     *
     * @param text The displayed text of the link.
     */
    public void setText(String text) {
	this.text = text;
    }

    /**
     * Gets the address part of the hyperlink.
     * In an anchor tag, this would be the href attribute.
     *
     * @return The address part of the link.
     */
    public URL getHref() {
	return href;
    }
    /**
     * Sets the address part of the hyperlink.
     * In an anchor tag, this would be the href attribute.
     *
     * @param href The address part of the link.
     */
    public void setHref(URL href) {
	this.href = href;
    }
    /**
     * Sets the address part of the hyperlink.
     * In an anchor tag, this would be the href attribute. This method converts the String instance to a URL instance.
     * 
     * @param href The address part of the link.
     * @throws MalformedURLException Thrown if the given string is not a valid URL.
     */
    public void setHref(String href) throws MalformedURLException {
	this.href = new URL(href);
    }


    @Override
    public InfoUnitElementType type() {
	return InfoUnitElementType.HYPERLINK;
    }


    @Override
    public void copyContentFrom(InfoUnit origin) {
	if (!(this.getClass().equals(origin.getClass()))) {
	    _logger.warn("Trying to copy content from type {} to type {}.", origin.getClass(), this.getClass());
	    return;
	}
	Hyperlink other = (Hyperlink) origin;
	// do copy
	this.href = other.href;
	this.text = other.text;
    }

}
