<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: 'GroovyPresentationScriptProcessor' in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208735#M161865</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok, so we are talking about two things.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Groovy controllers&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. (SURF aware) Grails Controllers/Grails Views&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now everybody interested should speak up now. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I, speaking for myself would love to have both, and I would suggest starting off with Groovy Controllers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 31 Jan 2009 11:50:29 GMT</pubDate>
    <dc:creator>deas0815</dc:creator>
    <dc:date>2009-01-31T11:50:29Z</dc:date>
    <item>
      <title>'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208730#M161860</link>
      <description>Hallo everybody,I was wondering whether (and how) one would/should implement a "GroovyPresentationScriptProcessor" so one would usegroovy instead of JavaScript or both (choosing the interpreter dependent on the extension of the script).I guess I could implement that myself, but I'd like to avoid&amp;nbsp; re</description>
      <pubDate>Thu, 29 Jan 2009 09:31:36 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208730#M161860</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-01-29T09:31:36Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208731#M161861</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Generic scripting support via JSR-223 (for Groovy and JRuby) is something that is on the medium term roadmap for Alfresco although we don't yet know how (or indeed if) it will work.&amp;nbsp;&amp;nbsp; We are still at the thinking, prototyping and kicking ideas around stage.&amp;nbsp;&amp;nbsp;&amp;nbsp; So from Alfresco's perspective you are not re-inventing the wheel.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Your ideas for a groovyProcessor AMP are entirely feasible and it will be worth continuing with this forge project that way you will get precicely what you want and you may get a working system faster.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Jan 2009 22:52:13 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208731#M161861</guid>
      <dc:creator>mrogers</dc:creator>
      <dc:date>2009-01-29T22:52:13Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208732#M161862</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I realise it's not a full Groovy scripting solution, but in Alfresco v3 and above [1] it's relatively easy to develop Web Scripts in Groovy, via Spring's "dynamic bean" concept.&amp;nbsp; It requires a little bit of Java glue code (Spring dynamic beans can't have a parent, which Web Script beans require), but once that code is in place, adding new Groovy backed Web Scripts is as simple as putting the Groovy code and Web Script descriptor etc. into the classpath, updating the Spring config to define the new script as a dynamic bean and restarting Alfresco.&amp;nbsp; All changes to the Groovy code from that point on are picked up automatically, without requiring any further restarts of Alfresco (much the same as Javascript backed Web Scripts that are stored in the classpath).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;These "Groovy Web Scripts" can also be easily packaged into AMP files, which makes deployment to test / production environments both simpler and safer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have some code lying around that demonstrates how to do this - if you're interested in it let me know and I'll create a forge project, put the code up there and make you a committer so we can both enhance it (along with anyone else who's interested in this area).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Peter&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[1] The only reason this approach doesn't work in earlier versions of Alfresco is that Spring dynamic beans don't work very well in Spring versions prior to 2.0.3 or so (Alfresco 2.x bundles Spring 2.0.2, Alfresco 3.x bundles Spring 2.0.6).&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Jan 2009 23:51:14 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208732#M161862</guid>
      <dc:creator>pmonks</dc:creator>
      <dc:date>2009-01-29T23:51:14Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208733#M161863</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hallo Peter,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;this is exactly what I'm doing today. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What I had in mind in the first place was creating an extension/replacement for PresentationScriptProcessor which acts exactly&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;like PresentationScriptProcessor does with the only difference being that it uses groovy scripts instead of javascript (or both&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;determining the interpreter by extension ?).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;During my research, I found stepped across groovyProcessor.amp ( &lt;/SPAN&gt;&lt;A href="http://forge.alfresco.com/frs/?group_id=105" rel="nofollow noopener noreferrer"&gt;http://forge.alfresco.com/frs/?group_id=105&lt;/A&gt;&lt;SPAN&gt; ) but&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;the idea behind it seems a bit&amp;nbsp; diffrent (and the project orphaned ?) The idea looks pretty appealing to me as well. If I understand&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;it correctly, it would make grails apps embedded in SURF possible. I imagined dropping an application of a region in webstudio. Please&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;also have a look at &lt;/SPAN&gt;&lt;A href="http://forums.alfresco.com/en/viewtopic.php?f=30&amp;amp;t=16567" rel="nofollow noopener noreferrer"&gt;http://forums.alfresco.com/en/viewtopic.php?f=30&amp;amp;t=16567&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok now one step after the other. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What exaclty are you interested in when it comes to groovy and alfresco ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Maybe we can really join forces an start/continue a forge project.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 30 Jan 2009 21:49:19 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208733#M161863</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-01-30T21:49:19Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208734#M161864</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Andreas&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The reason why I did not advanced the forge project was significant changes in the WebScript API that happened between 2.1 and 2.9 version. It felt like a moving target and I felt that better to wait.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now when API seems to be stabilised it may be a good time to give a boost to the project again. And you are welcome.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would also like to coordinate with Alfresco as Groovy seems to be on roadmap. May be Alfresco engineer responsible for these features can join the project too.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alexander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 30 Jan 2009 22:16:35 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208734#M161864</guid>
      <dc:creator>alexander</dc:creator>
      <dc:date>2009-01-30T22:16:35Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208735#M161865</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok, so we are talking about two things.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Groovy controllers&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. (SURF aware) Grails Controllers/Grails Views&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now everybody interested should speak up now. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I, speaking for myself would love to have both, and I would suggest starting off with Groovy Controllers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 31 Jan 2009 11:50:29 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208735#M161865</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-01-31T11:50:29Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208736#M161866</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What particular benefit do you see in replacing standard web script lifecycle (executable script connecting to model and carrying out operations and then using presentation template as a view)?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Grails controllers do offer extended functionality, such as :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1) Single controller is responsible for multiple operations and views where webscirpt has one operation by default (unless you use parameters to select right method).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2) URL mapping is more concise way of describing URL bindings than whole bunch of webscript descriptors. This is actually not about controllers but about framework approach. Webscripts approach allows better modularity, but less functional.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3) Allows redirect and webflow - nice thing but embedding Spring Web Flow in the product, like Grails did, may be an overkill.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anything else you are thinking about?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alexander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 31 Jan 2009 13:03:27 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208736#M161866</guid>
      <dc:creator>alexander</dc:creator>
      <dc:date>2009-01-31T13:03:27Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208737#M161867</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Alexander,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Andreas&lt;BR /&gt;&lt;BR /&gt;What particular benefit do you see in replacing standard web script lifecycle (executable script connecting to model and carrying out operations and then using presentation template as a view)?&lt;BR /&gt;&lt;BR /&gt;Grails controllers do offer extended functionality, such as :&lt;BR /&gt;1) Single controller is responsible for multiple operations and views where webscirpt has one operation by default (unless you use parameters to select right method).&lt;BR /&gt;2) URL mapping is more concise way of describing URL bindings than whole bunch of webscript descriptors. This is actually not about controllers but about framework approach. Webscripts approach allows better modularity, but less functional.&lt;BR /&gt;3) Allows redirect and webflow - nice thing but embedding Spring Web Flow in the product, like Grails did, may be an overkill.&lt;BR /&gt;&lt;BR /&gt;Anything else you are thinking about?&lt;BR /&gt;&lt;BR /&gt;Thanks&lt;BR /&gt;Alexander&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding 1. (Groovy Controllers) I have the following idea in mind:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Provide a mechanism to use groovy controller scripts instead of the javascript ones to prepare the model for the view as groovy is much&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;more powerful than javascript. The view (i.e. freemarker) would remain the same as it is with javascript today. A special use case&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think of goes like this in the (groovy) controller of a SURF application:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def xml = webFormXmlContentInstanceAccessor.getXml(source.downloadURI)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;def handyModelBean = new XmlParser().parseText(xml)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;model.put("webFormContentInstance", handyModelBean)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;as I personally don't like the idea using webform renditions in a SURF application.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Besides, in a groovy controller you can easily obtain a reference to the ServiceRegistry (in the web-client) or the spring context (in general).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Grails Controllers/Views are a bit more complicated of course. Nevertheless, I would love to place Grails Appliation components&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;on a page in webstudio just as you place application portlets on a portal page. I don't yet have a clear picture how much makes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sense here and how much effort it is to get there.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 31 Jan 2009 17:15:17 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208737#M161867</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-01-31T17:15:17Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208738#M161868</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Sounds good&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What people think about security restrictions groovy scripts should have?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If we use service auto-injection (or even give access to Service Registry) then using groovy anyone can run as "system" bypassing security restrictions for this user.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any thoughts here?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alexander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 31 Jan 2009 17:20:37 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208738#M161868</guid>
      <dc:creator>alexander</dc:creator>
      <dc:date>2009-01-31T17:20:37Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208739#M161869</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;well not sure whether I'm missing something here, but I just felt like I had a deja vue. &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding grails controllers/views I guess one can go even further an generalize the idea so you can use any servlet based&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;webappliation framework while staying completely independent of them.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I was thinking of the idea the portals bridges people had (but start off with a webscript instead of a portlet). Have a look&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;at &lt;/SPAN&gt;&lt;A href="http://portals.apache.org/bridges/" rel="nofollow noopener noreferrer"&gt;http://portals.apache.org/bridges/&lt;/A&gt;&lt;SPAN&gt;. In fact, in 2005 I was extending the struts bridge to support multiple&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;struts portlets on one page and implemented the Vignette portal interface&amp;nbsp; (which is an ugly hack because I do not have&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;the source of their portal).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The general idea of portals bridges is to provide servlet api objects so the webapplication framework (JSF, grails, wicket or whatever)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;gets what it wants.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I guess implemention effort of this approach should be far less than making the application framework SURF aware. And this approach&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;is far more general and even independant of the webapplication framework.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am I missing something ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Comments ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 31 Jan 2009 18:42:35 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208739#M161869</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-01-31T18:42:35Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208740#M161870</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;While the idea of implementing a Groovy aware ScriptProcessor is a good one (particularly longer term), currently that framework is fairly heavily Javascript centric, and I don't believe it will be possible to integrate Groovy (or other scripting languages) at that level without quite a bit of knock-on work required elsewhere in the Alfresco code.&amp;nbsp; And for that level of disruption / impact I'd rather wait and see what approach the Alfresco engineers are thinking of, rather than risk wasting my time heading down a path that heads off at a tangent.&amp;nbsp; Of course feel free to have a crack at it if you like - don't let my risk aversion hold you back!&amp;nbsp; :wink:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the meantime however, what I've been exploring is implementing extensions in Groovy, using the Java versions of those extension points.&amp;nbsp; In some cases (eg. Web Scripts) this can't be done directly and requires a little bit of (reusable) Java glue code, but for many of these extension mechanisms Groovy can already be used directly - this is possible due to Spring's dynamic beans functionality (&lt;/SPAN&gt;&lt;A href="http://static.springframework.org/spring/docs/2.0.x/reference/dynamic-language.html" rel="nofollow noopener noreferrer"&gt;http://static.springframework.org/spring/docs/2.0.x/reference/dynamic-language.html&lt;/A&gt;&lt;SPAN&gt;).&amp;nbsp; In fact this approach should also work for BeanShell and JRuby, although I haven't tried that myself.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This has a number of advantages, including:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;&lt;LI&gt;Using Spring dynamic beans means that developers can get all the usual benefits of a scripted language - hot redeployment, no server restarts etc.&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;The developer isn't limited to the Javascript API - they can leverage all of Alfresco's native APIs as well as any other native Java API that's in the Alfresco classpath&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;It doesn't break (or even change!) how Alfresco invokes extensions - from Alfresco's perspective it's dealing with just another native Java extension wired in via Spring&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;It doesn't change the security / access rules that Alfresco already has - Groovy extensions would play by exactly the same rules that native Java extensions already have&lt;/LI&gt;&lt;/UL&gt;&lt;SPAN&gt;The only downsides I've hit to date are:&lt;/SPAN&gt;&lt;BR /&gt;&lt;OL style="list-style-type:decimal;"&gt;&lt;LI&gt;This only works for Alfresco 3 and up - the 2.x releases include an older version of Spring that doesn't support dynamic beans properly&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;In some cases (notably Web Scripts) you can't wire in a Spring dynamic bean directly, so some small Java glue code is required to delegate calls to the Groovy script&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;The initial configuration of the Groovy script can't be done dynamically ie. you have to reconfigure Spring then restart Alfresco once before you get into the edit / test cycle&lt;/LI&gt;&lt;/OL&gt;&lt;SPAN&gt;IMVHO these are pretty minor concerns though, since (1) most people should be on, or looking to move to, Alfresco 3 ASAP; (2) the glue code is trivial and reusable, so it only needs to be written once then can be forgotten about; and (3) the initial configuration of a custom extension is (for me at least) typically a vanishingly small percentage of the total time I spend implementing an extension.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Peter&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Feb 2009 20:06:12 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208740#M161870</guid>
      <dc:creator>pmonks</dc:creator>
      <dc:date>2009-02-02T20:06:12Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208741#M161871</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hallo everybody, hallo Peter,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Peter: I also noticed that a "real" Groovy replacement for the Javascript Processor requires a few changes as the Javascript&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;based code is a bit scattered. Hence I would also appreciate a statement from the alfresco engineering team where there&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;are heading to regarding this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding grails controllers/views I more and more see SURF as a portal "replacement" as the framework has quite a lot&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in common with a portal (w/o the personalization) - Pages, navigation, themes, chrome, regions, components and templates.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Seeing it from this perspective, I was wondering whether "application components" should be implemented just like portals&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usually do it - Put the application in another servlet context and then do cross context calls.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding grails, you would have to be a little careful with javascript and tags but I guess that would be the cleanest approach.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You could even implement the application without it beeing embedded in SURF and you should not have to care about&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;libraries beeing compatible (SURF + grails/JSF/whatever).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The bridge based approach (s. portals bridges) may head into library conflicts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Comments ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Suggestions ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Feb 2009 04:38:08 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208741#M161871</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-02-03T04:38:08Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208742#M161872</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;A Surf / Grails integration should be possible via a similar mechanism to what I've been using for repo Web Scripts - after all Surf components are just Web Scripts running outside the repo.&amp;nbsp; The questions are whether Grails requires access to the raw request and response objects (which is possible in a Java backed Web Script, but is not recommended) and whether it's capable of generating page fragments rather than fully formed pages (which would remain the responsibility of Surf).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;BTW, mrogers (who posted on Jan 29th) is an Alfresco engineer, so I think we already have a statement.&amp;nbsp; :wink:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Peter&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Feb 2009 05:42:38 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208742#M161872</guid>
      <dc:creator>pmonks</dc:creator>
      <dc:date>2009-02-03T05:42:38Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208743#M161873</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Peter: Sometimes there are reasons to access the raw Servlet API objects. Today, I need content generated by webforms in controller code (webscript)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in virtual tomcat and a remotely running SURF app. The only way I've found so far is using the requestdispatcher and forwarding a request&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to the default servlet or the endpoint proxy servlet. You also need this when you want to create (Groovy) "handy" Model-Beans from within&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;controller code as mentioned above.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am I missing something ? &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regarding "full blown" SURF application components, I still favour the "portal-style" cross context approach in general. I'll go ask the grails people for&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;their comments as I'm personally most interested in grails.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;@Alfresco Engineering: Which approach in general would you suggest to implement "SURF application components" when one wants a full blown&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;web-application stack ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there something wrong with the portal-style "cross context" approach ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Feb 2009 15:00:04 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208743#M161873</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-02-03T15:00:04Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208744#M161874</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Just an update:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;groovyProcessor.amp (&lt;/SPAN&gt;&lt;A href="http://forge.alfresco.com/projects/minigrails/" rel="nofollow noopener noreferrer"&gt;http://forge.alfresco.com/projects/minigrails/&lt;/A&gt;&lt;SPAN&gt;) was updated for version 3 stable. it allows using .groovy and .gsp in webscripts running in the context of repository (but not in standalone web applications like Surf / Share). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Webscripts functionality is not enabled by default, it requires changes in webscript-framework-application-context.xml:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;lt;bean id="webscript.default" parent="webscript" class="org.alfresco.web.scripts.DeclarativeWebScript" scope="prototype"/&amp;gt;&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;has to be changed to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;lt;bean id="webscript.default" parent="webscript" class="org.alfresco.module.GroovyProcessor.WebScript.DeclarativeWebScript" scope="prototype"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="serviceRegistry"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ref bean="ServiceRegistry"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt; &lt;BR /&gt;&amp;lt;/bean&amp;gt;&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;All previous functionality like custom tags, encoders etc. should still be supported (did not test too extensively).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alexander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 07 Feb 2009 01:27:31 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208744#M161874</guid>
      <dc:creator>alexander</dc:creator>
      <dc:date>2009-02-07T01:27:31Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208745#M161875</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;@Alexander: Great, I'll have a look at it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the meantime, I've made a quick hack implementing a SuperPresentationScriptProcessor which also supports Groovy controllers. It is&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;an extension to PresentationScriptProcessor which defaults to javascript but tries groovy when javascript is not found. Works fine&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;with SURF for me.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Just in case somebody brave is interested &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;import groovy.lang.Binding;&lt;BR /&gt;import groovy.lang.GroovyCodeSource;&lt;BR /&gt;import groovy.lang.GroovyShell;&lt;BR /&gt;&lt;BR /&gt;import java.util.HashMap;&lt;BR /&gt;import java.util.Map;&lt;BR /&gt;import java.util.UUID;&lt;BR /&gt;import java.util.concurrent.ConcurrentHashMap;&lt;BR /&gt;&lt;BR /&gt;import org.alfresco.web.scripts.PresentationScriptProcessor;&lt;BR /&gt;import org.alfresco.web.scripts.ScriptContent;&lt;BR /&gt;import org.apache.commons.logging.Log;&lt;BR /&gt;import org.apache.commons.logging.LogFactory;&lt;BR /&gt;&lt;BR /&gt;public class SuperPresentationScriptProcessor extends&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PresentationScriptProcessor {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private static final Log logger = LogFactory&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.getLog(SuperPresentationScriptProcessor.class);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private Map&amp;lt;String, GroovyCodeSource&amp;gt; groovyScriptCache = new ConcurrentHashMap&amp;lt;String, GroovyCodeSource&amp;gt;(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;256);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private boolean groovyEnabled = true;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public SuperPresentationScriptProcessor() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("In god we trust :)");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/** AbstractWebScript has .js hard coded */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Object executeScript(ScriptContent location,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map&amp;lt;String, Object&amp;gt; model) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Execute script " + location.getPath());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String path = location.getPath();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object retval = null;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (isGroovyEnabled() &amp;amp;&amp;amp; path.endsWith(".groovy")) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Its groovy !");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HashMap&amp;lt;String, Object&amp;gt; variables = new HashMap&amp;lt;String, Object&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map&amp;lt;String, Object&amp;gt; mod = model;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (mod != null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (String key : mod.keySet()) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object obj = mod.get(key);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;variables.put(key, obj);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mod = new HashMap&amp;lt;String, Object&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;variables.put("model", mod);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GroovyCodeSource gs = this.groovyScriptCache.get(path);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (gs == null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String codeBase = "";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String name = "Groovy_" + UUID.randomUUID().toString().replaceAll("-", "");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gs = new GroovyCodeSource(location.getInputStream(), name, "");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.groovyScriptCache.put(path, gs);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Using cached instance of groovy script " + path);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GroovyShell groovyShell = new GroovyShell(new Binding(variables));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retval = groovyShell.evaluate(gs);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Groovy script " + path + " executed");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Its not groovy");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retval = super.executeScript(location, model);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("model ready = " + model.get("ready"));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return retval;// Nobody cares about it actually !&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void reset() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super.reset();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.groovyScriptCache.clear();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; AbstractWebScript passes .js hardcoded - try .js and .groovy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;protected ScriptDetails getExecuteScript(String mimetype)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;ScriptResourceHelper.recurseScriptImports calls&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;ScriptResourceLoader.loadScriptResource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public ScriptContent findScript(String path) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("find script " + path);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String basePath = path.replaceAll("\\.js", "");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ScriptContent scriptContent = super.findScript(basePath + ".js");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (scriptContent == null &amp;amp;&amp;amp; isGroovyEnabled()) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("No script with path " + basePath&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ ".js found, trying " + basePath + ".groovy");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scriptContent = super.findScript(basePath + ".groovy");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (scriptContent != null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Got script for base path " + basePath + " : "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ scriptContent.getPath());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.debug("Got no script for base path " + basePath);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return scriptContent;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public boolean isGroovyEnabled() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return groovyEnabled;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void setGroovyEnabled(boolean groovyEnabled) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.groovyEnabled = groovyEnabled;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;regarding SURF + Grails integrations, I'll check how much effort th "the portal style integration" is.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 07 Feb 2009 09:38:24 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208745#M161875</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-02-07T09:38:24Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208746#M161876</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;just in case somebody is interested, I've now asked the grails people for their 2c regarding integration&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;of grails and SURF. The posting is here: &lt;/SPAN&gt;&lt;A href="http://www.nabble.com/Alfresco-SURF-%2B-Grails-%3A-Comments-for-integration-td21898436.html" rel="nofollow noopener noreferrer"&gt;http://www.nabble.com/Alfresco-SURF-%2B-Grails-%3A-Comments-for-integration-td21898436.html&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Luis: I personally would not call the rest of grails "overhead". &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt; Imagine you want a real full blown modern application running in a SURF based website: Persistence with a complex model, WebFlow, Form Validation, AJAX etc. Which approach would you suggest in this case ? Of course grails is just one of the many stacks available - it just happens to be the one I personally prefer. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Andreas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 08 Feb 2009 13:29:40 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208746#M161876</guid>
      <dc:creator>deas0815</dc:creator>
      <dc:date>2009-02-08T13:29:40Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208747#M161877</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;One comment (which is based on little more than a quick perusal of the GroovyPresentationScriptProcessor, so might be completely misguided :wink&lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;:&amp;nbsp; I'm not sure it's a good idea to inject the default script processor model object into Groovy scripts, since currently the default model is quite specific to Rhino (the JS interpreter Alfresco uses).&amp;nbsp; For Groovy (which has a much tighter integration with native Java than Rhino does), it would be better to inject the Java equivalents of the appropriate root scope objects, rather than the Rhino-compatible facades.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;While this might seem like a lot of work, I think injecting just the ServiceRegistry (along with any script context - the document/space NodeRef for an action, for example) would be sufficient for most Groovy scripts.&amp;nbsp; Unlike the Javascript API (which doesn't have an equivalent of the ServiceRegistry, let alone the ability to instantiate native Alfresco objects directly), Groovy scripts should be able to get at just about everything from the ServiceRegistry.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Peter&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Feb 2009 05:05:20 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208747#M161877</guid>
      <dc:creator>pmonks</dc:creator>
      <dc:date>2009-02-09T05:05:20Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208748#M161878</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Peter&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Default model (and also ScriptNode properties and methods) make it quite intuitive to someone who wants to write SCRIPTS. It would require knowledge of Alfresco Java API to write even simple scripts if this was not the case.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This injection does no harm because:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1) Javascript API is written quite efficiently. Effectively they are just bunch of helper methods that allow working with properties faster. The only exception may be "content" operation that can not be optimised well using Javascript API.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2) One can always&amp;nbsp; decide to ignore it and to provide ServiceRegistry object to your Groovy scripts and go from there. This will require building simple processor extension (class that is based on BaseProcessorExtension and wired similar to other extensions in module-context.xml).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What I plan to explore&amp;nbsp; is a way to auto-inject any Alfresco beans into Groovy script by name match. For example something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;def documentPath = nodeService.getPath(document)&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;will automatically find bean "nodeService" if this variable or property does not exist and bean "nodeService" is defined in Spring. Does it sound like a good idea?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alexander&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Feb 2009 19:32:41 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208748#M161878</guid>
      <dc:creator>alexander</dc:creator>
      <dc:date>2009-02-10T19:32:41Z</dc:date>
    </item>
    <item>
      <title>Re: 'GroovyPresentationScriptProcessor'</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208749#M161879</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The problem is that mixing calls to the Javascript and Java APIs is not recommended (see &lt;/SPAN&gt;&lt;A href="http://wiki.alfresco.com/wiki/JavaScript_API_For_Alfresco_2.1#Native_Java_API_Access" rel="nofollow noopener noreferrer"&gt;http://wiki.alfresco.com/wiki/JavaScript_API_For_Alfresco_2.1#Native_Java_API_Access&lt;/A&gt;&lt;SPAN&gt;), so allowing both of them to be used from Groovy scripts (or any other scripting environment) is likely to create subtle problems that are difficult to troubleshoot.&amp;nbsp; For that reason it would be better to limit Groovy scripts to one or the other, but never both at the same time - that's the best way to ensure developers (particularly those new to Alfresco) don't inadvertently get themselves into trouble.&amp;nbsp; FWIW I'd prefer to see only the Java APIs available to Groovy scripts, for the simple reason that it would be difficult to make them unavailable to Groovy, given Groovy's deliberately tight integration with Java.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now whether those native Java APIs get wrapped into "Groovier" APIs is a separate question, and I think doing so makes perfect sense.&amp;nbsp; The "builder" pattern that some other Groovy libraries are following seems to me to have good applicability to the native Alfresco APIs, for example.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Peter&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Feb 2009 20:13:31 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/groovypresentationscriptprocessor/m-p/208749#M161879</guid>
      <dc:creator>pmonks</dc:creator>
      <dc:date>2009-02-10T20:13:31Z</dc:date>
    </item>
  </channel>
</rss>

