1 package com.samsung.samserver.web.rest.service.vm;
3 import com.fasterxml.jackson.core.JsonParser;
4 import com.fasterxml.jackson.core.type.TypeReference;
5 import com.fasterxml.jackson.databind.*;
6 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
7 import com.samsung.samserver.domain.PolicyType;
8 import com.samsung.samserver.service.PolicyTypeService;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 import org.springframework.beans.factory.annotation.Autowired;
15 import javax.validation.constraints.NotNull;
16 import java.io.IOException;
19 public interface DPolicy {
23 @Getter @Setter @ToString
24 class DPolicyInteger implements DPolicy {
28 private Integer value;
31 @Getter @Setter @ToString
32 class DPolicyIndexed implements DPolicy {
38 private Integer value;
41 class DPoliciesDeserializer extends StdDeserializer {
43 private final transient Logger log = LoggerFactory.getLogger(DPoliciesDeserializer.class);
45 public DPoliciesDeserializer(){
49 public DPoliciesDeserializer(Class<?> c){
54 private transient PolicyTypeService policyTypeService;
57 public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
58 ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec();
59 JsonNode root = jsonParser.getCodec().readTree(jsonParser);
60 List<DPolicy> policies = new ArrayList<>();
62 Map<String, PolicyType> policyTypeMap = policyTypeService.findAllAsMap();
63 JSONArray ja = new JSONArray(root.toString());
64 for (int i = 0; i < ja.length(); i++) {
65 JSONObject jo = ja.getJSONObject(i);
66 String key = jo.get("name").toString();
67 String mapping = policyTypeMap.get(key).getMapping();
68 DPolicy dPolicyProp = null;
71 dPolicyProp = mapper.readValue(jo.toString(), new TypeReference<DPolicyInteger>(){});
74 dPolicyProp = mapper.readValue(jo.toString(), new TypeReference<DPolicyIndexed>(){});
77 log.debug("deserialize: {}","mapping not found");
79 policies.add(dPolicyProp);
81 } catch (JSONException e) {
82 log.error("deserialize: message: {} stacktrace: {}", e.getMessage(), e.getStackTrace());