]> source.dussan.org Git - archiva.git/blob
4860a3c3271cea1ef19988a1ff4773aa2624fa2d
[archiva.git] /
1 package org.apache.archiva.rest.services;
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  *
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 net.sf.beanlib.provider.replicator.BeanReplicator;
22 import org.apache.archiva.admin.model.RepositoryAdminException;
23 import org.apache.archiva.admin.model.RepositoryCommonValidator;
24 import org.apache.archiva.admin.model.beans.ManagedRepository;
25 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
26 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
27 import org.apache.archiva.metadata.repository.MetadataRepository;
28 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
29 import org.apache.archiva.metadata.repository.RepositorySession;
30 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
31 import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
32 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
33 import org.apache.archiva.rest.api.model.ArchivaRepositoryStatistics;
34 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
35 import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
36 import org.apache.commons.lang.StringUtils;
37 import org.springframework.stereotype.Service;
38
39 import javax.inject.Inject;
40 import javax.inject.Named;
41 import java.io.File;
42 import java.util.Collections;
43 import java.util.List;
44
45 /**
46  * @author Olivier Lamy
47  * @since 1.4-M1
48  */
49 @Service( "managedRepositoriesService#rest" )
50 public class DefaultManagedRepositoriesService
51     extends AbstractRestService
52     implements ManagedRepositoriesService
53 {
54
55     @Inject
56     private ManagedRepositoryAdmin managedRepositoryAdmin;
57
58     @Inject
59     private PlexusSisuBridge plexusSisuBridge;
60
61     @Inject
62     private RepositoryCommonValidator repositoryCommonValidator;
63
64     @Inject
65     private RepositoryStatisticsManager repositoryStatisticsManager;
66
67     @Inject
68     @Named( value = "repositorySessionFactory" )
69     protected RepositorySessionFactory repositorySessionFactory;
70
71
72     public List<ManagedRepository> getManagedRepositories()
73         throws ArchivaRestServiceException
74     {
75         try
76         {
77             List<org.apache.archiva.admin.model.beans.ManagedRepository> repos =
78                 managedRepositoryAdmin.getManagedRepositories();
79             return repos == null ? Collections.<ManagedRepository>emptyList() : repos;
80         }
81         catch ( RepositoryAdminException e )
82         {
83             throw new ArchivaRestServiceException( e.getMessage() );
84         }
85     }
86
87     public ManagedRepository getManagedRepository( String repositoryId )
88         throws ArchivaRestServiceException
89     {
90         List<ManagedRepository> repos = getManagedRepositories();
91         for ( ManagedRepository repo : repos )
92         {
93             if ( StringUtils.equals( repo.getId(), repositoryId ) )
94             {
95                 return repo;
96             }
97         }
98         return null;
99     }
100
101
102     public Boolean deleteManagedRepository( String repoId, boolean deleteContent )
103         throws ArchivaRestServiceException
104     {
105
106         try
107         {
108             return managedRepositoryAdmin.deleteManagedRepository( repoId, getAuditInformation(), deleteContent );
109         }
110         catch ( RepositoryAdminException e )
111         {
112             log.error( e.getMessage(), e );
113             throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName() );
114         }
115     }
116
117     public ManagedRepository addManagedRepository( ManagedRepository managedRepository )
118         throws ArchivaRestServiceException
119     {
120
121         try
122         {
123             boolean res =
124                 managedRepositoryAdmin.addManagedRepository( managedRepository, managedRepository.isStageRepoNeeded(),
125                                                              getAuditInformation() );
126             if ( res )
127             {
128                 return getManagedRepository( managedRepository.getId() );
129             }
130             throw new ArchivaRestServiceException( "fail to created managed Repository" );
131         }
132         catch ( RepositoryAdminException e )
133         {
134             throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName() );
135         }
136     }
137
138
139     public Boolean updateManagedRepository( ManagedRepository managedRepository )
140         throws ArchivaRestServiceException
141     {
142
143         try
144         {
145             return managedRepositoryAdmin.updateManagedRepository( managedRepository,
146                                                                    managedRepository.isStageRepoNeeded(),
147                                                                    getAuditInformation(),
148                                                                    managedRepository.isResetStats() );
149         }
150         catch ( RepositoryAdminException e )
151         {
152             throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName() );
153         }
154     }
155
156     public Boolean fileLocationExists( String fileLocation )
157         throws ArchivaRestServiceException
158     {
159         String location = repositoryCommonValidator.removeExpressions( fileLocation );
160         return new File( location ).exists();
161     }
162
163     public ArchivaRepositoryStatistics getManagedRepositoryStatistics( String repositoryId )
164         throws ArchivaRestServiceException
165     {
166         RepositorySession repositorySession = repositorySessionFactory.createSession();
167         try
168         {
169             MetadataRepository metadataRepository = repositorySession.getRepository();
170
171             RepositoryStatistics stats = null;
172             try
173             {
174                 stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, repositoryId );
175             }
176             catch ( MetadataRepositoryException e )
177             {
178                 log.warn( "Error retrieving repository statistics: " + e.getMessage(), e );
179             }
180             if ( stats != null )
181             {
182                 ArchivaRepositoryStatistics archivaRepositoryStatistics =
183                     new BeanReplicator().replicateBean( stats, ArchivaRepositoryStatistics.class );
184                 archivaRepositoryStatistics.setDuration( archivaRepositoryStatistics.getScanEndTime().getTime()
185                                                              - archivaRepositoryStatistics.getScanStartTime().getTime() );
186                 return archivaRepositoryStatistics;
187             }
188
189         }
190         finally
191         {
192             repositorySession.close();
193         }
194         return null;
195     }
196 }