1 package org.sapia.regis.type; 2 3 import java.io.File ; 4 import java.util.HashMap ; 5 import java.util.Iterator ; 6 import java.util.Map ; 7 8 import org.sapia.regis.Node; 9 10 18 public class BuiltinTypes { 19 20 private static Map types = new HashMap (); 21 22 25 public static final BuiltinType STRING_TYPE = 26 new BuiltinType(){ 27 public String getName() {return "string";} 28 public Object parse(String value) {return value;} 29 public String toString(Object value) {return (String )value;} 30 public boolean isAssignable(Object value) {return value instanceof String ;} 31 public boolean isAssignable(Class clazz) {return clazz.equals(String .class);} 32 public Object getProperty(String propName, Node node) {return node.getProperty(propName).asString();} 33 }; 34 35 38 public static final BuiltinType FILE_TYPE = 39 new BuiltinType(){ 40 public String getName() {return "file";} 41 public Object parse(String value) {return new File (value);} 42 public String toString(Object value) {return ((File )value).getAbsolutePath();} 43 public boolean isAssignable(Object value) {return value instanceof File ;} 44 public boolean isAssignable(Class clazz) {return clazz.equals(File .class);} 45 public Object getProperty(String propName, Node node) {return new File (node.getProperty(propName).asString());} 46 }; 47 48 51 public static final BuiltinType BOOLEAN_TYPE = 52 new BuiltinType(){ 53 public String getName() {return "boolean";} 54 public Object parse(String value) {return new Boolean (value);} 55 public String toString(Object value) {return ((Boolean )value).toString();} 56 public boolean isAssignable(Object value) {return value instanceof Boolean ;} 57 public boolean isAssignable(Class clazz) {return clazz.equals(Boolean .class) || clazz.equals(boolean.class);} 58 public Object getProperty(String propName, Node node) {return new Boolean (node.getProperty(propName).asBoolean());} 59 }; 60 61 64 public static final BuiltinType INT_TYPE = 65 new BuiltinType(){ 66 public String getName() {return "int";} 67 public Object parse(String value) {return new Integer (value);} 68 public String toString(Object value) {return ((Integer )value).toString();} 69 public boolean isAssignable(Object value) {return value instanceof Integer ;} 70 public boolean isAssignable(Class clazz) {return clazz.equals(Integer .class) || clazz.equals(int.class);} 71 public Object getProperty(String propName, Node node) {return new Integer (node.getProperty(propName).asInt());} 72 }; 73 74 77 public static final BuiltinType LONG_TYPE = 78 new BuiltinType(){ 79 public String getName() {return "long";} 80 public Object parse(String value) {return new Long (value);} 81 public String toString(Object value) {return ((Long )value).toString();} 82 public boolean isAssignable(Object value) {return value instanceof Long ;} 83 public boolean isAssignable(Class clazz) {return clazz.equals(Long .class) || clazz.equals(long.class);} 84 public Object getProperty(String propName, Node node) {return new Long (node.getProperty(propName).asLong());} 85 }; 86 87 90 public static final BuiltinType FLOAT_TYPE = 91 new BuiltinType(){ 92 public String getName() {return "float";} 93 public Object parse(String value) {return new Float (value);} 94 public String toString(Object value) {return ((Float )value).toString();} 95 public boolean isAssignable(Object value) {return value instanceof Float ;} 96 public boolean isAssignable(Class clazz) {return clazz.equals(Float .class) || clazz.equals(float.class);} 97 public Object getProperty(String propName, Node node) {return new Float (node.getProperty(propName).asFloat());} 98 }; 99 100 103 public static final BuiltinType DOUBLE_TYPE = 104 new BuiltinType(){ 105 public String getName() {return "double";} 106 public Object parse(String value) {return new Double (value);} 107 public String toString(Object value) {return ((Double )value).toString();} 108 public boolean isAssignable(Object value) {return value instanceof Double ;} 109 public boolean isAssignable(Class clazz) {return clazz.equals(Double .class) || clazz.equals(double.class);} 110 public Object getProperty(String propName, Node node) {return new Double (node.getProperty(propName).asDouble());} 111 }; 112 113 static{ 114 types.put(BOOLEAN_TYPE.getName(), BOOLEAN_TYPE); 115 types.put(INT_TYPE.getName(), INT_TYPE); 116 types.put(LONG_TYPE.getName(), LONG_TYPE); 117 types.put(FLOAT_TYPE.getName(), FLOAT_TYPE); 118 types.put(DOUBLE_TYPE.getName(), DOUBLE_TYPE); 119 types.put(STRING_TYPE.getName(), STRING_TYPE); 120 } 121 122 126 public static BuiltinType getTypeFor(String name){ 127 BuiltinType type = (BuiltinType)types.get(name); 128 if(type == null){ 129 throw new IllegalStateException ("Invalid type name: " + name); 130 } 131 return type; 132 } 133 134 140 public static BuiltinType getTypeFor(Object value){ 141 Iterator itr = types.values().iterator(); 142 while(itr.hasNext()){ 143 BuiltinType type = (BuiltinType)itr.next(); 144 if(type.isAssignable(value)){ 145 return type; 146 } 147 } 148 return null; 149 } 150 151 157 public static BuiltinType getTypeFor(Class clazz){ 158 Iterator itr = types.values().iterator(); 159 while(itr.hasNext()){ 160 BuiltinType type = (BuiltinType)itr.next(); 161 if(type.isAssignable(clazz)){ 162 return type; 163 } 164 } 165 return null; 166 } 167 } 168 | Popular Tags |