|
28 | 28 |
|
29 | 29 | package com.redislabs.modules.rejson; |
30 | 30 |
|
| 31 | +import java.util.Objects; |
| 32 | + |
31 | 33 | /** |
32 | 34 | * Path is a ReJSON path, representing a valid path into an object |
33 | 35 | */ |
@@ -77,94 +79,86 @@ public int hashCode() { |
77 | 79 | return strPath.hashCode(); |
78 | 80 | } |
79 | 81 |
|
80 | | - private static String escape(String path) { |
81 | | - StringBuilder builder = new StringBuilder(); |
82 | | - builder.append('"'); |
83 | | - builder.append(path); |
84 | | - builder.append('"'); |
85 | | - return builder.toString(); |
86 | | - } |
87 | | - |
88 | 82 | private static String parse(String path) { |
89 | | - if (path == null) { |
90 | | - throw new NullPointerException("Json Pointer Path cannot be null."); |
91 | | - } |
| 83 | + Objects.requireNonNull(path, "Json Pointer Path cannot be null."); |
| 84 | + |
92 | 85 | if (path.isEmpty()) { |
93 | | - // ”“ means all document |
| 86 | + // "" means all document |
94 | 87 | return ROOT_PATH.toString(); |
95 | 88 | } |
96 | 89 | if (path.charAt(0) != '/') { |
97 | 90 | throw new IllegalArgumentException("Json Pointer Path must start with '/'."); |
98 | 91 | } |
99 | | - char[] ary = path.toCharArray(); |
100 | | - StringBuilder r = new StringBuilder(ary.length); |
| 92 | + |
| 93 | + final char[] ary = path.toCharArray(); |
| 94 | + StringBuilder result = new StringBuilder(); |
101 | 95 | StringBuilder builder = new StringBuilder(); |
102 | | - boolean num = true; |
| 96 | + boolean number = true; |
103 | 97 | char prev = '/'; |
104 | 98 | for (int i = 1; i < ary.length; i++) { |
105 | 99 | char c = ary[i]; |
106 | 100 | switch (c) { |
107 | 101 | case '~': |
108 | 102 | if (prev == '~') { |
109 | | - num = false; |
| 103 | + number = false; |
110 | 104 | builder.append('~'); |
111 | 105 | } |
112 | 106 | break; |
113 | 107 | case '/': |
114 | 108 | if (prev == '~') { |
115 | | - num = false; |
| 109 | + number = false; |
116 | 110 | builder.append('~'); |
117 | 111 | } |
118 | | - if (builder.length() > 0 && num) { |
119 | | - r.append(".[" + builder.toString() + "]"); |
| 112 | + if (builder.length() > 0 && number) { |
| 113 | + result.append(".[").append(builder).append("]"); |
120 | 114 | } else { |
121 | | - r.append(".[" + escape(builder.toString()) + "]"); |
| 115 | + result.append(".[\"").append(builder).append("\"]"); |
122 | 116 | } |
123 | | - num = true; |
| 117 | + number = true; |
124 | 118 | builder.setLength(0); |
125 | 119 | break; |
126 | 120 | case '0': |
127 | 121 | if (prev == '~') { |
128 | | - num = false; |
| 122 | + number = false; |
129 | 123 | builder.append("~"); |
130 | 124 | } else { |
131 | 125 | builder.append(c); |
132 | 126 | } |
133 | 127 | break; |
134 | 128 | case '1': |
135 | 129 | if (prev == '~') { |
136 | | - num = false; |
| 130 | + number = false; |
137 | 131 | builder.append("/"); |
138 | 132 | } else { |
139 | 133 | builder.append(c); |
140 | 134 | } |
141 | 135 | break; |
142 | 136 | default: |
143 | 137 | if (prev == '~') { |
144 | | - num = false; |
| 138 | + number = false; |
145 | 139 | builder.append('~'); |
146 | 140 | } |
147 | 141 | if (c < '0' || c > '9') { |
148 | | - num = false; |
| 142 | + number = false; |
149 | 143 | } |
150 | 144 | builder.append(c); |
151 | 145 | break; |
152 | 146 | } |
153 | 147 | prev = c; |
154 | 148 | } |
155 | 149 | if (prev == '~') { |
156 | | - num = false; |
| 150 | + number = false; |
157 | 151 | builder.append("~"); |
158 | 152 | } |
159 | 153 | if (builder.length() > 0) { |
160 | | - if (num) { |
161 | | - r.append(".[" + builder.toString() + "]"); |
| 154 | + if (number) { |
| 155 | + result.append(".[").append(builder).append("]"); |
162 | 156 | } else { |
163 | | - r.append(".[" + escape(builder.toString()) + "]"); |
| 157 | + result.append(".[\"").append(builder).append("\"]"); |
164 | 158 | } |
165 | 159 | } else if (prev == '/') { |
166 | | - r.append(".[" + escape(builder.toString()) + "]"); |
| 160 | + result.append(".[\"").append(builder).append("\"]"); |
167 | 161 | } |
168 | | - return r.toString(); |
| 162 | + return result.toString(); |
169 | 163 | } |
170 | 164 | } |
0 commit comments