/** * Copyright (c) 2013-2016 Angelo ZERR. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.eclipse.ide.linter.internal.ui.validation; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; 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.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.wst.validation.ValidationFramework; import tern.eclipse.ide.core.IIDETernProject; import tern.eclipse.ide.core.ITernProjectLifecycleListener; import tern.eclipse.ide.core.ITernProjectLifecycleListenerProvider; import tern.eclipse.ide.linter.internal.ui.TernLinterUIMessages; /** * Refresh WTP Tern Validator when linter are added or removed from the * .tern-project. * */ public class RefreshTernValidator implements ITernProjectLifecycleListener, ITernProjectLifecycleListenerProvider { private final ValidationFramework validation; public RefreshTernValidator() { validation = ValidationFramework.getDefault(); } @Override public void handleEvent(final IIDETernProject project, LifecycleEventType state) { if (state == LifecycleEventType.onLintersChanged) { // Linters has changed (added or removed) Display.getDefault().syncExec(new Runnable() { public void run() { MessageBox mb = new MessageBox(Display.getDefault().getActiveShell(), SWT.APPLICATION_MODAL | SWT.YES | SWT.NO | SWT.ICON_INFORMATION | SWT.RIGHT); mb.setText(TernLinterUIMessages.Validation_Title); mb.setMessage(TernLinterUIMessages.Validation_Project); if (mb.open() == SWT.YES) { // tern validation must be done or disabled ValidateJob job = new ValidateJob(TernLinterUIMessages.Validation_jobName, project.getProject()); job.schedule(); } } }); } } @Override public ITernProjectLifecycleListener getListener() { return this; } /** * Performs validation after validation preferences have been modified. */ private class ValidateJob extends Job { private final IProject project; public ValidateJob(String name, IProject project) { super(name); this.project = project; } protected IStatus run(IProgressMonitor monitor) { IStatus status = Status.OK_STATUS; try { IProject[] projects = new IProject[] { project }; validation.validate(projects, true, false, monitor); } catch (CoreException ce) { status = Status.CANCEL_STATUS; } return status; } } }