blob: 75bedcb77e07ba7bf1e3565d7cdd41751ec7ef0c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cameron Bateman/Oracle - initial API and implementation
*
********************************************************************************/
package org.eclipse.jst.jsf.common.internal.types;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* Represents a StringLiteral as defined by JSP.2.9
*
* @author cbateman
*/
public class StringLiteralType extends LiteralType
{
private final String _literalValue;
/**
* @param value
*/
public StringLiteralType(String value)
{
super(TypeConstants.TYPE_STRING);
_literalValue = value;
}
public Number coerceToNumber(Class T) throws TypeCoercionException
{
try
{
if (T == BigInteger.class)
{
if ("".equals(_literalValue))
{
return BigInteger.ZERO;
}
return new BigInteger(_literalValue);
}
else if (T == BigDecimal.class)
{
if ("".equals(_literalValue))
{
return new BigDecimal(0.0);
}
return new BigDecimal(_literalValue);
}
else if (T == Double.class || T == Double.TYPE)
{
if ("".equals(_literalValue))
{
return new Double(0.0);
}
return Double.valueOf(_literalValue);
}
else if (T == Float.class || T == Float.TYPE)
{
if ("".equals(_literalValue))
{
return new Float(0.0);
}
return Float.valueOf(_literalValue);
}
else if (T == Long.class || T == Long.TYPE)
{
if ("".equals(_literalValue))
{
return new Long(0L);
}
return Long.valueOf(_literalValue);
}
else if (T == Integer.class || T == Integer.TYPE)
{
if ("".equals(_literalValue))
{
return new Integer(0);
}
return Integer.valueOf(_literalValue);
}
else if (T == Short.class || T == Short.TYPE)
{
if ("".equals(_literalValue))
{
return new Short((short)0);
}
return Short.valueOf(_literalValue);
}
else if (T == Byte.class || T == Byte.TYPE)
{
if ("".equals(_literalValue))
{
return new Byte((byte)0);
}
return Byte.valueOf(_literalValue);
}
else
{
throw new IllegalArgumentException("Not a target numeric type: "+T);
}
}
catch (NumberFormatException nfe)
{
throw new TypeCoercionException(nfe);
}
}
public String getLiteralValue()
{
return _literalValue;
}
public Object getLiteralValueRaw()
{
return _literalValue;
}
public Boolean coerceToBoolean() throws TypeCoercionException
{
// JSP.2.8.5
try
{
return Boolean.valueOf(_literalValue);
}
catch (Throwable t)
{
throw new TypeCoercionException(t);
}
}
}