]> source.dussan.org Git - archiva.git/blob
5e81f868af870c110d74c8616245c4de67ea8f7d
[archiva.git] /
1 package org.apache.archiva.maven.repository;
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.DefaultFileLockManager;
22 import org.apache.archiva.common.filelock.FileLockManager;
23 import org.apache.archiva.indexer.ArchivaIndexingContext;
24 import org.apache.archiva.maven.repository.content.MavenRepositoryRequestInfo;
25 import org.apache.archiva.repository.ReleaseScheme;
26 import org.apache.archiva.repository.RepositoryCapabilities;
27 import org.apache.archiva.repository.RepositoryRequestInfo;
28 import org.apache.archiva.repository.RepositoryState;
29 import org.apache.archiva.repository.RepositoryType;
30 import org.apache.archiva.repository.StandardCapabilities;
31 import org.apache.archiva.repository.UnsupportedFeatureException;
32 import org.apache.archiva.repository.base.managed.AbstractManagedRepository;
33 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
34 import org.apache.archiva.repository.features.IndexCreationFeature;
35 import org.apache.archiva.repository.features.RepositoryFeature;
36 import org.apache.archiva.repository.features.StagingRepositoryFeature;
37 import org.apache.archiva.repository.storage.fs.FilesystemStorage;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40
41 import java.io.IOException;
42 import java.nio.file.Path;
43 import java.util.Locale;
44
45 /**
46  * Maven2 managed repository implementation.
47  */
48 public class MavenManagedRepository extends AbstractManagedRepository
49 {
50
51     private static final Logger log = LoggerFactory.getLogger( MavenManagedRepository.class );
52
53     public static final String DEFAULT_LAYOUT = "default";
54     public static final String LEGACY_LAYOUT = "legacy";
55     private ArtifactCleanupFeature artifactCleanupFeature = new ArtifactCleanupFeature( );
56     private IndexCreationFeature indexCreationFeature;
57     private StagingRepositoryFeature stagingRepositoryFeature = new StagingRepositoryFeature(  );
58
59     
60
61     private static final RepositoryCapabilities CAPABILITIES = new StandardCapabilities(
62         new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT },
63         new String[] { DEFAULT_LAYOUT, LEGACY_LAYOUT},
64         new String[] {},
65         new String[] {ArtifactCleanupFeature.class.getName(), IndexCreationFeature.class.getName(),
66             StagingRepositoryFeature.class.getName()},
67         true,
68         true,
69         true,
70         true,
71         false
72     );
73
74     public MavenManagedRepository(String id, String name, FilesystemStorage storage)
75     {
76
77         super( RepositoryType.MAVEN, id, name, storage);
78         this.indexCreationFeature = new IndexCreationFeature(this, this);
79         setLocation(storage.getRoot().getFilePath().toUri());
80         setLastState( RepositoryState.CREATED );
81     }
82
83     public MavenManagedRepository( Locale primaryLocale, String id, String name, FilesystemStorage storage )
84     {
85         super( primaryLocale, RepositoryType.MAVEN, id, name, storage );
86         setLocation(storage.getRoot().getFilePath().toUri());
87         setLastState( RepositoryState.CREATED );
88     }
89
90     @Override
91     public RepositoryCapabilities getCapabilities( )
92     {
93         return CAPABILITIES;
94     }
95
96
97     @SuppressWarnings( "unchecked" )
98     @Override
99     public <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature( Class<T> clazz ) throws UnsupportedFeatureException
100     {
101         if (ArtifactCleanupFeature.class.equals( clazz ))
102         {
103             return (RepositoryFeature<T>) artifactCleanupFeature;
104         } else if (IndexCreationFeature.class.equals(clazz)) {
105             return (RepositoryFeature<T>) indexCreationFeature;
106         } else if (StagingRepositoryFeature.class.equals(clazz)) {
107             return (RepositoryFeature<T>) stagingRepositoryFeature;
108         } else {
109             throw new UnsupportedFeatureException(  );
110         }
111     }
112
113     @Override
114     public <T extends RepositoryFeature<T>> boolean supportsFeature( Class<T> clazz )
115     {
116         if (ArtifactCleanupFeature.class.equals(clazz) ||
117             IndexCreationFeature.class.equals(clazz) ||
118             StagingRepositoryFeature.class.equals(clazz)) {
119             return true;
120         }
121         return false;
122     }
123
124     @Override
125     public boolean hasIndex( )
126     {
127         return indexCreationFeature.hasIndex();
128     }
129
130     @Override
131     public RepositoryRequestInfo getRequestInfo() {
132         return new MavenRepositoryRequestInfo(this);
133     }
134
135     public static MavenManagedRepository newLocalInstance(String id, String name, Path basePath) throws IOException {
136         FileLockManager lockManager = new DefaultFileLockManager();
137         FilesystemStorage storage = new FilesystemStorage(basePath.resolve(id), lockManager);
138         return new MavenManagedRepository(id, name, storage);
139     }
140
141     @Override
142     public void setIndexingContext(ArchivaIndexingContext context) {
143         super.setIndexingContext(context);
144     }
145
146 }