OSDN Git Service

Maven plugin 更新
[jovsonz/Jovsonz.git] / src / main / java / jp / sourceforge / jovsonz / JsTypes.java
1 /*
2  * JSON types
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 olyutorskii
6  */
7
8 package jp.sourceforge.jovsonz;
9
10 /**
11  * JSON 各種型列挙。
12  */
13 public enum JsTypes {
14
15     /** NUMBER型に対応。 */
16     NUMBER  (JsNumber .class),
17     /** STRING型に対応。 */
18     STRING  (JsString .class),
19     /** BOOLEAN型に対応。 */
20     BOOLEAN (JsBoolean.class),
21     /** ARRAY型に対応。 */
22     ARRAY   (JsArray  .class),
23     /** OBJECT型に対応。 */
24     OBJECT  (JsObject .class),
25     /** NULL型に対応。 */
26     NULL    (JsNull   .class),
27     ;
28
29     private static final JsTypes[] VALUE_ARRAY = values();
30
31     private final Class<? extends JsValue> klass;
32     private final boolean isComposition;
33
34     /**
35      * コンストラクタ。
36      * @param klass {@link java.lang.Class}型
37      */
38     private JsTypes(Class<? extends JsValue> klass){
39         this.klass = klass;
40
41         if(JsComposition.class.isAssignableFrom(this.klass)){
42             this.isComposition = true;
43         }else{
44             this.isComposition = false;
45         }
46
47         return;
48     }
49
50     /**
51      * {@link java.lang.Class}型から対応する型列挙を返す。
52      * @param carg 任意のjava.lang.Class型変数
53      * @return 型列挙。JSON型に由来しないクラスが指定されたときはnull
54      * @throws NullPointerException 引数がnull
55      */
56     public static JsTypes getJsTypes(Class<?> carg)
57             throws NullPointerException{
58         if(carg == null) throw new NullPointerException();
59
60         for(JsTypes types : VALUE_ARRAY){
61             if(types.klass == carg) return types;
62         }
63
64         return null;
65     }
66
67     /**
68      * 対応する{@link java.lang.Class}型を返す。
69      * @return java.lang.Class型
70      */
71     public Class<? extends JsValue> getJsClass(){
72         return this.klass;
73     }
74
75     /**
76      * このJSON型が子要素を持ちうるか判定する。
77      * 子要素を持ちうるJSON型はOBJECT型かARRAY型のみ。
78      * @return 子要素を持ちうるならtrue
79      */
80     public boolean isComposition(){
81         return this.isComposition;
82     }
83
84 }