src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/json/JSONPrimitive.java
branchjmx-rest-api
changeset 55985 0c5a02edfdef
child 55997 f881344569d9
equal deleted inserted replaced
55984:a43ae4e5fa0a 55985:0c5a02edfdef
       
     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 }