]> source.dussan.org Git - archiva.git/blob
5107e7c9a37d9097c9bf9e04a809cc0b602ec816
[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.audit.AuditEvent;
24 import org.apache.archiva.metadata.repository.MetadataRepository;
25 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
26 import org.apache.commons.lang.StringUtils;
27 import org.apache.maven.archiva.configuration.Configuration;
28 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
29 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
30 import org.codehaus.plexus.redback.role.RoleManagerException;
31
32 import java.io.IOException;
33 import java.util.List;
34 import java.util.Map;
35
36 /**
37  * DeleteManagedRepositoryAction
38  * 
39  * @version $Id$
40  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="deleteManagedRepositoryAction" instantiation-strategy="per-lookup"
41  */
42 public class DeleteManagedRepositoryAction
43     extends AbstractManagedRepositoriesAction
44     implements Preparable
45 {
46     private ManagedRepositoryConfiguration repository;
47
48     private String repoid;
49
50     /**
51      * @plexus.requirement
52      */
53     private RepositoryStatisticsManager repositoryStatisticsManager;
54
55     /**
56      * @plexus.requirement
57      */
58     private MetadataRepository metadataRepository;
59
60     public void prepare()
61     {
62         if ( StringUtils.isNotBlank( repoid ) )
63         {
64             this.repository = archivaConfiguration.getConfiguration().findManagedRepositoryById( repoid );
65         }
66     }
67
68     public String confirmDelete()
69     {
70         if ( StringUtils.isBlank( repoid ) )
71         {
72             addActionError( "Unable to delete managed repository: repository id was blank." );
73             return ERROR;
74         }
75
76         return INPUT;
77     }
78
79     public String deleteEntry()
80     {
81         return deleteRepository( false );
82     }
83
84     public String deleteContents()
85     {
86         return deleteRepository( true );
87     }
88
89     private String deleteRepository( boolean deleteContents )
90     {   
91         ManagedRepositoryConfiguration existingRepository = repository;
92         if ( existingRepository == null )
93         {
94             addActionError( "A repository with that id does not exist" );
95             return ERROR;
96         }
97
98         String result;
99
100         try
101         {
102             Configuration configuration = archivaConfiguration.getConfiguration();
103             cleanupRepositoryData( existingRepository );
104             removeRepository( repoid, configuration );
105             triggerAuditEvent( repoid, null, AuditEvent.DELETE_MANAGED_REPO );
106             result = saveConfiguration( configuration );
107
108             if ( result.equals( SUCCESS ) )
109             {
110                 if ( deleteContents )
111                 {
112                     removeContents( existingRepository );
113                 }
114             }
115         }
116         catch ( IOException e )
117         {
118             addActionError( "Unable to delete repository: " + e.getMessage() );
119             result = ERROR;
120         }
121         catch ( RoleManagerException e )
122         {
123             addActionError( "Unable to delete repository: " + e.getMessage() );
124             result = ERROR;
125         }
126
127         return result;
128     }
129
130     private void cleanupRepositoryData( ManagedRepositoryConfiguration cleanupRepository )
131         throws RoleManagerException
132     {
133         removeRepositoryRoles( cleanupRepository );
134         cleanupDatabase( cleanupRepository.getId() );
135         repositoryStatisticsManager.deleteStatistics( cleanupRepository.getId() );
136         // TODO: delete all content for a repository from the content API?
137
138         List<ProxyConnectorConfiguration> proxyConnectors = getProxyConnectors();
139         for ( ProxyConnectorConfiguration proxyConnector : proxyConnectors )
140         {
141             if ( StringUtils.equals( proxyConnector.getSourceRepoId(), cleanupRepository.getId() ) )
142             {
143                 archivaConfiguration.getConfiguration().removeProxyConnector( proxyConnector );
144             }
145         }
146
147         Map<String, List<String>> repoToGroupMap = archivaConfiguration.getConfiguration().getRepositoryToGroupMap();
148         if( repoToGroupMap != null )
149         {
150             if( repoToGroupMap.containsKey( cleanupRepository.getId() ) )
151             {
152                 List<String> repoGroups = repoToGroupMap.get( cleanupRepository.getId() );
153                 for( String repoGroup : repoGroups )
154                 {
155                     archivaConfiguration.getConfiguration().findRepositoryGroupById( repoGroup ).removeRepository( cleanupRepository.getId() );
156                 }
157             }            
158         }
159     }
160
161     private void cleanupDatabase( String repoId )
162     {
163         metadataRepository.deleteRepository( repoId );
164     }
165
166     public ManagedRepositoryConfiguration getRepository()
167     {
168         return repository;
169     }
170
171     public void setRepository( ManagedRepositoryConfiguration repository )
172     {
173         this.repository = repository;
174     }
175
176     public String getRepoid()
177     {
178         return repoid;
179     }
180
181     public void setRepoid( String repoid )
182     {
183         this.repoid = repoid;
184     }
185
186     public void setRepositoryStatisticsManager( RepositoryStatisticsManager repositoryStatisticsManager )
187     {
188         this.repositoryStatisticsManager = repositoryStatisticsManager;
189     }
190
191     public void setMetadataRepository( MetadataRepository metadataRepository )
192     {
193         this.metadataRepository = metadataRepository;
194     }
195 }