View Javadoc

1   package org.apache.continuum.repository;
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 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   * DefaultRepositoryService
39   *
40   * @author Maria Catherine Tan
41   * @version $Id: DefaultRepositoryService.java 764863 2009-04-14 16:28:12Z evenisse $
42   * @plexus.component role="org.apache.continuum.repository.RepositoryService" role-hint="default"
43   * @since 25 jul 07
44   */
45  public class DefaultRepositoryService
46      implements RepositoryService
47  {
48      private static final Logger log = LoggerFactory.getLogger( DefaultRepositoryService.class );
49  
50      /**
51       * @plexus.requirement
52       */
53      private LocalRepositoryDao localRepositoryDao;
54  
55      /**
56       * @plexus.requirement
57       */
58      private RepositoryPurgeConfigurationDao repositoryPurgeConfigurationDao;
59  
60      /**
61       * @plexus.requirement
62       */
63      private ProjectGroupDao projectGroupDao;
64  
65      /**
66       * @plexus.requirement
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             // swallow?
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             // swallow?
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 }