| package org.eclipse.jst.jsf.facelet.ui.internal.validation; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspaceRoot; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.jobs.ISchedulingRule; |
| import org.eclipse.jst.jsf.designtime.internal.BasicExtensionFactory.ExtensionData; |
| import org.eclipse.jst.jsf.facelet.ui.internal.FaceletUiPlugin; |
| import org.eclipse.wst.validation.AbstractValidator; |
| import org.eclipse.wst.validation.ValidationResult; |
| import org.eclipse.wst.validation.ValidationState; |
| import org.eclipse.wst.validation.internal.core.ValidationException; |
| import org.eclipse.wst.validation.internal.operations.LocalizedMessage; |
| import org.eclipse.wst.validation.internal.provisional.core.IMessage; |
| import org.eclipse.wst.validation.internal.provisional.core.IReporter; |
| import org.eclipse.wst.validation.internal.provisional.core.IValidationContext; |
| import org.eclipse.wst.validation.internal.provisional.core.IValidator; |
| |
| /** |
| * The Facelet HTML file validator. |
| * |
| * @author cbateman |
| * |
| */ |
| public class HTMLValidator extends AbstractValidator implements IValidator { |
| /** |
| * @param helper |
| * @return no rule, null |
| */ |
| public ISchedulingRule getSchedulingRule(final IValidationContext helper) { |
| // no rule... |
| return null; |
| } |
| |
| public void cleanup(final IReporter reporter) { |
| // do nothing |
| } |
| |
| @Override |
| public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor) { |
| final ValidationResult vr = new ValidationResult(); |
| if (resource == null || !(resource instanceof IFile)) { |
| return vr; |
| } |
| IFile currentFile = (IFile) resource; |
| List<AbstractFaceletValidationStrategy> validationStrategies = getStrategies(currentFile.getProject()); |
| for (AbstractFaceletValidationStrategy strategy : validationStrategies) { |
| if (strategy.shouldValidate(currentFile)) { |
| strategy.validateFile(currentFile, vr.getReporter(monitor), this); |
| } |
| } |
| return vr; |
| } |
| |
| public void validate(final IValidationContext helper, final IReporter reporter) throws ValidationException { |
| final String[] uris = helper.getURIs(); |
| final IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot(); |
| if (uris.length > 0) { |
| IFile currentFile = null; |
| |
| for (int i = 0; i < uris.length && !reporter.isCancelled(); i++) { |
| currentFile = wsRoot.getFile(new Path(uris[i])); |
| if (currentFile != null && currentFile.exists()) { |
| List<AbstractFaceletValidationStrategy> validationStrategies = getStrategies(currentFile |
| .getProject()); |
| for (AbstractFaceletValidationStrategy strategy : validationStrategies) { |
| if (strategy.shouldValidate(currentFile)) { |
| final int percent = (i * 100) / uris.length + 1; |
| final IMessage message = new LocalizedMessage(IMessage.LOW_SEVERITY, percent + "% " |
| + uris[i]); |
| reporter.displaySubtask(this, message); |
| |
| strategy.validateFile(currentFile, reporter, this); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| private List<AbstractFaceletValidationStrategy> getStrategies(final IProject project) { |
| Map<String, ExtensionData<AbstractFaceletValidationStrategy>> possibleStrategies = FaceletUiPlugin.getDefault() |
| .getValidationStrategy(); |
| List<AbstractFaceletValidationStrategy> strategies = new ArrayList<AbstractFaceletValidationStrategy>( |
| possibleStrategies.size()); |
| int maxPriority = 0; |
| for (final Map.Entry<String, ExtensionData<AbstractFaceletValidationStrategy>> entry : possibleStrategies |
| .entrySet()) { |
| AbstractFaceletValidationStrategy instance = entry.getValue().getInstance(project); |
| if (instance != null) { |
| |
| int priority = instance.getPriority(); |
| if (priority > maxPriority) { |
| strategies.clear(); |
| maxPriority = priority; |
| strategies.add(instance); |
| continue; |
| } |
| |
| if (priority == maxPriority) { |
| strategies.add(instance); |
| } |
| } |
| } |
| return strategies; |
| } |
| |
| } |