1 package com.stateofflow.eclipse.metrics.preferences;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.eclipse.core.resources.IProject;
7 import org.eclipse.core.resources.IncrementalProjectBuilder;
8 import org.eclipse.core.runtime.CoreException;
9 import org.eclipse.core.runtime.IProgressMonitor;
10 import org.eclipse.jface.operation.IRunnableWithProgress;
11
12 import com.stateofflow.eclipse.metrics.MetricsBuilder;
13 import com.stateofflow.eclipse.metrics.MetricsNature;
14 import com.stateofflow.eclipse.metrics.MetricsPlugin;
15
16 class ProjectBuilder implements IRunnableWithProgress {
17 public void run(final IProgressMonitor monitor) {
18 final IProject[] projects = getProjectsToRebuild();
19 for (final IProject project : projects) {
20 try {
21 project.build(IncrementalProjectBuilder.FULL_BUILD, MetricsBuilder.BUILDER_ID, null, monitor);
22 } catch (final CoreException cex) {
23 MetricsPlugin.log(cex);
24 }
25 }
26 }
27
28 private IProject[] getProjectsToRebuild() {
29 final IProject allProjects[] = MetricsPlugin.getWorkspaceRoot().getProjects();
30
31 final List<IProject> projectsToRebuild = new ArrayList<IProject>();
32 for (final IProject allProject : allProjects) {
33 if (shouldRebuildProject(allProject)) {
34 projectsToRebuild.add(allProject);
35 }
36 }
37
38 return projectsToRebuild.toArray(new IProject[projectsToRebuild.size()]);
39 }
40
41 private boolean shouldRebuildProject(final IProject project) {
42 try {
43 return project.hasNature(MetricsNature.NATURE_ID);
44 } catch (final CoreException cex) {
45 MetricsPlugin.log(cex);
46 return false;
47 }
48 }
49 }