1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.asn1.ber.primitives ;
18
19
20 import org.apache.asn1.ber.TagEnum ;
21
22
23 /***
24 * Type safe enum for ASN.1 UNIVERSAL class tags. The tags values are
25 * constructed using the SNACC representation for tags without the
26 * primitive/constructed bit. This is done because several bit, octet and
27 * character string types can be encoded as primitives or as constructed types
28 * to chunk the value out.
29 * <p>
30 * These tags can have one of the following values:
31 * <p>
32 * <table border=1 cellspacing=1 width=60% >
33 * <tr><th>Id</th><th>Usage</th></tr>
34 * <tr><td>[UNIVERSAL 0]</td> <td>reserved for BER</td></tr>
35 * <tr><td>[UNIVERSAL 1]</td> <td>BOOLEAN</td></tr>
36 * <tr><td>[UNIVERSAL 2]</td> <td>INTEGER</td></tr>
37 * <tr><td>[UNIVERSAL 3]</td> <td>BIT STRING</td></tr>
38 * <tr><td>[UNIVERSAL 4]</td> <td>OCTET STRING</td></tr>
39 * <tr><td>[UNIVERSAL 5]</td> <td>NULL</td></tr>
40 * <tr><td>[UNIVERSAL 6]</td> <td>OBJECT IDENTIFIER</td></tr>
41 * <tr><td>[UNIVERSAL 7]</td> <td>ObjectDescriptor</td></tr>
42 * <tr><td>[UNIVERSAL 8]</td> <td>EXTERNAL, INSTANCE OF</td></tr>
43 * <tr><td>[UNIVERSAL 9]</td> <td>REAL</td></tr>
44 * <tr><td>[UNIVERSAL 10]</td> <td>ENUMERATED</td></tr>
45 * <tr><td>[UNIVERSAL 11]</td> <td>EMBEDDED PDV</td></tr>
46 * <tr><td>[UNIVERSAL 12]</td> <td>UTF8String</td></tr>
47 * <tr><td>[UNIVERSAL 13]</td> <td>RELATIVE-OID</td></tr>
48 * <tr><td>[UNIVERSAL 14]</td> <td>reserved for future use</td></tr>
49 * <tr><td>[UNIVERSAL 15]</td> <td>reserved for future use</td></tr>
50 * <tr><td>[UNIVERSAL 16]</td> <td>SEQUENCE, SEQUENCE OF</td></tr>
51 * <tr><td>[UNIVERSAL 17]</td> <td>SET, SET OF</td></tr>
52 * <tr><td>[UNIVERSAL 18]</td> <td>NumericString</td></tr>
53 * <tr><td>[UNIVERSAL 19]</td> <td>PrintableString</td></tr>
54 * <tr><td>[UNIVERSAL 20]</td> <td>TeletexString, T61String</td></tr>
55 * <tr><td>[UNIVERSAL 21]</td> <td>VideotexString</td></tr>
56 * <tr><td>[UNIVERSAL 22]</td> <td>IA5String</td></tr>
57 * <tr><td>[UNIVERSAL 23]</td> <td>UTCTime</td></tr>
58 * <tr><td>[UNIVERSAL 24]</td> <td>GeneralizedTime</td></tr>
59 * <tr><td>[UNIVERSAL 25]</td> <td>GraphicString</td></tr>
60 * <tr><td>[UNIVERSAL 26]</td> <td>VisibleString, ISO646String</td></tr>
61 * <tr><td>[UNIVERSAL 27]</td> <td>GeneralString</td></tr>
62 * <tr><td>[UNIVERSAL 28]</td> <td>UniversalString</td></tr>
63 * <tr><td>[UNIVERSAL 29]</td> <td>CHARACTER STRING</td></tr>
64 * <tr><td>[UNIVERSAL 30]</td> <td>BMPString</td></tr>
65 * <tr><td>[UNIVERSAL 31]</td> <td>reserved for future use</td></tr>
66 * </table>
67 *
68 * @author <a href="mailto:dev@directory.apache.org">
69 * Apache Directory Project</a>
70 * @version $Rev: 289141 $
71 */
72 public class UniversalTag extends TagEnum
73 {
74 /*** value for the tag */
75 private static final int RESERVED0_VAL = 0x00000000 ;
76 /*** value for the tag */
77 private static final int BOOLEAN_VAL = 0x01000000 ;
78 /*** value for the tag */
79 private static final int INTEGER_VAL = 0x02000000 ;
80 /*** value for the tag */
81 private static final int BIT_STRING_VAL = 0x03000000 ;
82 /*** value for the tag */
83 private static final int OCTET_STRING_VAL = 0x04000000 ;
84 /*** value for the tag */
85 private static final int NULL_VAL = 0x05000000 ;
86 /*** value for the tag */
87 private static final int OBJECT_IDENTIFIER_VAL = 0x06000000 ;
88 /*** value for the tag */
89 private static final int OBJECT_DESCRIPTOR_VAL = 0x07000000 ;
90 /*** value for the tag */
91 private static final int EXTERNAL_INSTANCE_OF_VAL = 0x08000000 ;
92 /*** value for the tag */
93 private static final int REAL_VAL = 0x09000000 ;
94 /*** value for the tag */
95 private static final int ENUMERATED_VAL = 0x0a000000 ;
96 /*** value for the tag */
97 private static final int EMBEDDED_PDV_VAL = 0x0b000000 ;
98 /*** value for the tag */
99 private static final int UTF8_STRING_VAL = 0x0c000000 ;
100 /*** value for the tag */
101 private static final int RELATIVE_OID_VAL = 0x0d000000 ;
102 /*** value for the tag */
103 private static final int RESERVED14_VAL = 0x0e000000 ;
104 /*** value for the tag */
105 private static final int RESERVED15_VAL = 0x0f000000 ;
106 /*** value for the tag */
107 private static final int SEQUENCE_SEQUENCE_OF_VAL = 0x10000000 ;
108 /*** value for the tag */
109 private static final int SET_SET_OF_VAL = 0x11000000 ;
110 /*** value for the tag */
111 private static final int NUMERIC_STRING_VAL = 0x12000000 ;
112 /*** value for the tag */
113 private static final int PRINTABLE_STRING_VAL = 0x13000000 ;
114 /*** value for the tag */
115 private static final int TELETEX_STRING_VAL = 0x14000000 ;
116 /*** value for the tag */
117 private static final int VIDEOTEX_STRING_VAL = 0x15000000 ;
118 /*** value for the tag */
119 private static final int IA5_STRING_VAL = 0x16000000 ;
120 /*** value for the tag */
121 private static final int UTC_TIME_VAL = 0x17000000 ;
122 /*** value for the tag */
123 private static final int GENERALIZED_TIME_VAL = 0x18000000 ;
124 /*** value for the tag */
125 private static final int GRAPHIC_STRING_VAL = 0x19000000 ;
126 /*** value for the tag */
127 private static final int VISIBLE_STRING_VAL = 0x1a000000 ;
128 /*** value for the tag */
129 private static final int GENERAL_STRING_VAL = 0x1b000000 ;
130 /*** value for the tag */
131 private static final int UNIVERSAL_STRING_VAL = 0x1c000000 ;
132 /*** value for the tag */
133 private static final int CHARACTER_STRING_VAL = 0x1d000000 ;
134 /*** value for the tag */
135 private static final int BMP_STRING_VAL = 0x1e000000 ;
136 /*** value for the tag */
137 private static final int RESERVED31_VAL = 0x1f000000 ;
138
139 /*** value for the tag */
140 private static final int RESERVED0_ID = 0 ;
141 /*** value for the tag */
142 private static final int BOOLEAN_ID = 1 ;
143 /*** value for the tag */
144 private static final int INTEGER_ID = 2 ;
145 /*** value for the tag */
146 private static final int BIT_STRING_ID = 3 ;
147 /*** value for the tag */
148 private static final int OCTET_STRING_ID = 4 ;
149 /*** value for the tag */
150 private static final int NULL_ID = 5 ;
151 /*** value for the tag */
152 private static final int OBJECT_IDENTIFIER_ID = 6 ;
153 /*** value for the tag */
154 private static final int OBJECT_DESCRIPTOR_ID = 7 ;
155 /*** value for the tag */
156 private static final int EXTERNAL_INSTANCE_OF_ID = 8 ;
157 /*** value for the tag */
158 private static final int REAL_ID = 9 ;
159 /*** value for the tag */
160 private static final int ENUMERATED_ID = 10 ;
161 /*** value for the tag */
162 private static final int EMBEDDED_PDV_ID = 11 ;
163 /*** value for the tag */
164 private static final int UTF8_STRING_ID = 12 ;
165 /*** value for the tag */
166 private static final int RELATIVE_OID_ID = 13 ;
167 /*** value for the tag */
168 private static final int RESERVED14_ID = 14 ;
169 /*** value for the tag */
170 private static final int RESERVED15_ID = 15 ;
171 /*** value for the tag */
172 private static final int SEQUENCE_SEQUENCE_OF_ID = 16 ;
173 /*** value for the tag */
174 private static final int SET_SET_OF_ID = 17 ;
175 /*** value for the tag */
176 private static final int NUMERIC_STRING_ID = 18 ;
177 /*** value for the tag */
178 private static final int PRINTABLE_STRING_ID = 19 ;
179 /*** value for the tag */
180 private static final int TELETEX_STRING_ID = 20 ;
181 /*** value for the tag */
182 private static final int VIDEOTEX_STRING_ID = 21 ;
183 /*** value for the tag */
184 private static final int IA5_STRING_ID = 22 ;
185 /*** value for the tag */
186 private static final int UTC_TIME_ID = 23 ;
187 /*** value for the tag */
188 private static final int GENERALIZED_TIME_ID = 24 ;
189 /*** value for the tag */
190 private static final int GRAPHIC_STRING_ID = 25 ;
191 /*** value for the tag */
192 private static final int VISIBLE_STRING_ID = 26 ;
193 /*** value for the tag */
194 private static final int GENERAL_STRING_ID = 27 ;
195 /*** value for the tag */
196 private static final int UNIVERSAL_STRING_ID = 28 ;
197 /*** value for the tag */
198 private static final int CHARACTER_STRING_ID = 29 ;
199 /*** value for the tag */
200 private static final int BMP_STRING_ID = 30 ;
201 /*** value for the tag */
202 private static final int RESERVED31_ID = 31 ;
203
204 /*** enum for the tag */
205 public static final UniversalTag BOOLEAN =
206 new UniversalTag( "BOOLEAN", BOOLEAN_VAL, BOOLEAN_ID ) ;
207 /*** enum for the tag */
208 public static final UniversalTag RESERVED0 =
209 new UniversalTag( "RESERVED0", RESERVED0_VAL, RESERVED0_ID ) ;
210 /*** enum for the tag */
211 public static final UniversalTag INTEGER =
212 new UniversalTag( "INTEGER", INTEGER_VAL, INTEGER_ID ) ;
213 /*** enum for the tag */
214 public static final UniversalTag BIT_STRING =
215 new UniversalTag( "BIT_STRING", BIT_STRING_VAL, BIT_STRING_ID ) ;
216 /*** enum for the tag */
217 public static final UniversalTag OCTET_STRING =
218 new UniversalTag( "OCTET_STRING", OCTET_STRING_VAL, OCTET_STRING_ID ) ;
219 /*** enum for the tag */
220 public static final UniversalTag NULL =
221 new UniversalTag( "NULL", NULL_VAL, NULL_ID ) ;
222 /*** enum for the tag */
223 public static final UniversalTag OBJECT_IDENTIFIER =
224 new UniversalTag( "OBJECT_IDENTIFIER", OBJECT_IDENTIFIER_VAL,
225 OBJECT_IDENTIFIER_ID ) ;
226 /*** enum for the tag */
227 public static final UniversalTag OBJECT_DESCRIPTOR =
228 new UniversalTag( "OBJECT_DESCRIPTOR", OBJECT_DESCRIPTOR_VAL,
229 OBJECT_DESCRIPTOR_ID ) ;
230 /*** enum for the tag */
231 public static final UniversalTag EXTERNAL_INSTANCE_OF =
232 new UniversalTag( "EXTERNAL_INSTANCE_OF", EXTERNAL_INSTANCE_OF_VAL,
233 EXTERNAL_INSTANCE_OF_ID ) ;
234 /*** enum for the tag */
235 public static final UniversalTag REAL =
236 new UniversalTag( "REAL", REAL_VAL, REAL_ID ) ;
237 /*** enum for the tag */
238 public static final UniversalTag ENUMERATED =
239 new UniversalTag( "ENUMERATED", ENUMERATED_VAL, ENUMERATED_ID ) ;
240 /*** enum for the tag */
241 public static final UniversalTag EMBEDDED_PDV =
242 new UniversalTag( "EMBEDDED_PDV", EMBEDDED_PDV_VAL, EMBEDDED_PDV_ID ) ;
243 /*** enum for the tag */
244 public static final UniversalTag UTF8_STRING =
245 new UniversalTag( "UTF8_STRING", UTF8_STRING_VAL, UTF8_STRING_ID ) ;
246 /*** enum for the tag */
247 public static final UniversalTag RELATIVE_OID =
248 new UniversalTag( "RELATIVE_OID", RELATIVE_OID_VAL, RELATIVE_OID_ID ) ;
249 /*** enum for the tag */
250 public static final UniversalTag RESERVED14 =
251 new UniversalTag( "RESERVED14", RESERVED14_VAL, RESERVED14_ID ) ;
252 /*** enum for the tag */
253 public static final UniversalTag RESERVED15 =
254 new UniversalTag( "RESERVED15", RESERVED15_VAL, RESERVED15_ID ) ;
255 /*** enum for the tag */
256 public static final UniversalTag SEQUENCE_SEQUENCE_OF =
257 new UniversalTag( "SEQUENCE_SEQUENCE_OF", SEQUENCE_SEQUENCE_OF_VAL,
258 SEQUENCE_SEQUENCE_OF_ID ) ;
259 /*** enum for the tag */
260 public static final UniversalTag SET_SET_OF =
261 new UniversalTag( "SET_SET_OF", SET_SET_OF_VAL, SET_SET_OF_ID ) ;
262 /*** enum for the tag */
263 public static final UniversalTag NUMERIC_STRING =
264 new UniversalTag( "NUMERIC_STRING", NUMERIC_STRING_VAL,
265 NUMERIC_STRING_ID ) ;
266 /*** enum for the tag */
267 public static final UniversalTag PRINTABLE_STRING =
268 new UniversalTag( "PRINTABLE_STRING", PRINTABLE_STRING_VAL,
269 PRINTABLE_STRING_ID ) ;
270 /*** enum for the tag */
271 public static final UniversalTag TELETEX_STRING =
272 new UniversalTag( "TELETEX_STRING", TELETEX_STRING_VAL,
273 TELETEX_STRING_ID ) ;
274 /*** enum for the tag */
275 public static final UniversalTag VIDEOTEX_STRING =
276 new UniversalTag( "VIDEOTEX_STRING", VIDEOTEX_STRING_VAL,
277 VIDEOTEX_STRING_ID ) ;
278 /*** enum for the tag */
279 public static final UniversalTag IA5_STRING =
280 new UniversalTag( "IA5_STRING", IA5_STRING_VAL, IA5_STRING_ID ) ;
281 /*** enum for the tag */
282 public static final UniversalTag UTC_TIME =
283 new UniversalTag( "UTC_TIME", UTC_TIME_VAL, UTC_TIME_ID ) ;
284 /*** enum for the tag */
285 public static final UniversalTag GENERALIZED_TIME =
286 new UniversalTag( "GENERALIZED_TIME", GENERALIZED_TIME_VAL,
287 GENERALIZED_TIME_ID ) ;
288 /*** enum for the tag */
289 public static final UniversalTag GRAPHIC_STRING =
290 new UniversalTag( "GRAPHIC_STRING", GRAPHIC_STRING_VAL,
291 GRAPHIC_STRING_ID ) ;
292 /*** enum for the tag */
293 public static final UniversalTag VISIBLE_STRING =
294 new UniversalTag( "VISIBLE_STRING", VISIBLE_STRING_VAL,
295 VISIBLE_STRING_ID ) ;
296 /*** enum for the tag */
297 public static final UniversalTag GENERAL_STRING =
298 new UniversalTag( "GENERAL_STRING", GENERAL_STRING_VAL,
299 GENERAL_STRING_ID ) ;
300 /*** enum for the tag */
301 public static final UniversalTag UNIVERSAL_STRING =
302 new UniversalTag( "UNIVERSAL_STRING", UNIVERSAL_STRING_VAL,
303 UNIVERSAL_STRING_ID ) ;
304 /*** enum for the tag */
305 public static final UniversalTag CHARACTER_STRING =
306 new UniversalTag( "CHARACTER_STRING", CHARACTER_STRING_VAL,
307 CHARACTER_STRING_ID ) ;
308 /*** enum for the tag */
309 public static final UniversalTag BMP_STRING =
310 new UniversalTag( "BMP_STRING", BMP_STRING_VAL, BMP_STRING_ID ) ;
311 /*** enum for the tag */
312 public static final UniversalTag RESERVED31 =
313 new UniversalTag( "RESERVED31", RESERVED31_VAL, RESERVED31_ID ) ;
314
315
316
317
318
319
320
321 /***
322 * Private constructor so no other instances can be created other than the
323 * public static constants in this class.
324 *
325 * @param name a string name for the enumeration value.
326 * @param value the integer value of the enumeration.
327 */
328 private UniversalTag( final String name, final int value, final int id )
329 {
330 super( name, value, id ) ;
331 }
332
333
334
335
336
337
338
339 /***
340 * Gets the ASN.1 UNIVERSAL type tag's enum using a tag value.
341 *
342 * @param value the first octet of the TLV
343 * @return the valued enum for the ASN.1 UNIVERSAL type tag
344 */
345 public static UniversalTag getUniversalTag( int value )
346 {
347 UniversalTag type = null ;
348 value &= 0xdfffffff ;
349
350 switch ( value )
351 {
352 case( RESERVED0_VAL ):
353 type = RESERVED0 ;
354 break ;
355 case( BOOLEAN_VAL ):
356 type = BOOLEAN ;
357 break ;
358 case( INTEGER_VAL ):
359 type = INTEGER ;
360 break ;
361 case( BIT_STRING_VAL ):
362 type = BIT_STRING ;
363 break ;
364 case( OCTET_STRING_VAL ):
365 type = OCTET_STRING ;
366 break ;
367 case( NULL_VAL ):
368 type = NULL ;
369 break ;
370 case( OBJECT_IDENTIFIER_VAL ):
371 type = OBJECT_IDENTIFIER ;
372 break ;
373 case( OBJECT_DESCRIPTOR_VAL ):
374 type = OBJECT_DESCRIPTOR ;
375 break ;
376 case( EXTERNAL_INSTANCE_OF_VAL ):
377 type = EXTERNAL_INSTANCE_OF ;
378 break ;
379 case( REAL_VAL ):
380 type = REAL ;
381 break ;
382 case( ENUMERATED_VAL ):
383 type = ENUMERATED ;
384 break ;
385 case( EMBEDDED_PDV_VAL ):
386 type = EMBEDDED_PDV ;
387 break ;
388 case( UTF8_STRING_VAL ):
389 type = UTF8_STRING ;
390 break ;
391 case( RELATIVE_OID_VAL ):
392 type = RELATIVE_OID ;
393 break ;
394 case( RESERVED14_VAL ):
395 type = RESERVED14 ;
396 break ;
397 case( RESERVED15_VAL ):
398 type = RESERVED15 ;
399 break ;
400 case( SEQUENCE_SEQUENCE_OF_VAL ):
401 type = SEQUENCE_SEQUENCE_OF ;
402 break ;
403 case( SET_SET_OF_VAL ):
404 type = SET_SET_OF ;
405 break ;
406 case( NUMERIC_STRING_VAL ):
407 type = NUMERIC_STRING ;
408 break ;
409 case( PRINTABLE_STRING_VAL ):
410 type = PRINTABLE_STRING ;
411 break ;
412 case( TELETEX_STRING_VAL ):
413 type = TELETEX_STRING ;
414 break ;
415 case( VIDEOTEX_STRING_VAL ):
416 type = VIDEOTEX_STRING ;
417 break ;
418 case( IA5_STRING_VAL ):
419 type = IA5_STRING ;
420 break ;
421 case( UTC_TIME_VAL ):
422 type = UTC_TIME ;
423 break ;
424 case( GENERALIZED_TIME_VAL ):
425 type = GENERALIZED_TIME ;
426 break ;
427 case( GRAPHIC_STRING_VAL ):
428 type = GRAPHIC_STRING ;
429 break ;
430 case( VISIBLE_STRING_VAL ):
431 type = VISIBLE_STRING ;
432 break ;
433 case( GENERAL_STRING_VAL ):
434 type = GENERAL_STRING ;
435 break ;
436 case( UNIVERSAL_STRING_VAL ):
437 type = UNIVERSAL_STRING ;
438 break ;
439 case( CHARACTER_STRING_VAL ):
440 type = CHARACTER_STRING ;
441 break ;
442 case( BMP_STRING_VAL ):
443 type = BMP_STRING ;
444 break ;
445 case( RESERVED31_VAL ):
446 type = RESERVED31 ;
447 break ;
448 default:
449 String msg ;
450 if ( value < 31 && value > -1 )
451 {
452 msg = "Looks like you're using an id instead of a tag" ;
453 }
454 else
455 {
456 msg = "Tag value of " + value + " not recognized" ;
457 }
458
459 throw new IllegalArgumentException( msg ) ;
460 }
461
462 return type ;
463 }
464
465
466 /***
467 * Gets the ASN.1 UNIVERSAL type tag's enum using a tag value.
468 *
469 * @param id the first octet of the TLV
470 * @return the valued enum for the ASN.1 UNIVERSAL type tag
471 */
472 public static UniversalTag getUniversalTagById( int id )
473 {
474 UniversalTag type = null ;
475
476 switch ( id )
477 {
478 case( RESERVED0_ID ):
479 type = RESERVED0 ;
480 break ;
481 case( BOOLEAN_ID ):
482 type = BOOLEAN ;
483 break ;
484 case( INTEGER_ID ):
485 type = INTEGER ;
486 break ;
487 case( BIT_STRING_ID ):
488 type = BIT_STRING ;
489 break ;
490 case( OCTET_STRING_ID ):
491 type = OCTET_STRING ;
492 break ;
493 case( NULL_ID ):
494 type = NULL ;
495 break ;
496 case( OBJECT_IDENTIFIER_ID ):
497 type = OBJECT_IDENTIFIER ;
498 break ;
499 case( OBJECT_DESCRIPTOR_ID ):
500 type = OBJECT_DESCRIPTOR ;
501 break ;
502 case( EXTERNAL_INSTANCE_OF_ID ):
503 type = EXTERNAL_INSTANCE_OF ;
504 break ;
505 case( REAL_ID ):
506 type = REAL ;
507 break ;
508 case( ENUMERATED_ID ):
509 type = ENUMERATED ;
510 break ;
511 case( EMBEDDED_PDV_ID ):
512 type = EMBEDDED_PDV ;
513 break ;
514 case( UTF8_STRING_ID ):
515 type = UTF8_STRING ;
516 break ;
517 case( RELATIVE_OID_ID ):
518 type = RELATIVE_OID ;
519 break ;
520 case( RESERVED14_ID ):
521 type = RESERVED14 ;
522 break ;
523 case( RESERVED15_ID ):
524 type = RESERVED15 ;
525 break ;
526 case( SEQUENCE_SEQUENCE_OF_ID ):
527 type = SEQUENCE_SEQUENCE_OF ;
528 break ;
529 case( SET_SET_OF_ID ):
530 type = SET_SET_OF ;
531 break ;
532 case( NUMERIC_STRING_ID ):
533 type = NUMERIC_STRING ;
534 break ;
535 case( PRINTABLE_STRING_ID ):
536 type = PRINTABLE_STRING ;
537 break ;
538 case( TELETEX_STRING_ID ):
539 type = TELETEX_STRING ;
540 break ;
541 case( VIDEOTEX_STRING_ID ):
542 type = VIDEOTEX_STRING ;
543 break ;
544 case( IA5_STRING_ID ):
545 type = IA5_STRING ;
546 break ;
547 case( UTC_TIME_ID ):
548 type = UTC_TIME ;
549 break ;
550 case( GENERALIZED_TIME_ID ):
551 type = GENERALIZED_TIME ;
552 break ;
553 case( GRAPHIC_STRING_ID ):
554 type = GRAPHIC_STRING ;
555 break ;
556 case( VISIBLE_STRING_ID ):
557 type = VISIBLE_STRING ;
558 break ;
559 case( GENERAL_STRING_ID ):
560 type = GENERAL_STRING ;
561 break ;
562 case( UNIVERSAL_STRING_ID ):
563 type = UNIVERSAL_STRING ;
564 break ;
565 case( CHARACTER_STRING_ID ):
566 type = CHARACTER_STRING ;
567 break ;
568 case( BMP_STRING_ID ):
569 type = BMP_STRING ;
570 break ;
571 case( RESERVED31_ID ):
572 type = RESERVED31 ;
573 break ;
574 default:
575 String msg ;
576 if ( id > 31 || id < 0 )
577 {
578 msg = "Looks like you're using a tag instead of an id" ;
579 }
580 else
581 {
582 msg = "Id of " + id + " not recognized as a universal id" ;
583 }
584
585 throw new IllegalArgumentException( msg ) ;
586 }
587
588 return type ;
589 }
590 }