-
Notifications
You must be signed in to change notification settings - Fork 126
/
AttributeNormalizationService.java
93 lines (79 loc) · 4.01 KB
/
AttributeNormalizationService.java
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*-
* ---license-start
* keycloak-config-cli
* ---
* Copyright (C) 2017 - 2022 adorsys GmbH & Co. KG @ https://adorsys.com
* ---
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ---license-end
*/
package de.adorsys.keycloak.config.service.normalize;
import org.javers.core.Javers;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Service
@ConditionalOnProperty(prefix = "run", name = "operation", havingValue = "NORMALIZE")
public class AttributeNormalizationService {
private final Javers unOrderedJavers;
public AttributeNormalizationService(Javers unOrderedJavers) {
this.unOrderedJavers = unOrderedJavers;
}
public Map<String, String> normalizeStringAttributes(Map<String, String> exportedAttributes, Map<String, String> baselineAttributes) {
Map<String, String> exportedOrEmpty = exportedAttributes == null ? Map.of() : exportedAttributes;
Map<String, String> baselineOrEmpty = baselineAttributes == null ? Map.of() : baselineAttributes;
var normalizedAttributes = new HashMap<String, String>();
for (var entry : baselineOrEmpty.entrySet()) {
var attributeName = entry.getKey();
var baselineAttribute = entry.getValue();
var exportedAttribute = exportedOrEmpty.remove(attributeName);
if (!Objects.equals(baselineAttribute, exportedAttribute)) {
normalizedAttributes.put(attributeName, exportedAttribute);
}
}
normalizedAttributes.putAll(exportedOrEmpty);
return normalizedAttributes.isEmpty() ? null : normalizedAttributes;
}
public Map<String, List<String>> normalizeListAttributes(Map<String, List<String>> exportedAttributes, Map<String, List<String>> baselineAttributes) {
Map<String, List<String>> exportedOrEmpty = exportedAttributes == null ? Map.of() : exportedAttributes;
Map<String, List<String>> baselineOrEmpty = baselineAttributes == null ? Map.of() : baselineAttributes;
var normalizedAttributes = new HashMap<String, List<String>>();
for (var entry : baselineOrEmpty.entrySet()) {
var attributeName = entry.getKey();
var baselineAttribute = entry.getValue();
var exportedAttribute = exportedOrEmpty.remove(attributeName);
if (unOrderedJavers.compareCollections(baselineAttribute, exportedAttribute, String.class).hasChanges()) {
normalizedAttributes.put(attributeName, exportedAttribute);
}
}
normalizedAttributes.putAll(exportedOrEmpty);
return normalizedAttributes.isEmpty() ? null : normalizedAttributes;
}
public boolean listAttributesChanged(Map<String, List<String>> exportedAttributes, Map<String, List<String>> baselineAttributes) {
Map<String, List<String>> exportedOrEmpty = exportedAttributes == null ? Map.of() : exportedAttributes;
Map<String, List<String>> baselineOrEmpty = baselineAttributes == null ? Map.of() : baselineAttributes;
if (!Objects.equals(exportedOrEmpty.keySet(), baselineOrEmpty.keySet())) {
return true;
}
for (var entry : baselineOrEmpty.entrySet()) {
if (unOrderedJavers.compareCollections(entry.getValue(),
exportedOrEmpty.get(entry.getKey()), String.class).hasChanges()) {
return true;
}
}
return false;
}
}