/******************************************************************************* * Copyright (c) 2012 Spring IDE Developers * 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: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.data.internal.validation; import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.springframework.ide.eclipse.core.SpringCore; import org.springframework.ide.eclipse.core.internal.model.SpringProject; import org.springframework.ide.eclipse.core.model.IModelElement; import org.springframework.ide.eclipse.core.model.IResourceModelElement; import org.springframework.ide.eclipse.core.model.ISpringProject; import org.springframework.ide.eclipse.core.model.validation.AbstractValidator; import org.springframework.ide.eclipse.core.model.validation.IValidationContext; import org.springframework.ide.eclipse.core.model.validation.IValidationElementLifecycleManager; /** * @author Tomasz Zarna * */ public class SpringDataValidator extends AbstractValidator { public Set<IResource> deriveResources(Object object) { Set<IResource> resources = new LinkedHashSet<IResource>(); if (object instanceof ISpringProject) { resources.add(((ISpringProject) object).getProject()); } return resources; } public Set<IResource> getAffectedResources(IResource resource, int kind, int deltaKind) throws CoreException { if (resource instanceof IFile && resource.getName().endsWith(".java") && JavaCore.create((IFile) resource) != null) { return Collections.singleton(resource); } return Collections.emptySet(); } @Override protected IValidationContext createContext( IResourceModelElement rootElement, IResourceModelElement contextElement) { return new SpringDataValidationContext(rootElement, contextElement); } /** * Creates a {@link IValidationElementLifecycleManager} instance. * <p> * This implementation creates an instance of * {@link SpringValidationElementLifecycleManager}. */ @Override protected IValidationElementLifecycleManager createValidationElementLifecycleManager() { return new SpringValidationElementLifecycleManager(); } @Override protected boolean supports(IModelElement element) { if (element instanceof CompilationUnit) { return true; } return false; } private static class SpringValidationElementLifecycleManager implements IValidationElementLifecycleManager { private IResourceModelElement rootElement; public void destroy() { // Nothing to do here. } public Set<IResourceModelElement> getContextElements() { Set<IResourceModelElement> resources = new LinkedHashSet<IResourceModelElement>(); resources.add(getRootElement()); return resources; } public IResourceModelElement getRootElement() { return rootElement; } public void init(IResource resource) { ICompilationUnit cu = getCompilationUnit(resource); IModelElement parent = new SpringProject(SpringCore.getModel(), resource.getProject()); String name = resource.getName(); rootElement = new CompilationUnit(cu, parent, name); } private ICompilationUnit getCompilationUnit(IResource resource) { IJavaProject project = getJavaProject(resource); if (project == null) { return null; } if (resource.getType() == IResource.FILE) { return (ICompilationUnit)JavaCore.create((IFile) resource); } return null; } private IJavaProject getJavaProject(IResource resource) { IProject project = resource.getProject(); return JavaCore.create(project); } } }