]> source.dussan.org Git - archiva.git/blob
dbee3bf0fbfa790fc057b973a7df8281464267d1
[archiva.git] /
1 package org.apache.maven.archiva.repository.content;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
23 import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
24 import org.apache.commons.lang.StringUtils;
25 import org.apache.maven.archiva.common.utils.VersionUtil;
26 import org.apache.maven.archiva.model.ArchivaArtifact;
27 import org.apache.maven.archiva.model.ArtifactReference;
28 import org.apache.maven.archiva.model.ProjectReference;
29 import org.apache.maven.archiva.model.VersionedReference;
30 import org.apache.maven.archiva.repository.layout.LayoutException;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34 /**
35  * AbstractDefaultRepositoryContent - common methods for working with default (maven 2) layout.
36  *
37  * @version $Id$
38  */
39 public abstract class AbstractDefaultRepositoryContent
40 {
41     protected Logger log = LoggerFactory.getLogger( AbstractDefaultRepositoryContent.class );
42
43     public static final String MAVEN_METADATA = "maven-metadata.xml";
44
45     protected static final char PATH_SEPARATOR = '/';
46
47     protected static final char GROUP_SEPARATOR = '.';
48
49     protected static final char ARTIFACT_SEPARATOR = '-';
50
51     private RepositoryPathTranslator pathTranslator = new Maven2RepositoryPathTranslator();
52
53     private PathParser defaultPathParser = new DefaultPathParser();
54
55     public ArtifactReference toArtifactReference( String path )
56         throws LayoutException
57     {
58         return defaultPathParser.toArtifactReference( path );
59     }
60
61     public String toMetadataPath( ProjectReference reference )
62     {
63         StringBuffer path = new StringBuffer();
64
65         path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
66         path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
67         path.append( MAVEN_METADATA );
68
69         return path.toString();
70     }
71
72     public String toMetadataPath( VersionedReference reference )
73     {
74         StringBuffer path = new StringBuffer();
75
76         path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
77         path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
78         if ( reference.getVersion() != null )
79         {
80             // add the version only if it is present
81             path.append( VersionUtil.getBaseVersion( reference.getVersion() ) ).append( PATH_SEPARATOR );
82         }
83         path.append( MAVEN_METADATA );
84
85         return path.toString();
86     }
87
88     public String toPath( ArchivaArtifact reference )
89     {
90         if ( reference == null )
91         {
92             throw new IllegalArgumentException( "ArchivaArtifact cannot be null" );
93         }
94
95         String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
96         return toPath( reference.getGroupId(), reference.getArtifactId(), baseVersion, reference.getVersion(),
97                        reference.getClassifier(), reference.getType() );
98     }
99
100     public String toPath( ArtifactReference reference )
101     {
102         if ( reference == null )
103         {
104             throw new IllegalArgumentException( "Artifact reference cannot be null" );
105         }
106
107         String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
108         return toPath( reference.getGroupId(), reference.getArtifactId(), baseVersion, reference.getVersion(),
109                        reference.getClassifier(), reference.getType() );
110     }
111
112     private String formatAsDirectory( String directory )
113     {
114         return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
115     }
116
117     private String toPath( String groupId, String artifactId, String baseVersion, String version, String classifier,
118                            String type )
119     {
120         if ( baseVersion != null )
121         {
122             return pathTranslator.toPath( groupId, artifactId, baseVersion, constructId( artifactId, version,
123                                                                                          classifier, type ) );
124         }
125         else
126         {
127             return pathTranslator.toPath( groupId, artifactId );
128         }
129     }
130
131     // TODO: move into the Maven Artifact facet when refactoring away the caller - the caller will need to have access
132     //       to the facet or filename (for the original ID)
133     private String constructId( String artifactId, String version, String classifier, String type )
134     {
135         StringBuilder id = new StringBuilder();
136         if ( ( version != null ) && ( type != null ) )
137         {
138             id.append( artifactId ).append( ARTIFACT_SEPARATOR ).append( version );
139
140             if ( StringUtils.isNotBlank( classifier ) )
141             {
142                 id.append( ARTIFACT_SEPARATOR ).append( classifier );
143             }
144
145             id.append( "." ).append( ArtifactExtensionMapping.getExtension( type ) );
146         }
147         return id.toString();
148     }
149 }