EMMA Coverage Report (generated Sun Sep 18 11:34:27 PHT 2011)
[all classes][org.apache.continuum.purge]

COVERAGE SUMMARY FOR SOURCE FILE [DefaultContinuumPurgeManager.java]

nameclass, %method, %block, %line, %
DefaultContinuumPurgeManager.java100% (1/1)80%  (4/5)31%  (62/199)31%  (12/39)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DefaultContinuumPurgeManager100% (1/1)80%  (4/5)31%  (62/199)31%  (12/39)
purge (Schedule): void 0%   (0/1)0%   (0/82)0%   (0/16)
purgeDirectory (DirectoryPurgeConfiguration): void 100% (1/1)41%  (28/68)42%  (5/12)
purgeRepository (RepositoryPurgeConfiguration): void 100% (1/1)64%  (27/42)56%  (5/9)
<static initializer> 100% (1/1)100% (4/4)100% (1/1)
DefaultContinuumPurgeManager (): void 100% (1/1)100% (3/3)100% (1/1)

1package org.apache.continuum.purge;
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 
22import org.apache.continuum.buildmanager.BuildsManager;
23import org.apache.continuum.dao.ProjectDao;
24import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
25import org.apache.continuum.model.repository.LocalRepository;
26import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
27import org.apache.continuum.purge.task.PurgeTask;
28import org.apache.continuum.taskqueue.manager.TaskQueueManager;
29import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
30import org.apache.maven.continuum.build.settings.DefaultSchedulesActivator;
31import org.apache.maven.continuum.build.settings.SchedulesActivationException;
32import org.apache.maven.continuum.build.settings.SchedulesActivator;
33import org.apache.maven.continuum.model.project.Schedule;
34import org.codehaus.plexus.taskqueue.TaskQueueException;
35import org.slf4j.Logger;
36import org.slf4j.LoggerFactory;
37 
38import java.util.List;
39 
40/**
41 * DefaultContinuumPurgeManager
42 *
43 * @author Maria Catherine Tan
44 * @version $Id: DefaultContinuumPurgeManager.java 780708 2009-06-01 16:29:31Z jmorales $
45 * @plexus.component role="org.apache.continuum.purge.ContinuumPurgeManager" role-hint="default"
46 * @since 25 jul 07
47 */
48public class DefaultContinuumPurgeManager
49    implements ContinuumPurgeManager
50{
51    private static final Logger log = LoggerFactory.getLogger( DefaultContinuumPurgeManager.class );
52    
53    /**
54     * @plexus.requirement
55     */
56    private SchedulesActivator schedulesActivator;
57 
58    /**
59     * @plexus.requirement
60     */
61    private PurgeConfigurationService purgeConfigurationService;
62 
63    /**
64     * @plexus.requirement
65     */
66    private TaskQueueManager taskQueueManager;
67    
68    /**
69     * @plexus.requirement role-hint="parallel"
70     */
71    private BuildsManager parallelBuildsManager;
72    
73    public void purge( Schedule schedule )
74        throws ContinuumPurgeManagerException
75    {
76        List<RepositoryPurgeConfiguration> repoPurgeList = null;
77        List<DirectoryPurgeConfiguration> dirPurgeList = null;
78 
79        repoPurgeList = purgeConfigurationService.getEnableRepositoryPurgeConfigurationsBySchedule( schedule.getId() );
80        dirPurgeList = purgeConfigurationService.getEnableDirectoryPurgeConfigurationsBySchedule( schedule.getId() );
81 
82        if ( repoPurgeList != null && repoPurgeList.size() > 0 )
83        {
84            for ( RepositoryPurgeConfiguration repoPurge : repoPurgeList )
85            {
86                purgeRepository( repoPurge );
87            }
88        }
89 
90        if ( dirPurgeList != null && dirPurgeList.size() > 0 )
91        {
92            for ( DirectoryPurgeConfiguration dirPurge : dirPurgeList )
93            {
94                purgeDirectory( dirPurge );
95            }
96        }
97        
98        if ( ( repoPurgeList == null || repoPurgeList.isEmpty() ) && ( dirPurgeList == null || dirPurgeList.isEmpty() ) )
99        {
100            // This purge is not enable for a purge process.
101            try
102            {
103                schedulesActivator.unactivateOrphanPurgeSchedule( schedule );
104            }
105            catch ( SchedulesActivationException e )
106            {
107                log.debug( String.format( "Can't unactivate orphan schedule '%s' for purgeConfiguration",
108                                          schedule.getName() ) );
109            }
110        }
111    }
112 
113    public void purgeRepository( RepositoryPurgeConfiguration repoPurge )
114        throws ContinuumPurgeManagerException
115    {
116        try
117        {
118            LocalRepository repository = repoPurge.getRepository();
119 
120            // do not purge if repository is in use and if repository is already in purge queue
121            if ( !taskQueueManager.isRepositoryInUse( repository.getId() ) && 
122                 !taskQueueManager.isInPurgeQueue( repoPurge.getId() ) )
123            {
124                taskQueueManager.getPurgeQueue().put( new PurgeTask( repoPurge.getId() ) );
125            }
126        }
127        catch ( TaskQueueException e )
128        {
129            throw new ContinuumPurgeManagerException( "Error while enqueuing repository", e );
130        }
131        catch ( TaskQueueManagerException e )
132        {
133            throw new ContinuumPurgeManagerException( e.getMessage(), e );
134        }
135    }
136 
137    public void purgeDirectory( DirectoryPurgeConfiguration dirPurge )
138        throws ContinuumPurgeManagerException
139    {
140        try
141        {
142            if ( "releases".equals( dirPurge.getDirectoryType() ) )
143            {
144                // do not purge if release in progress
145                if ( !taskQueueManager.releaseInProgress() && 
146                     !taskQueueManager.isInPurgeQueue( dirPurge.getId() ) )
147                {
148                    taskQueueManager.getPurgeQueue().put( new PurgeTask( dirPurge.getId() ) );
149                }
150            }
151            else if ( "buildOutput".equals( dirPurge.getDirectoryType() ) )
152            {
153                // do not purge if build in progress
154                if ( !parallelBuildsManager.isBuildInProgress() && 
155                     !taskQueueManager.isInPurgeQueue( dirPurge.getId() ) )
156                {
157                    taskQueueManager.getPurgeQueue().put( new PurgeTask( dirPurge.getId() ) );
158                }
159            }
160 
161        }
162        catch ( TaskQueueException e )
163        {
164            throw new ContinuumPurgeManagerException( "Error while enqueuing repository", e );
165        }
166        catch ( TaskQueueManagerException e )
167        {
168            throw new ContinuumPurgeManagerException( e.getMessage(), e );
169        }
170    }
171 
172}

[all classes][org.apache.continuum.purge]
EMMA 2.0.5312 (C) Vladimir Roubtsov