]> source.dussan.org Git - archiva.git/blob
39ebc2b3cd6e4c24b50e08b13c52fdf11c86e311
[archiva.git] /
1 package org.apache.archiva.repository.maven.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  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  */
20
21 import org.apache.archiva.common.filelock.FileLockManager;
22 import org.apache.archiva.configuration.FileTypes;
23 import org.apache.archiva.repository.ManagedRepositoryContent;
24 import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider;
25 import org.apache.archiva.repository.ManagedRepository;
26 import org.apache.archiva.repository.BaseRepositoryContentLayout;
27 import org.apache.archiva.repository.RemoteRepository;
28 import org.apache.archiva.repository.RemoteRepositoryContent;
29 import org.apache.archiva.repository.Repository;
30 import org.apache.archiva.repository.RepositoryContent;
31 import org.apache.archiva.repository.RepositoryContentProvider;
32 import org.apache.archiva.repository.RepositoryException;
33 import org.apache.archiva.repository.RepositoryType;
34 import org.springframework.stereotype.Service;
35
36 import javax.inject.Inject;
37 import javax.inject.Named;
38 import java.util.HashSet;
39 import java.util.List;
40 import java.util.Set;
41
42 /**
43  * Maven implementation of the repository content provider. Only default layout and
44  * maven repository types are supported.
45  */
46 @Service("repositoryContentProvider#maven")
47 public class MavenContentProvider implements RepositoryContentProvider
48 {
49
50     @Inject
51     @Named( "fileTypes" )
52     private FileTypes filetypes;
53
54     @Inject
55     private FileLockManager fileLockManager;
56
57     @Inject
58     protected List<? extends ArtifactMappingProvider> artifactMappingProviders;
59
60     @Inject
61     @Named("MavenContentHelper")
62     MavenContentHelper mavenContentHelper;
63
64     private static final Set<RepositoryType> REPOSITORY_TYPES = new HashSet<>(  );
65     static {
66         REPOSITORY_TYPES.add(RepositoryType.MAVEN);
67     }
68
69     @Override
70     public boolean supportsLayout( String layout )
71     {
72         return "default".equals( layout );
73     }
74
75     @Override
76     public Set<RepositoryType> getSupportedRepositoryTypes( )
77     {
78         return REPOSITORY_TYPES;
79     }
80
81     @Override
82     public boolean supports( RepositoryType type )
83     {
84         return type.equals( RepositoryType.MAVEN );
85     }
86
87     @Override
88     public RemoteRepositoryContent createRemoteContent( RemoteRepository repository ) throws RepositoryException
89     {
90         if (!supports( repository.getType() )) {
91             throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." );
92         }
93         if (!supportsLayout( repository.getLayout() )) {
94             throw new RepositoryException( "Repository layout "+repository.getLayout()+" is not supported by this implementation." );
95         }
96         RemoteDefaultRepositoryContent content = new RemoteDefaultRepositoryContent(artifactMappingProviders);
97         content.setRepository( repository );
98         return content;
99     }
100
101     @Override
102     public ManagedRepositoryContent createManagedContent( ManagedRepository repository ) throws RepositoryException
103     {
104         if (!supports( repository.getType() )) {
105             throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." );
106         }
107         if (!supportsLayout( repository.getLayout() )) {
108             throw new RepositoryException( "Repository layout "+repository.getLayout()+" is not supported by this implementation." );
109         }
110         ManagedDefaultRepositoryContent content = new ManagedDefaultRepositoryContent(repository, artifactMappingProviders, filetypes ,fileLockManager);
111         content.setMavenContentHelper( mavenContentHelper );
112         return content;
113     }
114
115     @SuppressWarnings( "unchecked" )
116     @Override
117     public <T extends RepositoryContent, V extends Repository> T createContent( Class<T> clazz, V repository ) throws RepositoryException
118     {
119         if (!supports( repository.getType() )) {
120             throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." );
121         }
122         if (repository instanceof ManagedRepository && BaseRepositoryContentLayout.class.isAssignableFrom( clazz ) ) {
123             return (T) this.createManagedContent( (ManagedRepository) repository );
124         } else if (repository instanceof RemoteRepository && RemoteRepository.class.isAssignableFrom( clazz )) {
125             return (T) this.createRemoteContent( (RemoteRepository) repository );
126         } else {
127             throw new RepositoryException( "Repository flavour is not supported: "+repository.getClass().getName() );
128         }
129     }
130
131 }