1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.internal.impl;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.util.Objects;
25 import java.util.regex.Pattern;
26
27 import org.apache.maven.api.Version;
28 import org.apache.maven.api.VersionRange;
29 import org.apache.maven.api.services.VersionParser;
30 import org.apache.maven.api.services.VersionParserException;
31 import org.apache.maven.artifact.versioning.ArtifactVersion;
32 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
33 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
34
35 import static org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec;
36 import static org.apache.maven.internal.impl.Utils.nonNull;
37
38 @Named
39 @Singleton
40 public class DefaultVersionParser implements VersionParser {
41 private static final String SNAPSHOT = "SNAPSHOT";
42 private static final Pattern SNAPSHOT_TIMESTAMP = Pattern.compile("^(.*-)?([0-9]{8}\\.[0-9]{6}-[0-9]+)$");
43
44 @Override
45 public Version parseVersion(String version) {
46 return new DefaultVersion(new DefaultArtifactVersion(nonNull(version, "version")));
47 }
48
49 @Override
50 public VersionRange parseVersionRange(String range) {
51 try {
52 return new DefaultVersionRange(createFromVersionSpec(nonNull(range, "version")));
53 } catch (InvalidVersionSpecificationException e) {
54 throw new VersionParserException("Unable to parse version range: " + range, e);
55 }
56 }
57
58 @Override
59 public boolean isSnapshot(String version) {
60 return checkSnapshot(version);
61 }
62
63 static boolean checkSnapshot(String version) {
64 return version.endsWith(SNAPSHOT) || SNAPSHOT_TIMESTAMP.matcher(version).matches();
65 }
66
67 static class DefaultVersion implements Version {
68 private final ArtifactVersion delegate;
69
70 DefaultVersion(ArtifactVersion delegate) {
71 this.delegate = delegate;
72 }
73
74 @Override
75 public int compareTo(Version o) {
76 if (o instanceof DefaultVersion) {
77 return delegate.compareTo(((DefaultVersion) o).delegate);
78 } else {
79 return delegate.compareTo(new DefaultArtifactVersion(o.toString()));
80 }
81 }
82
83 @Override
84 public boolean equals(Object o) {
85 if (this == o) {
86 return true;
87 }
88 if (o == null || getClass() != o.getClass()) {
89 return false;
90 }
91 DefaultVersion that = (DefaultVersion) o;
92 return delegate.equals(that.delegate);
93 }
94
95 @Override
96 public int hashCode() {
97 return Objects.hash(delegate);
98 }
99
100 @Override
101 public String asString() {
102 return delegate.toString();
103 }
104
105 @Override
106 public String toString() {
107 return asString();
108 }
109 }
110
111 static class DefaultVersionRange implements VersionRange {
112 private final org.apache.maven.artifact.versioning.VersionRange delegate;
113
114 DefaultVersionRange(org.apache.maven.artifact.versioning.VersionRange delegate) {
115 this.delegate = delegate;
116 }
117
118 @Override
119 public boolean contains(Version version) {
120 if (version instanceof DefaultVersion) {
121 return delegate.containsVersion(((DefaultVersion) version).delegate);
122 } else {
123 return delegate.containsVersion(new DefaultArtifactVersion(version.toString()));
124 }
125 }
126
127 @Override
128 public String asString() {
129 return delegate.toString();
130 }
131
132 @Override
133 public String toString() {
134 return asString();
135 }
136 }
137 }