Revision: 19196
          http://sourceforge.net/p/gate/code/19196
Author:   markagreenwood
Date:     2016-04-04 17:29:08 +0000 (Mon, 04 Apr 2016)
Log Message:
-----------
a bit more tidying up and work on a better way of loading required plugins

Modified Paths:
--------------
    gate/branches/sawdust2/src/main/gate/CreoleRegister.java
    gate/branches/sawdust2/src/main/gate/Plugin.java
    gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java
    gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java

Modified: gate/branches/sawdust2/src/main/gate/CreoleRegister.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/CreoleRegister.java    2016-04-04 
09:14:20 UTC (rev 19195)
+++ gate/branches/sawdust2/src/main/gate/CreoleRegister.java    2016-04-04 
17:29:08 UTC (rev 19196)
@@ -102,6 +102,8 @@
   
   public void registerPlugin(Plugin plugin) throws GateException;
   
+  public void registerPlugin(Plugin plugin, boolean loadDependencies) throws 
GateException;
+  
   /**
    * Register a single CREOLE directory. The <CODE>creole.xml</CODE> file at 
the
    * URL is parsed, and <CODE>CreoleData</CODE> objects added to the register.

Modified: gate/branches/sawdust2/src/main/gate/Plugin.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/Plugin.java    2016-04-04 09:14:20 UTC 
(rev 19195)
+++ gate/branches/sawdust2/src/main/gate/Plugin.java    2016-04-04 17:29:08 UTC 
(rev 19196)
@@ -20,8 +20,10 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
@@ -54,6 +56,7 @@
 import org.jdom.input.SAXBuilder;
 import org.jdom.output.Format;
 import org.jdom.output.XMLOutputter;
+import org.jdom.xpath.XPath;
 
 public abstract class Plugin {
   
@@ -74,13 +77,60 @@
    */
   protected List<ResourceInfo> resourceInfoList = null;
   
-  protected List<Plugin> requiredPlugins = null;
+  protected Set<Plugin> requiredPlugins = null;
 
   public abstract org.jdom.Document getCreoleXML() throws Exception,
           JDOMException;
   
   public abstract String getName();
