1
2
3
4
5
6 package gov.nist.secauto.metaschema.databind.model.impl;
7
8 import gov.nist.secauto.metaschema.core.datatype.markup.MarkupLine;
9 import gov.nist.secauto.metaschema.core.datatype.markup.MarkupMultiline;
10 import gov.nist.secauto.metaschema.core.model.AbstractFieldInstance;
11 import gov.nist.secauto.metaschema.core.model.IBoundObject;
12 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
13 import gov.nist.secauto.metaschema.databind.model.IBoundDefinitionModelAssembly;
14 import gov.nist.secauto.metaschema.databind.model.IBoundDefinitionModelFieldComplex;
15 import gov.nist.secauto.metaschema.databind.model.IBoundInstanceFlag;
16 import gov.nist.secauto.metaschema.databind.model.IBoundInstanceModelChoiceGroup;
17 import gov.nist.secauto.metaschema.databind.model.IBoundInstanceModelGroupedField;
18 import gov.nist.secauto.metaschema.databind.model.IBoundProperty;
19 import gov.nist.secauto.metaschema.databind.model.annotations.BoundGroupedField;
20 import gov.nist.secauto.metaschema.databind.model.annotations.ModelUtil;
21
22 import java.util.Map;
23 import java.util.function.Predicate;
24
25 import edu.umd.cs.findbugs.annotations.NonNull;
26 import nl.talsmasoftware.lazy4j.Lazy;
27
28 public class InstanceModelGroupedFieldComplex
29 extends AbstractFieldInstance<
30 IBoundInstanceModelChoiceGroup,
31 IBoundDefinitionModelFieldComplex,
32 IBoundInstanceModelGroupedField,
33 IBoundDefinitionModelAssembly>
34
35
36 implements IBoundInstanceModelGroupedField {
37 @NonNull
38 private final BoundGroupedField annotation;
39 @NonNull
40 private final DefinitionField definition;
41 @NonNull
42 private final Lazy<Map<String, IBoundProperty<?>>> jsonProperties;
43
44 public InstanceModelGroupedFieldComplex(
45 @NonNull BoundGroupedField annotation,
46 @NonNull DefinitionField definition,
47 @NonNull IBoundInstanceModelChoiceGroup container) {
48 super(container);
49 this.annotation = annotation;
50 this.definition = definition;
51 this.jsonProperties = ObjectUtils.notNull(Lazy.lazy(() -> {
52 Predicate<IBoundInstanceFlag> flagFilter = null;
53 IBoundInstanceFlag jsonKey = getEffectiveJsonKey();
54 if (jsonKey != null) {
55 flagFilter = flag -> !jsonKey.equals(flag);
56 }
57
58 IBoundInstanceFlag jsonValueKey = getDefinition().getJsonValueKeyFlagInstance();
59 if (jsonValueKey != null) {
60 Predicate<IBoundInstanceFlag> jsonValueKeyFilter = flag -> !flag.equals(jsonValueKey);
61 flagFilter = flagFilter == null ? jsonValueKeyFilter : flagFilter.and(jsonValueKeyFilter);
62 }
63 return getDefinition().getJsonProperties(flagFilter);
64 }));
65 }
66
67 private BoundGroupedField getAnnotation() {
68 return annotation;
69 }
70
71
72
73
74
75 @Override
76 public Class<? extends IBoundObject> getBoundClass() {
77 return getAnnotation().binding();
78 }
79
80 @Override
81 public Map<String, IBoundProperty<?>> getJsonProperties() {
82 return ObjectUtils.notNull(jsonProperties.get());
83 }
84
85 @Override
86 public DefinitionField getDefinition() {
87 return definition;
88 }
89
90 @Override
91 public String getFormalName() {
92 return ModelUtil.resolveNoneOrValue(getAnnotation().formalName());
93 }
94
95 @Override
96 public MarkupLine getDescription() {
97 return ModelUtil.resolveToMarkupLine(getAnnotation().description());
98 }
99
100 @Override
101 public MarkupMultiline getRemarks() {
102 return ModelUtil.resolveToMarkupMultiline(getAnnotation().remarks());
103 }
104
105 @Override
106 public String getDiscriminatorValue() {
107 return ModelUtil.resolveNoneOrValue(getAnnotation().formalName());
108 }
109
110 @Override
111 public String getUseName() {
112 return ModelUtil.resolveNoneOrValue(getAnnotation().useName());
113 }
114
115 @Override
116 public Integer getUseIndex() {
117 return ModelUtil.resolveDefaultInteger(getAnnotation().useIndex());
118 }
119
120
121
122
123 }