1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.artifact.repository.layout;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import org.apache.maven.artifact.Artifact;
25 import org.apache.maven.artifact.handler.ArtifactHandler;
26 import org.apache.maven.artifact.metadata.ArtifactMetadata;
27 import org.apache.maven.artifact.repository.ArtifactRepository;
28
29
30
31 @Named("default")
32 @Singleton
33 public class DefaultRepositoryLayout implements ArtifactRepositoryLayout {
34 private static final char PATH_SEPARATOR = '/';
35
36 private static final char GROUP_SEPARATOR = '.';
37
38 private static final char ARTIFACT_SEPARATOR = '-';
39
40 public String getId() {
41 return "default";
42 }
43
44 public String pathOf(Artifact artifact) {
45 ArtifactHandler artifactHandler = artifact.getArtifactHandler();
46
47 StringBuilder path = new StringBuilder(128);
48
49 path.append(formatAsDirectory(artifact.getGroupId())).append(PATH_SEPARATOR);
50 path.append(artifact.getArtifactId()).append(PATH_SEPARATOR);
51 path.append(artifact.getBaseVersion()).append(PATH_SEPARATOR);
52 path.append(artifact.getArtifactId()).append(ARTIFACT_SEPARATOR).append(artifact.getVersion());
53
54 if (artifact.hasClassifier()) {
55 path.append(ARTIFACT_SEPARATOR).append(artifact.getClassifier());
56 }
57
58 if (artifactHandler.getExtension() != null
59 && !artifactHandler.getExtension().isEmpty()) {
60 path.append(GROUP_SEPARATOR).append(artifactHandler.getExtension());
61 }
62
63 return path.toString();
64 }
65
66 public String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata, ArtifactRepository repository) {
67 return pathOfRepositoryMetadata(metadata, metadata.getLocalFilename(repository));
68 }
69
70 private String pathOfRepositoryMetadata(ArtifactMetadata metadata, String filename) {
71 StringBuilder path = new StringBuilder(128);
72
73 path.append(formatAsDirectory(metadata.getGroupId())).append(PATH_SEPARATOR);
74 if (!metadata.storedInGroupDirectory()) {
75 path.append(metadata.getArtifactId()).append(PATH_SEPARATOR);
76
77 if (metadata.storedInArtifactVersionDirectory()) {
78 path.append(metadata.getBaseVersion()).append(PATH_SEPARATOR);
79 }
80 }
81
82 path.append(filename);
83
84 return path.toString();
85 }
86
87 public String pathOfRemoteRepositoryMetadata(ArtifactMetadata metadata) {
88 return pathOfRepositoryMetadata(metadata, metadata.getRemoteFilename());
89 }
90
91 private String formatAsDirectory(String directory) {
92 return directory.replace(GROUP_SEPARATOR, PATH_SEPARATOR);
93 }
94
95 @Override
96 public String toString() {
97 return getId();
98 }
99 }