SECARSP-268 +Implement device policies state request mechanism
[platform/core/security/suspicious-activity-monitor.git] / server / samserver / src / main / java / com / samsung / samserver / web / rest / service / vm / DPolicy.java
1 package com.samsung.samserver.web.rest.service.vm;
2
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;
12 import org.json.*;
13 import lombok.*;
14
15 import javax.validation.constraints.NotNull;
16 import java.io.IOException;
17 import java.util.*;
18
19 public interface DPolicy {
20
21     String getName();
22
23     @Getter @Setter @ToString
24     class DPolicyInteger implements DPolicy {
25         @NotNull
26         private String name;
27         @NotNull
28         private Integer value;
29         private Integer error;
30     }
31
32     @Getter @Setter @ToString
33     class DPolicyIndexed implements DPolicy {
34         @NotNull
35         private String name;
36         @NotNull
37         private String key;
38         @NotNull
39         private Integer value;
40         private Integer error;
41     }
42
43     class DPoliciesDeserializer extends StdDeserializer {
44
45         private final transient Logger log = LoggerFactory.getLogger(DPoliciesDeserializer.class);
46
47         public DPoliciesDeserializer(){
48             this(null);
49         }
50
51         public DPoliciesDeserializer(Class<?> c){
52             super(c);
53         }
54
55         @Autowired
56         private transient PolicyTypeService policyTypeService;
57
58         @Override
59         public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
60             ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec();
61             JsonNode root = jsonParser.getCodec().readTree(jsonParser);
62             List<DPolicy> policies = new ArrayList<>();
63             try {
64                 Map<String, PolicyType> policyTypeMap = policyTypeService.findAllAsMap();
65                 JSONArray ja = new JSONArray(root.toString());
66                 for (int i = 0; i < ja.length(); i++) {
67                     JSONObject jo = ja.getJSONObject(i);
68                     String key = jo.get("name").toString();
69                     String mapping = policyTypeMap.get(key).getMapping();
70                     DPolicy dPolicyProp = null;
71                     switch (mapping) {
72                         case "integer":
73                             dPolicyProp = mapper.readValue(jo.toString(), new TypeReference<DPolicyInteger>(){});
74                             break;
75                         case "indexed":
76                             dPolicyProp = mapper.readValue(jo.toString(), new TypeReference<DPolicyIndexed>(){});
77                             break;
78                         default:
79                             log.debug("deserialize: {}","mapping not found");
80                     }
81                     policies.add(dPolicyProp);
82                 }
83             } catch (JSONException e) {
84                 log.error("deserialize: message: {} stacktrace: {}", e.getMessage(), e.getStackTrace());
85             }
86             return policies;
87         }
88     }
89
90 }