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 org.apache.maven.artifact.versioning.DefaultArtifactVersion;
22 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
23 import org.apache.maven.artifact.versioning.VersionRange;
24
25
26
27
28 public final class RequirementMatcherFactory {
29 private RequirementMatcherFactory() {}
30
31 public static RequirementMatcher createExactMatcher(String provideValue) {
32 return new ExactMatcher(provideValue);
33 }
34
35 public static RequirementMatcher createVersionMatcher(String provideValue) {
36 return new VersionMatcher(provideValue);
37 }
38
39 private static final class ExactMatcher implements RequirementMatcher {
40
41 private String provides;
42
43 private ExactMatcher(String provides) {
44 this.provides = provides;
45 }
46
47 @Override
48 public boolean matches(String requirement) {
49 return provides.equalsIgnoreCase(requirement);
50 }
51
52 @Override
53 public String toString() {
54 return provides;
55 }
56 }
57
58 private static final class VersionMatcher implements RequirementMatcher {
59 DefaultArtifactVersion version;
60
61 private VersionMatcher(String version) {
62 this.version = new DefaultArtifactVersion(version);
63 }
64
65 @Override
66 public boolean matches(String requirement) {
67 try {
68 VersionRange range = VersionRange.createFromVersionSpec(requirement);
69 if (range.hasRestrictions()) {
70 return range.containsVersion(version);
71 } else {
72 return range.getRecommendedVersion().compareTo(version) == 0;
73 }
74 } catch (InvalidVersionSpecificationException ex) {
75 return false;
76 }
77 }
78
79 @Override
80 public String toString() {
81 return version.toString();
82 }
83 }
84 }