blob: d34f9587de5a6abbe0b258b2887cf23bb897cc1c [file]
Some experiments with using Groovy
A) Some scripts that run against the Roller API
examples/rollerapi/groovy - Runs Groovy with Roller jars in path. Edit it to set paths.
examples/rollerapi/roller-custom.properties - Database properties for bin/groovy
examples/rollerapi/listusers.gy - Lists users and roles in Roller system
examples/rollerapi/createuser.gy - Create a user
examples/rollerapi/createblog.gy - Create a blog
B) Some scripts that run against the Roller Admin Protocol
examples/adminprotocol
C) A Roller GroovletRenderer that can evaluate a Roller template as Groovy code
with Groovlet-style "out" and "html" bindings.
The implementation:
org.apache.roller.scripting.GroovletRenderer
org.apache.roller.scripting.GroovletRendererFactory
org.apache.roller.scripting.GroovyRollerBinding
Here's an example Hello World template:
println "<html><body>Hello World</body></html>"
Here's an example template that displays recent entries from a weblog:
html.html { // html is implicitly bound to new MarkupBuilder(out)
head {
title(model.weblog.name)
}
body {
h1(model.weblog.name)
i(model.weblog.description)
map = model.getWeblogEntriesPager().getEntries();
map.keySet().each() {
map.get(it).each() {
h2(it.title)
p(it.text)
br()
}
}
}
}
D) A Roller GSPRenderer that can evaluate a Roller template as a Groovy Template
with GSP-style "out" and "html" bindings.
The implementation:
org.apache.roller.scripting.GSPRenderer
org.apache.roller.scripting.GSPRendererFactory
org.apache.roller.scripting.GSPRollerBinding
Here's an example Hello World template:
<html>
<body>
<%= "Hello World" %>
</body>
</html>
Here's an example template that displays recent entries from a weblog:
<html>
<head>
<title>${model.weblog.name}</title>
</head>
<body>
<h1>${model.weblog.name}</h1>
<i>${model.weblog.description}</i>
<% map = model.getWeblogEntriesPager().getEntries();
map.keySet().each() { %>
<% map.get(it).each() { %>
<h2>${it.title}</h2>
<p>${it.text}</p><br />
<% }
}%>
</body>
</html>
To use renderers (C) and (D) in Roller:
1) Put roller-groovy.jar and groovy-all-1.0.jar in WEB-INF/lib
3) In your roller-custom.properies file add this override:
rendering.rollerRendererFactories=\
org.apache.roller.ui.rendering.velocity.VelocityRendererFactory,\
org.apache.roller.scripting.GroovletRendererFactory,\
org.apache.roller.scripting.GSPRendererFactory,\
4) Restart Roller
5) Create a new Weblog Page Template and set Template Language to either
"groovlet" or "gsp".
6) In your page template you'll have access to all normal Roller models
plus the name "out" will be bound to a Writer that you can use for output.
Also, the name "html" will be bound to a markup builder.