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 package gov.nist.secauto.metaschema.databind.model;
28
29 import gov.nist.secauto.metaschema.core.datatype.markup.MarkupLine;
30 import gov.nist.secauto.metaschema.core.datatype.markup.MarkupMultiline;
31 import gov.nist.secauto.metaschema.databind.model.annotations.BoundField;
32
33 import java.lang.reflect.Field;
34 import java.util.Locale;
35
36 import edu.umd.cs.findbugs.annotations.NonNull;
37
38 public abstract class AbstractFieldProperty
39 extends AbstractNamedModelProperty
40 implements IBoundFieldInstance {
41 @NonNull
42 private final BoundField fieldAnnotation;
43
44 public AbstractFieldProperty(@NonNull Field field, @NonNull IAssemblyClassBinding parentClassBinding) {
45 super(field, parentClassBinding);
46
47 BoundField fieldAnnotation = field.getAnnotation(BoundField.class);
48 if (fieldAnnotation == null) {
49 throw new IllegalStateException(String.format("Field '%s' on class '%s' is missing the '%s' annotation.",
50 field.getName(), parentClassBinding.getBoundClass().getName(), BoundField.class.getName()));
51 }
52 this.fieldAnnotation = fieldAnnotation;
53 }
54
55 @NonNull
56 protected BoundField getFieldAnnotation() {
57 return fieldAnnotation;
58 }
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 @Override
78 public String getFormalName() {
79 return ModelUtil.resolveToString(getFieldAnnotation().formalName());
80 }
81
82 @Override
83 public MarkupLine getDescription() {
84 return ModelUtil.resolveToMarkupLine(getFieldAnnotation().description());
85 }
86
87 @Override
88 public String getUseName() {
89 return ModelUtil.resolveToString(getFieldAnnotation().useName());
90 }
91
92 @Override
93 public boolean isInXmlWrapped() {
94 return getFieldAnnotation().inXmlWrapped();
95 }
96
97 @Override
98 public int getMinOccurs() {
99 return getFieldAnnotation().minOccurs();
100 }
101
102 @Override
103 public int getMaxOccurs() {
104 return getFieldAnnotation().maxOccurs();
105 }
106
107 @Override
108 public MarkupMultiline getRemarks() {
109 return ModelUtil.resolveToMarkupMultiline(getFieldAnnotation().remarks());
110 }
111
112 @SuppressWarnings("null")
113 @Override
114 public String toCoordinates() {
115 return String.format("%s Instance(%s): %s",
116 getModelType().name().toLowerCase(Locale.ROOT),
117 getParentClassBinding().getBoundClass().getName(),
118 getName());
119 }
120 }