/******************************************************************************* * Copyright (c) 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.common.validation.test; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; import org.eclipse.wst.validation.internal.core.ValidationException; import org.eclipse.wst.validation.internal.provisional.core.IReporter; import org.jboss.tools.common.validation.ContextValidationHelper; import org.jboss.tools.common.validation.IProjectValidationContext; import org.jboss.tools.common.validation.IValidatingProjectSet; import org.jboss.tools.common.validation.IValidatingProjectTree; import org.jboss.tools.common.validation.IValidator; import org.jboss.tools.common.validation.ValidatorManager; import org.jboss.tools.common.validation.internal.ProjectValidationContext; /** * @author Alexey Kazakov */ public class TestSynchronizationValidator implements IValidator { private final static TestValidatingProjectTree PROJECT_BRANCH_FOR_CHANGED_PROJECT_1 = new TestValidatingProjectTree( new TestValidatingProjectSet(SynchronizationTest.CHANGED_PROJECT_1, SynchronizationTest.PROJECT_A_1), new TestValidatingProjectSet(SynchronizationTest.CHANGED_PROJECT_1, SynchronizationTest.CHANGED_PROJECT_B_1, SynchronizationTest.PROJECT_B_2), new TestValidatingProjectSet(SynchronizationTest.CHANGED_PROJECT_1, SynchronizationTest.CHANGED_PROJECT_B_1, SynchronizationTest.PROJECT_B_A_1)); private final static TestValidatingProjectTree PROJECT_BRANCH_FOR_CHANGED_PROJECT_B_1 = new TestValidatingProjectTree( new TestValidatingProjectSet(SynchronizationTest.CHANGED_PROJECT_1, SynchronizationTest.CHANGED_PROJECT_B_1, SynchronizationTest.PROJECT_B_A_1), new TestValidatingProjectSet(SynchronizationTest.CHANGED_PROJECT_1, SynchronizationTest.CHANGED_PROJECT_B_1, SynchronizationTest.PROJECT_B_2)); private final static Map<IProject, TestValidatingProjectTree> PROJECT_TREE; static { PROJECT_TREE = new HashMap<IProject, TestSynchronizationValidator.TestValidatingProjectTree>(); PROJECT_TREE.put(SynchronizationTest.CHANGED_PROJECT_1, PROJECT_BRANCH_FOR_CHANGED_PROJECT_1); PROJECT_TREE.put(SynchronizationTest.CHANGED_PROJECT_B_1, PROJECT_BRANCH_FOR_CHANGED_PROJECT_B_1); } private final static Set<IProject> VALIDATED_ROOT_PROJECTS = new HashSet<IProject>(); private static class TestValidatingProjectSet implements IValidatingProjectSet { private IProject[] projects; public TestValidatingProjectSet(IProject... projects) { this.projects = projects; } public IProject getRootProject() { return projects[projects.length-1]; } public Set<IProject> getAllProjects() { Set<IProject> result = new HashSet<IProject>(); for (IProject project : projects) { result.add(project); } return result; } public IProjectValidationContext getRootContext() { return new ProjectValidationContext(); } @Override public boolean isFullValidationRequired() { return false; } @Override public void setFullValidationRequired(boolean b) { } } private static class TestValidatingProjectTree implements IValidatingProjectTree { private Map<IProject, IValidatingProjectSet> projects; public TestValidatingProjectTree(IValidatingProjectSet... projectBrunches) { projects = new HashMap<IProject, IValidatingProjectSet>(); for (IValidatingProjectSet projectSet : projectBrunches) { projects.put(projectSet.getRootProject(), projectSet); } } public Map<IProject, IValidatingProjectSet> getBrunches() { return projects; } public Set<IProject> getAllProjects() { Set<IProject> result = new HashSet<IProject>(); for (IValidatingProjectSet projectSet : projects.values()) { result.addAll(projectSet.getAllProjects()); } return result; } public void addProject(IProject project) { } } private static synchronized void projectHasBeenValidated(IProject project) { VALIDATED_ROOT_PROJECTS.add(project); } public static synchronized void clear() { VALIDATED_ROOT_PROJECTS.clear(); } public static synchronized boolean isProjectValidated(IProject project) { return VALIDATED_ROOT_PROJECTS.contains(project); } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#validate(java.util.Set, org.eclipse.core.resources.IProject, org.jboss.tools.common.validation.ContextValidationHelper, org.jboss.tools.common.validation.IProjectValidationContext, org.jboss.tools.common.validation.ValidatorManager, org.eclipse.wst.validation.internal.provisional.core.IReporter) */ @Override public IStatus validate(Set<IFile> changedFiles, IProject project, ContextValidationHelper validationHelper, IProjectValidationContext validationContext, ValidatorManager manager, IReporter reporter) throws ValidationException { for (IFile file : changedFiles) { IProject changedProject = file.getProject(); validateAll(changedProject, validationHelper, validationContext, manager, reporter); } return ValidatorManager.OK_STATUS; } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#validateAll(org.eclipse.core.resources.IProject, org.jboss.tools.common.validation.ContextValidationHelper, org.jboss.tools.common.validation.IProjectValidationContext, org.jboss.tools.common.validation.ValidatorManager, org.eclipse.wst.validation.internal.provisional.core.IReporter) */ @Override public IStatus validateAll(IProject project, ContextValidationHelper validationHelper, IProjectValidationContext validationContext, ValidatorManager manager, IReporter reporter) throws ValidationException { try { Thread.sleep(100); } catch (InterruptedException e) { // Ignore } projectHasBeenValidated(project); return ValidatorManager.OK_STATUS; } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#getId() */ @Override public String getId() { return "org.jboss.common.validation.test.TestSynchronizationValidator"; } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#getBuilderId() */ @Override public String getBuilderId() { return null; } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#getValidatingProjects(org.eclipse.core.resources.IProject) */ @Override public IValidatingProjectTree getValidatingProjects(IProject project) { return PROJECT_TREE.get(project); } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#shouldValidate(org.eclipse.core.resources.IProject) */ @Override public boolean shouldValidate(IProject project) { return project.getName().startsWith("ChangedProject"); } /* (non-Javadoc) * @see org.jboss.tools.common.validation.IValidator#isEnabled(org.eclipse.core.resources.IProject) */ @Override public boolean isEnabled(IProject project) { return shouldValidate(project); } @Override public void setProblemType(String problemType) { // TODO Auto-generated method stub } @Override public void registerPreferenceInfo() { // TODO Auto-generated method stub } }