Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] How catch a file Save and execute custom script ?

// 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

2008/10/12 reaand <andrea.carlevato@xxxxxxxxx>

Hi,

i need to execute some shell commands on each file in my eclipse 3.4+CDT
project when they are saved. Can someone tell me if there is a simple way to
do this ?

Regards
Andrea

--
View this message in context: http://www.nabble.com/How-catch-a-file-Save-and-execute-custom-script---tp19912910p19912910.html
Sent from the Eclipse CDT - Development mailing list archive at Nabble.com.

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev


Back to the top