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 org.apache.maven.artifact.Artifact;
22 import org.apache.maven.artifact.handler.ArtifactHandler;
23 import org.apache.maven.artifact.metadata.ArtifactMetadata;
24 import org.apache.maven.artifact.repository.ArtifactRepository;
25 import org.codehaus.plexus.component.annotations.Component;
26
27
28
29
30 @Component(role = ArtifactRepositoryLayout.class, hint = "default")
31 public class DefaultRepositoryLayout implements ArtifactRepositoryLayout {
32 private static final char PATH_SEPARATOR = '/';
33
34 private static final char GROUP_SEPARATOR = '.';
35
36 private static final char ARTIFACT_SEPARATOR = '-';
37
38 public String getId() {
39 return "default";
40 }
41
42 public String pathOf(Artifact artifact) {
43 ArtifactHandler artifactHandler = artifact.getArtifactHandler();
44
45 StringBuilder path = new StringBuilder(128);
46
47 path.append(formatAsDirectory(artifact.getGroupId())).append(PATH_SEPARATOR);
48 path.append(artifact.getArtifactId()).append(PATH_SEPARATOR);
49 path.append(artifact.getBaseVersion()).append(PATH_SEPARATOR);
50 path.append(artifact.getArtifactId()).append(ARTIFACT_SEPARATOR).append(artifact.getVersion());
51
52 if (artifact.hasClassifier()) {
53 path.append(ARTIFACT_SEPARATOR).append(artifact.getClassifier());
54 }
55
56 if (artifactHandler.getExtension() != null
57 && artifactHandler.getExtension().length() > 0) {
58 path.append(GROUP_SEPARATOR).append(artifactHandler.getExtension());
59 }
60
61 return path.toString();
62 }
63
64 public String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata, ArtifactRepository repository) {
65 return pathOfRepositoryMetadata(metadata, metadata.getLocalFilename(repository));
66 }
67
68 private String pathOfRepositoryMetadata(ArtifactMetadata metadata, String filename) {
69 StringBuilder path = new StringBuilder(128);
70
71 path.append(formatAsDirectory(metadata.getGroupId())).append(PATH_SEPARATOR);
72 if (!metadata.storedInGroupDirectory()) {
73 path.append(metadata.getArtifactId()).append(PATH_SEPARATOR);
74
75 if (metadata.storedInArtifactVersionDirectory()) {
76 path.append(metadata.getBaseVersion()).append(PATH_SEPARATOR);
77 }
78 }
79
80 path.append(filename);
81
82 return path.toString();
83 }
84
85 public String pathOfRemoteRepositoryMetadata(ArtifactMetadata metadata) {
86 return pathOfRepositoryMetadata(metadata, metadata.getRemoteFilename());
87 }
88
89 private String formatAsDirectory(String directory) {
90 return directory.replace(GROUP_SEPARATOR, PATH_SEPARATOR);
91 }
92
93 @Override
94 public String toString() {
95 return getId();
96 }
97 }