1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.cling.invoker.mvnup.goals;
20
21 import org.jdom2.Document;
22 import org.jdom2.Element;
23 import org.jdom2.Namespace;
24
25 import static org.apache.maven.cling.invoker.mvnup.goals.UpgradeConstants.ModelVersions.MODEL_VERSION_4_0_0;
26 import static org.apache.maven.cling.invoker.mvnup.goals.UpgradeConstants.ModelVersions.MODEL_VERSION_4_1_0;
27 import static org.apache.maven.cling.invoker.mvnup.goals.UpgradeConstants.Namespaces.MAVEN_4_0_0_NAMESPACE;
28 import static org.apache.maven.cling.invoker.mvnup.goals.UpgradeConstants.Namespaces.MAVEN_4_1_0_NAMESPACE;
29 import static org.apache.maven.cling.invoker.mvnup.goals.UpgradeConstants.SchemaLocations.MAVEN_4_1_0_SCHEMA_LOCATION;
30 import static org.apache.maven.cling.invoker.mvnup.goals.UpgradeConstants.XmlElements.MODEL_VERSION;
31
32
33
34
35 public final class ModelVersionUtils {
36
37 private ModelVersionUtils() {
38
39 }
40
41
42
43
44
45
46
47
48 public static String detectModelVersion(Document pomDocument) {
49 Element root = pomDocument.getRootElement();
50 Namespace namespace = root.getNamespace();
51
52
53 Element modelVersionElement = root.getChild(MODEL_VERSION, namespace);
54 if (modelVersionElement != null) {
55 String modelVersion = modelVersionElement.getTextTrim();
56 if (!modelVersion.isEmpty()) {
57 return modelVersion;
58 }
59 }
60
61
62 String namespaceUri = namespace.getURI();
63 if (MAVEN_4_1_0_NAMESPACE.equals(namespaceUri)) {
64 return MODEL_VERSION_4_1_0;
65 } else if (MAVEN_4_0_0_NAMESPACE.equals(namespaceUri)) {
66 return MODEL_VERSION_4_0_0;
67 }
68
69
70 return MODEL_VERSION_4_0_0;
71 }
72
73
74
75
76
77
78
79
80 public static boolean isValidModelVersion(String modelVersion) {
81 return MODEL_VERSION_4_0_0.equals(modelVersion) || MODEL_VERSION_4_1_0.equals(modelVersion);
82 }
83
84
85
86
87
88
89
90
91 public static boolean canUpgrade(String fromVersion, String toVersion) {
92 if (fromVersion == null || toVersion == null) {
93 return false;
94 }
95
96
97 return MODEL_VERSION_4_0_0.equals(fromVersion) && MODEL_VERSION_4_1_0.equals(toVersion);
98 }
99
100
101
102
103
104
105
106
107 public static boolean isEligibleForInference(String modelVersion) {
108 return MODEL_VERSION_4_0_0.equals(modelVersion) || MODEL_VERSION_4_1_0.equals(modelVersion);
109 }
110
111
112
113
114
115
116
117 public static boolean isNewerThan410(String modelVersion) {
118 if (modelVersion == null) {
119 return false;
120 }
121
122
123
124 try {
125 String[] parts = modelVersion.split("\\.");
126 if (parts.length >= 2) {
127 int major = Integer.parseInt(parts[0]);
128 int minor = Integer.parseInt(parts[1]);
129
130 if (major > 4) {
131 return true;
132 }
133 if (major == 4 && minor > 1) {
134 return true;
135 }
136 if (major == 4 && minor == 1 && parts.length > 2) {
137 int patch = Integer.parseInt(parts[2]);
138 return patch > 0;
139 }
140 }
141 } catch (NumberFormatException e) {
142
143 return false;
144 }
145
146 return false;
147 }
148
149
150
151
152
153
154
155
156 public static boolean isVersionGreaterOrEqual(String modelVersion, String targetVersion) {
157 if (modelVersion == null || targetVersion == null) {
158 return false;
159 }
160
161
162 if (modelVersion.equals(targetVersion)) {
163 return true;
164 }
165
166
167 if (MODEL_VERSION_4_1_0.equals(targetVersion)) {
168 return MODEL_VERSION_4_1_0.equals(modelVersion) || isNewerThan410(modelVersion);
169 }
170
171
172 return false;
173 }
174
175
176
177
178
179
180
181 public static void updateModelVersion(Document pomDocument, String newVersion) {
182 Element root = pomDocument.getRootElement();
183 Namespace namespace = root.getNamespace();
184
185 Element modelVersionElement = root.getChild(MODEL_VERSION, namespace);
186 if (modelVersionElement != null) {
187 modelVersionElement.setText(newVersion);
188 } else {
189
190 Element newModelVersionElement = new Element(MODEL_VERSION, namespace);
191 newModelVersionElement.setText(newVersion);
192
193
194 root.addContent(0, newModelVersionElement);
195 }
196 }
197
198
199
200
201
202
203
204
205 public static boolean removeModelVersion(Document pomDocument) {
206 Element root = pomDocument.getRootElement();
207 Namespace namespace = root.getNamespace();
208
209 Element modelVersionElement = root.getChild(MODEL_VERSION, namespace);
210 if (modelVersionElement != null) {
211 return root.removeContent(modelVersionElement);
212 }
213 return false;
214 }
215
216
217
218
219
220
221
222 public static String getSchemaLocationForModelVersion(String modelVersion) {
223 if (MODEL_VERSION_4_1_0.equals(modelVersion) || isNewerThan410(modelVersion)) {
224 return MAVEN_4_1_0_SCHEMA_LOCATION;
225 }
226 return UpgradeConstants.SchemaLocations.MAVEN_4_0_0_SCHEMA_LOCATION;
227 }
228 }