66import eu .clarin .cmdi .vlo .importer .mapping .FacetDefinition ;
77import eu .clarin .cmdi .vlo .importer .mapping .TargetFacet ;
88import eu .clarin .cmdi .vlo .importer .processor .ValueSet ;
9+ import lombok .AllArgsConstructor ;
10+ import lombok .Data ;
911import org .apache .commons .lang3 .tuple .Pair ;
1012
1113import java .util .*;
@@ -35,7 +37,7 @@ public class CMDIDataImpl extends CMDIDataBaseImpl<Map<String, List<ValueSet>>>
3537 */
3638 public CMDIDataImpl (FieldNameService fieldNameService ) {
3739 super (fieldNameService );
38- facetValuesMap = new HashMap <String , List < ValueSet > >();
40+ facetValuesMap = new HashMap <>();
3941 }
4042
4143 /**
@@ -54,27 +56,21 @@ public void addDocField(ValueSet valueSet, boolean caseInsensitive) {
5456 setId (value .trim ());
5557 }
5658 else {
57-
58- this .facetValuesMap .computeIfAbsent (valueSet .getTargetFacetName (), list -> new ArrayList <ValueSet >())
59- .add (valueSet );
59+ addValueSet (valueSet , caseInsensitive );
6060 }
6161 }
6262
6363 /**
6464 * Add doc field.
6565 *
66- * @param fieldName the field name
66+ * @param facetName the field name
6767 * @param value the value
6868 * @param caseInsensitive the case insensitive
6969 */
7070 @ Override
71- public void addDocField (String fieldName , Object value , boolean caseInsensitive ) {
71+ public void addDocField (String facetName , Object value , boolean caseInsensitive ) {
7272
73- this .facetValuesMap .computeIfAbsent (fieldName , list -> new ArrayList <ValueSet >()).add (
74-
75- new ValueSet (-1 , new FacetDefinition (null , "unknown" ),
76- new TargetFacet (new FacetDefinition (null , fieldName ), value .toString ()),
77- Pair .of (value .toString (), DEFAULT_LANGUAGE ), false , false ));
73+ addValueSet (facetName , value , caseInsensitive );
7874 }
7975
8076 /**
@@ -86,22 +82,22 @@ public void addDocField(String fieldName, Object value, boolean caseInsensitive)
8682 @ Override
8783 public void addDocFieldIfNull (ValueSet valueSet , boolean caseInsensitive ) {
8884
89- this .facetValuesMap .putIfAbsent (valueSet .getTargetFacetName (), List .of (valueSet ));
85+ if (this .facetValuesMap .containsKey (valueSet .getTargetFacetName ())){
86+
87+ addDocField (valueSet , caseInsensitive );
88+ }
9089 }
9190
9291 /**
9392 * Gets doc field.
9493 *
95- * @param name the name
94+ * @param facetName the name of the field/facet
9695 * @return the doc field
9796 */
9897 @ Override
99- public Collection <Object > getDocField (String name ) {
100-
101- Collection <ValueSet > valueSetList ;
98+ public Collection <Object > getDocField (String facetName ) {
10299
103- return (valueSetList = this .facetValuesMap .get (name )) == null ? null
104- : valueSetList .stream ().map (ValueSet ::getValue ).collect (Collectors .toList ());
100+ return (hasField (facetName )? this .facetValuesMap .get (facetName ).stream ().map (ValueSet ::getValue ).collect (Collectors .toList ()) : null );
105101 }
106102
107103 /**
@@ -122,54 +118,79 @@ public Map<String, List<ValueSet>> getDocument() {
122118 */
123119 @ Override
124120 public void replaceDocField (ValueSet valueSet , boolean caseInsensitive ) {
125- this .facetValuesMap .put (valueSet .getTargetFacetName (), Arrays .asList (valueSet ));
126121
122+ removeField (valueSet .getTargetFacetName ());
123+
124+ addDocFieldIfNull (valueSet , caseInsensitive );
127125 }
128126
129127 /**
130128 * Replace doc field.
131129 *
132- * @param name the name
130+ * @param facetName the name
133131 * @param value the value
134132 * @param caseInsensitive the case insensitive
135133 */
136134 @ Override
137- public void replaceDocField (String name , Object value , boolean caseInsensitive ) {
135+ public void replaceDocField (String facetName , Object value , boolean caseInsensitive ) {
136+
137+ removeField (facetName );
138138
139+ addValueSet (facetName , value , caseInsensitive );
139140 }
140141
141142 /**
142143 * Remove field.
143144 *
144- * @param name the name
145+ * @param facetName the name
145146 */
146147 @ Override
147- public void removeField (String name ) {
148- this .facetValuesMap .remove (name );
148+ public void removeField (String facetName ) {
149149
150+ this .facetValuesMap .remove (facetName );
150151 }
151152
152153 /**
153154 * Has field boolean.
154155 *
155- * @param name the name
156+ * @param facetName the name
156157 * @return the boolean
157158 */
158159 @ Override
159- public boolean hasField (String name ) {
160- return this .facetValuesMap .containsKey (name );
160+ public boolean hasField (String facetName ) {
161+
162+ return this .facetValuesMap .containsKey (facetName );
161163 }
162164
163165 /**
164166 * Gets field values.
165167 *
166- * @param name the name
168+ * @param facetName the name
167169 * @return the field values
168170 */
169171 @ Override
170- public Collection <Object > getFieldValues (String name ) {
172+ public Collection <Object > getFieldValues (String facetName ) {
171173
172- return this . facetValuesMap . get ( name ). stream (). map ( Object . class :: cast ). collect ( Collectors . toList () );
174+ return getDocField ( facetName );
173175 }
174176
177+
178+ private void addValueSet (ValueSet valueSet , boolean caseInsensitive ){
179+
180+ if (caseInsensitive ){
181+
182+ valueSet .setValue (valueSet .getValueLanguagePair ().getLeft ().trim ().toLowerCase ());
183+ }
184+ this .facetValuesMap .computeIfAbsent (valueSet .getTargetFacetName (), list -> new ArrayList <ValueSet >())
185+ .add (valueSet );
186+ }
187+
188+ private void addValueSet (String facetName , Object value , boolean caseInsensitive ){
189+ addValueSet (
190+ new ValueSet (-1 , new FacetDefinition (null , "unknown" ),
191+ new TargetFacet (new FacetDefinition (null , facetName ), value .toString ()),
192+ Pair .of (value .toString (), DEFAULT_LANGUAGE ), false , false ),
193+ caseInsensitive
194+ );
195+ }
175196}
0 commit comments