|
1 /* |
|
2 * To change this license header, choose License Headers in Project Properties. |
|
3 * To change this template file, choose Tools | Templates |
|
4 * and open the template in the editor. |
|
5 */ |
|
6 package com.oracle.jmx.remote.rest.json; |
|
7 |
|
8 /** |
|
9 * @author harsha |
|
10 */ |
|
11 public class JSONPrimitive implements JSONElement { |
|
12 |
|
13 private final Object value; |
|
14 |
|
15 public JSONPrimitive(long i) { |
|
16 value = i; |
|
17 } |
|
18 |
|
19 public JSONPrimitive(double i) { |
|
20 value = i; |
|
21 } |
|
22 |
|
23 public JSONPrimitive(Boolean i) { |
|
24 value = i; |
|
25 } |
|
26 |
|
27 public JSONPrimitive(String s) { |
|
28 value = s != null ? unescape(s) : s; |
|
29 } |
|
30 |
|
31 public JSONPrimitive() { |
|
32 value = null; |
|
33 } |
|
34 |
|
35 public static String escape(String s) { |
|
36 StringBuilder sb = new StringBuilder(); |
|
37 for (int i = 0; i < s.length(); i++) { |
|
38 char ch = s.charAt(i); |
|
39 switch (ch) { |
|
40 case '\\': |
|
41 sb.append("\\\\"); |
|
42 break; |
|
43 case '\b': |
|
44 sb.append("\\b"); |
|
45 break; |
|
46 case '\f': |
|
47 sb.append("\\f"); |
|
48 break; |
|
49 case '\n': |
|
50 sb.append("\\n"); |
|
51 break; |
|
52 case '\r': |
|
53 sb.append("\\r"); |
|
54 break; |
|
55 case '\t': |
|
56 sb.append("\\t"); |
|
57 break; |
|
58 case '"': |
|
59 sb.append("\\\""); |
|
60 break; |
|
61 default: |
|
62 sb.append(s.charAt(i)); |
|
63 } |
|
64 } |
|
65 return sb.toString(); |
|
66 } |
|
67 |
|
68 public static String unescape(String s) { |
|
69 StringBuilder sb = new StringBuilder(s.length()); |
|
70 for (int i = 0; i < s.length(); ++i) { |
|
71 if (s.charAt(i) == '\\') { |
|
72 if (i + 1 < s.length() - 1) { |
|
73 ++i; |
|
74 switch (s.charAt(i)) { |
|
75 case '\\': |
|
76 sb.append('\\'); |
|
77 break; |
|
78 case '\b': |
|
79 sb.append('\b'); |
|
80 break; |
|
81 case '\f': |
|
82 sb.append('\f'); |
|
83 break; |
|
84 case '\n': |
|
85 sb.append('\n'); |
|
86 break; |
|
87 case '\r': |
|
88 sb.append('\r'); |
|
89 break; |
|
90 case '\t': |
|
91 sb.append('\t'); |
|
92 break; |
|
93 case '\"': |
|
94 sb.append('\"'); |
|
95 break; |
|
96 default: |
|
97 sb.append(s.charAt(i)); |
|
98 } |
|
99 } |
|
100 } else { |
|
101 sb.append(s.charAt(i)); |
|
102 } |
|
103 } |
|
104 return sb.toString(); |
|
105 } |
|
106 |
|
107 public Object getValue() { |
|
108 return value; |
|
109 } |
|
110 |
|
111 @Override |
|
112 public String toJsonString() { |
|
113 if (value instanceof String) { |
|
114 return "\"" + escape(value.toString()) + "\""; |
|
115 } |
|
116 return value != null ? value.toString() : null; |
|
117 } |
|
118 } |