• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  */
18 
19 /**
20  * @author Aleksey V. Yantsen
21  */
22 
23 /**
24  * Created on 10.25.2004
25  */
26 package org.apache.harmony.jpda.tests.framework.jdwp;
27 
28 import org.apache.harmony.jpda.tests.framework.TestErrorException;
29 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
30 
31 /**
32  * This class represents generic value used in JDWP packets.
33  */
34 public class Value {
35 
36     private byte tag;
37 
38     private Number numberValue;
39 
40     private boolean booleanValue;
41 
42     private char charValue;
43 
44     /**
45      * Creates new value with no tag.
46      */
Value()47     public Value() {
48         tag = JDWPConstants.Tag.NO_TAG;
49     }
50 
51     /**
52      * Creates new ID value with specified tag.
53      */
Value(byte tag, long value)54     public Value(byte tag, long value) {
55         this.tag = tag;
56         this.numberValue = new Long(value);
57     }
58 
59     /**
60      * Creates new byte value.
61      */
Value(byte value)62     public Value(byte value) {
63         this.tag = JDWPConstants.Tag.BYTE_TAG;
64         this.numberValue = new Byte(value);
65     }
66 
67     /**
68      * Creates new short value.
69      */
Value(short value)70     public Value(short value) {
71         this.tag = JDWPConstants.Tag.SHORT_TAG;
72         this.numberValue = new Short(value);
73     }
74 
75     /**
76      * Creates new int value.
77      */
Value(int value)78     public Value(int value) {
79         this.tag = JDWPConstants.Tag.INT_TAG;
80         this.numberValue = new Integer(value);
81     }
82 
83     /**
84      * Creates new long value.
85      */
Value(long value)86     public Value(long value) {
87         this.tag = JDWPConstants.Tag.LONG_TAG;
88         this.numberValue = new Long(value);
89     }
90 
91     /**
92      * Creates new short value.
93      */
Value(float value)94     public Value(float value) {
95         this.tag = JDWPConstants.Tag.FLOAT_TAG;
96         this.numberValue = new Float(value);
97     }
98 
99     /**
100      * Creates new double value.
101      */
Value(double value)102     public Value(double value) {
103         this.tag = JDWPConstants.Tag.DOUBLE_TAG;
104         this.numberValue = new Double(value);
105     }
106 
107     /**
108      * Creates new boolean value.
109      */
Value(boolean value)110     public Value(boolean value) {
111         this.tag = JDWPConstants.Tag.BOOLEAN_TAG;
112         this.booleanValue = value;
113     }
114 
115     /**
116      * Creates new char value.
117      */
Value(char value)118     public Value(char value) {
119         this.tag = JDWPConstants.Tag.CHAR_TAG;
120         this.charValue = value;
121     }
122 
123     /**
124      * Returns tag of this value.
125      *
126      * @return Returns the tag.
127      */
getTag()128     public byte getTag() {
129         return tag;
130     }
131 
132     /**
133      * Returns byte representation of this value.
134      *
135      * @return byte value
136      */
getByteValue()137     public byte getByteValue() {
138         return numberValue.byteValue();
139     }
140 
141     /**
142      * Returns short representation of this value.
143      *
144      * @return short value
145      */
getShortValue()146     public short getShortValue() {
147         return numberValue.shortValue();
148     }
149 
150     /**
151      * Returns int representation of this value.
152      *
153      * @return int value
154      */
getIntValue()155     public int getIntValue() {
156         return numberValue.intValue();
157     }
158 
159     /**
160      * Returns long representation of this value.
161      *
162      * @return long value
163      */
getLongValue()164     public long getLongValue() {
165         return numberValue.longValue();
166     }
167 
168     /**
169      * Returns float representation of this value.
170      *
171      * @return float value
172      */
getFloatValue()173     public float getFloatValue() {
174         return numberValue.floatValue();
175     }
176 
177     /**
178      * Returns double representation of this value.
179      *
180      * @return double value
181      */
getDoubleValue()182     public double getDoubleValue() {
183         return numberValue.doubleValue();
184     }
185 
186     /**
187      * Returns boolean representation of this value.
188      *
189      * @return boolean value
190      */
getBooleanValue()191     public boolean getBooleanValue() {
192         return booleanValue;
193     }
194 
195     /**
196      * Returns char representation of this value.
197      *
198      * @return char value
199      */
getCharValue()200     public char getCharValue() {
201         return charValue;
202     }
203 
204     /**
205      * Compares with other value.
206      */
equals(Object arg0)207     public boolean equals(Object arg0) {
208         if (!(arg0 instanceof Value))
209             return false;
210 
211         Value value0 = (Value) arg0;
212         if (value0.tag != value0.tag)
213             return false;
214 
215         switch (tag) {
216         case JDWPConstants.Tag.BOOLEAN_TAG:
217             return getBooleanValue() == value0.getBooleanValue();
218         case JDWPConstants.Tag.BYTE_TAG:
219             return getByteValue() == value0.getByteValue();
220         case JDWPConstants.Tag.CHAR_TAG:
221             return getCharValue() == value0.getCharValue();
222         case JDWPConstants.Tag.DOUBLE_TAG:
223             if (Double.isNaN(getDoubleValue())
224                     && (Double.isNaN(value0.getDoubleValue())))
225                 return true;
226             return getDoubleValue() == value0.getDoubleValue();
227         case JDWPConstants.Tag.FLOAT_TAG:
228             if (Float.isNaN(getFloatValue())
229                     && (Float.isNaN(value0.getFloatValue())))
230                 return true;
231             return getFloatValue() == value0.getFloatValue();
232         case JDWPConstants.Tag.INT_TAG:
233             return getIntValue() == value0.getIntValue();
234         case JDWPConstants.Tag.LONG_TAG:
235             return getLongValue() == value0.getLongValue();
236         case JDWPConstants.Tag.SHORT_TAG:
237             return getShortValue() == value0.getShortValue();
238         case JDWPConstants.Tag.STRING_TAG:
239         case JDWPConstants.Tag.ARRAY_TAG:
240         case JDWPConstants.Tag.CLASS_LOADER_TAG:
241         case JDWPConstants.Tag.CLASS_OBJECT_TAG:
242         case JDWPConstants.Tag.OBJECT_TAG:
243         case JDWPConstants.Tag.THREAD_GROUP_TAG:
244         case JDWPConstants.Tag.THREAD_TAG:
245             return getLongValue() == value0.getLongValue();
246         }
247 
248         throw new TestErrorException("Illegal tag value");
249     }
250 
251     /**
252      * Converts this value to string representation for printing.
253      */
toString()254     public String toString() {
255 
256         switch (tag) {
257         case JDWPConstants.Tag.BOOLEAN_TAG:
258             return "boolean: " + getBooleanValue();
259         case JDWPConstants.Tag.BYTE_TAG:
260             return "byte: " + getByteValue();
261         case JDWPConstants.Tag.CHAR_TAG:
262             return "char: " + getCharValue();
263         case JDWPConstants.Tag.DOUBLE_TAG:
264             return "double: " + getDoubleValue();
265         case JDWPConstants.Tag.FLOAT_TAG:
266             return "float: " + getFloatValue();
267         case JDWPConstants.Tag.INT_TAG:
268             return "int: " + getIntValue();
269         case JDWPConstants.Tag.LONG_TAG:
270             return "long: " + getLongValue();
271         case JDWPConstants.Tag.SHORT_TAG:
272             return "short: " + getShortValue();
273         case JDWPConstants.Tag.STRING_TAG:
274             return "StringID: " + getLongValue();
275         case JDWPConstants.Tag.ARRAY_TAG:
276             return "ObjectID: " + getLongValue();
277 
278         case JDWPConstants.Tag.CLASS_LOADER_TAG:
279             return "ClassLoaderID: " + getLongValue();
280         case JDWPConstants.Tag.CLASS_OBJECT_TAG:
281             return "ClassObjectID: " + getLongValue();
282         case JDWPConstants.Tag.OBJECT_TAG:
283             return "ObjectID: " + getLongValue();
284         case JDWPConstants.Tag.THREAD_GROUP_TAG:
285             return "ThreadGroupID: " + getLongValue();
286         case JDWPConstants.Tag.THREAD_TAG:
287             return "ThreadID: " + getLongValue();
288         }
289 
290         throw new TestErrorException("Illegal tag value: " + tag);
291     }
292 }
293