]> source.dussan.org Git - archiva.git/blob
36350af2d7af2d629d9ae65c50025035f960386b
[archiva.git] /
1 package org.apache.archiva.admin.repository.remote;
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 org.apache.archiva.admin.model.AuditInformation;
22 import org.apache.archiva.admin.model.RepositoryAdminException;
23 import org.apache.archiva.admin.model.beans.RemoteRepository;
24 import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
25 import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
26 import org.apache.archiva.audit.AuditEvent;
27 import org.apache.archiva.configuration.Configuration;
28 import org.apache.archiva.configuration.ProxyConnectorConfiguration;
29 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
30 import org.apache.commons.lang.StringUtils;
31 import org.springframework.stereotype.Service;
32
33 import java.util.ArrayList;
34 import java.util.HashMap;
35 import java.util.List;
36 import java.util.Map;
37
38 /**
39  * @author Olivier Lamy
40  * @since 1.4-M1
41  */
42 @Service( "remoteRepositoryAdmin#default" )
43 public class DefaultRemoteRepositoryAdmin
44     extends AbstractRepositoryAdmin
45     implements RemoteRepositoryAdmin
46 {
47
48
49     public List<RemoteRepository> getRemoteRepositories()
50         throws RepositoryAdminException
51     {
52         List<RemoteRepository> remoteRepositories = new ArrayList<RemoteRepository>();
53         for ( RemoteRepositoryConfiguration repositoryConfiguration : getArchivaConfiguration().getConfiguration().getRemoteRepositories() )
54         {
55             RemoteRepository remoteRepository =
56                 new RemoteRepository( repositoryConfiguration.getId(), repositoryConfiguration.getName(),
57                                       repositoryConfiguration.getUrl(), repositoryConfiguration.getLayout(),
58                                       repositoryConfiguration.getUsername(), repositoryConfiguration.getPassword(),
59                                       repositoryConfiguration.getTimeout() );
60             remoteRepository.setDownloadRemoteIndex( repositoryConfiguration.isDownloadRemoteIndex() );
61             remoteRepository.setRemoteIndexUrl( repositoryConfiguration.getRemoteIndexUrl() );
62             remoteRepository.setCronExpression( repositoryConfiguration.getRefreshCronExpression() );
63             remoteRepository.setIndexDirectory( repositoryConfiguration.getIndexDir() );
64             remoteRepository.setRemoteDownloadNetworkProxyId(
65                 repositoryConfiguration.getRemoteDownloadNetworkProxyId() );
66             remoteRepository.setRemoteDownloadTimeout( repositoryConfiguration.getRemoteDownloadTimeout() );
67             remoteRepositories.add( remoteRepository );
68         }
69         return remoteRepositories;
70     }
71
72     public RemoteRepository getRemoteRepository( String repositoryId )
73         throws RepositoryAdminException
74     {
75         for ( RemoteRepository remoteRepository : getRemoteRepositories() )
76         {
77             if ( StringUtils.equals( repositoryId, remoteRepository.getId() ) )
78             {
79                 return remoteRepository;
80             }
81         }
82         return null;
83     }
84
85     public Boolean addRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )
86         throws RepositoryAdminException
87     {
88         triggerAuditEvent( remoteRepository.getId(), null, AuditEvent.ADD_REMOTE_REPO, auditInformation );
89         getRepositoryCommonValidator().basicValidation( remoteRepository, false );
90
91         //TODO we can validate it's a good uri/url
92         if ( StringUtils.isEmpty( remoteRepository.getUrl() ) )
93         {
94             throw new RepositoryAdminException( "url cannot be null" );
95         }
96
97         //MRM-752 - url needs trimming
98         remoteRepository.setUrl( StringUtils.trim( remoteRepository.getUrl() ) );
99
100         RemoteRepositoryConfiguration remoteRepositoryConfiguration =
101             getRemoteRepositoryConfiguration( remoteRepository );
102
103         Configuration configuration = getArchivaConfiguration().getConfiguration();
104         configuration.addRemoteRepository( remoteRepositoryConfiguration );
105         saveConfiguration( configuration );
106
107         return Boolean.TRUE;
108     }
109
110     public Boolean deleteRemoteRepository( String repositoryId, AuditInformation auditInformation )
111         throws RepositoryAdminException
112     {
113
114         triggerAuditEvent( repositoryId, null, AuditEvent.DELETE_REMOTE_REPO, auditInformation );
115
116         Configuration configuration = getArchivaConfiguration().getConfiguration();
117
118         RemoteRepositoryConfiguration remoteRepositoryConfiguration =
119             configuration.getRemoteRepositoriesAsMap().get( repositoryId );
120         if ( remoteRepositoryConfiguration == null )
121         {
122             throw new RepositoryAdminException(
123                 "remoteRepository with id " + repositoryId + " not exist cannot remove it" );
124         }
125
126         configuration.removeRemoteRepository( remoteRepositoryConfiguration );
127
128         // TODO use ProxyConnectorAdmin interface ?
129         // [MRM-520] Proxy Connectors are not deleted with the deletion of a Repository.
130         List<ProxyConnectorConfiguration> proxyConnectors =
131             new ArrayList<ProxyConnectorConfiguration>( configuration.getProxyConnectors() );
132         for ( ProxyConnectorConfiguration proxyConnector : proxyConnectors )
133         {
134             if ( StringUtils.equals( proxyConnector.getTargetRepoId(), repositoryId ) )
135             {
136                 configuration.removeProxyConnector( proxyConnector );
137             }
138         }
139
140         saveConfiguration( configuration );
141
142         return Boolean.TRUE;
143     }
144
145     public Boolean updateRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )
146         throws RepositoryAdminException
147     {
148
149         String repositoryId = remoteRepository.getId();
150
151         triggerAuditEvent( repositoryId, null, AuditEvent.MODIFY_REMOTE_REPO, auditInformation );
152
153         // update means : remove and add
154
155         Configuration configuration = getArchivaConfiguration().getConfiguration();
156
157         RemoteRepositoryConfiguration remoteRepositoryConfiguration =
158             configuration.getRemoteRepositoriesAsMap().get( repositoryId );
159         if ( remoteRepositoryConfiguration == null )
160         {
161             throw new RepositoryAdminException(
162                 "remoteRepository with id " + repositoryId + " not exist cannot remove it" );
163         }
164
165         configuration.removeRemoteRepository( remoteRepositoryConfiguration );
166
167         remoteRepositoryConfiguration = getRemoteRepositoryConfiguration( remoteRepository );
168         configuration.addRemoteRepository( remoteRepositoryConfiguration );
169         saveConfiguration( configuration );
170
171         return Boolean.TRUE;
172     }
173
174     public Map<String, RemoteRepository> getRemoteRepositoriesAsMap()
175         throws RepositoryAdminException
176     {
177         java.util.Map<String, RemoteRepository> map = new HashMap<String, RemoteRepository>();
178
179         for ( RemoteRepository repo : getRemoteRepositories() )
180         {
181             map.put( repo.getId(), repo );
182         }
183
184         return map;
185     }
186
187     private RemoteRepositoryConfiguration getRemoteRepositoryConfiguration( RemoteRepository remoteRepository )
188     {
189         RemoteRepositoryConfiguration remoteRepositoryConfiguration = new RemoteRepositoryConfiguration();
190         remoteRepositoryConfiguration.setId( remoteRepository.getId() );
191         remoteRepositoryConfiguration.setPassword( remoteRepository.getPassword() );
192         remoteRepositoryConfiguration.setTimeout( remoteRepository.getTimeout() );
193         remoteRepositoryConfiguration.setUrl( remoteRepository.getUrl() );
194         remoteRepositoryConfiguration.setUsername( remoteRepository.getUserName() );
195         remoteRepositoryConfiguration.setLayout( remoteRepository.getLayout() );
196         remoteRepositoryConfiguration.setName( remoteRepository.getName() );
197         remoteRepositoryConfiguration.setDownloadRemoteIndex( remoteRepository.isDownloadRemoteIndex() );
198         remoteRepositoryConfiguration.setRemoteIndexUrl( remoteRepository.getRemoteIndexUrl() );
199         remoteRepositoryConfiguration.setRefreshCronExpression( remoteRepository.getCronExpression() );
200         remoteRepositoryConfiguration.setIndexDir( remoteRepository.getIndexDirectory() );
201         remoteRepositoryConfiguration.setRemoteDownloadNetworkProxyId(
202             remoteRepository.getRemoteDownloadNetworkProxyId() );
203         remoteRepositoryConfiguration.setRemoteDownloadTimeout( remoteRepository.getRemoteDownloadTimeout() );
204         return remoteRepositoryConfiguration;
205     }
206
207 }