1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.toolchain.merge;
20
21 import java.util.LinkedHashMap;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.apache.maven.toolchain.model.PersistedToolchains;
26 import org.apache.maven.toolchain.model.ToolchainModel;
27 import org.codehaus.plexus.util.xml.Xpp3Dom;
28
29
30
31
32
33
34 @Deprecated(since = "4.0.0")
35 public class MavenToolchainMerger {
36
37 public void merge(PersistedToolchains dominant, PersistedToolchains recessive, String recessiveSourceLevel) {
38 if (dominant == null || recessive == null) {
39 return;
40 }
41
42 recessive.setSourceLevel(recessiveSourceLevel);
43
44 shallowMerge(dominant.getToolchains(), recessive.getToolchains(), recessiveSourceLevel);
45 }
46
47 private void shallowMerge(
48 List<ToolchainModel> dominant, List<ToolchainModel> recessive, String recessiveSourceLevel) {
49 Map<Object, ToolchainModel> merged = new LinkedHashMap<>();
50
51 for (ToolchainModel dominantModel : dominant) {
52 Object key = getToolchainModelKey(dominantModel);
53
54 merged.put(key, dominantModel);
55 }
56
57 for (ToolchainModel recessiveModel : recessive) {
58 Object key = getToolchainModelKey(recessiveModel);
59
60 ToolchainModel dominantModel = merged.get(key);
61 if (dominantModel == null) {
62 recessiveModel.setSourceLevel(recessiveSourceLevel);
63 dominant.add(recessiveModel);
64 } else {
65 mergeToolchainModelConfiguration(dominantModel, recessiveModel);
66 }
67 }
68 }
69
70 protected void mergeToolchainModelConfiguration(ToolchainModel target, ToolchainModel source) {
71 Xpp3Dom src = (Xpp3Dom) source.getConfiguration();
72 if (src != null) {
73 Xpp3Dom tgt = (Xpp3Dom) target.getConfiguration();
74 if (tgt == null) {
75 tgt = Xpp3Dom.mergeXpp3Dom(new Xpp3Dom(src), tgt);
76 } else {
77 tgt = Xpp3Dom.mergeXpp3Dom(tgt, src);
78 }
79 target.setConfiguration(tgt);
80 }
81 }
82
83 protected Object getToolchainModelKey(ToolchainModel model) {
84 return model;
85 }
86 }