Skip to content

Commit af05e40

Browse files
committed
Refactor TurMultiValue and TurAemTargetAttrValueMap for type safety
Replaces generic singleItem and addWithSingleValue methods with type-specific overloads for better type safety and clarity. Adds collection-based factory methods to TurMultiValue for various types. Updates TurSolrField and tests to align with new method signatures and behaviors.
1 parent cc30405 commit af05e40

File tree

4 files changed

+358
-132
lines changed

4 files changed

+358
-132
lines changed
Lines changed: 147 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,184 @@
11
package com.viglet.turing.connector.aem.commons.bean;
22

3+
import java.util.Date;
4+
import java.util.HashMap;
5+
import java.util.List;
36
import com.viglet.turing.client.sn.TurMultiValue;
47
import com.viglet.turing.connector.aem.commons.mappers.TurAemTargetAttr;
58
import lombok.extern.slf4j.Slf4j;
69

7-
import java.util.Date;
8-
import java.util.HashMap;
9-
import java.util.Optional;
10-
1110
@Slf4j
1211
public class TurAemTargetAttrValueMap extends HashMap<String, TurMultiValue> {
13-
public <T> void addWithSingleValue(String attributeName, T value, boolean override) {
14-
Optional.ofNullable(value).ifPresent(v -> {
15-
if (!this.containsKey(attributeName) || (containsKey(attributeName) && override)) {
16-
switch (v) {
17-
case TurMultiValue turMultiValue -> this.put(attributeName, turMultiValue);
18-
case Date date -> this.put(attributeName, TurMultiValue.singleItem(date, override));
19-
case Boolean bool -> this.put(attributeName,TurMultiValue.singleItem(bool, override));
20-
case String string -> this.put(attributeName,TurMultiValue.singleItem(string, override));
21-
default -> this.put(attributeName,TurMultiValue.singleItem(v.toString(), override));
22-
}
23-
} else {
24-
switch (v) {
25-
case TurMultiValue turMultiValue -> this.get(attributeName).addAll(turMultiValue);
26-
case Date date -> this.get(attributeName).addAll(TurMultiValue.singleItem(date, override));
27-
case Boolean bool -> this.get(attributeName).addAll(TurMultiValue.singleItem(bool, override));
28-
case String string -> this.get(attributeName).addAll(TurMultiValue.singleItem(string, override));
29-
default -> this.get(attributeName).addAll(TurMultiValue.singleItem(v.toString(), override));
30-
}
31-
}
32-
});
12+
13+
public void addWithSingleValue(String attributeName, String value, boolean override) {
14+
if (value == null) {
15+
return;
16+
}
17+
addOrMerge(attributeName, TurMultiValue.singleItem(value, override), override);
18+
}
19+
20+
public void addWithSingleValue(String attributeName, Date value, boolean override) {
21+
if (value == null) {
22+
return;
23+
}
24+
addOrMerge(attributeName, TurMultiValue.singleItem(value, override), override);
25+
}
26+
27+
public void addWithSingleValue(String attributeName, Boolean value, boolean override) {
28+
if (value == null) {
29+
return;
30+
}
31+
addOrMerge(attributeName, TurMultiValue.singleItem(value, override), override);
32+
}
33+
34+
public void addWithSingleValue(String attributeName, Long value, boolean override) {
35+
if (value == null) {
36+
return;
37+
}
38+
addOrMerge(attributeName, TurMultiValue.singleItem(value, override), override);
39+
}
40+
41+
public void addWithSingleValue(String attributeName, Double value, boolean override) {
42+
if (value == null) {
43+
return;
44+
}
45+
addOrMerge(attributeName, TurMultiValue.singleItem(value, override), override);
46+
}
47+
48+
public void addWithSingleValue(String attributeName, Float value, boolean override) {
49+
if (value == null) {
50+
return;
51+
}
52+
addOrMerge(attributeName, TurMultiValue.singleItem(value, override), override);
53+
}
54+
55+
public void addWithSingleValue(String attributeName, List<String> value, boolean override) {
56+
if (value == null) {
57+
return;
58+
}
59+
addOrMerge(attributeName, new TurMultiValue(value, override), override);
60+
}
61+
62+
public void addWithSingleValue(String attributeName, Integer value, boolean override) {
63+
if (value == null) {
64+
return;
65+
}
66+
TurMultiValue newValue = TurMultiValue.singleItem(value, override);
67+
addOrMerge(attributeName, newValue, override);
68+
}
69+
70+
public void addWithSingleValue(String attributeName, TurMultiValue value, boolean override) {
71+
if (value == null) {
72+
return;
73+
}
74+
addOrMerge(attributeName, value, override);
75+
}
76+
77+
/**
78+
* Internal helper to add or merge TurMultiValue based on override flag.
79+
*/
80+
private void addOrMerge(String attributeName, TurMultiValue value, boolean override) {
81+
if (override || !this.containsKey(attributeName)) {
82+
this.put(attributeName, value);
83+
} else {
84+
this.get(attributeName).addAll(value);
85+
}
3386
}
3487

3588
public void merge(TurAemTargetAttrValueMap fromMap) {
3689
fromMap.keySet().forEach(fromKey -> {
3790
if (this.containsKey(fromKey)) {
3891
if (fromMap.get(fromKey).isOverride()) {
3992
this.put(fromKey, fromMap.get(fromKey));
40-
}
41-
else {
93+
} else {
4294
this.get(fromKey).addAll(fromMap.get(fromKey));
4395
}
44-
}
45-
else {
96+
} else {
4697
this.put(fromKey, fromMap.get(fromKey));
4798
}
4899
});
49100
}
50101

51102
public static TurAemTargetAttrValueMap singleItem(TurAemTargetAttrValue turCmsTargetAttrValue) {
52103
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
53-
turCmsTargetAttrValueMap.put(turCmsTargetAttrValue.getTargetAttrName(), turCmsTargetAttrValue.getMultiValue());
104+
turCmsTargetAttrValueMap.put(turCmsTargetAttrValue.getTargetAttrName(),
105+
turCmsTargetAttrValue.getMultiValue());
106+
return turCmsTargetAttrValueMap;
107+
}
108+
109+
public static TurAemTargetAttrValueMap singleItem(String attributeName, List<String> value,
110+
boolean override) {
111+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
112+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
113+
return turCmsTargetAttrValueMap;
114+
}
115+
116+
public static TurAemTargetAttrValueMap singleItem(String attributeName, TurMultiValue value,
117+
boolean override) {
118+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
119+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
120+
return turCmsTargetAttrValueMap;
121+
}
122+
123+
public static TurAemTargetAttrValueMap singleItem(String attributeName, String value,
124+
boolean override) {
125+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
126+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
127+
return turCmsTargetAttrValueMap;
128+
}
129+
130+
public static TurAemTargetAttrValueMap singleItem(String attributeName, Date value,
131+
boolean override) {
132+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
133+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
134+
return turCmsTargetAttrValueMap;
135+
}
136+
137+
public static TurAemTargetAttrValueMap singleItem(String attributeName, Boolean value,
138+
boolean override) {
139+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
140+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
141+
return turCmsTargetAttrValueMap;
142+
}
143+
144+
public static TurAemTargetAttrValueMap singleItem(String attributeName, Integer value,
145+
boolean override) {
146+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
147+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
148+
return turCmsTargetAttrValueMap;
149+
}
150+
151+
public static TurAemTargetAttrValueMap singleItem(String attributeName, Double value,
152+
boolean override) {
153+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
154+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
155+
return turCmsTargetAttrValueMap;
156+
}
157+
158+
public static TurAemTargetAttrValueMap singleItem(String attributeName, Float value,
159+
boolean override) {
160+
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
161+
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
54162
return turCmsTargetAttrValueMap;
55163
}
56164

57-
public static <T> TurAemTargetAttrValueMap singleItem(String attributeName, T value, boolean override) {
165+
public static TurAemTargetAttrValueMap singleItem(String attributeName, Long value,
166+
boolean override) {
58167
TurAemTargetAttrValueMap turCmsTargetAttrValueMap = new TurAemTargetAttrValueMap();
59168
turCmsTargetAttrValueMap.addWithSingleValue(attributeName, value, override);
60169
return turCmsTargetAttrValueMap;
61170
}
62171

63-
public static TurAemTargetAttrValueMap singleItem(String attributeName, TurMultiValue turMultiValue) {
64-
return TurAemTargetAttrValueMap.singleItem(new TurAemTargetAttrValue(attributeName, turMultiValue));
172+
public static TurAemTargetAttrValueMap singleItem(String attributeName,
173+
TurMultiValue turMultiValue) {
174+
return TurAemTargetAttrValueMap
175+
.singleItem(new TurAemTargetAttrValue(attributeName, turMultiValue));
65176
}
66177

67178

68-
public static TurAemTargetAttrValueMap singleItem(TurAemTargetAttr turAemTargetAttr, boolean override) {
69-
return TurAemTargetAttrValueMap.singleItem(turAemTargetAttr.getName(), turAemTargetAttr.getTextValue(),
70-
override);
179+
public static TurAemTargetAttrValueMap singleItem(TurAemTargetAttr turAemTargetAttr,
180+
boolean override) {
181+
return TurAemTargetAttrValueMap.singleItem(turAemTargetAttr.getName(),
182+
turAemTargetAttr.getTextValue(), override);
71183
}
72184
}

turing-app/src/main/java/com/viglet/turing/solr/TurSolrField.java

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
/*
2-
* Copyright (C) 2016-2022 the original author or authors.
2+
* Copyright (C) 2016-2022 the original author or authors.
33
*
4-
* Licensed to the Apache Software Foundation (ASF) under one
5-
* or more contributor license agreements. See the NOTICE file
6-
* distributed with this work for additional information
7-
* regarding copyright ownership. The ASF licenses this file
8-
* to you under the Apache License, Version 2.0 (the
9-
* "License"); you may not use this file except in compliance
10-
* with the License. You may obtain a copy of the License at
4+
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
5+
* agreements. See the NOTICE file distributed with this work for additional information regarding
6+
* copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance with the License. You may obtain a
8+
* copy of the License at
119
*
12-
* http://www.apache.org/licenses/LICENSE-2.0
10+
* http://www.apache.org/licenses/LICENSE-2.0
1311
*
14-
* Unless required by applicable law or agreed to in writing,
15-
* software distributed under the License is distributed on an
16-
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17-
* KIND, either express or implied. See the License for the
18-
* specific language governing permissions and limitations
19-
* under the License.
12+
* Unless required by applicable law or agreed to in writing, software distributed under the License
13+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14+
* or implied. See the License for the specific language governing permissions and limitations under
15+
* the License.
2016
*/
2117
package com.viglet.turing.solr;
2218

@@ -34,6 +30,7 @@ public class TurSolrField {
3430
private TurSolrField() {
3531
throw new IllegalStateException("TurSolrField class");
3632
}
33+
3734
public static String convertFieldToString(Object attrValue) {
3835
switch (attrValue) {
3936
case null -> {
@@ -77,18 +74,26 @@ private static String objectArrayToString(Object[] arrAttrValue) {
7774
}
7875

7976
private static String arrayListToString(ArrayList<?> arrAttValue) {
80-
if (arrAttValue == null) {
77+
if (arrAttValue == null || arrAttValue.isEmpty()) {
78+
return EMPTY_STRING;
79+
}
80+
Object firstElement = arrAttValue.get(0);
81+
if (firstElement == null) {
8182
return EMPTY_STRING;
82-
} else if (arrAttValue.getFirst() instanceof String stringValue) {
83+
}
84+
if (firstElement instanceof String stringValue) {
8385
return stringValue.trim();
84-
} else if (arrAttValue.getFirst() instanceof Long longValue) {
85-
return longValue.toString().trim();
86-
} else if (arrAttValue.getFirst() instanceof Date dateValue) {
87-
return dateValue.toString().trim();
86+
} else if (firstElement instanceof Long longValue) {
87+
return longValue.toString();
88+
} else if (firstElement instanceof Date dateValue) {
89+
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
90+
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(GMT));
91+
return simpleDateFormat.format(dateValue);
8892
} else {
89-
return ((String) arrAttValue.getFirst()).trim();
93+
return firstElement.toString().trim();
9094
}
9195
}
96+
9297
private static String longToString(Long longValue) {
9398
return longValue.toString();
9499
}

0 commit comments

Comments
 (0)