1 package org.apache.continuum.repository;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.List;
23
24 import org.apache.continuum.dao.LocalRepositoryDao;
25 import org.apache.continuum.dao.ProjectGroupDao;
26 import org.apache.continuum.dao.RepositoryPurgeConfigurationDao;
27 import org.apache.continuum.model.repository.LocalRepository;
28 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
29 import org.apache.continuum.taskqueue.manager.TaskQueueManager;
30 import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
31 import org.apache.maven.continuum.model.project.ProjectGroup;
32 import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
33 import org.apache.maven.continuum.store.ContinuumStoreException;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40
41
42
43
44
45 public class DefaultRepositoryService
46 implements RepositoryService
47 {
48 private static final Logger log = LoggerFactory.getLogger( DefaultRepositoryService.class );
49
50
51
52
53 private LocalRepositoryDao localRepositoryDao;
54
55
56
57
58 private RepositoryPurgeConfigurationDao repositoryPurgeConfigurationDao;
59
60
61
62
63 private ProjectGroupDao projectGroupDao;
64
65
66
67
68 private TaskQueueManager taskQueueManager;
69
70 public LocalRepository addLocalRepository( LocalRepository localRepository )
71 throws RepositoryServiceException
72 {
73 LocalRepository repository = null;
74
75 try
76 {
77 List<LocalRepository> repos = getAllLocalRepositories();
78 for ( LocalRepository repo : repos )
79 {
80 if ( repo.getName().equals( localRepository.getName() ) )
81 {
82 throw new RepositoryServiceException( "Local repository name must be unique" );
83 }
84
85 if ( repo.getLocation().equals( localRepository.getLocation() ) )
86 {
87 throw new RepositoryServiceException( "Local repository location must be unique" );
88 }
89 }
90
91 localRepository.setName( localRepository.getName().trim() );
92 localRepository.setLocation( localRepository.getLocation().trim() );
93
94 repository = localRepositoryDao.addLocalRepository( localRepository );
95
96 log.info( "Added new local repository: " + repository.getName() );
97 }
98 catch ( ContinuumStoreException e )
99 {
100 throw new RepositoryServiceException( "Unable to add the requested local repository", e );
101 }
102
103 return repository;
104 }
105
106 public void removeLocalRepository( int repositoryId )
107 throws RepositoryServiceException
108 {
109 try
110 {
111 LocalRepository repository = getLocalRepository( repositoryId );
112
113 if ( taskQueueManager.isRepositoryInUse( repositoryId ) )
114 {
115 return;
116 }
117
118 if ( taskQueueManager.isRepositoryInPurgeQueue( repositoryId ) )
119 {
120 taskQueueManager.removeRepositoryFromPurgeQueue( repositoryId );
121 }
122
123 log.info( "Remove purge configurations of " + repository.getName() );
124 removePurgeConfigurationsOfRepository( repositoryId );
125
126 List<ProjectGroup> groups = projectGroupDao.getProjectGroupByRepository( repositoryId );
127
128 for ( ProjectGroup group : groups )
129 {
130 group.setLocalRepository( null );
131 projectGroupDao.updateProjectGroup( group );
132 }
133
134 localRepositoryDao.removeLocalRepository( repository );
135
136 log.info( "Removed local repository: " + repository.getName() );
137 }
138 catch ( TaskQueueManagerException e )
139 {
140
141 }
142 catch ( ContinuumStoreException e )
143 {
144 throw new RepositoryServiceException( "Unable to delete the requested local repository", e );
145 }
146 }
147
148 public void updateLocalRepository( LocalRepository localRepository )
149 throws RepositoryServiceException
150 {
151 localRepository.setName( localRepository.getName().trim() );
152 localRepository.setLocation( localRepository.getLocation().trim() );
153
154 try
155 {
156 if ( taskQueueManager.isRepositoryInUse( localRepository.getId() ) )
157 {
158 return;
159 }
160
161 localRepositoryDao.updateLocalRepository( localRepository );
162
163 log.info( "Updated local repository: " + localRepository.getName() );
164 }
165 catch ( TaskQueueManagerException e )
166 {
167
168 }
169 catch ( ContinuumStoreException e )
170 {
171 throw new RepositoryServiceException( "Unable to update the requested local repository", e );
172 }
173 }
174
175 public List<LocalRepository> getAllLocalRepositories()
176 {
177 return localRepositoryDao.getAllLocalRepositories();
178 }
179
180 public List<LocalRepository> getLocalRepositoriesByLayout( String layout )
181 {
182 return localRepositoryDao.getLocalRepositoriesByLayout( layout );
183 }
184
185 public LocalRepository getLocalRepositoryByLocation( String location )
186 throws RepositoryServiceException
187 {
188 try
189 {
190 return localRepositoryDao.getLocalRepositoryByLocation( location );
191 }
192 catch ( ContinuumObjectNotFoundException e )
193 {
194 throw new RepositoryServiceException( "No repository found with location: " + location, e );
195 }
196 catch ( ContinuumStoreException e )
197 {
198 throw new RepositoryServiceException( "Unable to retrieve local repository by location: " + location, e );
199 }
200 }
201
202 public LocalRepository getLocalRepository( int repositoryId )
203 throws RepositoryServiceException
204 {
205 try
206 {
207 return localRepositoryDao.getLocalRepository( repositoryId );
208 }
209 catch ( ContinuumObjectNotFoundException e )
210 {
211 throw new RepositoryServiceException( "No repository found with id: " + repositoryId, e );
212 }
213 catch ( ContinuumStoreException e )
214 {
215 throw new RepositoryServiceException( "Unable to retrieve local repository: " + repositoryId, e );
216 }
217 }
218
219 private void removePurgeConfigurationsOfRepository( int repositoryId )
220 throws RepositoryServiceException
221 {
222 try
223 {
224 List<RepositoryPurgeConfiguration> purgeConfigs =
225 repositoryPurgeConfigurationDao.getRepositoryPurgeConfigurationsByLocalRepository( repositoryId );
226
227 for ( RepositoryPurgeConfiguration purgeConfig : purgeConfigs )
228 {
229 repositoryPurgeConfigurationDao.removeRepositoryPurgeConfiguration( purgeConfig );
230 }
231 }
232 catch ( ContinuumObjectNotFoundException e )
233 {
234 throw new RepositoryServiceException( "Error while removing local repository: " + repositoryId, e );
235 }
236 catch ( ContinuumStoreException e )
237 {
238 throw new RepositoryServiceException(
239 "Error while removing purge configurations of local repository: " + repositoryId, e );
240 }
241 }
242 }