]> source.dussan.org Git - archiva.git/blob
7f3df8554c77c6dd3db49a70e16a69178df1f3cc
[archiva.git] /
1 package org.apache.archiva.repository.base.group;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19
20 import org.apache.archiva.common.filelock.DefaultFileLockManager;
21 import org.apache.archiva.common.filelock.FileLockManager;
22 import org.apache.archiva.repository.EditableRepositoryGroup;
23 import org.apache.archiva.repository.ManagedRepository;
24 import org.apache.archiva.repository.ReleaseScheme;
25 import org.apache.archiva.repository.RepositoryCapabilities;
26 import org.apache.archiva.repository.RepositoryGroup;
27 import org.apache.archiva.repository.RepositoryType;
28 import org.apache.archiva.repository.StandardCapabilities;
29 import org.apache.archiva.repository.base.AbstractRepository;
30 import org.apache.archiva.repository.base.managed.BasicManagedRepository;
31 import org.apache.archiva.repository.features.IndexCreationFeature;
32 import org.apache.archiva.repository.storage.RepositoryStorage;
33 import org.apache.archiva.repository.storage.fs.FilesystemStorage;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 import java.io.IOException;
38 import java.nio.file.Path;
39 import java.util.ArrayList;
40 import java.util.List;
41
42 /**
43  * @author Martin Stockhammer <martin_s@apache.org>
44  */
45 public class BasicRepositoryGroup extends AbstractRepository implements EditableRepositoryGroup
46 {
47     private static final RepositoryCapabilities CAPABILITIES = new StandardCapabilities(
48         new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT },
49         new String[] {},
50         new String[] {},
51         new String[] {IndexCreationFeature.class.getName()},
52         false,
53         false,
54         false,
55         false,
56         false
57     );
58
59     private int mergedIndexTtl  = 0;
60     private boolean hasIndex = false;
61
62     private final Logger log = LoggerFactory.getLogger(BasicRepositoryGroup.class);
63
64     private List<ManagedRepository> repositories = new ArrayList<>(  );
65
66     public BasicRepositoryGroup( String id, String name, RepositoryStorage repositoryStorage )
67     {
68         super( RepositoryType.MAVEN, id, name, repositoryStorage );
69         IndexCreationFeature feature = new IndexCreationFeature( this, null );
70         feature.setLocalIndexPath( repositoryStorage.getRoot( ).resolve(".indexer") );
71         feature.setLocalPackedIndexPath( repositoryStorage.getRoot( ).resolve(".index") );
72         addFeature( feature );
73     }
74
75     @Override
76     public List<ManagedRepository> getRepositories( )
77     {
78         return repositories;
79     }
80
81     @Override
82     public boolean contains( ManagedRepository repository )
83     {
84         return repositories.contains( repository );
85     }
86
87     @Override
88     public boolean contains( String id )
89     {
90         return repositories.stream( ).anyMatch( v -> id.equals( v.getId( ) ) );
91     }
92
93     @Override
94     public int getMergedIndexTTL( )
95     {
96         return mergedIndexTtl;
97     }
98
99     @Override
100     public boolean hasIndex( )
101     {
102         return hasIndex;
103     }
104
105     @Override
106     public RepositoryCapabilities getCapabilities( )
107     {
108         return CAPABILITIES;
109     }
110
111     @Override
112     public void clearRepositories( )
113     {
114         this.repositories.clear( );
115     }
116
117     @Override
118     public void setRepositories( List<ManagedRepository> repositories )
119     {
120         this.repositories.clear();
121         this.repositories.addAll( repositories );
122     }
123
124     @Override
125     public void addRepository( ManagedRepository repository )
126     {
127         if ( !this.repositories.contains( repository ) )
128         {
129             this.repositories.add( repository );
130         }
131     }
132
133     @Override
134     public void addRepository( int index, ManagedRepository repository )
135     {
136         if (!this.repositories.contains( repository )) {
137             this.repositories.add( index, repository );
138         }
139     }
140
141     @Override
142     public boolean removeRepository( ManagedRepository repository )
143     {
144         return this.repositories.remove( repository );
145     }
146
147     @Override
148     public ManagedRepository removeRepository( String repoId )
149     {
150         for (ManagedRepository repo : this.repositories) {
151
152             if (repoId.equals( repo.getId() )) {
153                 this.repositories.remove( repo );
154                 return repo;
155             }
156         }
157         return null;
158     }
159
160     @Override
161     public void setMergedIndexTTL( int timeInSeconds )
162     {
163         this.mergedIndexTtl = timeInSeconds;
164     }
165
166     /**
167      * Creates a filesystem based repository instance. The path is built by basePath/repository-id
168      *
169      * @param id The repository id
170      * @param name The name of the repository
171      * @param repositoryPath The path to the repository
172      * @return The repository instance
173      * @throws IOException
174      */
175     public static BasicRepositoryGroup newFilesystemInstance( String id, String name, Path repositoryPath) throws IOException {
176         FileLockManager lockManager = new DefaultFileLockManager();
177         FilesystemStorage storage = new FilesystemStorage(repositoryPath, lockManager);
178         return new BasicRepositoryGroup(id, name, storage);
179     }
180
181 }