// file EclipseListener.java
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveListener4;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import visitors.ResourceDeltaVisitor;
public class EclipseListener implements IResourceChangeListener {
public EclipseListener() {
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
win.addPerspectiveListener(this);
ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
}
// ----------------------------------------------------------------------------
// inherited from IResourceChangeListener
@Override
public void resourceChanged(IResourceChangeEvent event) {
switch (event.getType()) {
case IResourceChangeEvent.POST_BUILD:
System.out.println("POST_BUILD");
break;
case IResourceChangeEvent.POST_CHANGE:
System.out.println("POST_CHANGE");
IResourceDelta resourceDelta = event.getDelta();
if (resourceDelta != null) {
ResourceDeltaVisitor visitor = new ResourceDeltaVisitor("*\\.c"); // all c files for example...
try {
resourceDelta.accept(visitor);
} catch (Exception e) {
e.printStackTrace();
}
Vector<IFile> addedCFiles = visitor.getAddedFiles();
// Do what ever with the files..
}
break;
case IResourceChangeEvent.PRE_BUILD:
System.out.println("PRE_BUILD");
break;
case IResourceChangeEvent.PRE_CLOSE:
System.out.println("PRE_CLOSE");
break;
case IResourceChangeEvent.PRE_DELETE:
System.out.println("PRE_DELETE");
break;
case IResourceChangeEvent.PRE_REFRESH:
System.out.println("PRE_REFRESH");
break;
}
}
}
// ResourceDeltaVisitor.java
package visitors;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
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.runtime.CoreException;
public class ResourceDeltaVisitor implements IResourceDeltaVisitor {
private Pattern pattern = null;
private Vector<IFile> addedFiles = new Vector<IFile>();
private Vector<IFile> removedFiles = new Vector<IFile>();
private Vector<IFile> changedFiles = new Vector<IFile>();
// ----------------------------------------------------------------------------
public Vector<IFile> getAddedFiles() { return addedFiles; }
public Vector<IFile> getRemovedFiles() { return removedFiles; }
public Vector<IFile> getChangedFiles() { return changedFiles; }
// ----------------------------------------------------------------------------
public ResourceDeltaVisitor(String regex) { setRegEx(regex); }
// ----------------------------------------------------------------------------
public void setRegEx(String regex) {
try {
pattern = Pattern.compile(regex);
} catch(PatternSyntaxException e) {
System.err.println(e);
}
}
// ----------------------------------------------------------------------------
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
IResource resource = delta.getResource();
if (resource.getType() != IResource.FILE)
return true;
if (pattern != null) {
String name = resource.getName();
Matcher matcher = pattern.matcher(name);
if (!matcher.matches())
return true;
}
switch (delta.getKind()) {
case IResourceDelta.ADDED:
System.out.println("ADDED: " + delta.getResource().toString());
addedFiles.add((IFile)resource);
break;
case IResourceDelta.REMOVED:
System.out.println("REMOVED: " + delta.getResource().toString());
removedFiles.add((IFile)resource);
break;
case IResourceDelta.CHANGED:
// you will end up here on each file... which has been changed..
System.out.println("CHANGED: " + delta.getResource().toString());
changedFiles.add((IFile)resource);
break;
}
return true;
}
}
somewhere in your project you just add the following line to get the instance running...
EclipseListener eclipseListener = new EclipseListener();
/Jimmie