1 package com.stateofflow.eclipse.metrics.export.wizard;
2
3 import java.io.IOException;
4 import java.lang.reflect.InvocationTargetException;
5
6 import org.eclipse.core.resources.IProject;
7 import org.eclipse.core.resources.IResource;
8 import org.eclipse.core.resources.IWorkspaceRoot;
9 import org.eclipse.core.resources.ResourcesPlugin;
10 import org.eclipse.core.runtime.CoreException;
11 import org.eclipse.core.runtime.IProgressMonitor;
12 import org.eclipse.core.runtime.IStatus;
13 import org.eclipse.core.runtime.Path;
14 import org.eclipse.core.runtime.Status;
15 import org.eclipse.jdt.core.IJavaElement;
16 import org.eclipse.jdt.core.IJavaProject;
17 import org.eclipse.jdt.core.JavaCore;
18 import org.eclipse.jface.operation.IRunnableWithProgress;
19
20 import com.stateofflow.eclipse.metrics.MetricsBuilder;
21 import com.stateofflow.eclipse.metrics.MetricsPlugin;
22 import com.stateofflow.eclipse.metrics.export.Exporter;
23
24 final class ExportRunnable implements IRunnableWithProgress {
25 private final Exporter[] exporters;
26 private final String project;
27
28 public ExportRunnable(final Exporter[] exporters, final String project) {
29 this.exporters = exporters;
30 this.project = project;
31 }
32
33 private void doFinish(final String projectName, final Exporter[] exporters, final IProgressMonitor monitor) throws Exception {
34 final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
35 final IResource resource = root.findMember(new Path(projectName));
36 final IJavaProject javaProject = JavaCore.create(resource).getJavaProject();
37 validateProject(projectName, javaProject);
38
39 final IProject project = javaProject.getProject();
40
41 startExport(exporters, monitor, project);
42 }
43
44 public void run(final IProgressMonitor monitor) throws InvocationTargetException {
45 try {
46 doFinish(project, exporters, monitor);
47 } catch (final Exception e) {
48 throw new InvocationTargetException(e);
49 } finally {
50 monitor.done();
51 }
52 }
53
54 private void startExport(final Exporter[] exporters, final IProgressMonitor monitor, final IProject project) throws Exception {
55 try {
56 new MetricsBuilder().export(project, exporters, monitor);
57 } catch (final IOException ioex) {
58 throw new CoreException(new Status(IStatus.ERROR, "Failed to write metrics", IStatus.OK, ioex.getMessage(), ioex));
59 }
60 }
61
62 private void validateProject(final String projectName, final IJavaElement project) throws CoreException {
63 if (project == null || !project.exists() || !(project instanceof IJavaProject)) {
64 throw new CoreException(new Status(IStatus.ERROR, MetricsPlugin.PLUGIN_ID, IStatus.OK, "Java Project \"" + projectName + "\" does not exist.", null));
65 }
66 }
67 }
68