diff options
Diffstat (limited to 'plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java')
-rw-r--r-- | plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java | 346 |
1 files changed, 0 insertions, 346 deletions
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java deleted file mode 100644 index 9fd45a71f..000000000 --- a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValBuilderJob.java +++ /dev/null @@ -1,346 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 IBM Corporation and others. - * 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.wst.validation.internal; - -import java.text.MessageFormat; -import java.util.LinkedList; -import java.util.Queue; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; -import org.eclipse.core.resources.IResourceVisitor; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.resources.WorkspaceJob; -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.SubMonitor; -import org.eclipse.wst.validation.DependentResource; -import org.eclipse.wst.validation.Friend; -import org.eclipse.wst.validation.IDependencyIndex; -import org.eclipse.wst.validation.ValidationEvent; -import org.eclipse.wst.validation.ValidationFramework; -import org.eclipse.wst.validation.ValidationState; -import org.eclipse.wst.validation.Validator; -import org.eclipse.wst.validation.internal.model.IValidatorVisitor; -import org.eclipse.wst.validation.internal.operations.ValidationBuilder; -import org.eclipse.wst.validation.internal.plugin.ValidationPlugin; - - -/** - * Run all the v2 validators through this job. - * <p> - * This is the main class for supporting build based validation. When triggered it looks at all of the - * resource changes and determines what needs to be validated. - * </p> - * @author karasiuk - * - */ -public final class ValBuilderJob extends WorkspaceJob { - - private static ValBuilderJob _job; - private static Queue<ValidationRequest> _work = new LinkedList<ValidationRequest>(); - - private final ValOperation _operation = new ValOperation(); - - /** The types of changes we are interested in. */ - private final static int InterestedFlags = IResourceDelta.CONTENT | IResourceDelta.ENCODING | - IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO; - - public static synchronized void validateProject(IProject project, IResourceDelta delta, int buildKind){ - ValidationRequest request = new ValidationRequest(project, delta, buildKind); - if (_job == null){ - _job = new ValBuilderJob(); - _job.add(request); - _job.schedule(); - } - else { - _job.add(request); - } - } - - private static synchronized ValidationRequest getRequest(){ - ValidationRequest request = _work.poll(); - if (request == null){ - _job = null; - } - return request; - } - - /** - * Each validation run is done in it's own job. - * - * @param project the project that is being validated - * @param delta the delta that is being validated. This may be null, in which case we do a - * full validation of the project. - * - * @param buildKind the kind of build. - * @see org.eclipse.core.resources.IncrementalProjectBuilder#AUTO_BUILD - * @see org.eclipse.core.resources.IncrementalProjectBuilder#CLEAN_BUILD - * @see org.eclipse.core.resources.IncrementalProjectBuilder#FULL_BUILD - * @see org.eclipse.core.resources.IncrementalProjectBuilder#INCREMENTAL_BUILD - * - * @param operation some global context for the validation operation - * - */ - private ValBuilderJob(){ - super(ValMessages.JobName); - } - - private void add(ValidationRequest request){ - _work.add(request); - } - - @Override - public boolean belongsTo(Object family) { - if (family == ResourcesPlugin.FAMILY_MANUAL_BUILD)return true; - if (family == ValidationBuilder.FAMILY_VALIDATION_JOB){ - return true; - } - - return super.belongsTo(family); - } - - @Override - public IStatus runInWorkspace(IProgressMonitor monitor) { - Tracing.log("ValBuilderJob-01: Starting"); //$NON-NLS-1$ - - try { - startingValidation(monitor); - - ValidationRequest request = getRequest(); - while(request != null){ - run(request, monitor); - request = getRequest(); - } - } - finally { - finishingValidation(monitor); - } - - Tracing.log("ValBuilderJob-02: Finished"); //$NON-NLS-1$ - return Status.OK_STATUS; - } - - private void startingValidation(IProgressMonitor monitor) { - IValidatorVisitor startingVisitor = new IValidatorVisitor(){ - - public void visit(Validator validator, IProject project, ValType valType, - ValOperation operation, IProgressMonitor monitor) { - - validator.validationStarting(project, operation.getState(), monitor); - } - }; - - ValManager.getDefault().accept(startingVisitor, null, ValType.Build, getOperation(), monitor); - } - - private void finishingValidation(IProgressMonitor monitor) { - - IValidatorVisitor finishedVisitor = new IValidatorVisitor(){ - - public void visit(Validator validator, IProject project, ValType valType, - ValOperation operation, IProgressMonitor monitor) { - - validator.validationFinishing(project, operation.getState(), monitor); - } - }; - ValManager.getDefault().accept(finishedVisitor, null, ValType.Build, getOperation(), monitor); - } - - private void run(ValidationRequest request, IProgressMonitor monitor){ - setName(MessageFormat.format(ValMessages.JobNameWithProjectName,new Object[] { request.getProject().getName() })); - try { - IValidatorVisitor startingVisitor = new IValidatorVisitor(){ - - public void visit(Validator validator, IProject project, ValType valType, - ValOperation operation, IProgressMonitor monitor) { - - validator.validationStarting(project, operation.getState(), monitor); - } - }; - - ValManager.getDefault().accept(startingVisitor, request.getProject(), ValType.Build, getOperation(), monitor); - - if (request.getDelta() == null)fullBuild(request, monitor); - else deltaBuild(request, monitor); - - - } - catch (ProjectUnavailableError e){ - ValidationPlugin.getPlugin().handleProjectUnavailableError(e); - } - catch (ResourceUnavailableError e){ - ValidationPlugin.getPlugin().handleResourceUnavailableError(e); - } - catch (CoreException e){ - ValidationPlugin.getPlugin().handleException(e); - } - finally { - IValidatorVisitor finishedVisitor = new IValidatorVisitor(){ - - public void visit(Validator validator, IProject project, ValType valType, - ValOperation operation, IProgressMonitor monitor) { - - validator.validationFinishing(project, operation.getState(), monitor); - } - }; - ValManager.getDefault().accept(finishedVisitor, request.getProject(), ValType.Build, getOperation(), monitor); - } - - } - - private void deltaBuild(ValidationRequest request, IProgressMonitor monitor) throws CoreException { - ResourceCounter counter = new ResourceCounter(); - request.getDelta().accept(counter); - SubMonitor subMonitor = SubMonitor.convert(monitor, counter.getCount()); - Visitor vistitor = new Visitor(request, subMonitor, monitor, getOperation()); - request.getDelta().accept(vistitor); - } - - private void fullBuild(ValidationRequest request, IProgressMonitor monitor) throws CoreException { - ResourceCounter counter = new ResourceCounter(); - request.getProject().accept(counter, 0); - SubMonitor subMonitor = SubMonitor.convert(monitor, counter.getCount()); - Visitor vistitor = new Visitor(request, subMonitor, monitor, getOperation()); - request.getProject().accept(vistitor); - - } - - private ValOperation getOperation(){ - return _operation; - } - - static final class ResourceCounter implements IResourceProxyVisitor, IResourceDeltaVisitor { - - private int _count; - - public int getCount() { - return _count; - } - - public boolean visit(IResourceProxy proxy) throws CoreException { - _count++; - return true; - } - - public boolean visit(IResourceDelta delta) throws CoreException { - _count++; - return true; - } - } - - static final class ValidationRequest { - /** The project that is being built. */ - private final IProject _project; - - /** The resource delta that triggered the build, it will be null for a full build. */ - private final IResourceDelta _delta; - - /** - * The kind of build. - * - * @see org.eclipse.core.resources.IncrementalProjectBuilder - */ - private final int _buildKind; - - public ValidationRequest(IProject project, IResourceDelta delta, int buildKind){ - _project = project; - _delta = delta; - _buildKind = buildKind; - } - - public IProject getProject() { - return _project; - } - - public IResourceDelta getDelta() { - return _delta; - } - - public int getBuildKind() { - return _buildKind; - } - } - - private final static class Visitor implements IResourceDeltaVisitor, IResourceVisitor{ - - private final ValidationRequest _request; - private final SubMonitor _subMonitor; - private final IProgressMonitor _monitor; - private final ValOperation _operation; - - public Visitor(ValidationRequest request, SubMonitor subMonitor, IProgressMonitor monitor, ValOperation operation){ - _request = request; - _subMonitor = subMonitor; - _monitor = monitor; - _operation = operation; - } - - public boolean visit(IResource resource) throws CoreException { - try { - if (DisabledResourceManager.getDefault().isDisabled(resource)){ - MarkerManager.getDefault().deleteMarkers(resource, _operation.getStarted(), IResource.DEPTH_INFINITE); - return false; - } - ValManager.getDefault().validate(_request.getProject(), resource, IResourceDelta.NO_CHANGE, ValType.Build, - _request.getBuildKind(), _operation, _subMonitor.newChild(1)); - } - catch (ResourceUnavailableError e){ - if (Tracing.isLogging())Tracing.log("ValBuilderJob-02: " + e.toString()); //$NON-NLS-1$ - return false; - } - return true; - } - - @SuppressWarnings("deprecation") - public boolean visit(IResourceDelta delta) throws CoreException { - IResource resource = delta.getResource(); - if (DisabledResourceManager.getDefault().isDisabled(resource)){ - MarkerManager.getDefault().deleteMarkers(resource, _operation.getStarted(), IResource.DEPTH_INFINITE); - return false; - } - int kind = delta.getKind(); - boolean isChanged = (kind & IResourceDelta.CHANGED) != 0; - if (isChanged && (delta.getFlags() & InterestedFlags) == 0)return true; - - if ((kind & (IResourceDelta.ADDED | IResourceDelta.CHANGED)) != 0){ - ValManager.getDefault().validate(_request.getProject(), resource, delta.getKind(), ValType.Build, - _request.getBuildKind(), _operation, _subMonitor.newChild(1)); - } - - IDependencyIndex index = ValidationFramework.getDefault().getDependencyIndex(); - if (index.isDependedOn(resource)){ - MarkerManager mm = MarkerManager.getDefault(); - for (DependentResource dr : index.get(resource)){ - Validator val = dr.getValidator(); - if (Friend.shouldValidate(val, dr.getResource(), ValType.Build, new ContentTypeWrapper())){ - _operation.getState().put(ValidationState.TriggerResource, resource); - ValidationEvent event = new ValidationEvent(dr.getResource(), IResourceDelta.NO_CHANGE, delta); - if (val.shouldClearMarkers(event))mm.clearMarker(dr.getResource(), val); - ValManager.getDefault().validate(val, _operation, dr.getResource(), - IResourceDelta.NO_CHANGE, _monitor, event); - } - } - } - - return true; - } - - - } - -} |