summaryrefslogtreecommitdiffstats
path: root/bindings
diff options
context:
space:
mode:
Diffstat (limited to 'bindings')
-rw-r--r--bindings/Readme.txt3
-rw-r--r--bindings/func-grails-plugin/.classpath157
-rw-r--r--bindings/func-grails-plugin/.project23
-rw-r--r--bindings/func-grails-plugin/.settings/org.codehaus.groovy.eclipse.preferences.prefs3
-rw-r--r--bindings/func-grails-plugin/FuncGrailsPlugin.groovy20
-rw-r--r--bindings/func-grails-plugin/application.properties4
-rw-r--r--bindings/func-grails-plugin/build.xml41
-rw-r--r--bindings/func-grails-plugin/func-grails-plugin.launch20
-rw-r--r--bindings/func-grails-plugin/func-grails-plugin.tmproj73
-rw-r--r--bindings/func-grails-plugin/grails-app/conf/Func.groovy1
-rw-r--r--bindings/func-grails-plugin/grails-func-1.0.zipbin0 -> 12721 bytes
-rw-r--r--bindings/func-grails-plugin/lib/func-java-1.0.jarbin0 -> 12049 bytes
-rw-r--r--bindings/func-grails-plugin/plugin.xml9
-rw-r--r--bindings/func-grails-plugin/scripts/_Install.groovy13
-rw-r--r--bindings/func-grails-plugin/scripts/_Upgrade.groovy13
-rw-r--r--bindings/func-grails-plugin/web-app/WEB-INF/applicationContext.xml46
-rw-r--r--bindings/func-grails-plugin/web-app/WEB-INF/sitemesh.xml14
-rw-r--r--bindings/func-grails-plugin/web-app/WEB-INF/tld/c.tld563
-rw-r--r--bindings/func-grails-plugin/web-app/WEB-INF/tld/fmt.tld671
-rw-r--r--bindings/func-grails-plugin/web-app/WEB-INF/tld/grails.tld959
-rw-r--r--bindings/func-grails-plugin/web-app/WEB-INF/tld/spring.tld311
-rw-r--r--bindings/func-java/lib/mvn-install-lib.sh1
-rw-r--r--bindings/func-java/lib/org/jvyaml/jvyaml.jarbin0 -> 174560 bytes
-rw-r--r--bindings/func-java/pom.xml91
-rw-r--r--bindings/func-java/src/main/groovy/org/func/FuncFactory.groovy48
-rw-r--r--bindings/func-java/src/main/groovy/org/func/FuncImpl.groovy135
-rw-r--r--bindings/func-java/src/main/java/org/func/Func.java123
-rw-r--r--bindings/func-java/src/main/java/org/func/exceptions/CertmasterException.java35
-rw-r--r--bindings/func-java/src/main/java/org/func/exceptions/FuncCommunicationException.java35
-rw-r--r--bindings/func-java/src/test/groovy/FuncFactoryTest.groovy32
-rw-r--r--bindings/func-java/src/test/groovy/org/func/FuncFactoryTest.groovy38
-rw-r--r--bindings/func-java/src/test/groovy/org/func/FuncImplTest.groovy62
32 files changed, 3544 insertions, 0 deletions
diff --git a/bindings/Readme.txt b/bindings/Readme.txt
new file mode 100644
index 0000000..dd12a9a
--- /dev/null
+++ b/bindings/Readme.txt
@@ -0,0 +1,3 @@
+git clone git://projects.byte-code.com/func-bindings
+git push ssh://USERNAME@projects.byte-code.com:10022/var/scm/func-bindings
+
diff --git a/bindings/func-grails-plugin/.classpath b/bindings/func-grails-plugin/.classpath
new file mode 100644
index 0000000..c086d83
--- /dev/null
+++ b/bindings/func-grails-plugin/.classpath
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/java"/>
+ <classpathentry kind="src" path="src/groovy"/>
+ <classpathentry kind="src" path="grails-app/conf"/>
+ <classpathentry kind="src" path="grails-app/controllers"/>
+ <classpathentry kind="src" path="grails-app/domain"/>
+ <classpathentry kind="src" path="grails-app/services"/>
+ <classpathentry kind="src" path="grails-app/taglib"/>
+ <classpathentry kind="src" path="test/integration"/>
+ <classpathentry kind="src" path="test/unit"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="GRAILS_HOME/ant/lib/ant.jar"/>
+ <classpathentry kind="var" path="GRAILS_HOME/lib/oscache-2.4.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-logging-1.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/hibernate3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jline-0.9.91.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/groovy-all-1.5.6.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ant.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/antlr-2.7.6.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jdbc2_0-stdext.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ehcache-1.3.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/spring-test.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/cglib-nodep-2.1_3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/spring-webflow-2.0-m1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-lang-2.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-pool-1.2.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/spring-webmvc.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jetty-6.1.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-beanutils-1.7.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jetty-naming-6.1.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jta.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ant-trax.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/spring-2.5.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jstl-2.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/xalan.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ant-junit.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/standard-2.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/hsqldb-1.8.0.5.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/xercesImpl.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/svnkit.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/standard-2.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ant-nodeps.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jasper-compiler-5.5.15.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jstl-2.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/hibernate-commons-annotations.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-io-1.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-fileupload-1.1.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/serializer.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/sitemesh-2.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-validator-1.3.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/xpp3_min-1.1.3.4.O.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-cli-1.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jasper-runtime-5.5.15.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-el-1.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ant-launcher.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jetty-util-6.1.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/log4j-1.2.15.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ognl-2.6.9.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/dom4j-1.6.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/xstream-1.2.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jsp-api-2.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jetty-plus-6.1.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/start.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/bsf-2.3.0.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jaxen-1.1-beta-11.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/junit-3.8.2.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/oro-2.0.8.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/spring-binding-2.0-m1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/jasper-compiler-jdt-5.5.15.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/hibernate-annotations.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-dbcp-1.2.1.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/ejb3-persistence.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/servlet-api-2.5-6.1.4.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/lib/commons-collections-3.2.jar" />
+
+
+ <classpathentry kind="var" path="GRAILS_HOME/dist/grails-test-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-gorm-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-cli-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-spring-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-web-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-webflow-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-crud-1.0.3.jar" />
+
+<classpathentry kind="var" path="GRAILS_HOME/dist/grails-core-1.0.3.jar" />
+
+
+ <classpathentry kind="output" path="web-app/WEB-INF/classes"/>
+</classpath>
diff --git a/bindings/func-grails-plugin/.project b/bindings/func-grails-plugin/.project
new file mode 100644
index 0000000..b18485a
--- /dev/null
+++ b/bindings/func-grails-plugin/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>func-grails-plugin</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.codehaus.groovy.eclipse.groovyBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.codehaus.groovy.eclipse.groovyNature</nature>
+ </natures>
+</projectDescription>
diff --git a/bindings/func-grails-plugin/.settings/org.codehaus.groovy.eclipse.preferences.prefs b/bindings/func-grails-plugin/.settings/org.codehaus.groovy.eclipse.preferences.prefs
new file mode 100644
index 0000000..bf339c7
--- /dev/null
+++ b/bindings/func-grails-plugin/.settings/org.codehaus.groovy.eclipse.preferences.prefs
@@ -0,0 +1,3 @@
+#Created by grails
+eclipse.preferences.version=1
+groovy.dont.generate.class.files=true
diff --git a/bindings/func-grails-plugin/FuncGrailsPlugin.groovy b/bindings/func-grails-plugin/FuncGrailsPlugin.groovy
new file mode 100644
index 0000000..e2168a1
--- /dev/null
+++ b/bindings/func-grails-plugin/FuncGrailsPlugin.groovy
@@ -0,0 +1,20 @@
+import org.func.FuncImpl
+
+class FuncGrailsPlugin {
+ def version = 1.0
+ def dependsOn = [:]
+
+ def author = "Marco Mornati"
+ def authorEmail = "mmornati@byte-code.com"
+ def title = "Plugin to make your application ables to call Func (https://fedorahosted.org/func)"
+
+ // URL to the plugin's documentation
+ def documentation = "http://grails.org/FuncGrailsPlugin+Plugin"
+
+ def doWithSpring = {
+ funcService(FuncImpl) {
+
+ }
+ }
+
+}
diff --git a/bindings/func-grails-plugin/application.properties b/bindings/func-grails-plugin/application.properties
new file mode 100644
index 0000000..c05437a
--- /dev/null
+++ b/bindings/func-grails-plugin/application.properties
@@ -0,0 +1,4 @@
+#Do not edit app.grails.* properties, they may change automatically. DO NOT put application configuration in here, it is not the right place!
+#Fri Jul 11 12:43:08 CEST 2008
+app.grails.version=1.0.3
+app.name=func-grails-plugin
diff --git a/bindings/func-grails-plugin/build.xml b/bindings/func-grails-plugin/build.xml
new file mode 100644
index 0000000..89ba8ef
--- /dev/null
+++ b/bindings/func-grails-plugin/build.xml
@@ -0,0 +1,41 @@
+<project name="func-grails-plugin" default="test">
+
+ <condition property="grails" value="grails.bat">
+ <os family="windows"/>
+ </condition>
+ <property name="grails" value="grails" />
+
+ <!-- =================================
+ target: clean
+ ================================= -->
+ <target name="clean" description="--> Cleans a Grails application">
+ <exec executable="${grails}" failonerror="true">
+ <arg value="clean"/>
+ </exec>
+ </target>
+
+ <!-- =================================
+ target: war
+ ================================= -->
+ <target name="war" description="--> Creates a WAR of a Grails application">
+ <exec executable="${grails}" failonerror="true">
+ <arg value="war"/>
+ </exec>
+ </target>
+
+ <!-- =================================
+ target: test
+ ================================= -->
+ <target name="test" description="--> Run a Grails applications unit tests">
+ <exec executable="${grails}" failonerror="true">
+ <arg value="test-app"/>
+ </exec>
+ </target>
+
+ <!-- =================================
+ target: deploy
+ ================================= -->
+ <target name="deploy" depends="war" description="--> The deploy target (initially empty)">
+ <!-- TODO -->
+ </target>
+</project>
diff --git a/bindings/func-grails-plugin/func-grails-plugin.launch b/bindings/func-grails-plugin/func-grails-plugin.launch
new file mode 100644
index 0000000..61af264
--- /dev/null
+++ b/bindings/func-grails-plugin/func-grails-plugin.launch
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="grails.util.GrailsMain"/>
+<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;func-grails-plugin&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;func-grails-plugin&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/func-grails-plugin&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="func-grails-plugin"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dbase.dir=${project_loc} -Dserver.port=8080 -Dgrails.env=development"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/func-grails-plugin"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+</launchConfiguration>
diff --git a/bindings/func-grails-plugin/func-grails-plugin.tmproj b/bindings/func-grails-plugin/func-grails-plugin.tmproj
new file mode 100644
index 0000000..de01d84
--- /dev/null
+++ b/bindings/func-grails-plugin/func-grails-plugin.tmproj
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>documents</key>
+ <array>
+ <dict>
+ <key>filename</key>
+ <string>func-grails-plugin.launch</string>
+ </dict>
+ <dict>
+ <key>filename</key>
+ <string>build.xml</string>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>grails-app</string>
+ <key>regexFolderFilter</key>
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+ <key>sourceDirectory</key>
+ <string>grails-app</string>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>test</string>
+ <key>regexFolderFilter</key>
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+ <key>sourceDirectory</key>
+ <string>test</string>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>lib</string>
+ <key>regexFolderFilter</key>
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+ <key>sourceDirectory</key>
+ <string>lib</string>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>scripts</string>
+ <key>regexFolderFilter</key>
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+ <key>sourceDirectory</key>
+ <string>scripts</string>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>src</string>
+ <key>regexFolderFilter</key>
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+ <key>sourceDirectory</key>
+ <string>src</string>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>web-app</string>
+ <key>regexFolderFilter</key>
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
+ <key>sourceDirectory</key>
+ <string>web-app</string>
+ </dict>
+ </array>
+ <key>fileHierarchyDrawerWidth</key>
+ <integer>200</integer>
+ <key>metaData</key>
+ <dict/>
+ <key>showFileHierarchyDrawer</key>
+ <true/>
+ <key>windowFrame</key>
+ <string>{{237, 127}, {742, 553}}</string>
+</dict>
+</plist>
diff --git a/bindings/func-grails-plugin/grails-app/conf/Func.groovy b/bindings/func-grails-plugin/grails-app/conf/Func.groovy
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/bindings/func-grails-plugin/grails-app/conf/Func.groovy
@@ -0,0 +1 @@
+
diff --git a/bindings/func-grails-plugin/grails-func-1.0.zip b/bindings/func-grails-plugin/grails-func-1.0.zip
new file mode 100644
index 0000000..081a17b
--- /dev/null
+++ b/bindings/func-grails-plugin/grails-func-1.0.zip
Binary files differ
diff --git a/bindings/func-grails-plugin/lib/func-java-1.0.jar b/bindings/func-grails-plugin/lib/func-java-1.0.jar
new file mode 100644
index 0000000..6620e1c
--- /dev/null
+++ b/bindings/func-grails-plugin/lib/func-java-1.0.jar
Binary files differ
diff --git a/bindings/func-grails-plugin/plugin.xml b/bindings/func-grails-plugin/plugin.xml
new file mode 100644
index 0000000..edcf73a
--- /dev/null
+++ b/bindings/func-grails-plugin/plugin.xml
@@ -0,0 +1,9 @@
+<plugin name='func' version='1.0'>
+ <author>Marco Mornati</author>
+ <authorEmail>mmornati@byte-code.com</authorEmail>
+ <title>Plugin to make your application ables to call Func (https://fedorahosted.org/func)</title>
+ <documentation>http://grails.org/FuncGrailsPlugin+Plugin</documentation>
+ <resources>
+ <resource>Func</resource>
+ </resources>
+</plugin> \ No newline at end of file
diff --git a/bindings/func-grails-plugin/scripts/_Install.groovy b/bindings/func-grails-plugin/scripts/_Install.groovy
new file mode 100644
index 0000000..7996a62
--- /dev/null
+++ b/bindings/func-grails-plugin/scripts/_Install.groovy
@@ -0,0 +1,13 @@
+//
+// This script is executed by Grails after plugin was installed to project.
+// This script is a Gant script so you can use all special variables provided
+// by Gant (such as 'baseDir' which points on project base dir). You can
+// use 'Ant' to access a global instance of AntBuilder
+//
+// For example you can create directory under project tree:
+// Ant.mkdir(dir:"/home/mmornati/projects/func-bindings/func-grails-plugin/grails-app/jobs")
+//
+
+Ant.property(environment:"env")
+grailsHome = Ant.antProject.properties."env.GRAILS_HOME"
+
diff --git a/bindings/func-grails-plugin/scripts/_Upgrade.groovy b/bindings/func-grails-plugin/scripts/_Upgrade.groovy
new file mode 100644
index 0000000..4b71568
--- /dev/null
+++ b/bindings/func-grails-plugin/scripts/_Upgrade.groovy
@@ -0,0 +1,13 @@
+//
+// This script is executed by Grails during application upgrade ('grails upgrade' command).
+// This script is a Gant script so you can use all special variables
+// provided by Gant (such as 'baseDir' which points on project base dir).
+// You can use 'Ant' to access a global instance of AntBuilder
+//
+// For example you can create directory under project tree:
+// Ant.mkdir(dir:"/home/mmornati/projects/func-bindings/func-grails-plugin/grails-app/jobs")
+//
+
+Ant.property(environment:"env")
+grailsHome = Ant.antProject.properties."env.GRAILS_HOME"
+
diff --git a/bindings/func-grails-plugin/web-app/WEB-INF/applicationContext.xml b/bindings/func-grails-plugin/web-app/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..ecd41ea
--- /dev/null
+++ b/bindings/func-grails-plugin/web-app/WEB-INF/applicationContext.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
+ <description>Grails application factory bean</description>
+ <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
+ <property name="grailsResourceLoader" ref="grailsResourceLoader" />
+ </bean>
+
+ <bean id="pluginManager" class="org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean">
+ <description>A bean that manages Grails plugins</description>
+ <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
+ <property name="application" ref="grailsApplication" />
+ </bean>
+
+ <bean id="pluginMetaManager" class="org.codehaus.groovy.grails.plugins.DefaultPluginMetaManager">
+ <constructor-arg value="classpath*:**/plugins/*/plugin.xml" />
+ </bean>
+
+ <bean id="grailsConfigurator" class="org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator">
+ <constructor-arg>
+ <ref bean="grailsApplication" />
+ </constructor-arg>
+ <property name="pluginManager" ref="pluginManager" />
+ </bean>
+
+ <bean id="grailsResourceLoader" class="org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean">
+ <property name="grailsResourceHolder" ref="grailsResourceHolder" />
+ </bean>
+
+ <bean id="grailsResourceHolder" scope="prototype" class="org.codehaus.groovy.grails.commons.spring.GrailsResourceHolder">
+ <property name="resources">
+ <value>classpath*:**/grails-app/**/*.groovy</value>
+ </property>
+ </bean>
+
+ <bean id="characterEncodingFilter"
+ class="org.springframework.web.filter.CharacterEncodingFilter">
+ <property name="encoding">
+ <value>utf-8</value>
+ </property>
+ </bean>
+</beans> \ No newline at end of file
diff --git a/bindings/func-grails-plugin/web-app/WEB-INF/sitemesh.xml b/bindings/func-grails-plugin/web-app/WEB-INF/sitemesh.xml
new file mode 100644
index 0000000..e1a3a28
--- /dev/null
+++ b/bindings/func-grails-plugin/web-app/WEB-INF/sitemesh.xml
@@ -0,0 +1,14 @@
+<sitemesh>
+ <page-parsers>
+ <parser content-type="text/html"
+ class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
+ <parser content-type="text/html;charset=ISO-8859-1"
+ class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
+ <parser content-type="text/html;charset=UTF-8"
+ class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
+ </page-parsers>
+
+ <decorator-mappers>
+ <mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" />
+ </decorator-mappers>
+</sitemesh> \ No newline at end of file
diff --git a/bindings/func-grails-plugin/web-app/WEB-INF/tld/c.tld b/bindings/func-grails-plugin/web-app/WEB-INF/tld/c.tld
new file mode 100644
index 0000000..22698c9
--- /dev/null
+++ b/bindings/func-grails-plugin/web-app/WEB-INF/tld/c.tld
@@ -0,0 +1,563 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <description>JSTL 1.1 core library</description>
+ <display-name>JSTL core</display-name>
+ <tlib-version>1.1</tlib-version>
+ <short-name>c</short-name>
+ <uri>http://java.sun.com/jsp/jstl/core</uri>
+
+ <validator>
+ <description>
+ Provides core validation features for JSTL tags.
+ </description>
+ <validator-class>
+ org.apache.taglibs.standard.tlv.JstlCoreTLV
+ </validator-class>
+ </validator>
+
+ <tag>
+ <description>
+ Catches any Throwable that occurs in its body and optionally
+ exposes it.
+ </description>
+ <name>catch</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+exception thrown from a nested action. The type of the
+scoped variable is the type of the exception thrown.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Simple conditional tag that establishes a context for
+ mutually exclusive conditional operations, marked by
+ &lt;when&gt; and &lt;otherwise&gt;
+ </description>
+ <name>choose</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <description>
+ Simple conditional tag, which evalutes its body if the
+ supplied condition is true and optionally exposes a Boolean
+ scripting variable representing the evaluation of this condition
+ </description>
+ <name>if</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The test condition that determines whether or
+not the body content should be processed.
+ </description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+resulting value of the test condition. The type
+of the scoped variable is Boolean.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Retrieves an absolute or relative URL and exposes its contents
+ to either the page, a String in 'var', or a Reader in 'varReader'.
+ </description>
+ <name>import</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The URL of the resource to import.
+ </description>
+ <name>url</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is String.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is Reader.
+ </description>
+ <name>varReader</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the context when accessing a relative
+URL resource that belongs to a foreign
+context.
+ </description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Character encoding of the content at the input
+resource.
+ </description>
+ <name>charEncoding</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ The basic iteration tag, accepting many different
+ collection types and supporting subsetting and other
+ functionality
+ </description>
+ <name>forEach</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Collection of items to iterate over.
+ </description>
+ <name>items</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.Object</type>
+ </attribute>
+ <attribute>
+ <description>
+If items specified:
+Iteration begins at the item located at the
+specified index. First item of the collection has
+index 0.
+If items not specified:
+Iteration begins with index set at the value
+specified.
+ </description>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+If items specified:
+Iteration ends at the item located at the
+specified index (inclusive).
+If items not specified:
+Iteration ends when index reaches the value
+specified.
+ </description>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration will only process every step items of
+the collection, starting with the first one.
+ </description>
+ <name>step</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility. Its type depends
+on the object of the underlying collection.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of type
+javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested
+visibility.
+ </description>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Iterates over tokens, separated by the supplied delimeters
+ </description>
+ <name>forTokens</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+String of tokens to iterate over.
+ </description>
+ <name>items</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <description>
+The set of delimiters (the characters that
+separate the tokens in the string).
+ </description>
+ <name>delims</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration begins at the token located at the
+specified index. First token has index 0.
+ </description>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration ends at the token located at the
+specified index (inclusive).
+ </description>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration will only process every step tokens
+of the string, starting with the first one.
+ </description>
+ <name>step</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of
+type
+javax.servlet.jsp.jstl.core.LoopTag
+Status. This scoped variable has nested
+visibility.
+ </description>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Like &lt;%= ... &gt;, but for expressions.
+ </description>
+ <name>out</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Expression to be evaluated.
+ </description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Default value if the resulting value is null.
+ </description>
+ <name>default</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Determines whether characters &lt;,&gt;,&amp;,'," in the
+resulting string should be converted to their
+corresponding character entity codes. Default value is
+true.
+ </description>
+ <name>escapeXml</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+
+ <tag>
+ <description>
+ Subtag of &lt;choose&gt; that follows &lt;when&gt; tags
+ and runs only if all of the prior conditions evaluated to
+ 'false'
+ </description>
+ <name>otherwise</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <description>
+ Adds a parameter to a containing 'import' tag's URL.
+ </description>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the query string parameter.
+ </description>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Value of the parameter.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Redirects to a new URL.
+ </description>
+ <name>redirect</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.RedirectTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The URL of the resource to redirect to.
+ </description>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the context when redirecting to a relative URL
+resource that belongs to a foreign context.
+ </description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Removes a scoped variable (from a particular scope, if specified).
+ </description>
+ <name>remove</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+Name of the scoped variable to be removed.
+ </description>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Sets the result of an expression evaluation in a 'scope'
+ </description>
+ <name>set</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.SetTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the exported scoped variable to hold the value
+specified in the action. The type of the scoped variable is
+whatever type the value expression evaluates to.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Expression to be evaluated.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Target object whose property will be set. Must evaluate to
+a JavaBeans object with setter property property, or to a
+java.util.Map object.
+ </description>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the property to be set in the target object.
+ </description>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Creates a URL with optional query parameters.
+ </description>
+ <name>url</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.UrlTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+processed url. The type of the scoped variable is
+String.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+URL to be processed.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the context when specifying a relative URL
+resource that belongs to a foreign context.
+ </description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Subtag of &lt;choose&gt; that includes its body if its
+ condition evalutes to 'true'
+ </description>
+ <name>when</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.WhenTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The test condition that determines whether or not the
+body content should be processed.
+ </description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ </tag>
+
+</taglib>
diff --git a/bindings/func-grails-plugin/web-app/WEB-INF/tld/fmt.tld b/bindings/func-grails-plugin/web-app/WEB-INF/tld/fmt.tld
new file mode 100644
index 0000000..3b9a54a
--- /dev/null
+++ b/bindings/func-grails-plugin/web-app/WEB-INF/tld/fmt.tld
@@ -0,0 +1,671 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <description>JSTL 1.1 i18n-capable formatting library</description>
+ <display-name>JSTL fmt</display-name>
+ <tlib-version>1.1</tlib-version>
+ <short-name>fmt</short-name>
+ <uri>http://java.sun.com/jsp/jstl/fmt</uri>
+
+ <validator>
+ <description>
+ Provides core validation features for JSTL tags.
+ </description>
+ <validator-class>
+ org.apache.taglibs.standard.tlv.JstlFmtTLV
+ </validator-class>
+ </validator>
+
+ <tag>
+ <description>
+ Sets the request character encoding
+ </description>
+ <name>requestEncoding</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+Name of character encoding to be applied when
+decoding request parameters.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Stores the given locale in the locale configuration variable
+ </description>
+ <name>setLocale</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+A String value is interpreted as the
+printable representation of a locale, which
+must contain a two-letter (lower-case)
+language code (as defined by ISO-639),
+and may contain a two-letter (upper-case)
+country code (as defined by ISO-3166).
+Language and country codes must be
+separated by hyphen (-) or underscore
+(_).
+ </description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Vendor- or browser-specific variant.
+See the java.util.Locale javadocs for
+more information on variants.
+ </description>
+ <name>variant</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of the locale configuration variable.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Specifies the time zone for any time formatting or parsing actions
+ nested in its body
+ </description>
+ <name>timeZone</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The time zone. A String value is interpreted as
+a time zone ID. This may be one of the time zone
+IDs supported by the Java platform (such as
+"America/Los_Angeles") or a custom time zone
+ID (such as "GMT-8"). See
+java.util.TimeZone for more information on
+supported time zone formats.
+ </description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Stores the given time zone in the time zone configuration variable
+ </description>
+ <name>setTimeZone</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+The time zone. A String value is interpreted as
+a time zone ID. This may be one of the time zone
+IDs supported by the Java platform (such as
+"America/Los_Angeles") or a custom time zone
+ID (such as "GMT-8"). See java.util.TimeZone for
+more information on supported time zone
+formats.
+ </description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable which
+stores the time zone of type
+java.util.TimeZone.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var or the time zone configuration
+variable.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Loads a resource bundle to be used by its tag body
+ </description>
+ <name>bundle</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.BundleTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Resource bundle base name. This is the bundle's
+fully-qualified resource name, which has the same
+form as a fully-qualified class name, that is, it uses
+"." as the package component separator and does not
+have any file type (such as ".class" or ".properties")
+suffix.
+ </description>
+ <name>basename</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Prefix to be prepended to the value of the message
+key of any nested &lt;fmt:message&gt; action.
+ </description>
+ <name>prefix</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Loads a resource bundle and stores it in the named scoped variable or
+ the bundle configuration variable
+ </description>
+ <name>setBundle</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+Resource bundle base name. This is the bundle's
+fully-qualified resource name, which has the same
+form as a fully-qualified class name, that is, it uses
+"." as the package component separator and does not
+have any file type (such as ".class" or ".properties")
+suffix.
+ </description>
+ <name>basename</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable which stores
+the i18n localization context of type
+javax.servlet.jsp.jstl.fmt.LocalizationC
+ontext.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var or the localization context
+configuration variable.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Maps key to localized message and performs parametric replacement
+ </description>
+ <name>message</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.MessageTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Message key to be looked up.
+ </description>
+ <name>key</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Localization context in whose resource
+bundle the message key is looked up.
+ </description>
+ <name>bundle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable
+which stores the localized message.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Supplies an argument for parametric replacement to a containing
+ &lt;message&gt; tag
+ </description>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Argument used for parametric replacement.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Formats a numeric value as a number, currency, or percentage
+ </description>
+ <name>formatNumber</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Numeric value to be formatted.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Specifies whether the value is to be
+formatted as number, currency, or
+percentage.
+ </description>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Custom formatting pattern.
+ </description>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ISO 4217 currency code. Applied only
+when formatting currencies (i.e. if type is
+equal to "currency"); ignored otherwise.
+ </description>
+ <name>currencyCode</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Currency symbol. Applied only when
+formatting currencies (i.e. if type is equal
+to "currency"); ignored otherwise.
+ </description>
+ <name>currencySymbol</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Specifies whether the formatted output
+will contain any grouping separators.
+ </description>
+ <name>groupingUsed</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Maximum number of digits in the integer
+portion of the formatted output.
+ </description>
+ <name>maxIntegerDigits</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Minimum number of digits in the integer
+portion of the formatted output.
+ </description>
+ <name>minIntegerDigits</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Maximum number of digits in the
+fractional portion of the formatted output.
+ </description>
+ <name>maxFractionDigits</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Minimum number of digits in the
+fractional portion of the formatted output.
+ </description>
+ <name>minFractionDigits</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable
+which stores the formatted result as a
+String.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Parses the string representation of a number, currency, or percentage
+ </description>
+ <name>parseNumber</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+String to be parsed.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Specifies whether the string in the value
+attribute should be parsed as a number,
+currency, or percentage.
+ </description>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Custom formatting pattern that determines
+how the string in the value attribute is to be
+parsed.
+ </description>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Locale whose default formatting pattern (for
+numbers, currencies, or percentages,
+respectively) is to be used during the parse
+operation, or to which the pattern specified
+via the pattern attribute (if present) is
+applied.
+ </description>
+ <name>parseLocale</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Specifies whether just the integer portion of
+the given value should be parsed.
+ </description>
+ <name>integerOnly</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable which
+stores the parsed result (of type
+java.lang.Number).
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Formats a date and/or time using the supplied styles and pattern
+ </description>
+ <name>formatDate</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+Date and/or time to be formatted.
+ </description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Specifies whether the time, the date, or both
+the time and date components of the given
+date are to be formatted.
+ </description>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Predefined formatting style for dates. Follows
+the semantics defined in class
+java.text.DateFormat. Applied only
+when formatting a date or both a date and
+time (i.e. if type is missing or is equal to
+"date" or "both"); ignored otherwise.
+ </description>
+ <name>dateStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Predefined formatting style for times. Follows
+the semantics defined in class
+java.text.DateFormat. Applied only
+when formatting a time or both a date and
+time (i.e. if type is equal to "time" or "both");
+ignored otherwise.
+ </description>
+ <name>timeStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Custom formatting style for dates and times.
+ </description>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Time zone in which to represent the formatted
+time.
+ </description>
+ <name>timeZone</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable which
+stores the formatted result as a String.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Parses the string representation of a date and/or time
+ </description>
+ <name>parseDate</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Date string to be parsed.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Specifies whether the date string in the
+value attribute is supposed to contain a
+time, a date, or both.
+ </description>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Predefined formatting style for days
+which determines how the date
+component of the date string is to be
+parsed. Applied only when formatting a
+date or both a date and time (i.e. if type
+is missing or is equal to "date" or "both");
+ignored otherwise.
+ </description>
+ <name>dateStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Predefined formatting styles for times
+which determines how the time
+component in the date string is to be
+parsed. Applied only when formatting a
+time or both a date and time (i.e. if type
+is equal to "time" or "both"); ignored
+otherwise.
+ </description>
+ <name>timeStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Custom formatting pattern which
+determines how the date string is to be
+parsed.
+ </description>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Time zone in which to interpret any time
+information in the date string.
+ </description>
+ <name>timeZone</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Locale whose predefined formatting styles
+for dates and times are to be used during
+the parse operation, or to which the
+pattern specified via the pattern
+attribute (if present) is applied.
+ </description>
+ <name>parseLocale</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable in
+which the parsing result (of type
+java.util.Date) is stored.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope of var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+</taglib>
diff --git a/bindings/func-grails-plugin/web-app/WEB-INF/tld/grails.tld b/bindings/func-grails-plugin/web-app/WEB-INF/tld/grails.tld
new file mode 100644
index 0000000..d2e561f
--- /dev/null
+++ b/bindings/func-grails-plugin/web-app/WEB-INF/tld/grails.tld
@@ -0,0 +1,959 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+ http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+ <description>The Grails (Groovy on Rails) custom tag library</description>
+ <tlib-version>0.2</tlib-version>
+ <short-name>grails</short-name>
+ <uri>http://grails.codehaus.org/tags</uri>
+
+ <tag>
+ <description>
+ Includes a javascript src file, library or inline script
+ if the tag has no src or library attributes its assumed to be an inline script
+ </description>
+ <name>javascript</name>
+ <tag-class>org.codehaus.groovy.grails.plugins.web.taglib.JavascriptTagLib</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>A predefined JavaScript or AJAX library to load</description>
+ <name>library</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>A custom (or unknown to Grails) JavaScript source file</description>
+ <name>src</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Since 0.6 Specifies the full base url to prepend to the library name</description>
+ <name>base</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <!--
+ <tag>
+ <description>
+ </description>
+ <name></name>
+ <tag-class></tag-class>
+ <body-content></body-content>
+ <attribute>
+ <description></description>
+ <name></name>
+ <required></required>
+ <rtexprvalue></rtexprvalue>
+ </attribute>
+ </tag>
+ -->
+ <tag>
+ <description>Escapes a javasacript string replacing single/double quotes and new lines
+ </description>
+ <name>escapeJavascript</name>
+ <tag-class>org.codehaus.groovy.grails.plugins.web.taglib.JavascriptTagLib</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <description>Creates a form submit button that submits the current form to a remote ajax call
+ </description>
+ <name>submitToRemote</name>
+ <tag-class>org.codehaus.groovy.grails.plugins.web.taglib.JavascriptTagLib</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>class</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>A field that sends its value to a remote link
+ </description>
+ <name>remoteField</name>
+ <tag-class>org.codehaus.groovy.grails.plugins.web.taglib.JavascriptTagLib</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>paramName</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>before</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>after</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>controller</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>params</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>asynchronous</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>method</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>update</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onSuccess</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onFailure</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onComplete</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoading</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoaded</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onUninitialized</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>on_ERROR_CODE</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <description>
+ Enables the storing of a value into the given ${var}
+ </description>
+ <name>set</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovySetTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The value to store</description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The name of the variable to store the value in</description>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>
+ Enables the storing of a value into the given ${var} into the page context
+ </description>
+ <name>def</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyDefTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The value to store</description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The name of the variable to store the value in</description>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>
+ Logical if tag to test whether the given condition is true
+ </description>
+ <name>if</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyIfTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The condition to test</description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>
+ Logical else tag as fallback if the if condition fails
+ </description>
+ <name>else</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyElseTag</tag-class>
+ <body-content>JSP</body-content>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>
+ Logical elseif tag to test whether the given condition is true
+ </description>
+ <name>elseif</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyElseIfTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The condition to test</description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>
+ Tag to loop over a collection while the test expression returns true
+ </description>
+ <name>while</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyWhileTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The condition to test</description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>Iterates over the given collection</description>
+ <name>each</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyEachTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The collection to iterate over</description>
+ <name>in</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>An optional var-name to reference onto the elements</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>status</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>Iterates over the given collection</description>
+ <name>findAll</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyFindAllTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The collection to iterate over</description>
+ <name>in</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>An optional var-name to reference onto the elements</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The expression to filter the elements to iterate over</description>
+ <name>expr</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>status</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>Iterates over the given collection and collects the elements
+ you want to work with</description>
+ <name>collect</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyCollectTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The collection to iterate over</description>
+ <name>in</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>An optional var-name to reference onto the elements</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The expression to use to collect the elements. The
+ expression must retur true to add the element to the
+ collection</description>
+ <name>expr</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>status</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+ <tag>
+ <description>Iterates over the given collection and filters the elements
+ with a regular expression</description>
+ <name>grep</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.GroovyGrepTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The collection to iterate over</description>
+ <name>in</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>An optional var-name to reference onto the elements</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The regular expression to filter the element with. The
+ filter is a simple Groovy Regex</description>
+ <name>filter</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>status</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+
+
+ <tag>
+ <name>link</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspLinkTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>controller</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>params</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>form</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspFormTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>controller</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>method</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>select</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspSelectTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>optionKey</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>optionValue</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>datePicker</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspDatePickerTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>precision</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>currencySelect</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspCurrencySelectTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>localeSelect</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspLocaleSelectTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>timeZoneSelect</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspTimeZoneSelectTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>checkBox</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspCheckboxTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>hasErrors</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspHasErrorsTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>model</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>bean</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>field</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>eachError</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspEachErrorTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>model</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>bean</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>field</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>renderErrors</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspEachErrorTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>model</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>bean</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>field</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>as</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>message</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspMessageTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>code</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>error</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>default</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>false</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>remoteFunction</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspRemoteFunctionTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>before</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>after</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>controller</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>params</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>asynchronous</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>method</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>update</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onSuccess</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onFailure</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onComplete</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoading</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoaded</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onInteractive</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>remoteLink</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspRemoteLinkTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>before</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>after</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>controller</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>params</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>asynchronous</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>method</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>update</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onSuccess</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onFailure</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onComplete</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoading</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoaded</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onInteractive</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>formRemote</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspFormRemoteTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>before</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>after</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>controller</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>params</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>asynchronous</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>method</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>update</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onSuccess</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onFailure</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onComplete</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoading</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onLoaded</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>onInteractive</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+ <tag>
+ <name>invokeTag</name>
+ <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspInvokeGrailsTagLibTag</tag-class>
+ <body-content>JSP</body-content>
+ <variable>
+ <name-given>it</name-given>
+ <variable-class>java.lang.Object</variable-class>
+ <declare>true</declare>
+ <scope>NESTED</scope>
+ </variable>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <dynamic-attributes>true</dynamic-attributes>
+ </tag>
+</taglib>
+
diff --git a/bindings/func-grails-plugin/web-app/WEB-INF/tld/spring.tld b/bindings/func-grails-plugin/web-app/WEB-INF/tld/spring.tld
new file mode 100644
index 0000000..1bc7091
--- /dev/null
+++ b/bindings/func-grails-plugin/web-app/WEB-INF/tld/spring.tld
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+
+<taglib>
+
+ <tlib-version>1.1.1</tlib-version>
+
+ <jsp-version>1.2</jsp-version>
+
+ <short-name>Spring</short-name>
+
+ <uri>http://www.springframework.org/tags</uri>
+
+ <description>Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller</description>
+
+
+ <tag>
+
+ <name>htmlEscape</name>
+ <tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Sets default HTML escape value for the current page.
+ Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
+ </description>
+
+ <attribute>
+ <name>defaultHtmlEscape</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>escapeBody</name>
+ <tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+
+ <attribute>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>message</name>
+ <tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Retrieves the message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+
+ <attribute>
+ <name>code</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>arguments</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>text</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>theme</name>
+ <tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Retrieves the theme message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+
+ <attribute>
+ <name>code</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>arguments</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>text</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>hasBindErrors</name>
+ <tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Provides Errors instance in case of bind errors.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+
+ <variable>
+ <name-given>errors</name-given>
+ <variable-class>org.springframework.validation.Errors</variable-class>
+ </variable>
+
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>nestedPath</name>
+ <tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Sets a nested path to be used by the bind tag's path.
+ </description>
+
+ <variable>
+ <name-given>nestedPath</name-given>
+ <variable-class>java.lang.String</variable-class>
+ </variable>
+
+ <attribute>
+ <name>path</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>bind</name>
+ <tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Provides BindStatus object for the given bind path.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+
+ <variable>
+ <name-given>status</name-given>
+ <variable-class>org.springframework.web.servlet.support.BindStatus</variable-class>
+ </variable>
+
+ <attribute>
+ <name>path</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>ignoreNestedPath</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+
+ <tag>
+
+ <name>transform</name>
+ <tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>
+ <body-content>JSP</body-content>
+
+ <description>
+ Provides transformation of variables to Strings, using an appropriate
+ custom PropertyEditor from BindTag (can only be used inside BindTag).
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ <attribute>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+
+ </tag>
+
+</taglib>
diff --git a/bindings/func-java/lib/mvn-install-lib.sh b/bindings/func-java/lib/mvn-install-lib.sh
new file mode 100644
index 0000000..4ba6789
--- /dev/null
+++ b/bindings/func-java/lib/mvn-install-lib.sh
@@ -0,0 +1 @@
+mvn install:install-file -DgroupId=org.jvyaml -DartifactId=jvyaml -Dversion=1.1 -Dpackaging=jar -Dfile=org/jvyaml/jvyaml.jar
diff --git a/bindings/func-java/lib/org/jvyaml/jvyaml.jar b/bindings/func-java/lib/org/jvyaml/jvyaml.jar
new file mode 100644
index 0000000..55e2db3
--- /dev/null
+++ b/bindings/func-java/lib/org/jvyaml/jvyaml.jar
Binary files differ
diff --git a/bindings/func-java/pom.xml b/bindings/func-java/pom.xml
new file mode 100644
index 0000000..01668a4
--- /dev/null
+++ b/bindings/func-java/pom.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.func</groupId>
+ <artifactId>func-java</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>Func-Java Bindings</name>
+ <url>https://fedorahosted.org/func</url>
+
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.jvyaml</groupId>
+ <artifactId>jvyaml</artifactId>
+ <version>1.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <version>1.5.6</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo.groovy</groupId>
+ <artifactId>groovy-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>SourceCompile</id>
+ <phase>compile</phase>
+ <goals>
+ <!-- <goal>generateStubs</goal> -->
+ <goal>compile</goal>
+ <!-- <goal>generateTestStubs</goal> -->
+ <!-- <goal>testCompile</goal> -->
+ </goals>
+ <configuration>
+ <sources>
+ <fileset>
+ <directory>${pom.basedir}/src/main</directory>
+ <includes>
+ <include>**/*.groovy</include>
+ </includes>
+ </fileset>
+ </sources>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>TestCompile</id>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <fileset>
+ <directory>${pom.basedir}/src/test/groovy</directory>
+ <includes>
+ <include>**/*.groovy</include>
+ </includes>
+ </fileset>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/bindings/func-java/src/main/groovy/org/func/FuncFactory.groovy b/bindings/func-java/src/main/groovy/org/func/FuncFactory.groovy
new file mode 100644
index 0000000..84d3d7b
--- /dev/null
+++ b/bindings/func-java/src/main/groovy/org/func/FuncFactory.groovy
@@ -0,0 +1,48 @@
+package org.func
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: Jul 11, 2008
+ * Time: 10:03:20 AM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ */
+class FuncFactory {
+
+ /**
+ * Factory class method. You need to call this method to obtain an instance of Func classes
+ * @return Func instances. To use for func invokation.
+ */
+ public static Func getFunc() {
+ Func funcImplementation = new FuncImpl()
+
+ return funcImplementation
+ }
+
+ /**
+ * Factory class method. You need to call this method to obtain an instance of Func classes
+ * @param funcTransmit You can specify folder where your func-transmit is located. By default it must be in your path.
+ * @return Func instances. To use for func invokation.
+ */
+ public static Func getFunc(String funcTransmit) {
+ Func funcImplementation = new FuncImpl(funcTransmit)
+
+ return funcImplementation
+ }
+
+} \ No newline at end of file
diff --git a/bindings/func-java/src/main/groovy/org/func/FuncImpl.groovy b/bindings/func-java/src/main/groovy/org/func/FuncImpl.groovy
new file mode 100644
index 0000000..332f72c
--- /dev/null
+++ b/bindings/func-java/src/main/groovy/org/func/FuncImpl.groovy
@@ -0,0 +1,135 @@
+package org.func
+
+import org.func.exceptions.FuncCommunicationException
+import org.jvyaml.YAML
+import org.func.exceptions.CertmasterException
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: Jul 10, 2008
+ * Time: 5:38:02 PM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ */
+class FuncImpl implements Func {
+
+ private funcTransmit = "func-transmit"
+ private func = "func"
+
+ public FuncImpl() {
+
+ }
+
+ public FuncImpl(String transmit) {
+ this.funcTransmit = transmit
+ }
+
+ public Map call(String client, String module, String method) throws FuncCommunicationException {
+ this.call([client], module, method, null)
+ }
+
+ public Map call(List clients, String module, String method) throws FuncCommunicationException {
+ this.call(clients, module, method, null)
+ }
+
+ public Map call(String client, String module, String method, String parameter) throws FuncCommunicationException {
+ this.call([client], module, method, [parameter])
+ }
+
+ public Map call(List clients, String module, String method, List parameters) throws FuncCommunicationException {
+ return funcCall(clients, module, method, parameters)
+ }
+
+ public Map listModules(String client) {
+ return this.listModules([client])
+ }
+
+ public Map listModuleMethods(String client, String method) {
+ return this.listModuleMethods([client], method)
+ }
+
+ public Map listModules(List clients) {
+ return funcCall(clients, "system", "list_modules", null)
+ }
+
+ public Map listModuleMethods(List clients, String module) {
+ return funcCall(clients, module, "list_methods", null)
+ }
+
+
+ public List listMinions() {
+ def minions = []
+ def commandToExecute = [func, "*", "list_minions"]
+ def proc = commandToExecute.execute()
+ proc.waitFor()
+ def procAnswer = proc.text
+ if (procAnswer) {
+ minions = procAnswer.split("\n")
+ } else {
+ throw new CertmasterException("Error communicating with certmaster")
+ }
+ return minions;
+ }
+
+
+ private Map funcCall(List clients, String module, String method, List parameters) throws FuncCommunicationException {
+ def values = [clients: clientsCallPatch(clients), module: module, method: method, parameters: parameters]
+ def yamlDump = YAML.dump(values)
+ def commandToExecute = [funcTransmit]
+ def proc = commandToExecute.execute()
+ proc.withWriter {writer -> writer << yamlDump }
+ proc.waitFor()
+ def procAnswer = proc.text
+ Map funcResponse = null
+ if (procAnswer) {
+ def response = YAML.load(procAnswer)
+ if (response instanceof Map) {
+ funcResponse = (Map) response
+ }
+ } else {
+ throw new FuncCommunicationException(procAnswer + " - Error reading answer from Func-Transmit Process!")
+ }
+ return funcResponse
+ }
+
+
+ private String clientsCallPatch(List clients) {
+ //TODO: Now Func does not accept a LIST of client (you can send a list with a string formatted like client1;client2;client
+ //TODO: Change this patch when func will be ready
+ //===== PATCH BEGINS
+ String clientToSend = ""
+ clients?.each {
+ if (!clientToSend.equals("")) {
+ clientToSend += ";"
+ }
+ clientToSend += "${it}"
+ }
+ return clientToSend
+ //===== PATCH ENDS
+ }
+
+ public void setFuncTransmit(String funcTransmit) {
+ this.funcTransmit = funcTransmit
+ }
+
+ public String getFuncTransmit() {
+ return funcTransmit
+ }
+
+} \ No newline at end of file
diff --git a/bindings/func-java/src/main/java/org/func/Func.java b/bindings/func-java/src/main/java/org/func/Func.java
new file mode 100644
index 0000000..d0d09a2
--- /dev/null
+++ b/bindings/func-java/src/main/java/org/func/Func.java
@@ -0,0 +1,123 @@
+package org.func;
+
+import org.func.exceptions.FuncCommunicationException;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ * <p/>
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * <p/>
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * <p/>
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * <p/>
+ * Date: Jul 10, 2008
+ * Time: 5:35:26 PM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ */
+public interface Func {
+
+ /**
+ * Function invoked to optain the list of func client (machine that you can control in your java application using this API).
+ * @return List of String with machine hostname
+ */
+ public List listMinions();
+
+ /**
+ * Caller for func-transmit with single client and no parameter
+ * @param client Func client name. To invoke all defined clients use "*"
+ * @param module Name of func module (use listModules to obtain the available modules)
+ * @param method Name of method to invoke
+ * @return Map with client name as key and func response as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map call (String client, String module, String method) throws FuncCommunicationException;
+
+ /**
+ * Caller for func-transmit with list of clients and no parameter
+ * @param clients List of Func clients.
+ * @param module Name of func module (use listModules to obtain the available modules)
+ * @param method Name of method to invoke
+ * @return Map with responses divided for each client: client name as key and func response as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map call (List clients, String module, String method) throws FuncCommunicationException;
+
+ /**
+ * Caller for func-transmit with single client and single parameter
+ * @param client List of Func clients.
+ * @param module Name of func module (use listModules to obtain the available modules)
+ * @param method Name of method to invoke
+ * @param parameter parameter to use with your method. Passed during func-transmit invokation
+ * @return Map with responses divided for each client: client name as key and func response as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map call (String client, String module, String method, String parameter) throws FuncCommunicationException;
+
+ /**
+ * Func-Transmit Caller. It generates a Process to invoke func-transmit (using Yaml as default message) and then
+ * it parses the output provided from func to generate a Map returned to your application.
+ *
+ * The Map content is something like this:
+ *
+ * [client_name1: func response for this client (could be a simple string, another map, ...),
+ * client_name2: func response]
+ *
+ * @param clients List of Func clients.
+ * @param module Name of func module (use listModules to obtain the available modules)
+ * @param method Name of method to invoke
+ * @param parameters list of parameters to use with your method. Passed during func-transmit invokation
+ * @return Map with responses divided for each client: client name as key and func response as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map call (List clients, String module, String method, List parameters) throws FuncCommunicationException;
+
+ /**
+ * Invoked to obtain for specified client the list of func module installed
+ *
+ * @param client Name of the client to use with func. To invoke all defined clients use "*"
+ * @return Map with clientName as key and list of all installed func module as object
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map listModules (String client) throws FuncCommunicationException;
+
+ /**
+ * Invoked to obtain for specified list of clients, the list of func module installed
+ * @param clients List of func clients names.
+ * @return Map with response divided for each client: clientName as key and list of all installed func module as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map listModules (List clients) throws FuncCommunicationException;
+
+ /**
+ * Invoked to obtain the list of methods for provided module and client
+ * @param client client Name of the client to use with func. To invoke all defined clients use "*"
+ * @param module name of func module for which you need a list of methods
+ * @return Map with client name as key and list of module's methods as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map listModuleMethods (String client, String module) throws FuncCommunicationException;
+
+ /**
+ * Invoked to obtain the list of methods for provided module and list of clients
+ * @param clients List of func clients names.
+ * @param module name of func module for which you need a list of methods
+ * @return Map with response divided for each client: clientName as key and list of all module's methods as value
+ * @throws FuncCommunicationException thrown if there is any kind of error in func invokation
+ */
+ public Map listModuleMethods (List clients, String module) throws FuncCommunicationException;
+
+}
diff --git a/bindings/func-java/src/main/java/org/func/exceptions/CertmasterException.java b/bindings/func-java/src/main/java/org/func/exceptions/CertmasterException.java
new file mode 100644
index 0000000..dcab042
--- /dev/null
+++ b/bindings/func-java/src/main/java/org/func/exceptions/CertmasterException.java
@@ -0,0 +1,35 @@
+package org.func.exceptions;
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ * <p/>
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * <p/>
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * <p/>
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * <p/>
+ * Date: Jul 11, 2008
+ * Time: 3:21:04 PM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ */
+public class CertmasterException extends Exception {
+
+ public CertmasterException(Exception e) {
+ super(e);
+ }
+
+ public CertmasterException(String message) {
+ super(message);
+ }
+}
diff --git a/bindings/func-java/src/main/java/org/func/exceptions/FuncCommunicationException.java b/bindings/func-java/src/main/java/org/func/exceptions/FuncCommunicationException.java
new file mode 100644
index 0000000..ccee91f
--- /dev/null
+++ b/bindings/func-java/src/main/java/org/func/exceptions/FuncCommunicationException.java
@@ -0,0 +1,35 @@
+package org.func.exceptions;
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ * <p/>
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * <p/>
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * <p/>
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * <p/>
+ * Date: Jul 11, 2008
+ * Time: 10:44:46 AM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ */
+public class FuncCommunicationException extends Exception {
+
+ public FuncCommunicationException(Exception e) {
+ super(e);
+ }
+
+ public FuncCommunicationException(String message) {
+ super(message);
+ }
+}
diff --git a/bindings/func-java/src/test/groovy/FuncFactoryTest.groovy b/bindings/func-java/src/test/groovy/FuncFactoryTest.groovy
new file mode 100644
index 0000000..fd0ab86
--- /dev/null
+++ b/bindings/func-java/src/test/groovy/FuncFactoryTest.groovy
@@ -0,0 +1,32 @@
+import org.func.FuncFactory
+import org.func.Func
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: Jul 11, 2008
+ * Time: 10:06:03 AM
+ */
+class FuncFactoryTest extends GroovyTestCase {
+
+ void testFuncFactory() {
+ def func = FuncFactory.getFunc()
+
+ assertNotNull ("Func Factory returns a null Func Implementation", func)
+ assertTrue ("Func Factory does not return a correct Func object", func instanceof Func)
+ }
+
+} \ No newline at end of file
diff --git a/bindings/func-java/src/test/groovy/org/func/FuncFactoryTest.groovy b/bindings/func-java/src/test/groovy/org/func/FuncFactoryTest.groovy
new file mode 100644
index 0000000..0cbc0f7
--- /dev/null
+++ b/bindings/func-java/src/test/groovy/org/func/FuncFactoryTest.groovy
@@ -0,0 +1,38 @@
+package org.func
+
+import org.func.FuncFactory
+import org.func.Func
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: Jul 11, 2008
+ * Time: 10:06:03 AM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ */
+class FuncFactoryTest extends GroovyTestCase {
+
+ void testFuncFactory() {
+ def func = FuncFactory.getFunc()
+
+ assertNotNull("Func Factory returns a null Func Implementation", func)
+ assertTrue("Func Factory does not return a correct Func object", func instanceof Func)
+ }
+
+} \ No newline at end of file
diff --git a/bindings/func-java/src/test/groovy/org/func/FuncImplTest.groovy b/bindings/func-java/src/test/groovy/org/func/FuncImplTest.groovy
new file mode 100644
index 0000000..cd9ce60
--- /dev/null
+++ b/bindings/func-java/src/test/groovy/org/func/FuncImplTest.groovy
@@ -0,0 +1,62 @@
+package org.func
+
+import org.jvyaml.YAML
+
+/**
+ * Copyright (C) 2008, Byte-Code srl <http://www.byte-code.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: Jul 11, 2008
+ * Time: 10:30:47 AM
+ *
+ * @author Marco Mornati
+ * @e-mail mmornati@byte-code.com
+ * @version 1.0
+ *
+ */
+class FuncImplTest extends GroovyTestCase {
+
+ void testCall() {
+ Func func = FuncFactory.getFunc("/home/mmornati/projects/func/scripts/func-transmit")
+ def response = func.call ("*", "hardware", "info")
+ assertTrue ("Func Response is not a Map", response instanceof Map)
+ }
+
+ void testListModules() {
+ Func func = FuncFactory.getFunc("/home/mmornati/projects/func/scripts/func-transmit")
+ def response = func.listModules("bcmmornati")
+ assertTrue ("Func Response is not a Map", response instanceof Map)
+ }
+
+ void testListModuleMethods() {
+ Func func = FuncFactory.getFunc("/home/mmornati/projects/func/scripts/func-transmit")
+ def response = func.listModuleMethods("bcmmornati", "hardware")
+ assertTrue ("Func Response is not a Map", response instanceof Map)
+ }
+
+ void testClientPatch() {
+ def clients = ["client1", "client2"]
+ FuncImpl func = FuncFactory.getFunc()
+ def returned = func.clientsCallPatch(clients)
+ assertEquals ("Error in ClientsPatch generation", returned, "client1;client2")
+ }
+
+ void testListMinions() {
+ Func func = FuncFactory.getFunc()
+ def response = func.listMinions()
+ assertTrue ("Error in calling listMinions", response instanceof List)
+ }
+
+} \ No newline at end of file