@@ -42,6 +42,97 @@ public LinkedHashMap<String, SimpleField> getSimpleFields() throws IllegalStateE
4242 return simpleFields ;
4343 }
4444
45+ /**
46+ * Retrieves all subfields from the {@code fields} map as a {@link LinkedHashMap} of
47+ * {@code ListField} objects, keyed by their field names.
48+ *
49+ * @return a {@link LinkedHashMap} containing the field names as keys and their corresponding
50+ * {@code ListField} instances as values (only includes fields that are list fields)
51+ */
52+ public LinkedHashMap <String , ListField > getListFields () {
53+ LinkedHashMap <String , ListField > listFields = new LinkedHashMap <>();
54+ if (fields != null ) {
55+ for (String fieldName : fields .keySet ()) {
56+ DynamicField field = fields .get (fieldName );
57+ if (field != null && field .getType () == DynamicField .FieldType .LIST_FIELD ) {
58+ listFields .put (fieldName , field .getListField ());
59+ }
60+ }
61+ }
62+ return listFields ;
63+ }
64+
65+ /**
66+ * Retrieves all subfields from the {@code fields} map as a {@link LinkedHashMap} of
67+ * {@code ObjectField} objects, keyed by their field names.
68+ *
69+ * @return a {@link LinkedHashMap} containing the field names as keys and their corresponding
70+ * {@code ObjectField} objects as values
71+ */
72+ public LinkedHashMap <String , ObjectField > getObjectFields () {
73+ LinkedHashMap <String , ObjectField > objectFields = new LinkedHashMap <>();
74+ if (fields != null ) {
75+ for (String fieldName : fields .keySet ()) {
76+ DynamicField field = fields .get (fieldName );
77+ if (field != null && field .getType () == DynamicField .FieldType .OBJECT_FIELD ) {
78+ objectFields .put (fieldName , field .getObjectField ());
79+ }
80+ }
81+ }
82+ return objectFields ;
83+ }
84+
85+ /**
86+ * Retrieves a single sub-field from the {@code fields} map as a {@link SimpleField}.
87+ *
88+ * @param fieldKey the name/key of the field to retrieve
89+ * @return the corresponding {@link SimpleField}, or {@code null} if {@code fields} is
90+ * {@code null}
91+ * or if no field exists for {@code fieldKey} (depending on {@code fields}' behavior)
92+ * @throws IllegalStateException if the referenced field exists but is not of type
93+ * {@code SIMPLE_FIELD}
94+ */
95+ public SimpleField getSimpleField (String fieldKey ) throws IllegalStateException {
96+ if (fields == null ) {
97+ return null ;
98+ }
99+ return fields .getSimpleField (fieldKey );
100+ }
101+
102+ /**
103+ * Retrieves a list sub-field from the {@code fields} map as a {@link ListField}.
104+ *
105+ * @param fieldKey the name/key of the field to retrieve
106+ * @return the corresponding {@link ListField}, or {@code null} if {@code fields} is
107+ * {@code null}
108+ * or if no field exists for {@code fieldKey} (depending on {@code fields}' behavior)
109+ * @throws IllegalStateException if the referenced field exists but is not of type
110+ * {@code LIST_FIELD}
111+ */
112+ public ListField getListField (String fieldKey ) {
113+ if (fields == null ) {
114+ return null ;
115+ }
116+ return fields .getListField (fieldKey );
117+ }
118+
119+ /**
120+ * Retrieves an object sub-field from the {@code fields} map as a {@link ObjectField}.
121+ *
122+ * @param fieldKey the name/key of the field to retrieve
123+ * @return the corresponding {@link ObjectField}, or {@code null} if {@code fields} is
124+ * {@code null}
125+ * or if no field exists for {@code fieldKey} (depending on {@code fields}' behavior)
126+ * @throws IllegalStateException if the referenced field exists but is not of type
127+ * {@code OBJECT_FIELD}
128+ */
129+ public ObjectField getObjectField (String fieldKey ) {
130+ if (fields == null ) {
131+ return null ;
132+ }
133+ return fields .getObjectField (fieldKey );
134+ }
135+
45136 @ Override
46137 public String toString () {
47138 return "\n " + (fields != null ? fields .toString (1 ) : "" );
0 commit comments