package org.eclipse.gmf.internal.xpand.build; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; class EcoreModelResourceVisitor implements IResourceVisitor, IResourceDeltaVisitor { private static String ECORE_FILE_EXT = "ecore"; private final IProgressMonitor monitor; private final Set<IFile> newEcoreModelFiles = new HashSet<IFile>(); private final Set<IFile> changedEcoreModelFiles = new HashSet<IFile>(); private final Set<IFile> removedEcoreModelFiles = new HashSet<IFile>(); public EcoreModelResourceVisitor(IProgressMonitor progress) { monitor = progress; } public Set<IFile> getNewModelFiles() { return Collections.unmodifiableSet(newEcoreModelFiles); } public Set<IFile> getChangedModelFiles() { return Collections.unmodifiableSet(changedEcoreModelFiles); } public Set<IFile> getRemovedModelFiles() { return Collections.unmodifiableSet(removedEcoreModelFiles); } private void handleNewResource(IFile file) { newEcoreModelFiles.add(file); } private void handleChangedResource(IFile file) { changedEcoreModelFiles.add(file); } private void handleRemoved(IFile file) { removedEcoreModelFiles.add(file); } public boolean visit(IResource resource) throws CoreException { if (resource.isDerived()) { return false; } if (resource.getType() == IResource.FILE && isEcoreModel(resource)) { handleNewResource((IFile) resource); monitor.worked(1); return false; } return true; } public boolean visit(IResourceDelta delta) throws CoreException { final IResource resource = delta.getResource(); if (resource.isDerived()) { return false; } if (resource.getType() == IResource.FILE && isEcoreModel(resource)) { switch (delta.getKind()) { case IResourceDelta.ADDED: handleNewResource((IFile) resource); break; case IResourceDelta.REMOVED: handleRemoved((IFile) resource); break; case IResourceDelta.CHANGED: handleChangedResource((IFile) resource); break; } monitor.worked(1); return false; } return true; } private static boolean isEcoreModel(IResource file) { return ECORE_FILE_EXT.equals(file.getFileExtension()); } }