Revision: 18729
          http://sourceforge.net/p/gate/code/18729
Author:   markagreenwood
Date:     2015-05-29 16:10:29 +0000 (Fri, 29 May 2015)
Log Message:
-----------
a new PluginListener and code to unload images from plugins that are being 
unloaded

Modified Paths:
--------------
    gate/trunk/src/main/gate/CreoleRegister.java
    gate/trunk/src/main/gate/creole/CreoleRegisterImpl.java
    gate/trunk/src/main/gate/gui/MainFrame.java

Added Paths:
-----------
    gate/trunk/src/main/gate/event/PluginListener.java

Modified: gate/trunk/src/main/gate/CreoleRegister.java
===================================================================
--- gate/trunk/src/main/gate/CreoleRegister.java        2015-05-29 01:20:00 UTC 
(rev 18728)
+++ gate/trunk/src/main/gate/CreoleRegister.java        2015-05-29 16:10:29 UTC 
(rev 18729)
@@ -19,6 +19,7 @@
 import gate.creole.ResourceData;
 import gate.creole.metadata.CreoleResource;
 import gate.event.CreoleListener;
+import gate.event.PluginListener;
 import gate.util.GateException;
 
 import java.io.Serializable;
@@ -260,5 +261,9 @@
    * @see #addCreoleListener(CreoleListener)
    */
   public void removeCreoleListener(CreoleListener l);
+  
+  public void addPluginListener(PluginListener l);
+  
+  public void removePluginListener(PluginListener l);
 
 } // interface CreoleRegister

Modified: gate/trunk/src/main/gate/creole/CreoleRegisterImpl.java
===================================================================
--- gate/trunk/src/main/gate/creole/CreoleRegisterImpl.java     2015-05-29 
01:20:00 UTC (rev 18728)
+++ gate/trunk/src/main/gate/creole/CreoleRegisterImpl.java     2015-05-29 
16:10:29 UTC (rev 18729)
@@ -28,6 +28,7 @@
 import gate.VisualResource;
 import gate.event.CreoleEvent;
 import gate.event.CreoleListener;
+import gate.event.PluginListener;
 import gate.util.CreoleXmlUpperCaseFilter;
 import gate.util.Err;
 import gate.util.GateClassLoader;
@@ -53,6 +54,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.log4j.Logger;
 import org.jdom.Document;
@@ -78,8 +80,7 @@
 @SuppressWarnings("serial")
 public class CreoleRegisterImpl extends HashMap<String, ResourceData>
                                                                      implements
-                                                                     
CreoleRegister,
-                                                                     
CreoleListener {
+                                                                     
CreoleRegister {
 
   /** A logger to use instead of sending messages to Out or Err **/
   protected static final Logger log = 
Logger.getLogger(CreoleRegisterImpl.class);
@@ -299,6 +300,8 @@
       }
       
       directories.add(directoryUrl);
+      
+      firePluginLoaded(directoryUrl);
     }
   }
   
@@ -518,6 +521,8 @@
       log.info("CREOLE plugin unloaded: " + directory);
       if (prCount > 0)
         log.warn(prCount+" resources were deleted as they relied on the " + 
dInfo.getName() +" plugin");
+      
+      firePluginUnloaded(directory);
     }
   }
 
@@ -1095,6 +1100,28 @@
   protected Set<String> applicationTypes;
 
   private transient Vector<CreoleListener> creoleListeners;
