tag:blogger.com,1999:blog-8833497876150206412024-03-06T04:02:25.828-05:00Shingler's ThoughtsJim Shingler's thoughts about IT and life in generalJim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.comBlogger47125tag:blogger.com,1999:blog-883349787615020641.post-83339308033736771142014-04-15T20:05:00.002-04:002014-04-15T20:05:18.176-04:00Practical System Thinking, Brooks's Law, Theory of Constraints, Agile, and Lean<div dir="ltr" style="text-align: left;" trbidi="on">
Wow! that is a heck of a title!<br />
<br />
The topic of <a href="http://en.wikipedia.org/wiki/Brooks's_law" target="_blank">Brooks's Law</a> came up the other day. You probably know it as 9 women can't have a baby in a month. Brooks's law was made famous in <a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month" target="_blank">The Mythical Man Month</a>. Brooks's Law basically states that if you have a effort that is complex that adding too many people to the effort will cause the delivery to take longer. In complex systems, adding people requires additional coordination and communication. If you add too many people, the tax eventually causes the effort to take longer than it would have if you didn't add people.<br />
<br />
As I was researching the topic, I started thinking about how this relates to the <a href="http://en.wikipedia.org/wiki/Theory_of_Constraints" target="_blank">Theory of Constraints </a>(<a href="http://en.wikipedia.org/wiki/The_Goal_(novel)" target="_blank">The Goal</a>), <a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">Agile</a>, and <a href="http://www.lean.org/whatslean/" target="_blank">Lean Management</a>. <br />
<br />
My goal was how can I help people understand all of this. Much to my surprise, I discovered a pretty good summary of it all at <a href="http://www.bigvisible.com/author/tlooy/" target="_blank">Big Visible Solutions</a>. Tom Looy put together a series of blog post to explain it all. The best part is that the blog posts contain a short video explaining it all. Each of the blog post build upon each other so watch them in order.<br />
<br />
<br />
<a href="https://www.blogger.com/goog_799836939">Practical Systems Thinking: An Appreciation of the System</a><br />
<a href="http://www.bigvisible.com/2013/10/practical-systems-thinking-an-appreciation-of-the-system/" target="_blank">http://www.bigvisible.com/2013/10/practical-systems-thinking-an-appreciation-of-the-system/</a><br />
<br />
<a href="https://www.blogger.com/goog_799836945">Practical Systems Thinking: Identify the Constraint</a><br />
<a href="http://www.bigvisible.com/2013/10/practical-systems-thinking-identify-the-constraint/" target="_blank">http://www.bigvisible.com/2013/10/practical-systems-thinking-identify-the-constraint/</a><br />
<br />
<a href="https://www.blogger.com/goog_799836954">Practical Systems Thinking: Exploit the Constraint</a><br />
<a href="http://www.bigvisible.com/2013/10/practical-systems-thinking-exploit-the-constraint/" target="_blank">http://www.bigvisible.com/2013/10/practical-systems-thinking-exploit-the-constraint/</a><br />
<br />
<a href="https://www.blogger.com/goog_799836959">Practical Systems Thinking: Subordinate to the Constraint</a><br />
<a href="http://www.bigvisible.com/2013/10/practical-systems-thinking-subordinate-to-the-constraint/" target="_blank">http://www.bigvisible.com/2013/10/practical-systems-thinking-subordinate-to-the-constraint/</a><br />
<br />
<a href="https://www.blogger.com/goog_799836964">Practical Systems Thinking: Elevate the Constraint</a><br />
<a href="http://www.bigvisible.com/2013/11/practical-systems-thinking-elevate-the-constraint/" target="_blank">http://www.bigvisible.com/2013/11/practical-systems-thinking-elevate-the-constraint/</a><br />
<br />
<a href="https://www.blogger.com/goog_799836969">Practical Systems Thinking: Don't Let Inertia Become the Constraint</a><br />
<a href="http://www.bigvisible.com/2013/11/practical-systems-thinking-dont-let-inertia-become-the-constraint/" target="_blank">http://www.bigvisible.com/2013/11/practical-systems-thinking-dont-let-inertia-become-the-constraint/</a><br />
<br />
I would like to thank Tom for taking the time to put this information together and encourage you to take a look.</div>
Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com0tag:blogger.com,1999:blog-883349787615020641.post-35163809678646535682010-01-14T16:31:00.003-05:002010-01-14T16:57:16.115-05:00Upgrading Beginning Groovy and Grails to Grails 1.2<a href="http://beginninggroovyandgrails.com">Beginning Groovy and Grails (BGG)</a> was the first book using <a href="http://grails.org">Grails</a> 1.0. Since then, Grails 1.1.X and now Grails 1.2 have been released. <br /><br />We have received several requests to upgrade the book code. I've started the process to upgrade the book code to Groovy 1.7 and Grails 1.2. You can find it on my <a href="http://github.com/jshingler/BGG_Grails1.2">GitHub Site: http://github.com/jshingler/BGG_Grails1.2</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com9tag:blogger.com,1999:blog-883349787615020641.post-42468997918511602492009-11-26T21:31:00.004-05:002009-11-26T22:22:17.733-05:00Griffon Painter Demo<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGQKNp39uJLwmx1N_zHhl4V_XHsHxOsNMpSF3Wf0ktA2rl_94pdWBnBKMTbFqYBIyCAGPhKA0BynRhSYza6zbs-0DrYM0Le3JMzet1NptLTyDq03HFLwqHTx7DRAmk4nhRFnN2liXGhUc/s1600/GriffonPainterDemo.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 194px; height: 80px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGQKNp39uJLwmx1N_zHhl4V_XHsHxOsNMpSF3Wf0ktA2rl_94pdWBnBKMTbFqYBIyCAGPhKA0BynRhSYza6zbs-0DrYM0Le3JMzet1NptLTyDq03HFLwqHTx7DRAmk4nhRFnN2liXGhUc/s400/GriffonPainterDemo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5408605705809646802" /></a><br />I was looking at the Swing Labs site and ran across the page on painters(<a href="http://swinglabs.org/docs/frameworks/painters/index.jsp">http://swinglabs.org/docs/frameworks/painters/index.jsp</a>) and thought the code looked pretty straight forward. Then I had the thought, Well Griffon uses SwingX I wonder, . . . the result is the image above.<br /><br />Griffon code: PainterView.groovy<br /><br /><pre name="code" class="groovy"><br />import java.awt.*<br />import org.jdesktop.swingx.painter.*<br /><br />GlossPainter gloss = new GlossPainter(new Color(1.0f, 1.0f, 1.0f, 0.2f),<br /> GlossPainter.GlossPosition.TOP)<br /><br />PinstripePainter stripes = new PinstripePainter(<br /> paint: new Color(1.0f, 1.0f, 1.0f, 0.17f),<br /> spacing:5.0<br /> )<br />MattePainter matte = new MattePainter(new Color(51, 51, 51));<br /><br />application(title:'painter',<br /> //size:[320,480],<br /> pack:true,<br /> //location:[50,50],<br /> locationByPlatform:true,<br /> iconImage: imageIcon('/griffon-icon-48x48.png').image,<br /> iconImages: [imageIcon('/griffon-icon-48x48.png').image,<br /> imageIcon('/griffon-icon-32x32.png').image,<br /> imageIcon('/griffon-icon-16x16.png').image]<br />) {<br /> jxpanel(id: "header",<br /> backgroundPainter: new CompoundPainter(matte, stripes, gloss)) {<br /> label('Griffon Painter Demo', <br /> icon: imageIcon(resource:'griffon-icon-48x48.png'), <br /> foreground: Color.white)<br /> }<br />}<br /></pre>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com5tag:blogger.com,1999:blog-883349787615020641.post-25089628092173948032009-11-10T18:58:00.002-05:002009-11-10T19:04:09.524-05:00COJUG: Eclipse Demo Camp LinksHere are the Links for my COJUG: Eclipse Demo Camp Groovy and Grails Plugins discussion<br /><br />You can use these links to download the Eclipse Groovy V2 plugin and SpringSource Tool Suite.<br /><br /><a href="http://groovy.codehaus.org/Eclipse+Plugin+V2+FAQ#EclipsePluginV2FAQ">http://groovy.codehaus.org/Eclipse+Plugin+V2+FAQ#EclipsePluginV2FAQ</a><br /><a href="http://blog.springsource.com/2009/07/30/a-groovier-eclipse-experience/">http://blog.springsource.com/2009/07/30/a-groovier-eclipse-experience/</a><br /><a href="http://docs.codehaus.org/pages/viewpage.action?pageId=133464433">http://docs.codehaus.org/pages/viewpage.action?pageId=133464433</a><br /><a href="http://grails.org/STS+Integration">http://grails.org/STS+Integration</a><br /><a href="http://www.springsource.com/products/springsource-tool-suite-download">http://www.springsource.com/products/springsource-tool-suite-download</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com3tag:blogger.com,1999:blog-883349787615020641.post-26487690471382249202009-09-10T07:34:00.002-04:002009-09-10T08:06:06.392-04:00The Griffon Celebrates<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://media.xircles.codehaus.org/_projects/griffon/_logos/medium.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 310px; height: 100px;" src="http://media.xircles.codehaus.org/_projects/griffon/_logos/medium.png" border="0" alt="" /></a><br /><br />WooHooo! <a href="http://griffon.codehaus.org">Griffon </a>celebrates the first anniversary of its public release today. Griffon was first released Sept. 10, 2008. It is hard to believe it has only been a year.<br /><br />It has been a very productive first year. Griffon is maturing and the word is getting out. For me, the most notable event was <a href="http://glaforge.free.fr/weblog/">Guillaume Laforge</a> winning the Java One 2009 Scriptbowl with an application called <a href="http://github.com/griffon/twittersphere/tree/master">Twittersphere</a>. Twittersphere was build using Griffon and Groovy.<br /><br />The founding fathers of Griffon (<a href="http://shemnon.com/speling/">Danno Ferrin</a>, <a href="http://www.jroller.com/aalmiray/">Andres Almiray</a>, <a href="http://jameswilliams.be/blog/entry/index">James Williams</a>) have done an absolutely fabulous job. Their work and dedication have enabled it to become what it is today. <br /><br />Well Done guys!<br /><br />PS Keep your ears open, . . . you might hear some Griffon news soon.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com3tag:blogger.com,1999:blog-883349787615020641.post-47232712321516710322009-09-05T15:35:00.003-04:002009-09-05T15:49:53.951-04:00ANN: gConfig 0.1.2<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1gdynA-KosJ43o7wRIICAdErQm6O81763w1Yy1jEzot6jhk2ktE4cPViW9IWaz1X8Tt1BhQZFTzRrHMLGNHehyo5KebdQA5hpQ-Bghy68OgmynuCbCXcNefDOSMBUUTTYlyyjiDOglk0/s1600-h/gConfig-intro.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1gdynA-KosJ43o7wRIICAdErQm6O81763w1Yy1jEzot6jhk2ktE4cPViW9IWaz1X8Tt1BhQZFTzRrHMLGNHehyo5KebdQA5hpQ-Bghy68OgmynuCbCXcNefDOSMBUUTTYlyyjiDOglk0/s400/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331396774383682" /></a><br /><br /><br />I am pleased to announce the release of gConfig 0.1.2, a configuration tool for <a href="http://griffon.codehaus.org">Griffon</a>, a Groovy Technology.<br /><br />This release is an upgrade to Griffon 0.1.2 and resolves a LogManager not found issue.<br /><br /><span style="font-weight:bold;">Background</span><br /><br />While building Griffon applications, I found myself doing the same repeatative steps when I started building the application. Install these sets of plugins, get those additional 3rd party jars, and oh ya, I want a menubar, toolbar, statusbar, . . . , you get the drift.<br /><br />I felt like I was spending too much time doing boilerplate code. So I did what any good IT person would do, made it easier through automation. The result is <a href="http://dist.codehaus.org/griffon/gConfig-0.1.2-installer.jar">gConfig</a>.<br /><br />After creating the application, you run gConfig. gConfig is a wizard that will present you with a list of the currently available plugins. You pick which ones you one and the move on to select some popular predefined 3rd party jars. Finally, you are presented with a collection of templates (Menubar, ToolBar, StatusBar, About, and Tips) to install. <br /><br />When you have completed your selections, gConfig will do the rest. Install the plugins, download the jars, and install the selected templates.<br /><br />It saves a load of time.<br /><br />Give it a <a href="http://dist.codehaus.org/griffon/gConfig-0.1.2-installer.jar">try</a>.<br /><br /><span style="font-weight:bold;">Screen Shots:</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8vCgfGtQNfXFL6sNXMkDgk-4LhTA7qbAphSDOTEqBXUtsRrvnXM3Nal3u2_8SpGyhYKhd65YiSUVL1Kk80Iil60vY-ujL0fm82PTWtfRgB8cbL3ROp4g1FjtZnvXfxW7-LoKi0HWGlJI/s1600-h/gConfig-intro.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8vCgfGtQNfXFL6sNXMkDgk-4LhTA7qbAphSDOTEqBXUtsRrvnXM3Nal3u2_8SpGyhYKhd65YiSUVL1Kk80Iil60vY-ujL0fm82PTWtfRgB8cbL3ROp4g1FjtZnvXfxW7-LoKi0HWGlJI/s320/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331728181195698" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiFzQ6We3zqNqwM96TOx6EdybSL2Fkoy_Urwq71YCBcr16AjRBBjbE7BzvA9s1NXB7qnFQe2NuOljndbS3JUkl81yKSGxrpLoneesUusRek21Voqy045nO9bzRNSaFNW5IZKx_l6LuG-w/s1600-h/gConfig-project.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiFzQ6We3zqNqwM96TOx6EdybSL2Fkoy_Urwq71YCBcr16AjRBBjbE7BzvA9s1NXB7qnFQe2NuOljndbS3JUkl81yKSGxrpLoneesUusRek21Voqy045nO9bzRNSaFNW5IZKx_l6LuG-w/s320/gConfig-project.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330760889918882" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDJihTxP7zRgqKLt2Bzbyp9ZHMjon56DG-b53WhKB5VurmPDdrkvdv0wC93nqP4H8T824UYMKuexhT8pwfA_uwqxDbmgGuNhyphenhyphenPpnxWpqEPkXCOSj3drFePVVcXdbBn8e61zY56sSllg0/s1600-h/gConfig-plugins.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDJihTxP7zRgqKLt2Bzbyp9ZHMjon56DG-b53WhKB5VurmPDdrkvdv0wC93nqP4H8T824UYMKuexhT8pwfA_uwqxDbmgGuNhyphenhyphenPpnxWpqEPkXCOSj3drFePVVcXdbBn8e61zY56sSllg0/s320/gConfig-plugins.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330905316189218" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNVr6rkEqpBqQlcOSBIRpIyIiZUqUZXtDRFwbx4WHAZP1OKIz3wdjm_T-k8VwmKSn0pqOHpxo5TQ2fCqgQt2m-chx8aBPLEHspnIBWrvHxNEihwXx3JvyqV_74LodDtpmY1aVzQU0chOM/s1600-h/gConfig-thirdparty.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNVr6rkEqpBqQlcOSBIRpIyIiZUqUZXtDRFwbx4WHAZP1OKIz3wdjm_T-k8VwmKSn0pqOHpxo5TQ2fCqgQt2m-chx8aBPLEHspnIBWrvHxNEihwXx3JvyqV_74LodDtpmY1aVzQU0chOM/s320/gConfig-thirdparty.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331052585512386" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20cjmMlsmhuxn3SPhhcwoqbXKIU-G5lHOoEvlCq-CDOlHfQ9XL76xEOnyKS9jpt5B81HbX14UKQtwfuhgarX9SyrMqzkLS9V1R-Wta1vf8plDJ61oVRVOF9vh5Fw12VBg9w-R3mInJN0/s1600-h/gConfig-templates.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20cjmMlsmhuxn3SPhhcwoqbXKIU-G5lHOoEvlCq-CDOlHfQ9XL76xEOnyKS9jpt5B81HbX14UKQtwfuhgarX9SyrMqzkLS9V1R-Wta1vf8plDJ61oVRVOF9vh5Fw12VBg9w-R3mInJN0/s320/gConfig-templates.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331166456565442" /></a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com8tag:blogger.com,1999:blog-883349787615020641.post-79460991019479001552009-08-03T09:15:00.003-04:002009-08-03T12:49:15.491-04:00ANN: Grails RefCode Plugin 0.2<a href="http://marceloverdijk.blogspot.com/2008/05/ref-code-plugin.html">Marcel Overdijk</a> released <a href="http://www.grails.org/Ref+Code+Plugin">RefCode plugin</a> May 2008. The plugin provides an easy solution for 'code/description' reference/lookup data. Often in your business model you have simple reference/lookup tables with just code and description columns; e.g. Country (uk=United Kingdom, nl=Netherlands, ...), OrderStatus (C=Cancelled, N=New, P=Pending, S=Shipped), OrganizationType, ...<br /><br />The latest release of the plugin include the refCode Custom Constraint to make validation against the domain valued even easier.<br /><br />Assuming you a have a domain of "USStates", you can now setup a constraint like so:<br /><pre name="code" class="groovy"><br />class Person {<br /> String name<br /> String street<br /> String city<br /> String state<br /> String zip<br /><br /> static constraints = {<br /> name()<br /> street()<br /> city()<br /> state(refCode:"USStates")<br /> zip()<br /> }<br />}<br /></pre><br /><br />You can find out more about the RefCode Plugin at: <a href="http://www.grails.org/Ref+Code+Plugin">http://www.grails.org/Ref+Code+Plugin</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com86tag:blogger.com,1999:blog-883349787615020641.post-78498373002393635792009-06-05T10:23:00.006-04:002009-06-05T10:35:29.722-04:00J1 Thirsty Head : Groovy, Grails Griffon VideosScott Davis of <a href="http://thirstyhead.com/">Thirsty Head</a> was able to get some Gr8 interviews at Java One.<br /><br />They include many of the leaders of the <a href="http://groovy.codehaus.org/">Groovy</a>, <a href="http://grails.org">Grails</a>, & <a href="http://griffon.codehaus.org">Griffon </a>community.<br /><br />Here they are all in one place.<br /><br /><a href="http://blip.tv/file/2194835">Interview with Dierk Koenig</a><br /><a href="http://blip.tv/file/2195084">Interview with Danno Ferrin, James Williams of Griffon</a><br /><a href="http://blip.tv/file/2197817">Interview with Graeme Rocher</a><br /><a href="http://blip.tv/file/2197838">Interview with Dave Klein</a><br /><a href="http://blip.tv/file/2197859">Interview with Geertjan Wielenga</a><br /><a href="http://blip.tv/file/2197953">Interview with Andres Almiray</a><br /><a href="http://blip.tv/file/2198373">Interview with Sven Haiges and Glen Smith</a><br /><a href="http://blip.tv/file/2201209">Interview with Guillaume Laforge</a><br /><a href="http://blip.tv/file/2202297">Interview with Robert Fischer</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com2tag:blogger.com,1999:blog-883349787615020641.post-46872285537631513972009-06-02T21:03:00.011-04:002009-06-02T22:10:29.481-04:00ANN: AbeilleForm-Builder 0.1 - Griffon PluginI am pleased to announce the first release of AbeilleForm Builder. The AbeilleForm Builder makes it possible to easily use Abeille Forms in your Groovy swingbuilder and Griffon applications<br /><br />Abeille Forms Designer is a GUI builder for Java applications. Developers and designers can create complex, professional forms in minutes. Designers can drag and drop components onto a WYSIWYG editor. Full support for undo/redo and copy/paste is provided. Components can be easily customized by adding images or modifying their properties. Advanced fill effects are supported such as textures and gradients.<br /><br />With the AbeilleForm Builder, you can use the .jfrm file in your application and access the form components.<br /><br /><h2>Installation </h2><br />The builder is installed as follows:<br /><br /><pre name="code" class="groovy"><br />griffon install-plugin abeilleform-builder<br /></pre><br /><br /><h2>Usage</h2><br /><br /><pre name="code" class="groovy"><br />application(title:'taf',<br /> //size:[320,480],<br /> pack:true,<br /> //location:[50,50],<br /> locationByPlatform:true,<br /> iconImage: imageIcon('/griffon-icon-48x48.png').image,<br /> iconImages: [imageIcon('/griffon-icon-48x48.png').image,<br /> imageIcon('/griffon-icon-32x32.png').image,<br /> imageIcon('/griffon-icon-16x16.png').image]<br />) {<br /> build(Actions)<br /> formPanel(id: "cf", "countForm.jfrm")<br /> countButton.action = clickAction<br /> bind(source: model ,sourceProperty: "count", target: countLabel, targetProperty: "text" )<br />}<br /></pre><br /><br />Notice the node "formPanel". The "formPanel" node loads the ".jfrm" form created in the AbeilleForm Designer into your griffon application. During the process of loading the form, the builder creates a bean reference for the form components. This allows us to address the form component by name. E.g "countButton" and "countLabel"<br /><br />You can learn more about AbeilleForms at <a href="http://abeille.dev.java.net">http://abeille.dev.java.net</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com8tag:blogger.com,1999:blog-883349787615020641.post-73228770279876671332009-05-26T22:24:00.018-04:002009-05-29T08:08:30.515-04:00ANN gConfig 0.1 - a Configuration tool for Griffon<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1gdynA-KosJ43o7wRIICAdErQm6O81763w1Yy1jEzot6jhk2ktE4cPViW9IWaz1X8Tt1BhQZFTzRrHMLGNHehyo5KebdQA5hpQ-Bghy68OgmynuCbCXcNefDOSMBUUTTYlyyjiDOglk0/s1600-h/gConfig-intro.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1gdynA-KosJ43o7wRIICAdErQm6O81763w1Yy1jEzot6jhk2ktE4cPViW9IWaz1X8Tt1BhQZFTzRrHMLGNHehyo5KebdQA5hpQ-Bghy68OgmynuCbCXcNefDOSMBUUTTYlyyjiDOglk0/s400/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331396774383682" /></a><br /><br /><br />I am pleased to announce the first public release of gConfig 0.1, a configuration tool for <a href="http://griffon.codehaus.org">Griffon</a>, a Groovy Technology.<br /><br />While building Griffon applications, I found myself doing the same repeatative steps when I started building the application. Install these sets of plugins, get those additional 3rd party jars, and oh ya, I want a menubar, toolbar, statusbar, . . . , you get the drift.<br /><br />I felt like I was spending too much time doing boilerplate code. So I did what any good IT person would do, made it easier through automation. The result is <a href="http://dist.codehaus.org/griffon/gConfig-0.1-installer.jar">gConfig</a>.<br /><br />After creating the application, you run gConfig. gConfig is a wizard that will present you with a list of the currently available plugins. You pick which ones you one and the move on to select some popular predefined 3rd party jars. Finally, you are presented with a collection of templates (Menubar, ToolBar, StatusBar, About, and Tips) to install. <br /><br />When you have completed your selections, gConfig will do the rest. Install the plugins, download the jars, and install the selected templates.<br /><br />It saves a load of time.<br /><br />Give it a <a href="http://dist.codehaus.org/griffon/gConfig-0.1-installer.jar">try</a>.<br /><br /><span style="font-weight:bold;">Screen Shots:</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8vCgfGtQNfXFL6sNXMkDgk-4LhTA7qbAphSDOTEqBXUtsRrvnXM3Nal3u2_8SpGyhYKhd65YiSUVL1Kk80Iil60vY-ujL0fm82PTWtfRgB8cbL3ROp4g1FjtZnvXfxW7-LoKi0HWGlJI/s1600-h/gConfig-intro.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8vCgfGtQNfXFL6sNXMkDgk-4LhTA7qbAphSDOTEqBXUtsRrvnXM3Nal3u2_8SpGyhYKhd65YiSUVL1Kk80Iil60vY-ujL0fm82PTWtfRgB8cbL3ROp4g1FjtZnvXfxW7-LoKi0HWGlJI/s320/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331728181195698" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiFzQ6We3zqNqwM96TOx6EdybSL2Fkoy_Urwq71YCBcr16AjRBBjbE7BzvA9s1NXB7qnFQe2NuOljndbS3JUkl81yKSGxrpLoneesUusRek21Voqy045nO9bzRNSaFNW5IZKx_l6LuG-w/s1600-h/gConfig-project.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiFzQ6We3zqNqwM96TOx6EdybSL2Fkoy_Urwq71YCBcr16AjRBBjbE7BzvA9s1NXB7qnFQe2NuOljndbS3JUkl81yKSGxrpLoneesUusRek21Voqy045nO9bzRNSaFNW5IZKx_l6LuG-w/s320/gConfig-project.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330760889918882" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDJihTxP7zRgqKLt2Bzbyp9ZHMjon56DG-b53WhKB5VurmPDdrkvdv0wC93nqP4H8T824UYMKuexhT8pwfA_uwqxDbmgGuNhyphenhyphenPpnxWpqEPkXCOSj3drFePVVcXdbBn8e61zY56sSllg0/s1600-h/gConfig-plugins.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDJihTxP7zRgqKLt2Bzbyp9ZHMjon56DG-b53WhKB5VurmPDdrkvdv0wC93nqP4H8T824UYMKuexhT8pwfA_uwqxDbmgGuNhyphenhyphenPpnxWpqEPkXCOSj3drFePVVcXdbBn8e61zY56sSllg0/s320/gConfig-plugins.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330905316189218" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNVr6rkEqpBqQlcOSBIRpIyIiZUqUZXtDRFwbx4WHAZP1OKIz3wdjm_T-k8VwmKSn0pqOHpxo5TQ2fCqgQt2m-chx8aBPLEHspnIBWrvHxNEihwXx3JvyqV_74LodDtpmY1aVzQU0chOM/s1600-h/gConfig-thirdparty.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNVr6rkEqpBqQlcOSBIRpIyIiZUqUZXtDRFwbx4WHAZP1OKIz3wdjm_T-k8VwmKSn0pqOHpxo5TQ2fCqgQt2m-chx8aBPLEHspnIBWrvHxNEihwXx3JvyqV_74LodDtpmY1aVzQU0chOM/s320/gConfig-thirdparty.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331052585512386" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20cjmMlsmhuxn3SPhhcwoqbXKIU-G5lHOoEvlCq-CDOlHfQ9XL76xEOnyKS9jpt5B81HbX14UKQtwfuhgarX9SyrMqzkLS9V1R-Wta1vf8plDJ61oVRVOF9vh5Fw12VBg9w-R3mInJN0/s1600-h/gConfig-templates.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20cjmMlsmhuxn3SPhhcwoqbXKIU-G5lHOoEvlCq-CDOlHfQ9XL76xEOnyKS9jpt5B81HbX14UKQtwfuhgarX9SyrMqzkLS9V1R-Wta1vf8plDJ61oVRVOF9vh5Fw12VBg9w-R3mInJN0/s320/gConfig-templates.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331166456565442" /></a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com15tag:blogger.com,1999:blog-883349787615020641.post-77033216670639158802009-05-24T16:00:00.003-04:002009-05-24T20:52:47.066-04:00Gr8Conf (Denmark 2009) - PhotosThe following photos contain pics from Gr8Conf, the Groovy Technologies Conference.<br /><br /><a href="http://mypict.me/show.php?id=15rX">http://mypict.me/show.php?id=15rX</a><br /><a href="http://mypict.me/show.php?id=15IO">http://mypict.me/show.php?id=15IO</a><br /><a href="http://mypict.me/show.php?id=16Qh">http://mypict.me/show.php?id=16Qh</a><br /><a href="http://mypict.me/show.php?id=16ab">http://mypict.me/show.php?id=16ab</a><br /><a href="http://mypict.me/show.php?id=19nn">http://mypict.me/show.php?id=19nn</a><br /><a href="http://mypict.me/show.php?id=19jW">http://mypict.me/show.php?id=19jW</a><br /><a href="http://mypict.me/show.php?id=19dl">http://mypict.me/show.php?id=19dl</a><br /><a href="http://mypict.me/show.php?id=15IO">http://mypict.me/show.php?id=15IO</a><br /><a href="http://mypict.me/show.php?id=15AS">http://mypict.me/show.php?id=15AS</a><br /><a href="http://twitpic.com/5jsa2">http://twitpic.com/5jsa2</a><br /><a href="http://twitpic.com/5hqf2">http://twitpic.com/5hqf2</a><br /><a href="http://www.flickr.com/photos/frankvilhelmsen/sets/72157618368303059/">http://www.flickr.com/photos/frankvilhelmsen/sets/72157618368303059/</a><br /><br />Tweets from Gr8Conf:<br /><a href="http://www.twazzup.com/search?q=gr8conf">http://www.twazzup.com/search?q=gr8conf</a><br /><a href="http://www.twazzup.com/search?q=gr8conf">http://www.twazzup.com/search?q=gr8conf</a><br /><br /><br />Griffon Shirt:<br /><a href="http://www.cafepress.com/griffongroovy">http://www.cafepress.com/griffongroovy</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com2tag:blogger.com,1999:blog-883349787615020641.post-49466245299840099052009-05-23T21:01:00.002-04:002009-05-23T21:04:39.302-04:00Gr8Cong - Griffon Code @GitHubThe Code for the Griffon Desktop Front-end application to Graeme's Twitter Clone is available at <a href="http://github.com/jshingler/gr8conf_2009/tree/master">GitHub</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com2tag:blogger.com,1999:blog-883349787615020641.post-77221261138478037882009-05-23T20:41:00.002-04:002009-05-23T21:00:21.282-04:00Really Good Blog post covering Gr8ConfReally Good Blog post covering Gr8Conf: <a href="http://gettinggroovy.wordpress.com/category/gr8/">http://gettinggroovy.wordpress.com/category/gr8/</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com34tag:blogger.com,1999:blog-883349787615020641.post-13686042866122783342009-05-23T20:35:00.002-04:002009-05-23T20:38:19.237-04:00Gr8 Conf - Outstanding Success<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://groovy.codehaus.org/download/attachments/1871/banner120x246.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 120px; height: 246px;" src="http://groovy.codehaus.org/download/attachments/1871/banner120x246.png" alt="" border="0" /></a><br /><br />Well the Gr8Conf was an outstanding success. The organizers <a href="http://www.version2.dk/bruger/3721">Soeren Glasius</a> and <a href="http://glaforge.free.fr/weblog/index.php?catid=2&blogid=1">Guillaume Laforge</a> put on Gr8 Conference, it will be hard to top.<br /><br />Guillaume Laforge, Graeme Rocher, Paul King, Dierk Koenig, Jochen Theodorou, and many other Groovy technology giants were there. It was an honor to be in the presence of all that Groovy brain power, . . .<br /><br />The attendees were pretty sharp too, . . . there were some gr8 questions and ideas shared. I've already started following on the Griffon ideas.<br /><br />And Copenhagen, . . . What a wonderful place. Everyone was very kind and helpful. And the sights, . . . Many wonderful things to see and do.<br /><br />I would like to give a special Thank you to Soeren for being such a Gr8 Host. He really took Gr8 care of everyone and made everyone feel at home. I would especially like to thank him for helping me and my family have fun and seeing the sights of Copenhagen and Denmark.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com2tag:blogger.com,1999:blog-883349787615020641.post-18420805873968372542009-04-28T22:15:00.004-04:002009-04-28T22:22:01.552-04:00ANN: Griffon Splash Plugin Updated<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://svn.codehaus.org/griffon/plugins/griffon-splash/trunk/griffon-app/resources/splash.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 381px; height: 123px;" src="http://svn.codehaus.org/griffon/plugins/griffon-splash/trunk/griffon-app/resources/splash.png" border="0" alt="" /></a><br /><br />I am pleased to announce the release of the Griffon plugin, Splash 0.1.1. Splash has been updated to use the new Griffon Banner and enhanced as per <a href="http://jira.codehaus.org/browse/GRIFFON-38?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=174469#action_174469 ">GRIFFON-38</a>.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com1tag:blogger.com,1999:blog-883349787615020641.post-19282945881341091872009-01-18T18:39:00.007-05:002009-01-18T19:07:46.324-05:00ANN: Griffon Splash Screen PluginI am pleased to announce the release of my first Griffon plugin, Splash. Splash is a Griffon splash screen plugin based upon Roy Ratcliff's Java Splash Screen paper <a href="http://www.randelshofer.ch/oop/javasplash/Java%20Splash%20Screen.pdf">http://www.randelshofer.ch/oop/javasplash/Java%20Splash%20Screen.pdf</a><br /><br /><h2>Installation</h2><br /><pre><br />griffon install-plugin splash<br /></pre><br /><br />The "initialize.groovy" script causes the splash screen to be displayed. The splash screen is disposed of by the "ready.groovy" script. Griffon executes teh initialize script then creates and initialize the controller, model, and view. Durring the initialization process, the splash screen status can be updated using the following technique.<br /><br /><pre name="code" class="groovy"><br />SplashScreen.getInstance().showStatus("Initializing the Controller")<br /></pre><br /><br />The plugin also provides the ability to provide your own image. this is accomplished in the <pre>initialize.groovy</pre> script using the following technique.<br /><br /><pre name="code" class="groovy"><br />def splashScreen = SplashScreen.getInstance()<br /><br />// Setting a splash image<br />URL url = this.class.getResource("mySplash.jpg")<br />splashScreen.setImage(url)<br /></pre><br /><br />Keep an eye on: <a href="http://griffon.codehaus.org/Splash+Plugin">http://griffon.codehaus.org/Splash+Plugin</a><br /><br />A special thanks to <a href="http://www.jroller.com/aalmiray/">Andres Almiray</a> for helping me and all of the Griffon Team.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com4tag:blogger.com,1999:blog-883349787615020641.post-50030095982423747342009-01-17T22:35:00.023-05:002009-01-18T00:28:01.601-05:00Testing new SyntaxHighlighting PluginThis is a simple post to test syntax highlighting <br /><pre name="code" class="java"><br />public void printHello(){ <br /> System.out.println("Hello World"); <br />} <br /></pre><br /><br />Let's try some Groovy code now<br /><pre name="code" class="groovy"><br /><br />class MyController {<br /> // these will be injected by Griffon<br /> def model<br /> def view<br /><br /> void mvcGroupInit(Map args) {<br /> // this method is called after model and view are injected<br /> }<br /><br /> /*<br /> def action = { evt = null -><br /> }<br /> */<br />}<br /></pre><br /><br />I hope it works<br /><br />Got it working, . . . <br /><br />Keys to getting it working:<br /><a href="http://fahdshariff.blogspot.com/2008/07/syntax-highlighting-code-in-webpages.html">http://fahdshariff.blogspot.com/2008/07/syntax-highlighting-code-in-webpages.html</a></ br><br /><a href="http://code.google.com/p/syntaxhighlighter/wiki/BloggerMode">http://code.google.com/p/syntaxhighlighter/wiki/BloggerMode</a><br /><br />Borrowed Groovy Highlighting from: <a href="http://grails.org/SyntaxHighlighter+Plugin">http://grails.org/SyntaxHighlighter+Plugin</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com1tag:blogger.com,1999:blog-883349787615020641.post-32302859523513020952009-01-11T15:33:00.002-05:002009-01-11T15:39:14.310-05:00CodeMash 2009 - Griffon in Front Grails in BackI uploaded the slides from my Griffon in Front Grails in Back session at CodeMash 2009.<br /><br />For Those of you who attend the talk, I enhanced the counting application based upon your questions. The code in the counting example now includes @bindable.<br /><br /><br />Slides: <a href="http://www.slideshare.net/jshingler/griffon-in-front-grails-in-back-presentation">http://www.slideshare.net/jshingler/griffon-in-front-grails-in-back-presentation</a><br />gCollabTodo Code: <a href="http://github.com/jshingler/gcollabtodo/tree/master">http://github.com/jshingler/gcollabtodo/tree/master</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com1tag:blogger.com,1999:blog-883349787615020641.post-80365566978668493532009-01-09T14:37:00.002-05:002009-01-09T14:40:37.717-05:00CodeMash 2009 - Groovy and Grails PrecompileJust uploaded the Slides and Code from the Precompile Presentation that Chris Judd and I did at CodeMash 2009 on Groovy and Grails. <br /><br />The presentation went really well. <br /><br />Slides: <a href="http://www.slideshare.net/jshingler/gg-code-mash2009-20090106-presentation/">http://www.slideshare.net/jshingler/gg-code-mash2009-20090106-presentation/</a><br />Code: <a href="http://github.com/jshingler/codemash2009precompile/tree/master">http://github.com/jshingler/codemash2009precompile/tree/master</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com0tag:blogger.com,1999:blog-883349787615020641.post-3201958408947153582008-11-27T10:55:00.004-05:002008-11-27T11:09:27.259-05:00Griffon Collab Todo ExampleOkay, it is still a work in progress, . . . But, I have pushed the Griffon Collab Todo application to <a href="http://github.com/jshingler/gcollabtodo/wikis">Github (http://github.com/jshingler/gcollabtodo/wikis)</a>. Griffon Collab Todo is a reimplementation of the Swing Client found in Chapter 13 of <a href="http://www.beginninggroovyandgrails.com">Beginning Groovy and Grails</a> using Griffon.<br /><br />The application is a <a href="http://griffon.codehaus.org">Griffon</a> (Groovy & Swing) client to a <a href="http://grails.org">Grails</a> Web Application. It communicates with the Grails application using a JSON Restful approach.<br /><br />While it is still a work in progress, . . . It does give you an idea of they types of things you can do with Griffon.<br /><br />Stay tuned, as time permits, I will blog more info on my experiences with Griffon. BTW, it has been fun.<br /><br /><a href="http://www.shemnon.com/speling/">Danno</a>, <a href="http://www.jroller.com/aalmiray/">Andres</a>, and <a href="http://jameswilliams.be">James</a> have done a Great Job with Griffon!Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com15tag:blogger.com,1999:blog-883349787615020641.post-9999589646727422212008-11-24T13:19:00.001-05:002008-11-24T13:22:41.944-05:00Installing Griffon SnapshotGriffon is to Desktop as Grails is to Web Apps.<br /><br />Here are some instructions for installing the latest Griffon Dev Snapshot on Windows.<br /><br /><span style="font-weight:bold;">Assumptions:</span> java is already installed.<br /><br /> 1. Download the source (http://svn.codehaus.org/griffon) using your favorite Subversion tool. I like SmartSVN (http://www.syntevo.com/smartsvn)<br /> 2. cd download\core\trunk<br /> 3. run ant to build the code<br /> 4. create an installer. ant create-installer-izpack (look in ant\build\installer.xml for other options)<br /> 5. execute trunk\dist\griffon-installer-0.1.SNAPSHOT.jar (java -jar griffon-installer-0.1.SNAPSHOT.jar)<br /><br />NOTE: Depending upon when you download the source, there is an error in the windows installer. It puts a PATH entry in the User variables that contains ${OLD_PATH_VALUE}. This creates a problem. A work around is to delete the PATH entry in User Variables and add the appropriate info to the System PATH variable. You should also make sure that GRIFFON_HOME has been defined.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com15tag:blogger.com,1999:blog-883349787615020641.post-92174855620611106202008-11-02T19:23:00.003-05:002008-11-02T19:38:21.952-05:00Griffon Collab-TodoComing Soon! In Chapter 13 of "Beginning Groovy and Grails" I built a Swing GUI using SwingXBuilder that interacted with a Grails RESTFul Web Service. I am finishing the process of creating a Griffon version of the same application. It is starting to look good.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfvwBorzKDjLW-BVMzKk6lvbv5N1Ih6jLR5Oj1jhyV_Kwb_YXtPx0NtkJ_dieDBSCOaXD0zyIHBinlHMIigLJRTwzaXoz-T9PjKT5HTFIQcYJi9cgwIsJGl7aHvFx5paV04Y3673P_QGI/s1600-h/CollabTodoGriffon.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 262px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfvwBorzKDjLW-BVMzKk6lvbv5N1Ih6jLR5Oj1jhyV_Kwb_YXtPx0NtkJ_dieDBSCOaXD0zyIHBinlHMIigLJRTwzaXoz-T9PjKT5HTFIQcYJi9cgwIsJGl7aHvFx5paV04Y3673P_QGI/s320/CollabTodoGriffon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5264223303658463554" /></a><br /><br />I will be uploading the source to the <a href="http://www.BeginningGroovyAndGrails.com">Beginning Groovy and Grails</a> website in the near future. Stay tuned.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com11tag:blogger.com,1999:blog-883349787615020641.post-49413412357752377202008-10-23T13:01:00.003-04:002008-10-23T13:06:12.486-04:00Aug 12 COJUG - Groovy / Grails PresentationGroovy and Grails have given us the ability to leverage the strength of the Java Platform (and Eco System) and the productivity of "Convention over Configuration" to construct websites. But what if the User Interface requirements of your new application is best solved with the type of interaction a desktop application provides?<br /><br />Groovy brings the same productivity gain to desktop applications that Grails brings to web applications. This session will use the Groovy SwingBuilder and popular open source libraries to build a desktop application to interact with a Grails backend.<br /><br />Here is the link to the Groovy and Grails presentation I did on August 12, 2008. <br /><br /><a href="http://www.cojug.org/downloads/Swing%20in%20Front%20Grails%20in%20Back.pdf">COJUG 8/12 Groovy / Grails Presentation</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com11tag:blogger.com,1999:blog-883349787615020641.post-9946797572587815502008-08-05T11:24:00.001-04:002008-08-05T11:25:55.357-04:00BGG - Apress book of the dayHURRY, Beginning Groovy and Grails is the Apress book of the day, you can get the PDF at a reduced price.<br /><br /><a href="http://www.apress.com/info/dailydeal">http://www.apress.com/info/dailydeal</a>Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com11tag:blogger.com,1999:blog-883349787615020641.post-15830565105956351772008-07-03T22:39:00.003-04:002008-07-03T23:24:39.728-04:00Phone Number Custom Constraint for GrailsGrails contains really great <a href="http://grails.org/Validation+Reference">Validators</a> that you can use in your constraints. But it is missing one that I need for a project I am working on, . . . There is no PhoneNumber constraint. Luckily, I ran across Geoff Lane's Post: <a href="http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/"> Build a Custom Validator in Grails with a Plugin</a><br /><br />In Chapter 2 Regular Expressions section of <a href="http://www.amazon.com/gp/product/1430210451?ie=UTF8&tag=jshinglerblog-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1430210451">Beginning Groovy and Grails</a>, we show using a regular expression to validate phone numbers. Well, now I had all of the parts required to make a PhoneNumber Custom Validator.<br /><br />Usage:<br /><pre><br />class party {<br /> String name<br /> String workPhone<br /><br /> static constraints = = {<br /> workPhone(phoneNumber:true)<br /> }<br /><br /></pre><br /><br />The Constraint: <br /><br /><pre><br />import org.codehaus.groovy.grails.validation.AbstractConstraint<br />import org.springframework.validation.Errors<br /><br />/**<br /> * Phone Number Constraint<br /> *<br /> * The phone number constraint is used to validate phone number formats<br /> *<br /> * Registering the Constraint.<br /> *<br /> * App Registration Config.groovy<br /> * <code><br /> * org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint(<br /> * PhoneNumberConstraint.NAME, PhoneNumberConstraint.class)<br /> * </code><br /> *<br /> * Plugin Registration MyPlugin.groovy:<br /> * <code><br /> * def doWithSpring = {<br /> * ConstrainedProperty.registerNewConstraint(PhoneNumberConstraint.NAME, PhoneNumberConstraint.class);<br /> * }<br /> * </code><br /> *<br /> * This plugin is based upon the following posts:<br /> * <br /> * http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/<br /> * http://www.zorched.net/2008/01/26/custom-validators-in-grails-in-a-single-app/<br /> *<br /> * @author Jim Shingler ShinglerJim at gmail.com<br /> */<br />class PhoneNumberConstraint extends AbstractConstraint {<br /><br /> private static final String DEFAULT_MESSAGE_CODE = "default.phoneNumber.invalid.message";<br /> public static final String NAME = "phoneNumber";<br /><br /> private boolean validateConstraint<br /><br /> public void setParameter(Object constraintParameter) {<br /> if (!(constraintParameter instanceof Boolean))<br /> throw new IllegalArgumentException("Parameter for constraint ["<br /> + NAME + "] of property ["<br /> + constraintPropertyName + "] of class ["<br /> + constraintOwningClass + "] must be a boolean value");<br /><br /> this.validateConstraint = ((Boolean) constraintParameter).booleanValue()<br /> super.setParameter(constraintParameter);<br /> }<br /><br /> protected void processValidate(Object target, Object propertyValue, Errors errors) {<br /> if (validateConstraint && !validate(target, propertyValue)) {<br /> def args = (Object[]) [constraintPropertyName, constraintOwningClass,<br /> propertyValue]<br /> super.rejectValue(target, errors, DEFAULT_MESSAGE_CODE,<br /> "not." + NAME, args);<br /> }<br /> }<br /><br /> boolean supports(Class type) {<br /> return type != null && String.class.isAssignableFrom(type);<br /> }<br /><br /> String getName() {<br /> return NAME;<br /> }<br /><br /> /**<br /> * This is where the real work is. Use a regular expression to validate<br /> * the phone number.<br /> *<br /> * The core logic of the constraint is implemented as its own method to make the<br /> * constraint easier to test.<br /> */<br /> boolean validate(target, propertyValue) {<br /> propertyValue ==~ /^[01]?\s*[\(\.-]?(\d{3})[\)\.-]?\s*(\d{3})[\.-](\d{4})$/<br /> }<br />}<br /></pre><br /><br />The real work is in the validate function.<br /><br />As you can see, creating a custom constraint is really pretty easy. Just make sure that you follow the directions in the constraint class comments to register the constraint.Jim Shinglerhttp://www.blogger.com/profile/08784772625961834908noreply@blogger.com35