package com.technophobia.substeps.nature; import java.text.MessageFormat; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbench; import com.technophobia.substeps.editor.message.SubstepsEditorMessages; import com.technophobia.substeps.model.Syntax; import com.technophobia.substeps.supplier.CachingResultTransformer; import com.technophobia.substeps.supplier.Supplier; public class CheckProjectForSubstepsCompatibilityJob extends Job { private final Supplier<IWorkbench> workbenchSupplier; private final CompatibilityChecker<IProject> compatibilityChecker; private final CachingResultTransformer<IProject, Syntax> projectToSyntaxTransformer; private final Supplier<List<IProject>> projectSupplier; public CheckProjectForSubstepsCompatibilityJob(final Supplier<IWorkbench> workbenchSupplier, final Supplier<List<IProject>> projectSupplier, final CompatibilityChecker<IProject> compatibilityChecker, final CachingResultTransformer<IProject, Syntax> projectToSyntaxTransformer) { super("Checking Projects for Substeps compatibility"); this.workbenchSupplier = workbenchSupplier; this.projectSupplier = projectSupplier; this.compatibilityChecker = compatibilityChecker; this.projectToSyntaxTransformer = projectToSyntaxTransformer; } @Override protected IStatus run(final IProgressMonitor monitor) { for (final IProject project : projectSupplier.get()) { if (compatibilityChecker.isCompatible(project)) { Display.getDefault().syncExec(new Runnable() { @Override public void run() { if (MessageDialog.openQuestion( workbenchSupplier.get().getDisplay().getActiveShell(), SubstepsEditorMessages.SubstepsProjectCompatibility_Title, MessageFormat.format(SubstepsEditorMessages.SubstepsProjectCompatibility_Body, project.getName()))) { SubstepsNature.ensureProjectHasNature(project); projectToSyntaxTransformer.refreshCacheFor(project); } compatibilityChecker.markResourceAsCompatibilityChecked(project); } }); } } return Status.OK_STATUS; } }