package prefuse.data.parser; /** * DataParser instance that parses long values from a text string. Long * values can be explicitly coded for by using an 'L' at the end of a * number. For example "42" could parse as an int or a long, but * "42L" will only parse as a long. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public class LongParser implements DataParser { /** * Returns long.class. * @see prefuse.data.parser.DataParser#getType() */ public Class getType() { return long.class; } /** * @see prefuse.data.parser.DataParser#format(java.lang.Object) */ public String format(Object value) { if ( value == null ) return null; if ( !(value instanceof Number) ) throw new IllegalArgumentException( "This class can only format Objects of type Number."); return String.valueOf(((Number)value).longValue())+"L"; } /** * @see prefuse.data.parser.DataParser#canParse(java.lang.String) */ public boolean canParse(String text) { try { parseLong(text); return true; } catch ( DataParseException e ) { return false; } } /** * @see prefuse.data.parser.DataParser#parse(java.lang.String) */ public Object parse(String text) throws DataParseException { return new Long(parseLong(text)); } /** * Parse a long value from a text string. * @param text the text string to parse * @return the parsed long value * @throws DataParseException if an error occurs during parsing */ public static long parseLong(String text) throws DataParseException { try { // allow trailing 'L' characters to signify a long if ( text.length() > 0 ) { char c = text.charAt(text.length()-1); if ( c == 'l' || c == 'L' ) text = text.substring(0,text.length()-1); } // parse the string return Long.parseLong(text); } catch ( NumberFormatException e ) { throw new DataParseException(e); } } } // end of class LongParser