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