1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/*
* @(#)Types.java $Rev: 4 $ $Release: 0.5.1 $
*
* copyright(c) 2005 kuwata-lab all rights reserved.
*/
package kwalify;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.Date;
/**
* utility methods for type (str, int, ...).
*
* @revision $Rev: 4 $
* @release $Release: 0.5.1 $
*/
public class Types {
public static Class typeClass(String type) {
return (Class)__type_classes.get(type);
}
public static String typeName(String type) {
String name = (String)__type_names.get(type);
if (name == null) name = type;
return name;
}
public static final String DEFAULT_TYPE = "str";
public static String getDefaultType() { return DEFAULT_TYPE; }
private static Map __type_classes;
private static Map __type_names;
static {
//
__type_classes = new HashMap();
__type_classes.put("str", String.class);
__type_classes.put("int", Integer.class);
__type_classes.put("float", Double.class);
__type_classes.put("number", Number.class);
__type_classes.put("text", null);
__type_classes.put("bool", Boolean.class);
__type_classes.put("map", Map.class);
__type_classes.put("seq", List.class);
__type_classes.put("timestamp", Date.class);
__type_classes.put("date", Date.class);
__type_classes.put("symbol", String.class);
__type_classes.put("scalar", null);
__type_classes.put("any", Object.class);
//__type_classes.put("null", null);
//
__type_names = new HashMap();
__type_names.put("map", "mapping");
__type_names.put("seq", "sequence");
__type_names.put("str", "string");
__type_names.put("int", "integer");
__type_names.put("bool", "boolean");
}
public static boolean isBuiltinType(String type) {
return __type_classes.containsKey(type);
}
public static boolean isCollectionType(String type) {
return type.equals("map") || type.equals("seq");
}
public static boolean isMapType(String type) {
return type.equals("map");
}
public static boolean isScalarType(String type) {
return !isCollectionType(type);
}
public static boolean isCollection(Object obj) {
return obj instanceof Map || obj instanceof List;
}
public static boolean isScalar(Object obj) {
return !isCollection(obj);
}
public static boolean isCorrectType(Object obj, String type) {
Class type_class = typeClass(type);
if (type_class != null) {
return type_class.isInstance(obj);
}
if (type.equals("null")) {
return obj == null;
} else if (type.equals("text")) {
return obj instanceof String || obj instanceof Number;
} else if (type.equals("scalar")) {
return obj instanceof Number || obj instanceof String || obj instanceof Boolean || obj instanceof Date;
}
return false;
}
}
|