src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/json/JSONPrimitive.java
author hb
Thu, 04 Jan 2018 14:39:04 +0530
branchjmx-rest-api
changeset 56006 352a4f213fc6
parent 56002 60ab3b595a8e
permissions -rw-r--r--
1. URL decoding of URL 2. MBean info availble in MBeanCollection page 3. MBeanCollection post supports objectname filtering 4. Tests now use reflection instead of Methodhndles 3. couple of bug fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
     1
/*
55997
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     4
 *
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    10
 *
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    15
 * accompanied this code).
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    16
 *
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    20
 *
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
f881344569d9 Added copyright header
hb
parents: 55985
diff changeset
    23
 * questions.
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    24
 */
56006
352a4f213fc6 1. URL decoding of URL
hb
parents: 56002
diff changeset
    25
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    26
package com.oracle.jmx.remote.rest.json;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    27
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    28
/**
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    29
 * @author harsha
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    30
 */
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    31
public class JSONPrimitive implements JSONElement {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    32
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    33
    private final Object value;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    34
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    35
    public JSONPrimitive(long i) {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    36
        value = i;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    37
    }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    38
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    39
    public JSONPrimitive(double i) {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    40
        value = i;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    41
    }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    42
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    43
    public JSONPrimitive(Boolean i) {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    44
        value = i;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    45
    }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    46
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    47
    public JSONPrimitive(String s) {
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    48
        value = s;
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    49
    }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    50
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    51
    public static String escape(String s) {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    52
        StringBuilder sb = new StringBuilder();
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    53
        for (int i = 0; i < s.length(); i++) {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    54
            char ch = s.charAt(i);
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    55
            if (ch == '\\') {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    56
                if (i < s.length() - 1 && (s.charAt(i + 1) == '\\' || s.charAt(i + 1) == '"')) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    57
                    sb.append(ch).append(s.charAt(i + 1));
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    58
                    i++;
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    59
                } else {
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    60
                    sb.append("\\\\");
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    61
                }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    62
            } else if (ch == '"') {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    63
                sb.append("\\\"");
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    64
            } else {
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    65
                sb.append(ch);
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    66
            }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    67
        }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    68
        return sb.toString();
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    69
    }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    70
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    71
    public Object getValue() {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    72
        return value;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    73
    }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    74
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    75
    @Override
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    76
    public String toJsonString() {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    77
        if (value instanceof String) {
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    78
            return "\"" + escape(value.toString()) + "\"";
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    79
        }
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    80
        return value != null ? value.toString() : null;
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
    81
    }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    82
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    83
    @Override
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    84
    public int hashCode() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    85
        if (value instanceof String) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    86
            return ((String) value).hashCode();
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    87
        } else if (value instanceof Long) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    88
            return ((Long) value).hashCode();
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    89
        } else if (value instanceof Double) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    90
            return ((Double) value).hashCode();
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    91
        } else if (value instanceof Boolean) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    92
            return ((Boolean) value).hashCode();
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    93
        } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    94
            return super.hashCode();
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    95
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    96
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    97
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    98
    @Override
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
    99
    public boolean equals(Object obj) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   100
        if (obj == this) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   101
            return true;
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   102
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   103
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   104
        if (!(obj instanceof JSONPrimitive)) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   105
            return false;
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   106
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   107
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   108
        JSONPrimitive o = (JSONPrimitive) obj;
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   109
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   110
        if (value == null && o.getValue() == null) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   111
            return true;
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   112
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   113
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   114
        if (value != null && o.getValue() != null) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   115
            if (value.getClass().equals(o.getValue().getClass())) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   116
                return value.equals(o.getValue());
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   117
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   118
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   119
        return false;
60ab3b595a8e Lot of bug fixes
hb
parents: 55997
diff changeset
   120
    }
55985
0c5a02edfdef REST Adapter Initial commit
hb
parents:
diff changeset
   121
}