This repository has been archived by the owner on Oct 30, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 173
/
SelectionJsonHandler.java
76 lines (68 loc) · 3.16 KB
/
SelectionJsonHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
* This software is licensed to you under the Apache License, Version 2.0 (the
* "Apache License").
*
* LinkedIn's contributions are made under the Apache License. If you contribute
* to the Software, the contributions will be deemed to have been made under the
* Apache License, unless you expressly indicate otherwise. Please do not make any
* contributions that would be inconsistent with the Apache License.
*
* You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, this software
* distributed under the Apache License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache
* License for the specific language governing permissions and limitations for the
* software governed under the Apache License.
*
* © 2012 LinkedIn Corp. All Rights Reserved.
*/
package com.senseidb.search.client.req;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.senseidb.search.client.json.JsonDeserializer;
import com.senseidb.search.client.json.JsonHandler;
import com.senseidb.search.client.json.JsonSerializer;
public class SelectionJsonHandler implements JsonHandler<Selection> {
public static Map<String, Class<? extends Selection>> selectionClasses = new HashMap<String, Class<? extends Selection>>();
static {
for (Class<? extends Selection> cls : Arrays.asList(Term.class, Terms.class, Path.class, Range.class, Selection.Custom.class)) {
selectionClasses.put(cls.getSimpleName().toLowerCase(), cls);
}
}
@Override
public JSONObject serialize(Selection bean) throws JSONException {
if (bean == null) {
return null;
}
if (bean instanceof Selection.Custom) {
JSONObject ret = new JSONObject();
ret.put("custom", ((Selection.Custom)bean).getCustom());
return ret;
}
JSONObject innerObject = (JSONObject) JsonSerializer.serialize(bean, false);
JSONObject paramContainer = new JSONObject();
paramContainer.put(bean.getField(), innerObject);
JSONObject ret = new JSONObject();
ret.put(bean.getClass().getSimpleName().toLowerCase(), paramContainer);
return ret;
}
@Override
public Selection deserialize(JSONObject json) throws JSONException{
String[] names = JSONObject.getNames(json);
if (names.length == 0 || !selectionClasses.keySet().contains(names[0])) {
throw new IllegalStateException("The json object doesn't contain the value from " + Arrays.toString(names));
}
String name = names[0];
JSONObject innerPart = json.getJSONObject(name);
if ("custom".equals(name)) {
return Selection.custom(innerPart);
}
String fieldName = JSONObject.getNames(innerPart)[0];
Selection selection = JsonDeserializer.deserialize(selectionClasses.get(name), innerPart.getJSONObject(fieldName), false);
selection.setField(fieldName);
return selection;
}
}