package org.axdt.avm.builder;
import java.util.List;
import java.util.Set;
import org.axdt.core.AxdtCore;
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.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
public class AvmContainerPackageCollector implements IResourceDeltaVisitor, IResourceVisitor{
public static class ProjectResult {
protected final IProject project;
protected final Set<IPath> additions = Sets.newHashSet();
protected final Set<IPath> deletions = Sets.newHashSet();
protected boolean clear = false;
public ProjectResult(IProject project) {
this.project = project;
}
public IProject getProject() {
return project;
}
public Set<IPath> getAdditions() {
return additions;
}
public Set<IPath> getDeletions() {
return deletions;
}
}
protected final List<ProjectResult> results = Lists.newArrayList();
protected ProjectResult result = null;
public boolean visit(IResourceDelta delta) throws CoreException {
IResource res = delta.getResource();
switch (res.getType()) {
case IResource.ROOT:
return true;
case IResource.PROJECT:
return checkProject(res.getProject());
case IResource.FOLDER:
if (delta.getKind() == IResourceDelta.REMOVED) {
result.deletions.add(res.getFullPath());
}
return true;
case IResource.FILE:
if (delta.getKind() == IResourceDelta.ADDED) {
checkFile(res);
}
return false;
}
return false;
}
public boolean visit(IResource res) throws CoreException {
switch (res.getType()) {
case IResource.ROOT:
return true;
case IResource.PROJECT:
return checkProject(res.getProject());
case IResource.FOLDER:
return true;
case IResource.FILE:
checkFile(res);
return false;
}
return false;
}
private void checkFile(IResource res) {
String extension = res.getFileExtension();
if ("as".equals(extension)||"mxml".equals(extension)) {
result.additions.add(res.getParent().getFullPath());
}
}
private boolean checkProject(IProject project) throws CoreException {
if (project.isAccessible() && project.hasNature(AxdtCore.NATURE_ID)) {
result = new ProjectResult(project);
results.add(result);
return true;
}
result = null;
return false;
}
public List<ProjectResult> getResults() {
return results;
}
}