OSDN Git Service

4e4f5d617b6b2001ef3853e30c736f9cfb156ae6
[jovsonz/Jovsonz.git] / src / main / java / jp / sourceforge / jovsonz / JsPair.java
1 /*
2  * JSON pair in object
3  *
4  * License : The MIT License
5  * Copyright(c) 2009 olyutorskii
6  */
7
8 package jp.sourceforge.jovsonz;
9
10 import java.io.IOException;
11
12 /**
13  * OBJECT型Value内に列挙される、名前の付いたValueとの組(PAIR)。
14  * PAIRはValueではない。
15  * <p>
16  * <code>
17  * <pre>
18  * {
19  *     "PairName1" : 99.9 ,
20  *     "PairName2" : "textValue"
21  * }
22  * </pre>
23  * </code>
24  * </p>
25  */
26 public class JsPair {
27
28     private final String name;
29     private final JsValue value;
30
31     /**
32      * コンストラクタ。
33      * @param name PAIR名
34      * @param value PAIR名に対応付けられるValue
35      * @throws NullPointerException 引数のいずれかがnull
36      */
37     public JsPair(String name, JsValue value)
38             throws NullPointerException{
39         super();
40
41         if(name  == null || value == null) throw new NullPointerException();
42
43         this.name = name;
44         this.value = value;
45
46         return;
47     }
48
49     /**
50      * コンストラクタ。
51      * STRING型をValueに持つPAIRが生成される。
52      * @param name PAIR名
53      * @param text PAIR名に対応付けられる文字列データ。
54      * エスケープされる前段階の表記。
55      * @throws NullPointerException 引数がnull
56      */
57     public JsPair(String name, CharSequence text)
58             throws NullPointerException{
59         this(name, (JsValue) new JsString(text) );
60         return;
61     }
62
63     /**
64      * コンストラクタ。
65      * BOOLEAN型をValueに持つPAIRが生成される。
66      * @param name PAIR名
67      * @param bool PAIR名に対応付けられる真偽値
68      * @throws NullPointerException PAIR名がnull
69      */
70     public JsPair(String name, boolean bool)
71             throws NullPointerException{
72         this(name, JsBoolean.valueOf(bool));
73         return;
74     }
75
76     /**
77      * コンストラクタ。
78      * NUMBER型をValueに持つPAIRが生成される。
79      * @param name PAIR名
80      * @param number PAIR名に対応付けられる整数値
81      * @throws NullPointerException PAIR名がnull
82      */
83     public JsPair(String name, long number)
84             throws NullPointerException{
85         this(name, new JsNumber(number));
86         return;
87     }
88
89     /**
90      * コンストラクタ。
91      * NUMBER型をValueに持つPAIRが生成される。
92      * @param name PAIR名
93      * @param number PAIR名に対応付けられる実数値
94      * @throws NullPointerException PAIR名がnull
95      */
96     public JsPair(String name, double number)
97             throws NullPointerException{
98         this(name, new JsNumber(number));
99         return;
100     }
101
102     /**
103      * PAIR名を返す。
104      * @return PAIR名
105      */
106     public String getName(){
107         return this.name;
108     }
109
110     /**
111      * Valueを返す。
112      * @return Value
113      */
114     public JsValue getValue(){
115         return this.value;
116     }
117
118     /**
119      * {@inheritDoc}
120      * ハッシュ値を返す。
121      * PAIR名とValue双方のハッシュ値から合成される。
122      * @return {@inheritDoc}
123      */
124     @Override
125     public int hashCode(){
126         int nameHash = this.name.hashCode();
127         int valHash = this.value.hashCode();
128         return nameHash ^ valHash;
129     }
130
131     /**
132      * {@inheritDoc}
133      * 等価判定を行う。
134      * PAIR名とValue双方が一致する場合のみ真となる。
135      * @param obj {@inheritDoc}
136      * @return {@inheritDoc}
137      */
138     @Override
139     public boolean equals(Object obj){
140         if(this == obj) return true;
141
142         if( ! (obj instanceof JsPair) ) return false;
143         JsPair target = (JsPair) obj;
144
145         if( ! this.name .equals(target.name)  ) return false;
146         if( ! this.value.equals(target.value) ) return false;
147
148         return true;
149     }
150
151     /**
152      * 文字列表現を返す。
153      * JSON表記の一部としての利用も可能。
154      * @return {@inheritDoc}
155      */
156     @Override
157     public String toString(){
158         StringBuilder result = new StringBuilder();
159         try{
160             JsString.dumpString(result, this.name);
161         }catch(IOException e){
162             assert false;
163             throw new AssertionError(e);
164         }
165
166         result.append(':')
167             .append(this.value.toString());
168
169         return result.toString();
170     }
171
172 }