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