2 * In Samsung Ukraine R&D Center (SRK under a contract between)
3 * LLC "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
4 * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
6 package com.samsung.samserver.web.rest.service.vm;
8 import com.fasterxml.jackson.annotation.*;
9 import javax.validation.Valid;
10 import javax.validation.constraints.*;
15 import static com.samsung.samserver.web.rest.service.vm.DPolicy.*;
16 import static com.samsung.samserver.web.rest.service.vm.UIPoliciesUpdate.*;
17 import static com.samsung.samserver.web.rest.service.vm.UIPolicies.InputType.*;
20 * View Model for UI Policies.
22 * @author <A HREF="mailto:m.dalakov@samsung.com">Mykhailo Dalakov</A>
26 @Getter @Setter @ToString
27 public class UIPolicies {
34 @JsonProperty("policies")
35 private List<UIPolicy> uiPolicyList;
37 static final class InputType {
38 private InputType() {}
39 public static final String FLAG = "flag";
40 public static final String INTEGER = "input-number";
41 public static final String FLAG_SET = "select";
42 public static final String MULT_CHOICE = "multiselect";
45 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", visible = true)
47 @JsonSubTypes.Type(value = Flag.class, name = FLAG),
48 @JsonSubTypes.Type(value = UIInteger.class, name = INTEGER),
49 @JsonSubTypes.Type(value = FlagSet.class, name = FLAG_SET),
50 @JsonSubTypes.Type(value = MultChoice.class, name = MULT_CHOICE)
52 public interface UIPolicy {
55 String toJSONDevice();
56 String toJSONDeviceWithoutValue();
58 UIPolicy bind(DPolicy dPolicy, HashMap<String, UIPolicy> map);
59 UIPolicy bind(UIPolicyUpdate uiPolicyUpdate);
63 void setUiname(String type);
64 void setDescr(String descr);
66 Logger log = LoggerFactory.getLogger(UIPolicy.class);
68 static UIPolicy make(String uiType) {
69 UIPolicy uiPolicy = null;
72 uiPolicy = new Flag();
75 uiPolicy = new UIInteger();
78 uiPolicy = new FlagSet();
81 uiPolicy = new MultChoice();
84 log.debug("policy: {}","mapping not found");
90 public static final String NAME = "\"name\":\"";
91 public static final String VALUE = "\"value\":";
94 @Getter @Setter @ToString
95 public static class Flag implements UIPolicy {
102 private Integer value;
104 private String uiname;
106 private String descr;
108 private Integer state;
110 public UIPolicy bind(DPolicy dPolicy, HashMap<String, UIPolicy> map){
111 DPolicyInteger dPolicyInteger = (DPolicyInteger)dPolicy;
112 name = dPolicyInteger.getName() ;
113 value = dPolicyInteger.getValue();
114 state = (dPolicyInteger.getError()!=null) ? 0:1;
119 public UIPolicy bind(UIPolicyUpdate update){
120 FlagUpdate flagUpdate = (FlagUpdate)update;
121 name = flagUpdate.getName() ;
122 value = flagUpdate.getValue();
126 public String toJSONDevice() {
128 NAME + name + "\"," +
133 public String toJSONDeviceWithoutValue() {
140 @JsonRootName(INTEGER)
141 @Getter @Setter @ToString
142 public static class UIInteger implements UIPolicy {
148 private Integer value;
150 private String uiname;
152 private String descr;
154 private Integer state;
156 public UIInteger bind(DPolicy dPolicy, HashMap<String, UIPolicy> map){
157 DPolicyInteger dPolicyInteger = (DPolicyInteger)dPolicy;
158 name = dPolicyInteger.getName() ;
159 value = dPolicyInteger.getValue();
160 state = (dPolicyInteger.getError()!=null) ? 0:1;
165 public UIPolicy bind(UIPolicyUpdate update){
166 UIIntegerUpdate uiIntegerUpdate = (UIIntegerUpdate)update;
167 name = uiIntegerUpdate.getName() ;
168 value = uiIntegerUpdate.getValue();
172 public String toJSONDevice() {
174 NAME + name + "\"," +
179 public String toJSONDeviceWithoutValue() {
186 @JsonRootName(FLAG_SET)
187 @Getter @Setter @ToString
188 public static class FlagSet implements UIPolicy {
190 @Getter @Setter @ToString
191 @NoArgsConstructor @AllArgsConstructor
192 public static class FlagSetObject {
205 private List<FlagSetObject> items;
207 private String uiname;
209 private String descr;
211 private Integer state;
214 public FlagSet bind(DPolicy dPolicy, HashMap<String, UIPolicy> map){
215 DPolicyIndexed dPolicyIndexed = (DPolicyIndexed)dPolicy;
216 name = dPolicyIndexed.getName();
217 state = (dPolicyIndexed.getError()!=null) ? 0:1;
220 UIPolicy entry = map.get(name);
222 items = ((FlagSet)entry).getItems();
224 items = new ArrayList<>();
227 items.add(new FlagSetObject(
228 dPolicyIndexed.getKey(), dPolicyIndexed.getValue())
233 public UIPolicy bind(UIPolicyUpdate update){
234 FlagSetUpdate flagSetUpdate = (FlagSetUpdate)update;
235 name = flagSetUpdate.getName() ;
236 items = flagSetUpdate.getItems();
240 public String toJSONDevice() {
242 int size = items.size();
243 StringBuilder s = new StringBuilder();
244 for (FlagSetObject fso: items) {
246 .append(NAME).append(name).append("\",")
247 .append("\"key\":\"").append(fso.getKey()).append("\",")
248 .append(VALUE).append(fso.getValue()).append("}");
250 if (c!=size) s.append(",");
255 public String toJSONDeviceWithoutValue() {
257 int size = items.size();
258 StringBuilder s = new StringBuilder();
259 for (FlagSetObject fso: items) {
261 .append(NAME).append(name).append("\",")
262 .append("\"key\":\"").append(fso.getKey()).append("\"")
265 if (c!=size) s.append(",");
271 @JsonRootName(MULT_CHOICE)
272 @Getter @Setter @ToString
273 public static class MultChoice implements UIPolicy {
275 static final List<String> STRINGS = new ArrayList<>(Arrays.asList(
276 "SIMPLE_PASSWORD","","","","SOMETHING","NUMERIC","ALPHABETIC","ALPHANUMERIC"));
278 @Getter @Setter @ToString
279 @NoArgsConstructor @AllArgsConstructor
280 public static class MultChoiceObject {
292 private List<MultChoiceObject> items;
294 private String uiname;
296 private String descr;
298 private Integer state;
301 public MultChoice bind(DPolicy dPolicy, HashMap<String, UIPolicy> map){
302 DPolicyInteger dPolicyInteger = (DPolicyInteger)dPolicy;
303 name = dPolicyInteger.getName();
304 state = (dPolicyInteger.getError()!=null) ? 0:1;
306 items = new ArrayList<>();
307 int value = dPolicyInteger.getValue();
308 for (int i=0; i<8; i++) {
309 items.add(new MultChoiceObject(
310 STRINGS.get(i), value & (1 << i)
316 public UIPolicy bind(UIPolicyUpdate update){
317 MultChoiceUpdate multChoiceUpdate = (MultChoiceUpdate)update;
318 name = multChoiceUpdate.getName() ;
319 items = multChoiceUpdate.getItems();
323 public String toJSONDevice() {
325 for (MultChoiceObject choice: items) {
326 if (choice.value != 0) {
327 int bit = STRINGS.indexOf(choice.key);
328 if (bit > -1) value = value + (1 << bit);
332 NAME + name + "\"," +
337 public String toJSONDeviceWithoutValue() {