for ( Map.Entry<Path, Collection<ResourceChange>> pathCollectionEntry : batch.entrySet() ) {
for ( final ResourceChange change : pathCollectionEntry.getValue() ) {
final Path resource = pathCollectionEntry.getKey();
//If resource is not within a Package it cannot be used for an incremental build
final Project project = projectService.resolveProject( resource );
final Package pkg = projectService.resolvePackage( resource );
if ( project != null && pkg != null ) {
if ( !projectBatchChanges.containsKey( project ) ) {
projectBatchChanges.put( project,
new HashMap<Path, Collection<ResourceChange>>() );
}
final Map<Path, Collection<ResourceChange>> projectChanges = projectBatchChanges.get( project );
if ( !projectChanges.containsKey( pathCollectionEntry.getKey() ) ) {
projectChanges.put( pathCollectionEntry.getKey(), new ArrayList<ResourceChange>() );
}
projectChanges.get( pathCollectionEntry.getKey() ).add( change );
logger.info( "- Batch content: " + pathCollectionEntry.getKey().toURI() + " (" + change.getType().toString() + ")." );
}
}
}
//Schedule an incremental build for each Project
for ( final Map.Entry<Project, Map<Path, Collection<ResourceChange>>> e : projectBatchChanges.entrySet() ) {
executor.execute( new Runnable() {
@Override
public void run() {
try {
logger.info( "Batch incremental build request being processed." );
final Project project = e.getKey();
final Map<Path, Collection<ResourceChange>> changes = e.getValue();
//Fall back to a Full Build in lieu of an Incremental Build if the Project has not been previously built
if ( buildService.isBuilt( project ) ) {
final IncrementalBuildResults results = buildService.applyBatchResourceChanges( project,