package org.applause.lang.ui.builder;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.emf.mwe.core.resources.ResourceLoaderFactory;
import org.eclipse.emf.mwe.core.resources.ResourceLoaderImpl;
import org.eclipse.xtext.builder.IXtextBuilderParticipant;
public class ApplauseBuilderParticipant implements IXtextBuilderParticipant {
protected List<IProject> findDependentPlatformProjects(IProject builtProject) throws CoreException {
List<IProject> dependentProjects = new ArrayList<IProject>();
IProject[] allWorkspaceProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (IProject project : allWorkspaceProjects) {
if (project.isOpen()) {
IProject[] referencedProjects = project.getDescription().getReferencedProjects();
for (IProject referencedProject : referencedProjects) {
if (referencedProject.equals(builtProject)) {
dependentProjects.add(project);
}
}
}
}
return dependentProjects;
}
@Override
public void build(final IBuildContext context, final IProgressMonitor monitor)
throws CoreException {
List<IProject> platformProjects = findDependentPlatformProjects(context.getBuiltProject());
List<AbstractBuildStrategy> strategies = BuildStrategyRegistry.getBuildStrategies();
for (final IProject platformProject : platformProjects) {
for (final AbstractBuildStrategy buildStrategy : strategies) {
SafeRunner.run(new ISafeRunnable() {
@Override
public void run() throws Exception {
ResourceLoaderFactory.setCurrentThreadResourceLoader(new ResourceLoaderImpl(buildStrategy.getClass().getClassLoader()));
buildStrategy.setContext(context);
buildStrategy.setModelProject(context.getBuiltProject());
buildStrategy.setPlatformProject(platformProject);
buildStrategy.build(monitor);
}
@Override
public void handleException(Throwable exception) {
exception.printStackTrace();
}
});
}
}
}
}