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