CommonParser.java
package com.ziesemer.utils.classParser;
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.TimeZone;
import java.util.UUID;
import java.util.regex.Pattern;
/**
* @author Mark A. Ziesemer
* <a href="http://www.ziesemer.com"><www.ziesemer.com></a>
*/
public class CommonParser implements IClassParser{
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
public Object convert(final Class<?> c, final String str) throws Exception{
if(c == Boolean.TYPE){
return isTrue(str, Boolean.TYPE);
}else if(c == Boolean.class){
if(str == null){
return null;
}
final String val = str.trim().toUpperCase();
if("".equals(val)
|| "NULL".equals(val)){
return null;
}
return isTrue(val, Boolean.class);
}else if(c == Character.TYPE
|| c == Character.class){
if(str.length() != 1){
throw new ClassParseException(
"String must be a single character", c, str);
}
return Character.valueOf(str.charAt(0));
}else if(c == String.class
|| c == CharSequence.class){
return str;
}else if(c == File.class){
return new File(str);
}else if(c == URL.class){
return new URL(str);
}else if(c == URI.class){
return new URI(str);
}else if(c == UUID.class){
return UUID.fromString(str);
}else if(c == Charset.class){
return Charset.forName(str);
}else if(c == TimeZone.class){
return TimeZone.getTimeZone(str);
}else if(c.isEnum()){
return Enum.valueOf((Class<? extends Enum>)c, str);
}else if(c == Pattern.class){
return Pattern.compile(str);
}else if(c == Class.class){
return Class.forName(str);
}else if(c == Object.class){
final Class<?> newClass = Class.forName(str);
return newClass.newInstance();
}
return NO_RESULT;
}
protected static boolean isTrue(final Object value, final Class<?> c){
if(value == null){
throw new ClassParseException("Unrecognized value", c, null);
}
final String val = value.toString().trim().toUpperCase();
if("Y".equals(val)
|| "YES".equals(val)
|| "T".equals(val)
|| "TRUE".equals(val)
|| "1".equals(val)
|| "-1".equals(val)
|| "X".equals(val)){
return true;
}
if("N".equals(val)
|| "NO".equals(val)
|| "F".equals(val)
|| "FALSE".equals(val)
|| "0".equals(val)){
return false;
}
throw new ClassParseException("Unrecognized value", c, val);
}
}