Code Search for Developers
 
 
  

Subscription.java from Groovy Eclipse Monkey at Krugle


Show Subscription.java syntax highlighted

/*******************************************************************************
 * Copyright (c) 2006 Eclipse Foundation
 * 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:
 *     Bjorn Freeman-Benson - initial implementation
 *     Ward Cunningham - initial implementation
 *******************************************************************************/
package net.sf.groovyMonkey;
import static java.util.regex.Pattern.DOTALL;
import static java.util.regex.Pattern.compile;
import static net.sf.groovyMonkey.dom.Utilities.activeWindow;
import static net.sf.groovyMonkey.dom.Utilities.error;
import static org.apache.commons.lang.StringUtils.defaultString;
import static org.apache.commons.lang.StringUtils.isBlank;
import static org.eclipse.core.resources.ResourcesPlugin.getWorkspace;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;

public class Subscription
{
    private final ScriptMetadata metadata;
    private final String filter;
    private final IWorkspace source;
    private IResourceChangeListener listener;

    public Subscription( final ScriptMetadata metadata,
                         final String filter )
    {
        this.metadata = metadata;
        this.filter = defaultString( filter );
        this.source = getWorkspace();
    }
    public String getFilter()
    {
        return filter;
    }
    public void subscribe()
    {
        this.listener = new ResourceChangeListener( metadata, filter );
        source.addResourceChangeListener( listener );
    }
    public void unsubscribe()
    {
        source.removeResourceChangeListener( listener );
    }
    static class ResourceChangeListener
    implements IResourceChangeListener
    {
        private final ScriptMetadata metadata;
        private final String filter;

        public ResourceChangeListener( final ScriptMetadata metadata,
                                final String filter )
        {
            this.metadata = metadata;
            this.filter = filter;
        }
        public boolean checkFilter( final IResourceChangeEvent event )
        {
            if( isBlank( filter ) )
                return true;
            final Pattern pattern = compile( filter, DOTALL );
            if( event.getResource() != null )
            {
                final IResource resource = event.getResource();
                final Matcher matcher = pattern.matcher( resource.getFullPath().toOSString() );
                if( matcher.find() )
                    return true;
            }
            if( event.getDelta() != null )
            {
                final Boolean[] found = { false };
                final IResourceDeltaVisitor visitor = new IResourceDeltaVisitor()
                {
                    public boolean visit( final IResourceDelta delta )
                    throws CoreException
                    {
                        if( found[ 0 ] )
                            return false;
                        if( !( delta.getResource() instanceof IFile ) )
                            return true;
                        final Matcher matcher = pattern.matcher( delta.getFullPath().toOSString() );
                        found[ 0 ] = matcher.find();
                        return true;
                    }
                };
                try
                {
                    event.getDelta().accept( visitor );
                }
                catch( final CoreException e )
                {
                    error( "Error filtering ResourceChangeEvent", "" + event, e );
                }
                return found[ 0 ];
            }
            return true;
        }
        public void resourceChanged( final IResourceChangeEvent event )
        {
            if( event == null )
                return;
            if( !checkFilter( event ) )
                return;
            final Map< String, Object > map = new HashMap< String, Object >();
            map.put( "event", event );
            final RunMonkeyScript script = new RunMonkeyScript( metadata.getFile(), activeWindow(), map, true );
            script.run();
        }
    }
}




See more files for this project here

Groovy Eclipse Monkey

Groovy Monkey is a Utility for Eclipse that enables you to create scripts in Groovy, Beanshell, Python or Ruby to run directly in Eclipse. This tool can be used to Eclipse API exploration, automation scripts, and rapid plugin prototyping.

Project homepage: http://sourceforge.net/projects/groovy-monkey
Programming language(s): Groovy,Java,XML
License: other

  actions/
    CreateGroovyMonkeyExamplesAction.java
    PasteScriptFromClipboardAction.java
    PublishScript.java
    PublishScriptForBlogger.java
    PublishScriptForEmail.java
    PublishScriptForWiki.java
    RecreateMonkeyMenuAction.java
    SelectScriptPathDialog.java
  dom/
    bundle/
      BundleDOM.java
      BundleDOMFactory.java
    resources/
      File.java
      Line.java
      Resources.java
      ResourcesDOMFactory.java
    runner/
      RunnerDOM.java
      RunnerDOMFactory.java
    window/
      WindowDOMFactory.java
    workspace/
      WorkspaceDOMFactory.java
    BSFFunctionsDOMFactory.java
    IDynamicState.java
    IMonkeyDOMFactory.java
    MetadataDOMFactory.java
    MonitorDOM.java
    Utilities.java
  lang/
    IMonkeyScript.java
    IMonkeyScriptFactory.java
    MonkeyScript.java
    MonkeyScriptFactoryAbstract.java
  preferences/
    GroovyMonkeyPreferencePage.java
    PreferenceInitializer.java
  util/
    ListUtil.java
    MapUtil.java
    SetUtil.java
    StringUtil.java
    Transformer.java
    TreeList.java
  BundleClassLoaderAdapter.java
  DOMDescriptor.java
  ErrorDialog.java
  GroovyMonkeyPlugin.java
  Marker.java
  MonkeyClassLoader.java
  RunMonkeyScript.java
  ScriptMetadata.java
  Subscription.java
  Tags.java
  UpdateMonkeyActionsResourceChangeListener.java