1 package org.apache.maven.continuum.core.action;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.continuum.buildmanager.BuildsManager;
27 import org.apache.continuum.dao.ProjectDao;
28 import org.apache.maven.continuum.execution.ContinuumBuildExecutor;
29 import org.apache.maven.continuum.execution.manager.BuildExecutorManager;
30 import org.apache.maven.continuum.model.project.BuildDefinition;
31 import org.apache.maven.continuum.model.project.Project;
32 import org.apache.maven.continuum.model.scm.ScmResult;
33 import org.apache.maven.continuum.project.ContinuumProjectState;
34 import org.apache.maven.continuum.store.ContinuumStoreException;
35
36
37
38
39
40
41 public class CreateBuildProjectTaskAction
42 extends AbstractContinuumAction
43 {
44
45
46
47 private BuildExecutorManager executorManager;
48
49
50
51
52 private ProjectDao projectDao;
53
54
55
56
57 private BuildsManager parallelBuildsManager;
58
59 public synchronized void execute( Map context )
60 throws Exception
61 {
62 List<Project> projects = AbstractContinuumAction.getListOfProjects( context );
63 Map<Integer, BuildDefinition> projectsBuildDefinitionsMap =
64 AbstractContinuumAction.getProjectsBuildDefinitionsMap( context );
65 Map<Integer, ScmResult> scmResultMap = AbstractContinuumAction.getScmResultMap( context );
66 List<Project> projectsToBeBuilt = new ArrayList<Project>();
67 int trigger = AbstractContinuumAction.getTrigger( context );
68 int projectGroupId = AbstractContinuumAction.getProjectGroupId( context );
69
70
71 for ( Project project : projects )
72 {
73 BuildDefinition buildDefinition = projectsBuildDefinitionsMap.get( project.getId() );
74
75 if ( parallelBuildsManager.isInAnyBuildQueue( project.getId(), buildDefinition.getId() ) )
76 {
77 return;
78 }
79
80 if ( parallelBuildsManager.isInAnyCheckoutQueue( project.getId() ) )
81 {
82 parallelBuildsManager.removeProjectFromCheckoutQueue( project.getId() );
83 }
84
85 try
86 {
87 if ( project.getState() != ContinuumProjectState.NEW &&
88 project.getState() != ContinuumProjectState.CHECKEDOUT &&
89 project.getState() != ContinuumProjectState.OK &&
90 project.getState() != ContinuumProjectState.FAILED &&
91 project.getState() != ContinuumProjectState.ERROR )
92 {
93 ContinuumBuildExecutor executor = executorManager.getBuildExecutor( project.getExecutorId() );
94
95 if ( executor.isBuilding( project ) || project.getState() == ContinuumProjectState.UPDATING )
96 {
97
98 getLogger().info( "Project '" + project.getName() + "' already being built." );
99
100 continue;
101 }
102 else
103 {
104 project.setState( ContinuumProjectState.ERROR );
105 }
106 }
107 project.setOldState( project.getState() );
108
109 projectDao.updateProject( project );
110
111 project = projectDao.getProject( project.getId() );
112
113 projectsToBeBuilt.add( project );
114 }
115 catch ( ContinuumStoreException e )
116 {
117 getLogger().error( "Error while creating build object", e );
118
119 }
120 }
121
122 parallelBuildsManager.buildProjects( projectsToBeBuilt, projectsBuildDefinitionsMap, trigger, scmResultMap,
123 projectGroupId );
124 }
125 }