Show GroovyMonkeyPlugin.java syntax highlighted
/*******************************************************************************
* Copyright (c) 2005, 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.Collections.synchronizedMap;
import static net.sf.groovyMonkey.UpdateMonkeyActionsResourceChangeListener.createTheMonkeyMenu;
import static net.sf.groovyMonkey.preferences.PreferenceInitializer.MONKEY_MENU_NAME;
import static org.eclipse.core.resources.IResourceChangeEvent.POST_CHANGE;
import static org.eclipse.core.resources.ResourcesPlugin.getWorkspace;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.osgi.service.resolver.BundleSpecification;
import org.eclipse.osgi.service.resolver.PlatformAdmin;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
public class GroovyMonkeyPlugin
extends AbstractUIPlugin
implements IStartup
{
public static final String PLUGIN_ID = "net.sf.groovyMonkey";
public static final String PUBLISH_BEFORE_MARKER = "--- Came wiffling through the eclipsey wood ---";
public static final String PUBLISH_AFTER_MARKER = "--- And burbled as it ran! ---";
public static final String SCRIPT_SUFFIX = "gm";
public static final String FILE_EXTENSION = "." + SCRIPT_SUFFIX;
public static final String FILE_EXTENSION_WILDCARD = "*" + FILE_EXTENSION;
public static final String MONKEY_DIR = "monkey";
public static final String SCRIPTS_PROJECT = "GroovyMonkeyScripts";
public static final String MENU_PATH = "groovyMonkeyMenu";
public static final String MENU_EDIT_PATH = "groovyMonkeyEditMenu";
public static final String ICON_PATH = "icons/";
private static GroovyMonkeyPlugin plugin;
private static BundleContext context;
private static final Map< String, ScriptMetadata > scriptStore = synchronizedMap( new HashMap< String, ScriptMetadata >() );
private ServiceTracker tracker = null;
private boolean started = false;
public static Map< String, ScriptMetadata > getScriptStore()
{
return scriptStore;
}
public static Map< String, ScriptMetadata > scriptStore()
{
return getScriptStore();
}
public GroovyMonkeyPlugin()
{
plugin = this;
}
@Override
public void start( final BundleContext context )
throws Exception
{
super.start( context );
earlyStartup();
GroovyMonkeyPlugin.context = context;
tracker = new ServiceTracker( context, PlatformAdmin.class.getName(), null );
tracker.open();
}
@Override
public void stop( final BundleContext context )
throws Exception
{
super.stop( context );
plugin = null;
if( tracker != null )
tracker.close();
}
public static GroovyMonkeyPlugin getDefault()
{
return plugin;
}
public static ImageDescriptor getImageDescriptor( final String path )
{
return imageDescriptorFromPlugin( PLUGIN_ID, path );
}
public void earlyStartup()
{
if( started )
return;
started = true;
final UpdateMonkeyActionsResourceChangeListener listener = new UpdateMonkeyActionsResourceChangeListener();
getWorkspace().addResourceChangeListener( listener, POST_CHANGE );
listener.rescanAllFiles();
final IPropertyChangeListener propertyListener = new IPropertyChangeListener()
{
public void propertyChange( final PropertyChangeEvent event )
{
if( event == null )
return;
if( !MONKEY_MENU_NAME.equals( event.getProperty() ) )
return;
createTheMonkeyMenu();
}
};
getPreferenceStore().addPropertyChangeListener( propertyListener );
createTheMonkeyMenu();
}
public static void addScript( final String name,
final ScriptMetadata script )
{
final Map< String, ScriptMetadata > store = scriptStore();
final ScriptMetadata oldScript = store.get( name );
if( oldScript != null )
oldScript.unsubscribe();
store.put( name, script );
script.subscribe();
}
public static void removeScript( final String name )
{
final Map< String, ScriptMetadata > store = scriptStore();
final ScriptMetadata oldScript = store.remove( name );
if( oldScript == null )
return;
oldScript.unsubscribe();
}
public static void clearScripts()
{
final Set< String > keys = new LinkedHashSet< String >( scriptStore().keySet() );
for( final String key : keys )
removeScript( key );
scriptStore().clear();
}
public static ImageRegistry registry()
{
return getDefault().getImageRegistry();
}
public static Image icon( final String name )
{
final Image image = registry().get( name );
if( image != null )
return image;
registry().put( name, getImageDescriptor( ICON_PATH + name ) );
return registry().get( name );
}
public static BundleContext context()
{
return context;
}
public static Bundle bundle()
{
return getDefault().getBundle();
}
public static PlatformAdmin getPlatformAdmin()
{
return ( PlatformAdmin )getDefault().tracker.getService();
}
public static PlatformAdmin platformAdmin()
{
return getPlatformAdmin();
}
public static BundleDescription getBundleDescription( final long id )
{
return platformAdmin().getState().getBundle( id );
}
public static BundleDescription bundleDescription( final long id )
{
return getBundleDescription( id );
}
public static BundleDescription getBundleDescription( final String name )
{
return platformAdmin().getState().getBundle( name, null );
}
public static BundleDescription bundleDescription( final String name )
{
return getBundleDescription( name );
}
public static BundleDescription getBundleDescription()
{
return getBundleDescription( bundle().getBundleId() );
}
public static BundleDescription bundleDescription()
{
return getBundleDescription();
}
public static Set< String > getAllRequiredBundles( final long id )
{
final Set< String > set = new LinkedHashSet< String >();
final BundleDescription description = bundleDescription( id );
addRequiredBundles( set, description );
for( final BundleDescription bundleDescription : description.getFragments() )
addRequiredBundles( set, bundleDescription );
return set;
}
public static Set< String > getAllReexportedBundles( final long id )
{
final Set< String > set = new LinkedHashSet< String >();
final BundleDescription description = bundleDescription( id );
addReexportedBundles( set, description );
for( final BundleDescription bundleDescription : description.getFragments() )
addReexportedBundles( set, bundleDescription );
return set;
}
public static Set< String > getAllRequiredBundles()
{
return getAllRequiredBundles( getDefault().getBundle().getBundleId() );
}
public static Set< String > getAllRequiredBundles( final String name )
{
return getAllRequiredBundles( bundleDescription( name ).getBundleId() );
}
public static Set< String > getAllReexportedBundles( final String name )
{
return getAllReexportedBundles( bundleDescription( name ).getBundleId() );
}
private static void addRequiredBundles( final Set< String > set,
final BundleDescription description )
{
for( final BundleSpecification required : description.getRequiredBundles() )
set.add( required.getName() );
}
private static void addReexportedBundles( final Set< String > set,
final BundleDescription description )
{
for( final BundleSpecification required : description.getRequiredBundles() )
if( required.isExported() )
set.add( required.getName() );
}
}
See more files for this project here