/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.engine;
import net.sf.jasperreports.engine.type.HyperlinkTargetEnum;
import net.sf.jasperreports.engine.type.HyperlinkTypeEnum;
/**
* Utility class that manages built-in hyperlink types.
*
* @author Lucian Chirita (lucianc@users.sourceforge.net)
* @version $Id: JRHyperlinkHelper.java 3712 2010-04-08 09:53:09Z teodord $
*/
public final class JRHyperlinkHelper
{
/**
* "None" link type, equivalent to {@link JRHyperlink#HYPERLINK_TYPE_NONE JRHyperlink.HYPERLINK_TYPE_NONE}.
* @deprecated Replaced by {@link HyperlinkTypeEnum#NONE}.
*/
public static final String HYPERLINK_TYPE_NONE = HyperlinkTypeEnum.NONE.getName();
/**
* "Reference" link type, equivalent to {@link JRHyperlink#HYPERLINK_TYPE_REFERENCE JRHyperlink.HYPERLINK_TYPE_REFERENCE}.
* @deprecated Replaced by {@link HyperlinkTypeEnum#REFERENCE}.
*/
public static final String HYPERLINK_TYPE_REFERENCE = HyperlinkTypeEnum.REFERENCE.getName();
/**
* "LocalAnchor" link type, equivalent to {@link JRHyperlink#HYPERLINK_TYPE_LOCAL_ANCHOR JRHyperlink.HYPERLINK_LOCAL_ANCHOR}.
* @deprecated Replaced by {@link HyperlinkTypeEnum#LOCAL_ANCHOR}.
*/
public static final String HYPERLINK_TYPE_LOCAL_ANCHOR = HyperlinkTypeEnum.LOCAL_ANCHOR.getName();
/**
* "LocalPage" link type, equivalent to {@link JRHyperlink#HYPERLINK_TYPE_LOCAL_PAGE JRHyperlink.HYPERLINK_TYPE_LOCAL_PAGE}.
* @deprecated Replaced by {@link HyperlinkTypeEnum#LOCAL_PAGE}.
*/
public static final String HYPERLINK_TYPE_LOCAL_PAGE = HyperlinkTypeEnum.LOCAL_PAGE.getName();
/**
* "RemoteAnchor" link type, equivalent to {@link JRHyperlink#HYPERLINK_TYPE_REMOTE_ANCHOR JRHyperlink.HYPERLINK_TYPE_REMOTE_ANCHOR}.
* @deprecated Replaced by {@link HyperlinkTypeEnum#REMOTE_ANCHOR}.
*/
public static final String HYPERLINK_TYPE_REMOTE_ANCHOR = HyperlinkTypeEnum.REMOTE_ANCHOR.getName();
/**
* "RemotePage" link type, equivalent to {@link JRHyperlink#HYPERLINK_TYPE_REMOTE_PAGE JRHyperlink.HYPERLINK_TYPE_REMOTE_PAGE}.
* @deprecated Replaced by {@link HyperlinkTypeEnum#REMOTE_PAGE}.
*/
public static final String HYPERLINK_TYPE_REMOTE_PAGE = HyperlinkTypeEnum.REMOTE_PAGE.getName();
/**
* "Self" link target name, equivalent to {@link JRHyperlink#HYPERLINK_TARGET_SELF JRHyperlink.HYPERLINK_TARGET_SELF}.
* @deprecated Replaced by {@link HyperlinkTargetEnum#SELF}.
*/
public static final String HYPERLINK_TARGET_SELF = HyperlinkTargetEnum.SELF.getName();
/**
* "Blank" link target name, equivalent to {@link JRHyperlink#HYPERLINK_TARGET_BLANK JRHyperlink.HYPERLINK_TARGET_BLANK}.
* @deprecated Replaced by {@link HyperlinkTargetEnum#BLANK}.
*/
public static final String HYPERLINK_TARGET_BLANK = HyperlinkTargetEnum.BLANK.getName();
/**
* "Parent" link target name, equivalent to {@link JRHyperlink#HYPERLINK_TARGET_PARENT JRHyperlink.HYPERLINK_TARGET_PARENT}.
* @deprecated Replaced by {@link HyperlinkTargetEnum#PARENT}.
*/
public static final String HYPERLINK_TARGET_PARENT = HyperlinkTargetEnum.PARENT.getName();
/**
* "Top" link target name, equivalent to {@link JRHyperlink#HYPERLINK_TARGET_TOP JRHyperlink.HYPERLINK_TARGET_TOP}.
* @deprecated Replaced by {@link HyperlinkTargetEnum#TOP}.
*/
public static final String HYPERLINK_TARGET_TOP = HyperlinkTargetEnum.TOP.getName();
/**
* @deprecated Replaced by {@link #getHyperlinkTypeValue(JRHyperlink)}.
*/
public static byte getHyperlinkType(JRHyperlink hyperlink)
{
return getHyperlinkTypeValue(hyperlink.getLinkType()).getValue();
}
/**
* Returns the built-in hyperlink type, or {@link JRHyperlink#HYPERLINK_TYPE_CUSTOM JRHyperlink.HYPERLINK_TYPE_CUSTOM}
* if the type is not a built-in type.
*
* @param hyperlink the hyperlink object
* @return the hyperlink type
*/
public static HyperlinkTypeEnum getHyperlinkTypeValue(JRHyperlink hyperlink)
{
return getHyperlinkTypeValue(hyperlink.getLinkType());
}
/**
* @deprecated Replaced by {@link #getHyperlinkTypeValue(String)}.
*/
public static byte getHyperlinkType(String linkType)
{
return getHyperlinkTypeValue(linkType).getValue();
}
/**
* Returns the built-in hyperlink type, or {@link JRHyperlink#HYPERLINK_TYPE_CUSTOM JRHyperlink.HYPERLINK_TYPE_CUSTOM}
* if the type is not a built-in type.
*
* @param linkType the link type
* @return the hyperlink type
*/
public static HyperlinkTypeEnum getHyperlinkTypeValue(String linkType)
{
HyperlinkTypeEnum type;
if (linkType == null)
{
type = HyperlinkTypeEnum.NONE;
}
else
{
HyperlinkTypeEnum builtinType = HyperlinkTypeEnum.getByName(linkType);
if (builtinType == null)
{
type = HyperlinkTypeEnum.CUSTOM;
}
else
{
type = builtinType;
}
}
return type;
}
/**
* Returns the built-in hyperlink target, or {@link JRHyperlink#HYPERLINK_TARGET_CUSTOM JRHyperlink.HYPERLINK_TARGET_CUSTOM}
* if the target name is not a built-in one.
*
* @param hyperlink the hyperlink object
* @return the hyperlink target
*/
public static byte getHyperlinkTarget(JRHyperlink hyperlink)
{
return getHyperlinkTarget(hyperlink.getLinkTarget());
}
/**
* @deprecated Replaced by {@link #getHyperlinkTargetValue(String)}.
*/
public static byte getHyperlinkTarget(String linkTarget)
{
return getHyperlinkTargetValue(linkTarget).getValue();
}
/**
* Returns the built-in hyperlink target, or {@link HyperlinkTargetEnum#CUSTOM HyperlinkTargetEnum.CUSTOM}
* if the target name is not a built-in one.
*
* @param linkTarget the link target type
* @return the hyperlink target
*/
public static HyperlinkTargetEnum getHyperlinkTargetValue(String linkTarget)
{
HyperlinkTargetEnum target;
if (linkTarget == null)
{
target = HyperlinkTargetEnum.SELF;
}
else
{
HyperlinkTargetEnum builtinTarget = HyperlinkTargetEnum.getByName(linkTarget);
if (builtinTarget == null)
{
target = HyperlinkTargetEnum.CUSTOM;
}
else
{
target = builtinTarget;
}
}
return target;
}
/**
* @deprecated Replaced by {@link #getLinkType(HyperlinkTypeEnum)}.
*/
public static String getLinkType(byte hyperlinkType)
{
return getLinkType(HyperlinkTypeEnum.getByValue(hyperlinkType));
}
/**
* Returns the link type associated with a built-in type.
*
* @param hyperlinkType the built-in type
* @return the String link type
*/
public static String getLinkType(HyperlinkTypeEnum hyperlinkType)
{
String type;
switch (hyperlinkType)
{
case NULL:
case NONE:
type = null;
break;
case REFERENCE:
case LOCAL_ANCHOR:
case LOCAL_PAGE:
case REMOTE_ANCHOR:
case REMOTE_PAGE:
type = hyperlinkType.getName();
break;
case CUSTOM:
throw new JRRuntimeException("Custom hyperlink types cannot be specified using the byte constant");
default:
throw new JRRuntimeException("Unknown hyperlink type " + hyperlinkType);
}
return type;
}
/**
* @deprecated Replaced by {@link #getLinkTarget(HyperlinkTargetEnum)}.
*/
public static String getLinkTarget(byte hyperlinkTarget)
{
return getLinkTarget(HyperlinkTargetEnum.getByValue(hyperlinkTarget));
}
/**
* Returns the link target associated with a built-in target.
*
* @param hyperlinkTarget the built-in target type
* @return the String link target
*/
public static String getLinkTarget(HyperlinkTargetEnum hyperlinkTarget)
{
String target;
switch (hyperlinkTarget)
{
case NONE:
case SELF:
target = null;
break;
case BLANK:
target = HYPERLINK_TARGET_BLANK;
break;
case PARENT:
target = HYPERLINK_TARGET_PARENT;
break;
case TOP:
target = HYPERLINK_TARGET_TOP;
break;
case CUSTOM:
throw new JRRuntimeException("Custom hyperlink targets cannot be specified using the byte constant");
default:
throw new JRRuntimeException("Unknown hyperlink target " + hyperlinkTarget);
}
return target;
}
/**
* Decides whether a hyperlink is empty or not.
* <p>
* The hyperlink is considered empty when it's <code>null</code> or when
* its type is {@link HyperlinkTypeEnum#NONE NONE}
* and it doesn't include a tooltip expression
* </p>
* @param hyperlink the hyperlink
* @return whether the hyperlink is empty
*/
public static boolean isEmpty(JRHyperlink hyperlink)
{
return hyperlink == null
|| (hyperlink.getHyperlinkTypeValue() == HyperlinkTypeEnum.NONE
&& hyperlink.getHyperlinkTooltipExpression() == null);
}
private JRHyperlinkHelper()
{
}
}