/*******************************************************************************
* Copyright (c) 2014 Takari, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Takari, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.m2e.core.internal.builder.plexusbuildapi;
import static org.eclipse.core.resources.IncrementalProjectBuilder.AUTO_BUILD;
import static org.eclipse.core.resources.IncrementalProjectBuilder.CLEAN_BUILD;
import static org.eclipse.core.resources.IncrementalProjectBuilder.INCREMENTAL_BUILD;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.sonatype.plexus.build.incremental.ThreadBuildContext;
import org.eclipse.m2e.core.internal.IMavenConstants;
import org.eclipse.m2e.core.internal.builder.IIncrementalBuildFramework;
import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant2;
/**
* @since 1.6
*/
public class PlexusBuildAPI implements IIncrementalBuildFramework {
public static QualifiedName BUILD_CONTEXT_KEY = new QualifiedName(IMavenConstants.PLUGIN_ID, "BuildContext"); //$NON-NLS-1$
@Override
public AbstractEclipseBuildContext setupProjectBuildContext(IProject project, int kind, IResourceDelta delta,
IIncrementalBuildFramework.BuildResultCollector results) throws CoreException {
@SuppressWarnings("unchecked")
Map<String, Object> contextState = (Map<String, Object>) project.getSessionProperty(BUILD_CONTEXT_KEY);
AbstractEclipseBuildContext buildContext;
if(delta != null && contextState != null && (INCREMENTAL_BUILD == kind || AUTO_BUILD == kind)) {
buildContext = new EclipseIncrementalBuildContext(delta, contextState, results);
} else if(CLEAN_BUILD == kind) {
project.setSessionProperty(BUILD_CONTEXT_KEY, null); // clean context state
buildContext = new EclipseBuildContext(project, new HashMap<String, Object>(), results);
} else {
contextState = new HashMap<String, Object>();
project.setSessionProperty(BUILD_CONTEXT_KEY, contextState);
if(AbstractBuildParticipant2.PRECONFIGURE_BUILD == kind) {
buildContext = new EclipseEmptyBuildContext(project, contextState, results);
} else {
// must be full build
buildContext = new EclipseBuildContext(project, contextState, results);
}
}
ThreadBuildContext.setThreadBuildContext(buildContext);
return buildContext;
}
}