KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > maven > execution > ReactorManager


1 package org.apache.maven.execution;
2
3 /*
4  * Copyright 2001-2005 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18
19
20 import org.apache.maven.artifact.ArtifactUtils;
21 import org.apache.maven.plugin.descriptor.PluginDescriptor;
22 import org.apache.maven.project.DuplicateProjectException;
23 import org.apache.maven.project.MavenProject;
24 import org.apache.maven.project.ProjectSorter;
25 import org.codehaus.plexus.util.dag.CycleDetectedException;
26
27 import java.util.ArrayList JavaDoc;
28 import java.util.HashMap JavaDoc;
29 import java.util.Iterator JavaDoc;
30 import java.util.List JavaDoc;
31 import java.util.Map JavaDoc;
32
33 public class ReactorManager
34 {
35     public static final String JavaDoc FAIL_FAST = "fail-fast";
36
37     public static final String JavaDoc FAIL_AT_END = "fail-at-end";
38
39     public static final String JavaDoc FAIL_NEVER = "fail-never";
40
41     private List JavaDoc blackList = new ArrayList JavaDoc();
42
43     private Map JavaDoc buildFailuresByProject = new HashMap JavaDoc();
44
45     private Map JavaDoc pluginContextsByProjectAndPluginKey = new HashMap JavaDoc();
46
47     private String JavaDoc failureBehavior = FAIL_FAST;
48
49     private final ProjectSorter sorter;
50
51     private Map JavaDoc buildSuccessesByProject = new HashMap JavaDoc();
52
53     public ReactorManager( List JavaDoc projects )
54         throws CycleDetectedException, DuplicateProjectException
55     {
56         this.sorter = new ProjectSorter( projects );
57     }
58
59     public Map JavaDoc getPluginContext( PluginDescriptor plugin, MavenProject project )
60     {
61         Map JavaDoc pluginContextsByKey = (Map JavaDoc) pluginContextsByProjectAndPluginKey.get( project.getId() );
62
63         if ( pluginContextsByKey == null )
64         {
65             pluginContextsByKey = new HashMap JavaDoc();
66             pluginContextsByProjectAndPluginKey.put( project.getId(), pluginContextsByKey );
67         }
68
69         Map JavaDoc pluginContext = (Map JavaDoc) pluginContextsByKey.get( plugin.getPluginLookupKey() );
70
71         if ( pluginContext == null )
72         {
73             pluginContext = new HashMap JavaDoc();
74             pluginContextsByKey.put( plugin.getPluginLookupKey(), pluginContext );
75         }
76
77         return pluginContext;
78     }
79
80     public void setFailureBehavior( String JavaDoc failureBehavior )
81     {
82         if ( FAIL_FAST.equals( failureBehavior ) || FAIL_AT_END.equals( failureBehavior ) ||
83             FAIL_NEVER.equals( failureBehavior ) )
84         {
85             this.failureBehavior = failureBehavior;
86         }
87         else
88         {
89             throw new IllegalArgumentException JavaDoc( "Invalid failure behavior (must be one of: \'" + FAIL_FAST + "\', \'" +
90                 FAIL_AT_END + "\', \'" + FAIL_NEVER + "\')." );
91         }
92     }
93
94     public String JavaDoc getFailureBehavior()
95     {
96         return failureBehavior;
97     }
98
99     public void blackList( MavenProject project )
100     {
101         blackList( getProjectKey( project ) );
102     }
103
104     private void blackList( String JavaDoc id )
105     {
106         if ( !blackList.contains( id ) )
107         {
108             blackList.add( id );
109
110             List JavaDoc dependents = sorter.getDependents( id );
111
112             if ( dependents != null && !dependents.isEmpty() )
113             {
114                 for ( Iterator JavaDoc it = dependents.iterator(); it.hasNext(); )
115                 {
116                     String JavaDoc dependentId = (String JavaDoc) it.next();
117
118                     if ( !buildSuccessesByProject.containsKey( dependentId ) &&
119                         !buildFailuresByProject.containsKey( dependentId ) )
120                     {
121                         blackList( dependentId );
122                     }
123                 }
124             }
125         }
126     }
127
128     public boolean isBlackListed( MavenProject project )
129     {
130         return blackList.contains( getProjectKey( project ) );
131     }
132
133     private static String JavaDoc getProjectKey( MavenProject project )
134     {
135         return ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
136     }
137
138     public void registerBuildFailure( MavenProject project, Exception JavaDoc error, String JavaDoc task, long time )
139     {
140         buildFailuresByProject.put( getProjectKey( project ), new BuildFailure( error, task, time ) );
141     }
142
143     public boolean hasBuildFailures()
144     {
145         return !buildFailuresByProject.isEmpty();
146     }
147
148     public boolean hasBuildFailure( MavenProject project )
149     {
150         return buildFailuresByProject.containsKey( getProjectKey( project ) );
151     }
152
153     public boolean hasMultipleProjects()
154     {
155         return sorter.hasMultipleProjects();
156     }
157
158     public List JavaDoc getSortedProjects()
159     {
160         return sorter.getSortedProjects();
161     }
162
163     public MavenProject getTopLevelProject()
164     {
165         return sorter.getTopLevelProject();
166     }
167
168     public boolean hasBuildSuccess( MavenProject project )
169     {
170         return buildSuccessesByProject.containsKey( getProjectKey( project ) );
171     }
172
173     public void registerBuildSuccess( MavenProject project, long time )
174     {
175         buildSuccessesByProject.put( getProjectKey( project ), new BuildSuccess( project, time ) );
176     }
177
178     public BuildFailure getBuildFailure( MavenProject project )
179     {
180         return (BuildFailure) buildFailuresByProject.get( getProjectKey( project ) );
181     }
182
183     public BuildSuccess getBuildSuccess( MavenProject project )
184     {
185         return (BuildSuccess) buildSuccessesByProject.get( getProjectKey( project ) );
186     }
187
188     public boolean executedMultipleProjects()
189     {
190         return buildFailuresByProject.size() + buildSuccessesByProject.size() > 1;
191     }
192 }
193
Popular Tags