1 package org.apache.maven.execution; 2 3 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 ; 28 import java.util.HashMap ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import java.util.Map ; 32 33 public class ReactorManager 34 { 35 public static final String FAIL_FAST = "fail-fast"; 36 37 public static final String FAIL_AT_END = "fail-at-end"; 38 39 public static final String FAIL_NEVER = "fail-never"; 40 41 private List blackList = new ArrayList (); 42 43 private Map buildFailuresByProject = new HashMap (); 44 45 private Map pluginContextsByProjectAndPluginKey = new HashMap (); 46 47 private String failureBehavior = FAIL_FAST; 48 49 private final ProjectSorter sorter; 50 51 private Map buildSuccessesByProject = new HashMap (); 52 53 public ReactorManager( List projects ) 54 throws CycleDetectedException, DuplicateProjectException 55 { 56 this.sorter = new ProjectSorter( projects ); 57 } 58 59 public Map getPluginContext( PluginDescriptor plugin, MavenProject project ) 60 { 61 Map pluginContextsByKey = (Map ) pluginContextsByProjectAndPluginKey.get( project.getId() ); 62 63 if ( pluginContextsByKey == null ) 64 { 65 pluginContextsByKey = new HashMap (); 66 pluginContextsByProjectAndPluginKey.put( project.getId(), pluginContextsByKey ); 67 } 68 69 Map pluginContext = (Map ) pluginContextsByKey.get( plugin.getPluginLookupKey() ); 70 71 if ( pluginContext == null ) 72 { 73 pluginContext = new HashMap (); 74 pluginContextsByKey.put( plugin.getPluginLookupKey(), pluginContext ); 75 } 76 77 return pluginContext; 78 } 79 80 public void setFailureBehavior( String 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 ( "Invalid failure behavior (must be one of: \'" + FAIL_FAST + "\', \'" + 90 FAIL_AT_END + "\', \'" + FAIL_NEVER + "\')." ); 91 } 92 } 93 94 public String 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 id ) 105 { 106 if ( !blackList.contains( id ) ) 107 { 108 blackList.add( id ); 109 110 List dependents = sorter.getDependents( id ); 111 112 if ( dependents != null && !dependents.isEmpty() ) 113 { 114 for ( Iterator it = dependents.iterator(); it.hasNext(); ) 115 { 116 String dependentId = (String ) 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 getProjectKey( MavenProject project ) 134 { 135 return ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ); 136 } 137 138 public void registerBuildFailure( MavenProject project, Exception error, String 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 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 |