OSDN Git Service

Merge branch 'release/v1.101.106'
[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      *
37      * @param klass {@link java.lang.Class}型
38      */
39     private JsTypes(Class<? extends JsValue> klass){
40         this.klass = klass;
41
42         if(JsComposition.class.isAssignableFrom(this.klass)){
43             this.isComposition = true;
44         }else{
45             this.isComposition = false;
46         }
47
48         return;
49     }
50
51     /**
52      * {@link java.lang.Class}型から対応する型列挙を返す。
53      *
54      * @param carg 任意のjava.lang.Class型変数
55      * @return 型列挙。JSON型に由来しないクラスが指定されたときはnull
56      * @throws NullPointerException 引数がnull
57      */
58     public static JsTypes getJsTypes(Class<?> carg)
59             throws NullPointerException{
60         if(carg == null) throw new NullPointerException();
61
62         for(JsTypes types : VALUE_ARRAY){
63             if(types.klass == carg) return types;
64         }
65
66         return null;
67     }
68
69     /**
70      * 対応する{@link java.lang.Class}型を返す。
71      *
72      * @return java.lang.Class型
73      */
74     public Class<? extends JsValue> getJsClass(){
75         return this.klass;
76     }
77
78     /**
79      * このJSON型が子要素を持ちうるか判定する。
80      *
81      * <p>子要素を持ちうるJSON型はOBJECT型かARRAY型のみ。
82      *
83      * @return 子要素を持ちうるならtrue
84      */
85     public boolean isComposition(){
86         return this.isComposition;
87     }
88
89 }