+  
+  private transient List<PluginListener> pluginListeners = new 
CopyOnWriteArrayList<PluginListener>();
+  
+  protected void firePluginLoaded(URL url) {
+    for (PluginListener listener : pluginListeners) {
+      listener.pluginLoaded(url);
+    }
+  }
+  
+  protected void firePluginUnloaded(URL url) {
+    for (PluginListener listener : pluginListeners) {
+      listener.pluginUnloaded(url);
+    }
+  }
+  
+  public void addPluginListener(PluginListener listener) {
+    pluginListeners.add(listener);
+  }
+  
+  public void removePluginListener(PluginListener listener) {
+    pluginListeners.remove(listener);
+  }
 
   protected void fireResourceLoaded(CreoleEvent e) {
     if(creoleListeners != null) {

Added: gate/trunk/src/main/gate/event/PluginListener.java
===================================================================
--- gate/trunk/src/main/gate/event/PluginListener.java                          
(rev 0)
+++ gate/trunk/src/main/gate/event/PluginListener.java  2015-05-29 16:10:29 UTC 
(rev 18729)
@@ -0,0 +1,10 @@
+package gate.event;
+
+import java.net.URL;
+
+public interface PluginListener {
+
+  public void pluginLoaded(URL url);
+    
+  public void pluginUnloaded(URL url);
+}

Modified: gate/trunk/src/main/gate/gui/MainFrame.java
===================================================================
--- gate/trunk/src/main/gate/gui/MainFrame.java 2015-05-29 01:20:00 UTC (rev 
18728)
+++ gate/trunk/src/main/gate/gui/MainFrame.java 2015-05-29 16:10:29 UTC (rev 
18729)
@@ -37,6 +37,7 @@
 import gate.creole.annic.Constants;
 import gate.event.CreoleEvent;
 import gate.event.CreoleListener;
+import gate.event.PluginListener;
 import gate.event.ProgressListener;
 import gate.event.StatusListener;
 import gate.gui.creole.manager.PluginUpdateManager;
@@ -55,6 +56,7 @@
 import gate.util.CorpusBenchmarkTool;
 import gate.util.ExtensionFileFilter;
 import gate.util.Files;
+import gate.util.GateClassLoader;
 import gate.util.GateException;
 import gate.util.GateRuntimeException;
 import gate.util.LuckyException;
@@ -105,7 +107,6 @@
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.net.MalformedURLException;
@@ -200,7 +201,7 @@
  */
 @SuppressWarnings("serial")
 public class MainFrame extends JFrame implements ProgressListener,
-                                     StatusListener, CreoleListener {
+                                     StatusListener, CreoleListener, 
PluginListener {
 
   protected static final Logger log = Logger.getLogger(MainFrame.class);
 
@@ -1249,6 +1250,7 @@
 
   protected void initListeners() {
     Gate.getCreoleRegister().addCreoleListener(this);
+    Gate.getCreoleRegister().addPluginListener(this);
    
     resourcesTree.addKeyListener(new KeyAdapter() {
       @Override
@@ -2119,7 +2121,37 @@
       }
     });
   }
+  
+  @Override
+  public void pluginLoaded(URL url) {
+    // currently we don't care about this event
+  }
 
+  @Override
+  public void pluginUnloaded(URL url) {
+    try {
+      String classloaderID = (new URL(url, "creole.xml")).toExternalForm();
+
+      Iterator<String> it = iconByName.keySet().iterator();
+      while(it.hasNext()) {
+        String name = it.next();
+        Icon icon = iconByName.get(name);
+
+        ClassLoader cl = icon.getClass().getClassLoader();
+
+        if(cl instanceof GateClassLoader) {
+          if(((GateClassLoader)cl).getID().equals(classloaderID)) {
+            it.remove();
+          }
+        }
+      }
+    } catch(MalformedURLException e) {
+      // this should be impossible!
+
+      e.printStackTrace();
+    }
+  }
+
   /**
    * Overridden so we can exit when window is closed
    */
@@ -5341,13 +5373,14 @@
         }
         
         @Override
-        public void menuDeselected(MenuEvent arg0) {
+        public void menuDeselected(MenuEvent e) {         
+          removeAll();
           statusChanged("");
         }
         
         @Override
-        public void menuCanceled(MenuEvent arg0) {
-          // do nothing   
+        public void menuCanceled(MenuEvent e) {
+          menuDeselected(e);
         }
       });
     }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
GATE-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gate-cvs

Reply via email to