+  
+  public Set<Plugin> getRequiredPlugins() {
+    if (requiredPlugins == null) parseCreole();
     
+    return requiredPlugins;
+  }
+    
+    /*
+    
+      XPath jarXPath =
+          XPath
+              .newInstance("//*[translate(local-name(), 'requires', 
'REQUIRES') = 'REQUIRES']");
+      @SuppressWarnings("unchecked")
+      List<Element> requires = jarXPath.selectNodes(getCreoleXML());
+
+      String relativePathMarker = "$relpath$";
+      String gatehomePathMarker = "$gatehome$";
+      String gatepluginsPathMarker = "$gateplugins$";
+
+      for(Element required : requires) {
+        
+        URL url = null;
+        String urlString = required.getTextTrim();
+        if(urlString.startsWith(relativePathMarker)) {
+          url =
+              new URL(getBaseURL(), urlString.substring(relativePathMarker
+                  .length()));
+        } else if(urlString.startsWith(gatehomePathMarker)) {
+          URL gatehome = Gate.getGateHome().toURI().toURL();
+          url =
+              new URL(gatehome,
+                  urlString.substring(gatehomePathMarker.length()));
+        } else if(urlString.startsWith(gatepluginsPathMarker)) {
+          URL gateplugins = Gate.getPluginsHome().toURI().toURL();
+          url =
+              new URL(gateplugins, urlString.substring(gatepluginsPathMarker
+                  .length()));
+        } else {
+          url = new URL(getBaseURL(), urlString);
+        }
+
+        Gate.getCreoleRegister().registerDirectories(url);
+      }
+    
+    
+    return requiredPlugins;
+  }*/
+    
   @Override
   public int hashCode() {
     final int prime = 31;
@@ -118,7 +168,12 @@
   protected void parseCreole() {
 
     resourceInfoList = new ArrayList<ResourceInfo>();
+    requiredPlugins = new LinkedHashSet<Plugin>();
     
+    String relativePathMarker = "$relpath$";
+    String gatehomePathMarker = "$gatehome$";
+    String gatepluginsPathMarker = "$gateplugins$";
+    
     try {
       org.jdom.Document creoleDoc = getCreoleXML();
       
@@ -158,7 +213,28 @@
           }
         }
         else if(currentElem.getName().equalsIgnoreCase("REQUIRES")) {
-          System.out.println("REQUIRES: " + currentElem.getTextTrim());
+          //System.out.println("REQUIRES: " + currentElem.getTextTrim());
+          URL url = null;
+          String urlString = currentElem.getTextTrim();
+          if(urlString.startsWith(relativePathMarker)) {
+            url =
+                new URL(getBaseURL(), urlString.substring(relativePathMarker
+                    .length()));
+          } else if(urlString.startsWith(gatehomePathMarker)) {
+            URL gatehome = Gate.getGateHome().toURI().toURL();
+            url =
+                new URL(gatehome,
+                    urlString.substring(gatehomePathMarker.length()));
+          } else if(urlString.startsWith(gatepluginsPathMarker)) {
+            URL gateplugins = Gate.getPluginsHome().toURI().toURL();
+            url =
+                new URL(gateplugins, urlString.substring(gatepluginsPathMarker
+                    .length()));
+          } else {
+            url = new URL(getBaseURL(), urlString);
+          }
+
+          requiredPlugins.add(new Plugin.Directory(url));
         }
         else {
           // this is some higher level element -> simulate recursion
@@ -576,8 +652,9 @@
     Gate.init();
     
         
-    Plugin annieDir = new Plugin.Directory(new 
File("/home/mark/gate-top/externals/gate-ix/plugins/ANNIE").toURI().toURL());
+    Plugin annieDir = new Plugin.Directory(new 
File("/home/mark/gate-top/externals/gate-ix/plugins/Tools").toURI().toURL());
     System.out.println(annieDir.getResourceInfoList());
+    System.out.println(annieDir.getRequiredPlugins());
     
     Plugin annieMaven = new Plugin.Maven("uk.ac.gate", "ANNIE", "9");
     System.out.println(annieMaven.getResourceInfoList());

Modified: 
gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java    
2016-04-04 09:14:20 UTC (rev 19195)
+++ gate/branches/sawdust2/src/main/gate/creole/CreoleAnnotationHandler.java    
2016-04-04 17:29:08 UTC (rev 19196)
@@ -103,6 +103,7 @@
    * 
    * @param jdomDoc JDOM document representing a parsed creole.xml file.
    */
+  @Deprecated
   public void loadRequiredPlugins(Document jdomDoc) throws IOException {
     try {
       XPath jarXPath =

Modified: gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java
===================================================================
--- gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java 
2016-04-04 09:14:20 UTC (rev 19195)
+++ gate/branches/sawdust2/src/main/gate/creole/CreoleRegisterImpl.java 
2016-04-04 17:29:08 UTC (rev 19196)
@@ -175,6 +175,11 @@
   
   @Override
   public void registerPlugin(Plugin plugin) throws GateException {
+    registerPlugin(plugin, true);
+  }
+  
+  @Override
+  public void registerPlugin(Plugin plugin, boolean loadDependencies) throws 
GateException {
     
     if (!plugins.contains(plugin)) {
     
@@ -182,7 +187,7 @@
     
       try {
         parseDirectory(plugin, plugin.getCreoleXML(), plugin.getBaseURL(),
-          new URL(plugin.getBaseURL(),"creole.xml"), true);
+          new URL(plugin.getBaseURL(),"creole.xml"), loadDependencies);
         log.info("CREOLE plugin loaded: " + plugin.getName());
       }
       catch(Throwable e) {
@@ -257,7 +262,8 @@
         new CreoleAnnotationHandler(plugin);
 
       if (loadDependencies) {
-        annotationHandler.loadRequiredPlugins(jdomDoc);
+        //TODO move this earlier I think
+        annotationHandler.loadRequiredPlugins(jdomDoc);        
       }
       
       GateClassLoader gcl = 
Gate.getClassLoader().getDisposableClassLoader(creoleFileUrl.toExternalForm());

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