1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.apache.maven.index.artifact;
20  
21  import java.util.Objects;
22  
23  
24  
25  
26  
27  
28  
29  public class Gav {
30      
31  
32  
33      public enum HashType {
34          sha1,
35          md5,
36          sha256,
37          sha512
38      }
39  
40      
41  
42  
43      public enum SignatureType {
44          gpg;
45  
46          @Override
47          public String toString() {
48              if (this == SignatureType.gpg) {
49                  return "asc";
50              }
51              return "unknown-signature-type";
52          }
53      }
54  
55      private final String groupId;
56  
57      private final String artifactId;
58  
59      private final String version;
60  
61      private final String baseVersion;
62  
63      private final String classifier;
64  
65      private final String extension;
66  
67      private final Integer snapshotBuildNumber;
68  
69      private final Long snapshotTimeStamp;
70  
71      private final String name;
72  
73      private final boolean snapshot;
74  
75      private final boolean hash;
76  
77      private final HashType hashType;
78  
79      private final boolean signature;
80  
81      private final SignatureType signatureType;
82  
83      public Gav(String groupId, String artifactId, String version) {
84          this(groupId, artifactId, version, null, null, null, null, null, false, null, false, null);
85      }
86  
87      public Gav(
88              String groupId,
89              String artifactId,
90              String version,
91              String classifier,
92              String extension,
93              Integer snapshotBuildNumber,
94              Long snapshotTimeStamp,
95              String name,
96              boolean hash,
97              HashType hashType,
98              boolean signature,
99              SignatureType signatureType) {
100         this.groupId = groupId;
101         this.artifactId = artifactId;
102         this.version = version;
103         this.snapshot = VersionUtils.isSnapshot(version);
104 
105         if (!snapshot) {
106             this.baseVersion = null;
107         } else {
108             if (version.contains("SNAPSHOT")) {
109                 
110                 this.baseVersion = null;
111             } else {
112                 
113                 
114                 
115 
116                 
117                 
118                 
119                 
120                 
121                 
122                 
123                 
124                 
125                 
126                 String tempBaseVersion = version.substring(0, version.lastIndexOf('-'));
127                 tempBaseVersion = tempBaseVersion.substring(0, tempBaseVersion.length() - 15);
128 
129                 if (tempBaseVersion.length() > 0) {
130                     this.baseVersion = tempBaseVersion + "SNAPSHOT";
131                 } else {
132                     this.baseVersion = "SNAPSHOT";
133                 }
134                 
135             }
136         }
137 
138         this.classifier = classifier;
139         this.extension = extension;
140         this.snapshotBuildNumber = snapshotBuildNumber;
141         this.snapshotTimeStamp = snapshotTimeStamp;
142         this.name = name;
143         this.hash = hash;
144         this.hashType = hashType;
145         this.signature = signature;
146         this.signatureType = signatureType;
147     }
148 
149     public String getGroupId() {
150         return groupId;
151     }
152 
153     public String getArtifactId() {
154         return artifactId;
155     }
156 
157     public String getVersion() {
158         return version;
159     }
160 
161     public String getBaseVersion() {
162         if (baseVersion == null) {
163             return getVersion();
164         } else {
165             return baseVersion;
166         }
167     }
168 
169     public String getClassifier() {
170         return classifier;
171     }
172 
173     public String getExtension() {
174         return extension;
175     }
176 
177     public String getName() {
178         return name;
179     }
180 
181     public boolean isSnapshot() {
182         return snapshot;
183     }
184 
185     public Integer getSnapshotBuildNumber() {
186         return snapshotBuildNumber;
187     }
188 
189     public Long getSnapshotTimeStamp() {
190         return snapshotTimeStamp;
191     }
192 
193     public boolean isHash() {
194         return hash;
195     }
196 
197     public HashType getHashType() {
198         return hashType;
199     }
200 
201     public boolean isSignature() {
202         return signature;
203     }
204 
205     public SignatureType getSignatureType() {
206         return signatureType;
207     }
208 
209     @Override
210     public boolean equals(Object o) {
211         if (this == o) {
212             return true;
213         }
214         if (o == null || getClass() != o.getClass()) {
215             return false;
216         }
217         Gav gav = (Gav) o;
218         return snapshot == gav.snapshot
219                 && hash == gav.hash
220                 && signature == gav.signature
221                 && Objects.equals(groupId, gav.groupId)
222                 && Objects.equals(artifactId, gav.artifactId)
223                 && Objects.equals(version, gav.version)
224                 && Objects.equals(baseVersion, gav.baseVersion)
225                 && Objects.equals(classifier, gav.classifier)
226                 && Objects.equals(extension, gav.extension)
227                 && Objects.equals(snapshotBuildNumber, gav.snapshotBuildNumber)
228                 && Objects.equals(snapshotTimeStamp, gav.snapshotTimeStamp)
229                 && Objects.equals(name, gav.name)
230                 && hashType == gav.hashType
231                 && signatureType == gav.signatureType;
232     }
233 
234     @Override
235     public int hashCode() {
236         return Objects.hash(
237                 groupId,
238                 artifactId,
239                 version,
240                 baseVersion,
241                 classifier,
242                 extension,
243                 snapshotBuildNumber,
244                 snapshotTimeStamp,
245                 name,
246                 snapshot,
247                 hash,
248                 hashType,
249                 signature,
250                 signatureType);
251     }
252 }