OSDN Git Service

start v1.101.107-SNAPSHOT
[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  *
15  * <p>PAIRはValueではない。
16  *
17  * <pre>
18  * {
19  *     "PairName1" : 99.9 ,
20  *     "PairName2" : "textValue"
21  * }
22  * </pre>
23  *
24  */
25 public class JsPair {
26
27     private final String name;
28     private final JsValue value;
29
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      *
52      * <p>STRING型をValueに持つPAIRが生成される。
53      *
54      * @param name PAIR名
55      * @param text PAIR名に対応付けられる文字列データ。
56      *  エスケープされる前段階の表記。
57      * @throws NullPointerException 引数がnull
58      */
59     public JsPair(String name, CharSequence text)
60             throws NullPointerException{
61         this(name, (JsValue) new JsString(text) );
62         return;
63     }
64
65     /**
66      * コンストラクタ。
67      *
68      * <p>BOOLEAN型をValueに持つPAIRが生成される。
69      *
70      * @param name PAIR名
71      * @param bool PAIR名に対応付けられる真偽値
72      * @throws NullPointerException PAIR名がnull
73      */
74     public JsPair(String name, boolean bool)
75             throws NullPointerException{
76         this(name, JsBoolean.valueOf(bool));
77         return;
78     }
79
80     /**
81      * コンストラクタ。
82      *
83      * <p>NUMBER型をValueに持つPAIRが生成される。
84      *
85      * @param name PAIR名
86      * @param number PAIR名に対応付けられる整数値
87      * @throws NullPointerException PAIR名がnull
88      */
89     public JsPair(String name, long number)
90             throws NullPointerException{
91         this(name, new JsNumber(number));
92         return;
93     }
94
95     /**
96      * コンストラクタ。
97      *
98      * <p>NUMBER型をValueに持つPAIRが生成される。
99      *
100      * @param name PAIR名
101      * @param number PAIR名に対応付けられる実数値
102      * @throws NullPointerException PAIR名がnull
103      */
104     public JsPair(String name, double number)
105             throws NullPointerException{
106         this(name, new JsNumber(number));
107         return;
108     }
109
110     /**
111      * PAIR名を返す。
112      *
113      * @return PAIR名
114      */
115     public String getName(){
116         return this.name;
117     }
118
119     /**
120      * Valueを返す。
121      *
122      * @return Value
123      */
124     public JsValue getValue(){
125         return this.value;
126     }
127
128     /**
129      * {@inheritDoc}
130      *
131      * <p>ハッシュ値を返す。
132      *
133      * <p>PAIR名とValue双方のハッシュ値から合成される。
134      *
135      * @return {@inheritDoc}
136      */
137     @Override
138     public int hashCode(){
139         int nameHash = this.name.hashCode();
140         int valHash = this.value.hashCode();
141         return nameHash ^ valHash;
142     }
143
144     /**
145      * {@inheritDoc}
146      *
147      * <p>等価判定を行う。
148      *
149      * <p>PAIR名とValue双方が一致する場合のみ真となる。
150      *
151      * @param obj {@inheritDoc}
152      * @return {@inheritDoc}
153      */
154     @Override
155     public boolean equals(Object obj){
156         if(this == obj) return true;
157
158         if( ! (obj instanceof JsPair) ) return false;
159         JsPair target = (JsPair) obj;
160
161         if( ! this.name .equals(target.name)  ) return false;
162         if( ! this.value.equals(target.value) ) return false;
163
164         return true;
165     }
166
167     /**
168      * 文字列表現を返す。
169      *
170      * <p>JSON表記の一部としての利用も可能。
171      *
172      * @return {@inheritDoc}
173      */
174     @Override
175     public String toString(){
176         StringBuilder result = new StringBuilder();
177         try{
178             JsString.dumpString(result, this.name);
179         }catch(IOException e){
180             assert false;
181             throw new AssertionError(e);
182         }
183
184         result.append(':')
185             .append(this.value.toString());
186
187         return result.toString();
188     }
189
190 }