package com.dubture.composer.core.builder;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import com.dubture.composer.core.ComposerNature;
import com.dubture.composer.core.ComposerPlugin;
import com.dubture.composer.core.buildpath.BuildPathManager;
import com.dubture.composer.core.log.Logger;
import com.dubture.composer.core.resources.IComposerProject;
/**
* This builder is checking for changes inside the `vendor` directory and
* adjusts the buildpath of the project accordingly.
*
*/
public class ComposerBuildPathManagementBuilder extends
IncrementalProjectBuilder {
public static final String ID = "com.dubture.composer.core.builder.buildPathManagementBuilder";
@Override
protected IProject[] build(int kind, Map<String, String> args,
IProgressMonitor monitor) throws CoreException {
IProject project = getProject();
if (project.hasNature(ComposerNature.NATURE_ID) == false) {
return null;
}
try {
// return when no composer.json present
IComposerProject composerProject = ComposerPlugin.getDefault().getComposerProject(project);
IFile composerJson = composerProject.getComposerJson();
if (composerJson == null || composerJson.exists() == false) {
return null;
}
boolean changed = false;
IResourceDelta delta = getDelta(project);
BuildPathManager buildPathManager = new BuildPathManager(composerProject);
if (delta == null) {
if (project.hasNature(ComposerNature.NATURE_ID)) {
buildPathManager.update(monitor);
}
return null;
}
String vendor = composerProject.getVendorDir();
for (IResourceDelta affected : delta.getAffectedChildren()) {
String path = affected.getProjectRelativePath().toOSString();
if (path.equals("composer.lock") || path.equals(vendor)) {
changed = true;
}
}
// nothing to do
if (!changed) {
return null;
}
buildPathManager.update(monitor);
} catch (Exception e) {
Logger.logException(e);
}
return null;
}
}