]> source.dussan.org Git - archiva.git/blob
1975b097f9ef59c8084ead4b6beb424719ba6cbe
[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.repository.RepositoryAdminException;
24 import org.apache.archiva.admin.repository.managed.ManagedRepository;
25 import org.apache.archiva.admin.repository.managed.ManagedRepositoryAdmin;
26 import org.apache.archiva.admin.repository.remote.RemoteRepository;
27 import org.apache.archiva.admin.repository.remote.RemoteRepositoryAdmin;
28 import org.apache.archiva.admin.repository.utils.RepositoryComparator;
29 import org.apache.archiva.metadata.repository.MetadataRepository;
30 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
31 import org.apache.archiva.metadata.repository.RepositorySession;
32 import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
33 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
34 import org.apache.archiva.security.common.ArchivaRoleConstants;
35 import org.apache.archiva.web.util.ContextUtils;
36 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
37 import org.apache.maven.archiva.configuration.Configuration;
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 ArchivaConfiguration archivaConfiguration;
69
70     @Inject
71     private ManagedRepositoryAdmin managedRepositoryAdmin;
72
73     @Inject
74     private RemoteRepositoryAdmin remoteRepositoryAdmin;
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         Configuration config = archivaConfiguration.getConfiguration();
115
116         remoteRepositories = new ArrayList<RemoteRepository>( getRemoteRepositoryAdmin().getRemoteRepositories() );
117         managedRepositories = new ArrayList<ManagedRepository>( getManagedRepositoryAdmin().getManagedRepositories() );
118         repositoryToGroupMap = config.getRepositoryToGroupMap();
119
120         Collections.sort( managedRepositories, new RepositoryComparator() );
121         Collections.sort( remoteRepositories, new RepositoryComparator() );
122
123         repositoryStatistics = new HashMap<String, RepositoryStatistics>();
124         RepositorySession repositorySession = repositorySessionFactory.createSession();
125         try
126         {
127             MetadataRepository metadataRepository = repositorySession.getRepository();
128             for ( ManagedRepository repo : managedRepositories )
129             {
130                 RepositoryStatistics stats = null;
131                 try
132                 {
133                     stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, repo.getId() );
134                 }
135                 catch ( MetadataRepositoryException e )
136                 {
137                     addActionError(
138                         "Error retrieving statistics for repository " + repo.getId() + " - consult application logs" );
139                     log.warn( "Error retrieving repository statistics: " + e.getMessage(), e );
140                 }
141                 if ( stats != null )
142                 {
143                     repositoryStatistics.put( repo.getId(), stats );
144                 }
145             }
146         }
147         finally
148         {
149             repositorySession.close();
150         }
151     }
152
153     public List<ManagedRepository> getManagedRepositories()
154     {
155         List<ManagedRepository> managedRepositoriesList = new ArrayList<ManagedRepository>();
156         for ( ManagedRepository repoConfig : managedRepositories )
157         {
158             if ( !repoConfig.getId().endsWith( "-stage" ) )
159             {
160                 managedRepositoriesList.add( repoConfig );
161             }
162         }
163         return managedRepositoriesList;
164     }
165
166     public List<RemoteRepository> getRemoteRepositories()
167     {
168         return remoteRepositories;
169     }
170
171     public Map<String, RepositoryStatistics> getRepositoryStatistics()
172     {
173         return repositoryStatistics;
174     }
175
176     public String getBaseUrl()
177     {
178         return baseUrl;
179     }
180
181     public Map<String, List<String>> getRepositoryToGroupMap()
182     {
183         return repositoryToGroupMap;
184     }
185
186     public ManagedRepositoryAdmin getManagedRepositoryAdmin()
187     {
188         return managedRepositoryAdmin;
189     }
190
191     public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
192     {
193         this.managedRepositoryAdmin = managedRepositoryAdmin;
194     }
195
196     public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
197     {
198         return remoteRepositoryAdmin;
199     }
200
201     public void setRemoteRepositoryAdmin( RemoteRepositoryAdmin remoteRepositoryAdmin )
202     {
203         this.remoteRepositoryAdmin = remoteRepositoryAdmin;
204     }
205 }