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  }