/*******************************************************************************
* Copyright (c) 2007-2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.web.validation.jsf2.action;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IMarkerResolution;
import org.eclipse.wst.validation.ValidationFramework;
import org.eclipse.wst.validation.internal.provisional.core.IValidatorJob;
import org.jboss.tools.jsf.JSFModelPlugin;
@SuppressWarnings("restriction")
public abstract class JSF2AbstractProposal implements IMarkerResolution,
ICompletionProposal {
protected JSF2AbstractProposal() {
}
protected JSF2AbstractProposal(IResource resource) {
validateResource = resource;
}
protected IResource validateResource = null;
public String getLabel() {
return getDisplayString();
}
public final void run(IMarker marker) {
try {
runWithMarker(marker);
Job validateJob = new Job("JSF 2 Components Validator") { //$NON-NLS-1$
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
if (validateResource != null) {
ValidationFramework.getDefault().validate(
new IProject[] { validateResource
.getProject() }, false, false,
new NullProgressMonitor());
}
} catch (CoreException e) {
return new Status(IStatus.CANCEL,
JSFModelPlugin.PLUGIN_ID, "Cancel"); //$NON-NLS-1$
}
return IValidatorJob.OK_STATUS;
}
};
validateJob.schedule(500);
} catch (CoreException e) {
JSFModelPlugin.getPluginLog().logError(e);
}
}
public void apply(IDocument document) {
run(null);
}
public String getAdditionalProposalInfo() {
return null;
}
public IContextInformation getContextInformation() {
return null;
}
public Image getImage() {
return JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_ADD);
}
public Point getSelection(IDocument document) {
return null;
}
protected abstract void runWithMarker(IMarker marker) throws CoreException;
}