001    package nl.cwi.sen1.gui.plugin;
002    
003    import nl.cwi.sen1.gui.Studio;
004    
005    /**
006     * A plugin for the MetaStudio. A plugin is a program that is dynamically
007     * loaded into the MetaStudio, and runs in its own thread. The thread is
008     * started with a call to @see #initStudioPlugin(Studio studio). 
009     */
010    public interface StudioPlugin {
011      /** 
012       * Get the name of a plugin. This is used to construct proper names
013       * of threads and to construct meaningfull error messages. Pick a unique
014       * name.
015       * @return The name of a plugin.
016       */
017      public String getName();
018    
019      /**
020       * The main method of a plugin. This method is provided a reference to
021       * the toplevel window, and the ToolBus, via the @see Studio interface.
022       * @param studio Reference to functionality of the toplevel window.
023       */
024      public void initStudioPlugin(Studio studio);
025    
026      /**
027       * Register a listener. The Studio listens to important events from all
028       * plugins. The functionality of the whole Studio may break if the
029       * observer pattern is not implemented correctly here. 
030       * @see DefaultStudioPlugin provides a default implementation.
031       * @param l An implementation of a listener (usually the studio itself).
032       */ 
033      public void addStudioPluginListener(StudioPluginListener l);
034    
035      /**
036       * Unregister a listener.
037       * @param l Listener to be unregistered.
038       */
039      public void removeStudioPluginListener(StudioPluginListener l);
040    }