1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.toolchain;
20
21 import java.util.HashMap;
22 import java.util.Iterator;
23 import java.util.Map;
24 import java.util.Objects;
25 import java.util.Properties;
26
27 import org.apache.maven.toolchain.model.ToolchainModel;
28 import org.slf4j.Logger;
29
30
31
32
33
34
35
36
37 @Deprecated(since = "4.0.0")
38 public abstract class DefaultToolchain
39 implements Toolchain, ToolchainPrivate {
40 private final Logger logger;
41
42 private String type;
43
44 private Map<String, RequirementMatcher> provides = new HashMap<>();
45
46 public static final String KEY_TYPE = "type";
47
48 private ToolchainModel model;
49
50
51
52
53
54
55 protected DefaultToolchain(ToolchainModel model, Logger logger) {
56 this.model = model;
57 this.logger = logger;
58 }
59
60
61
62
63
64
65
66 protected DefaultToolchain(ToolchainModel model, String type, Logger logger) {
67 this(model, logger);
68 this.type = type;
69 }
70
71 @Override
72 public final String getType() {
73 return type != null ? type : model.getType();
74 }
75
76 @Override
77 public final ToolchainModel getModel() {
78 return model;
79 }
80
81 public final void addProvideToken(String type, RequirementMatcher matcher) {
82 provides.put(type, matcher);
83 }
84
85 @Override
86 public boolean matchesRequirements(Map<String, String> requirements) {
87 for (Map.Entry<String, String> requirement : requirements.entrySet()) {
88 String key = requirement.getKey();
89
90 RequirementMatcher matcher = provides.get(key);
91
92 if (matcher == null) {
93 getLog().debug("Toolchain {} is missing required property: {}", this, key);
94 return false;
95 }
96 if (!matcher.matches(requirement.getValue())) {
97 getLog().debug("Toolchain {} doesn't match required property: {}", this, key);
98 return false;
99 }
100 }
101 return true;
102 }
103
104 protected Logger getLog() {
105 return logger;
106 }
107
108 @Override
109 public boolean equals(Object obj) {
110 if (obj == null) {
111 return false;
112 }
113
114 if (this == obj) {
115 return true;
116 }
117
118 if (obj instanceof DefaultToolchain other) {
119 if (!Objects.equals(type, other.type)) {
120 return false;
121 }
122
123 Properties thisProvides = this.getModel().getProvides();
124 Properties otherProvides = other.getModel().getProvides();
125
126 return Objects.equals(thisProvides, otherProvides);
127 } else {
128 return false;
129 }
130 }
131
132 @Override
133 public int hashCode() {
134 int hashCode = (type == null) ? 0 : type.hashCode();
135
136 if (this.getModel().getProvides() != null) {
137 hashCode = 31 * hashCode + this.getModel().getProvides().hashCode();
138 }
139 return hashCode;
140 }
141
142 @Override
143 public String toString() {
144 StringBuilder builder = new StringBuilder();
145 builder.append("type:").append(getType());
146 builder.append('{');
147
148 Iterator<Map.Entry<String, RequirementMatcher>> providesIter =
149 provides.entrySet().iterator();
150 while (providesIter.hasNext()) {
151 Map.Entry<String, RequirementMatcher> provideEntry = providesIter.next();
152 builder.append(provideEntry.getKey()).append(" = ").append(provideEntry.getValue());
153 if (providesIter.hasNext()) {
154 builder.append(';');
155 }
156 }
157
158 builder.append('}');
159
160 return builder.toString();
161 }
162 }