]> source.dussan.org Git - archiva.git/blob
a8af45def177f8f0b48714365238b885b9222577
[archiva.git] /
1 package org.apache.maven.archiva.web.action.admin.repositories;
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 com.opensymphony.xwork2.Preparable;
23 import org.apache.archiva.admin.model.RepositoryAdminException;
24 import org.apache.archiva.admin.model.group.RepositoryGroupAdmin;
25 import org.apache.archiva.admin.model.managed.ManagedRepository;
26 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
27 import org.apache.archiva.admin.model.remote.RemoteRepository;
28 import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
29 import org.apache.archiva.admin.repository.utils.RepositoryComparator;
30 import org.apache.archiva.metadata.repository.MetadataRepository;
31 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
32 import org.apache.archiva.metadata.repository.RepositorySession;
33 import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
34 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
35 import org.apache.archiva.security.common.ArchivaRoleConstants;
36 import org.apache.archiva.web.util.ContextUtils;
37 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
38 import org.apache.maven.archiva.web.action.AbstractActionSupport;
39 import org.apache.struts2.interceptor.ServletRequestAware;
40 import org.codehaus.plexus.redback.rbac.Resource;
41 import org.codehaus.redback.integration.interceptor.SecureAction;
42 import org.codehaus.redback.integration.interceptor.SecureActionBundle;
43 import org.codehaus.redback.integration.interceptor.SecureActionException;
44 import org.springframework.context.annotation.Scope;
45 import org.springframework.stereotype.Controller;
46
47 import javax.inject.Inject;
48 import javax.servlet.http.HttpServletRequest;
49 import java.util.ArrayList;
50 import java.util.Collections;
51 import java.util.HashMap;
52 import java.util.List;
53 import java.util.Map;
54
55 /**
56  * Shows the Repositories Tab for the administrator.
57  *
58  * @version $Id$
59  */
60 @Controller( "repositoriesAction" )
61 @Scope( "prototype" )
62 public class RepositoriesAction
63     extends AbstractActionSupport
64     implements SecureAction, ServletRequestAware, Preparable
65 {
66
67     @Inject
68     private ManagedRepositoryAdmin managedRepositoryAdmin;
69
70     @Inject
71     private RemoteRepositoryAdmin remoteRepositoryAdmin;
72
73     @Inject
74     private RepositoryGroupAdmin repositoryGroupAdmin;
75
76     private List<ManagedRepository> managedRepositories;
77
78     private List<RemoteRepository> remoteRepositories;
79
80     private Map<String, RepositoryStatistics> repositoryStatistics;
81
82     private Map<String, List<String>> repositoryToGroupMap;
83
84     /**
85      * Used to construct the repository WebDAV URL in the repository action.
86      */
87     private String baseUrl;
88
89
90     @Inject
91     private RepositoryStatisticsManager repositoryStatisticsManager;
92
93     public void setServletRequest( HttpServletRequest request )
94     {
95         // TODO: is there a better way to do this?
96         this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
97     }
98
99     public SecureActionBundle getSecureActionBundle()
100         throws SecureActionException
101     {
102         SecureActionBundle bundle = new SecureActionBundle();
103
104         bundle.setRequiresAuthentication( true );
105         bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
106
107         return bundle;
108     }
109
110     @SuppressWarnings( "unchecked" )
111     public void prepare()
112         throws RepositoryAdminException
113     {
114         remoteRepositories = new ArrayList<RemoteRepository>( getRemoteRepositoryAdmin().getRemoteRepositories() );
115         managedRepositories = new ArrayList<ManagedRepository>( getManagedRepositoryAdmin().getManagedRepositories() );
116         repositoryToGroupMap = getRepositoryGroupAdmin().getRepositoryToGroupMap();
117
118         Collections.sort( managedRepositories, new RepositoryComparator() );
119         Collections.sort( remoteRepositories, new RepositoryComparator() );
120
121         repositoryStatistics = new HashMap<String, RepositoryStatistics>();
122         RepositorySession repositorySession = repositorySessionFactory.createSession();
123         try
124         {
125             MetadataRepository metadataRepository = repositorySession.getRepository();
126             for ( ManagedRepository repo : managedRepositories )
127             {
128                 RepositoryStatistics stats = null;
129                 try
130                 {
131                     stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, repo.getId() );
132                 }
133                 catch ( MetadataRepositoryException e )
134                 {
135                     addActionError(
136                         "Error retrieving statistics for repository " + repo.getId() + " - consult application logs" );
137                     log.warn( "Error retrieving repository statistics: " + e.getMessage(), e );
138                 }
139                 if ( stats != null )
140                 {
141                     repositoryStatistics.put( repo.getId(), stats );
142                 }
143             }
144         }
145         finally
146         {
147             repositorySession.close();
148         }
149     }
150
151     public List<ManagedRepository> getManagedRepositories()
152     {
153         List<ManagedRepository> managedRepositoriesList = new ArrayList<ManagedRepository>();
154         for ( ManagedRepository repoConfig : managedRepositories )
155         {
156             if ( !repoConfig.getId().endsWith( "-stage" ) )
157             {
158                 managedRepositoriesList.add( repoConfig );
159             }
160         }
161         return managedRepositoriesList;
162     }
163
164     public List<RemoteRepository> getRemoteRepositories()
165     {
166         return remoteRepositories;
167     }
168
169     public Map<String, RepositoryStatistics> getRepositoryStatistics()
170     {
171         return repositoryStatistics;
172     }
173
174     public String getBaseUrl()
175     {
176         return baseUrl;
177     }
178
179     public Map<String, List<String>> getRepositoryToGroupMap()
180     {
181         return repositoryToGroupMap;
182     }
183
184     public ManagedRepositoryAdmin getManagedRepositoryAdmin()
185     {
186         return managedRepositoryAdmin;
187     }
188
189     public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
190     {
191         this.managedRepositoryAdmin = managedRepositoryAdmin;
192     }
193
194     public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
195     {
196         return remoteRepositoryAdmin;
197     }
198
199     public void setRemoteRepositoryAdmin( RemoteRepositoryAdmin remoteRepositoryAdmin )
200     {
201         this.remoteRepositoryAdmin = remoteRepositoryAdmin;
202     }
203
204     public RepositoryGroupAdmin getRepositoryGroupAdmin()
205     {
206         return repositoryGroupAdmin;
207     }
208
209     public void setRepositoryGroupAdmin( RepositoryGroupAdmin repositoryGroupAdmin )
210     {
211         this.repositoryGroupAdmin = repositoryGroupAdmin;
212     }
213
214     public RepositoryStatisticsManager getRepositoryStatisticsManager()
215     {
216         return repositoryStatisticsManager;
217     }
218
219     public void setRepositoryStatisticsManager( RepositoryStatisticsManager repositoryStatisticsManager )
220     {
221         this.repositoryStatisticsManager = repositoryStatisticsManager;
222     }
223 }