/******************************************************************************* * Copyright (c) 2009 SpringSource, a divison of VMware, Inc. * 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: * SpringSource, a division of VMware, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.virgo.ide.manifest.internal.core.validation; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.virgo.ide.facet.core.FacetUtils; import org.eclipse.virgo.ide.manifest.core.BundleManifestUtils; import org.eclipse.virgo.ide.manifest.internal.core.model.BundleManifest; import org.eclipse.virgo.ide.manifest.internal.core.model.BundleManifestHeader; import org.springframework.ide.eclipse.core.SpringCoreUtils; import org.springframework.ide.eclipse.core.model.IModelElement; import org.springframework.ide.eclipse.core.model.IResourceModelElement; 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; /** * {@link AbstractValidator} that handles validation of MANIFEST.MF. * @author Christian Dupuis * @since 1.0.0 */ public class BundleManifestValidator extends AbstractValidator { /** * {@inheritDoc} */ public Set<IResource> deriveResources(Object object) { return Collections.emptySet(); } /** * {@inheritDoc} */ public Set<IResource> getAffectedResources(IResource resource, int kind, int deltaKind) throws CoreException { IJavaProject javaProject = JavaCore.create(resource.getProject()); IResource bundleManifest = BundleManifestUtils.locateManifest(javaProject, false); Set<IResource> resources = new LinkedHashSet<IResource>(); if ((FacetUtils.isBundleProject(resource) && resource.equals(bundleManifest)) || (FacetUtils.isParProject(resource) && SpringCoreUtils.isManifest(resource))) { resources.add(resource); } else if (FacetUtils.isBundleProject(resource) && resource.getProjectRelativePath().toString().equals("template.mf")) { resources.add(resource); } return resources; } /** * {@inheritDoc} */ @Override protected IValidationContext createContext(IResourceModelElement rootElement, IResourceModelElement contextElement) { return new BundleManifestValidationContext(rootElement, contextElement); } /** * {@inheritDoc} */ @Override protected IValidationElementLifecycleManager createValidationElementLifecycleManager() { return new BundleManifestElementLifecycleManager(); } /** * {@inheritDoc} */ @Override protected boolean supports(IModelElement element) { return element instanceof BundleManifest || element instanceof BundleManifestHeader; } static class BundleManifestElementLifecycleManager implements IValidationElementLifecycleManager { private IResourceModelElement rootElement = null; /** * {@inheritDoc} */ public void destory() { // nothing to do } /** * {@inheritDoc} */ public Set<IResourceModelElement> getContextElements() { Set<IResourceModelElement> contextElements = new HashSet<IResourceModelElement>(); contextElements.add(getRootElement()); return contextElements; } /** * {@inheritDoc} */ public IResourceModelElement getRootElement() { return rootElement; } public void init(IResource resource) { if (resource instanceof IFile) { rootElement = new BundleManifest((IFile) resource); } } } }