[xwiki-notifications] r4729 - in xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki: . api render/groovy

Ludovic Dubost ludovic at users.forge.objectweb.org
Wed Sep 5 19:54:23 CEST 2007


Author: ludovic
Date: 2007-09-05 19:54:22 +0200 (Wed, 05 Sep 2007)
New Revision: 4729

Added:
   xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/render/groovy/XWikiPageClassLoader.java
Modified:
   xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
   xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java
Log:
XWIKI-1671 XWiki Core APIs allowing groovy or velocity scripts to refer to classes in XWiki documents attached jar files

Modified: xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java	2007-09-05 17:52:43 UTC (rev 4728)
+++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java	2007-09-05 17:54:22 UTC (rev 4729)
@@ -42,6 +42,7 @@
 import com.xpn.xwiki.render.XWikiRenderingEngine;
 import com.xpn.xwiki.render.XWikiVelocityRenderer;
 import com.xpn.xwiki.render.groovy.XWikiGroovyRenderer;
+import com.xpn.xwiki.render.groovy.XWikiPageClassLoader;
 import com.xpn.xwiki.stats.api.XWikiStatsService;
 import com.xpn.xwiki.stats.impl.SearchEngineRule;
 import com.xpn.xwiki.stats.impl.XWikiStatsServiceImpl;
@@ -5111,21 +5112,49 @@
     }
 
     public Object parseGroovyFromString(String script, XWikiContext context)
-        throws XWikiException
+            throws XWikiException
     {
-        if (getRenderingEngine().getRenderer("groovy") != null)
+        if (getRenderingEngine().getRenderer("groovy") == null)
+            return null;
+        else
             return ((XWikiGroovyRenderer) getRenderingEngine().getRenderer("groovy"))
-                .parseGroovyFromString(script, context);
-        return null;
+                    .parseGroovyFromString(script, context);
     }
 
+    public Object parseGroovyFromString(String script, String jarWikiPage, XWikiContext context)
+            throws XWikiException
+    {
+        if (getRenderingEngine().getRenderer("groovy") == null)
+            return null;
+
+
+        XWikiPageClassLoader pcl = new XWikiPageClassLoader(jarWikiPage, context);
+        Object prevParentClassLoader = context.get("parentclassloader");
+        try {
+            context.put("parentclassloader", pcl);
+            return parseGroovyFromString(script, context);
+        } finally {
+            if (prevParentClassLoader==null)
+                context.remove("parentclassloader");
+            else
+                context.put("parentclassloader", prevParentClassLoader);
+        }
+    }
+
     public Object parseGroovyFromPage(String fullname, XWikiContext context)
-        throws XWikiException
+            throws XWikiException
     {
         return parseGroovyFromString(context.getWiki().getDocument(fullname, context)
-            .getContent(), context);
+                .getContent(), context);
     }
 
+    public Object parseGroovyFromPage(String fullName, String jarWikiPage, XWikiContext context)
+            throws XWikiException
+    {
+        return parseGroovyFromString(context.getWiki().getDocument(fullName, context)
+                .getContent(), context);
+    }
+
     public String getMacroList(XWikiContext context)
     {
         String macrosmapping = "";

Modified: xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java
===================================================================
--- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java	2007-09-05 17:52:43 UTC (rev 4728)
+++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java	2007-09-05 17:54:22 UTC (rev 4729)
@@ -2453,6 +2453,22 @@
      * @return An object instanciating this class
      * @throws XWikiException
      */
+    public Object parseGroovyFromPage(String fullname, String jarWikiPage) throws XWikiException
+    {
+        XWikiDocument doc = xwiki.getDocument(fullname, getXWikiContext());
+        if (xwiki.getRightService().hasProgrammingRights(doc, getXWikiContext()))
+            return xwiki.parseGroovyFromString(doc.getContent(), jarWikiPage, getXWikiContext());
+        return "groovy_missingrights";
+    }
+
+    /**
+     * Priviledged API to retrieve an object instanciated from groovy code in a String Groovy
+     * scripts compilation is cached
+     *
+     * @param fullname // script containing a Groovy class definition (public class MyClass { ... })
+     * @return An object instanciating this class
+     * @throws XWikiException
+     */
     public Object parseGroovyFromPage(String fullname) throws XWikiException
     {
         XWikiDocument doc = xwiki.getDocument(fullname, getXWikiContext());

Copied: xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/render/groovy/XWikiPageClassLoader.java (from rev 4728, xwiki-platform/core/branches/xwiki-core-1.1/src/main/java/com/xpn/xwiki/render/groovy/XWikiPageClassLoader.java)



More information about the notifications mailing list