WooHooo! Griffon 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.
It has been a very productive first year. Griffon is maturing and the word is getting out. For me, the most notable event was Guillaume Laforge winning the Java One 2009 Scriptbowl with an application called Twittersphere. Twittersphere was build using Griffon and Groovy.
The founding fathers of Griffon (Danno Ferrin, Andres Almiray, James Williams) have done an absolutely fabulous job. Their work and dedication have enabled it to become what it is today.
Well Done guys!
PS Keep your ears open, . . . you might hear some Griffon news soon.
Thursday, September 10, 2009
The Griffon Celebrates
Saturday, September 5, 2009
ANN: gConfig 0.1.2

I am pleased to announce the release of gConfig 0.1.2, a configuration tool for Griffon, a Groovy Technology.
This release is an upgrade to Griffon 0.1.2 and resolves a LogManager not found issue.
Background
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.
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 gConfig.
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.
When you have completed your selections, gConfig will do the rest. Install the plugins, download the jars, and install the selected templates.
It saves a load of time.
Give it a try.
Screen Shots:




Friday, June 5, 2009
J1 Thirsty Head : Groovy, Grails Griffon Videos
Scott Davis of Thirsty Head was able to get some Gr8 interviews at Java One.
They include many of the leaders of the Groovy, Grails, & Griffon community.
Here they are all in one place.
Interview with Dierk Koenig
Interview with Danno Ferrin, James Williams of Griffon
Interview with Graeme Rocher
Interview with Dave Klein
Interview with Geertjan Wielenga
Interview with Andres Almiray
Interview with Sven Haiges and Glen Smith
Interview with Guillaume Laforge
Interview with Robert Fischer
Tuesday, June 2, 2009
ANN: AbeilleForm-Builder 0.1 - Griffon Plugin
I 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
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.
With the AbeilleForm Builder, you can use the .jfrm file in your application and access the form components.
Installation
The builder is installed as follows:
griffon install-plugin abeilleform-builder
Usage
application(title:'taf',
//size:[320,480],
pack:true,
//location:[50,50],
locationByPlatform:true,
iconImage: imageIcon('/griffon-icon-48x48.png').image,
iconImages: [imageIcon('/griffon-icon-48x48.png').image,
imageIcon('/griffon-icon-32x32.png').image,
imageIcon('/griffon-icon-16x16.png').image]
) {
build(Actions)
formPanel(id: "cf", "countForm.jfrm")
countButton.action = clickAction
bind(source: model ,sourceProperty: "count", target: countLabel, targetProperty: "text" )
}
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"
You can learn more about AbeilleForms at http://abeille.dev.java.net
Tuesday, May 26, 2009
ANN gConfig 0.1 - a Configuration tool for Griffon

I am pleased to announce the first public release of gConfig 0.1, a configuration tool for Griffon, a Groovy Technology.
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.
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 gConfig.
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.
When you have completed your selections, gConfig will do the rest. Install the plugins, download the jars, and install the selected templates.
It saves a load of time.
Give it a try.
Screen Shots:




Sunday, May 24, 2009
Gr8Conf (Denmark 2009) - Photos
The following photos contain pics from Gr8Conf, the Groovy Technologies Conference.
http://mypict.me/show.php?id=15rX
http://mypict.me/show.php?id=15IO
http://mypict.me/show.php?id=16Qh
http://mypict.me/show.php?id=16ab
http://mypict.me/show.php?id=19nn
http://mypict.me/show.php?id=19jW
http://mypict.me/show.php?id=19dl
http://mypict.me/show.php?id=15IO
http://mypict.me/show.php?id=15AS
http://twitpic.com/5jsa2
http://twitpic.com/5hqf2
http://www.flickr.com/photos/frankvilhelmsen/sets/72157618368303059/
Tweets from Gr8Conf:
http://www.twazzup.com/search?q=gr8conf
http://www.twazzup.com/search?q=gr8conf
Griffon Shirt:
http://www.cafepress.com/griffongroovy
Saturday, May 23, 2009
Gr8Cong - Griffon Code @GitHub
The Code for the Griffon Desktop Front-end application to Graeme's Twitter Clone is available at GitHub
Really Good Blog post covering Gr8Conf
Really Good Blog post covering Gr8Conf: http://gettinggroovy.wordpress.com/category/gr8/
Gr8 Conf - Outstanding Success
Well the Gr8Conf was an outstanding success. The organizers Soeren Glasius and Guillaume Laforge put on Gr8 Conference, it will be hard to top.
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, . . .
The attendees were pretty sharp too, . . . there were some gr8 questions and ideas shared. I've already started following on the Griffon ideas.
And Copenhagen, . . . What a wonderful place. Everyone was very kind and helpful. And the sights, . . . Many wonderful things to see and do.
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.
Tuesday, April 28, 2009
ANN: Griffon Splash Plugin Updated
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 GRIFFON-38.
Sunday, November 2, 2008
Griffon Collab-Todo
Coming 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.
I will be uploading the source to the Beginning Groovy and Grails website in the near future. Stay tuned.
Thursday, July 3, 2008
Phone Number Custom Constraint for Grails
Grails contains really great Validators 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: Build a Custom Validator in Grails with a Plugin
In Chapter 2 Regular Expressions section of Beginning Groovy and Grails, 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.
Usage:
class party {
String name
String workPhone
static constraints = = {
workPhone(phoneNumber:true)
}
The Constraint:
import org.codehaus.groovy.grails.validation.AbstractConstraint
import org.springframework.validation.Errors
/**
* Phone Number Constraint
*
* The phone number constraint is used to validate phone number formats
*
* Registering the Constraint.
*
* App Registration Config.groovy
*
* org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint(
* PhoneNumberConstraint.NAME, PhoneNumberConstraint.class)
*
*
* Plugin Registration MyPlugin.groovy:
*
* def doWithSpring = {
* ConstrainedProperty.registerNewConstraint(PhoneNumberConstraint.NAME, PhoneNumberConstraint.class);
* }
*
*
* This plugin is based upon the following posts:
*
* http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/
* http://www.zorched.net/2008/01/26/custom-validators-in-grails-in-a-single-app/
*
* @author Jim Shingler ShinglerJim at gmail.com
*/
class PhoneNumberConstraint extends AbstractConstraint {
private static final String DEFAULT_MESSAGE_CODE = "default.phoneNumber.invalid.message";
public static final String NAME = "phoneNumber";
private boolean validateConstraint
public void setParameter(Object constraintParameter) {
if (!(constraintParameter instanceof Boolean))
throw new IllegalArgumentException("Parameter for constraint ["
+ NAME + "] of property ["
+ constraintPropertyName + "] of class ["
+ constraintOwningClass + "] must be a boolean value");
this.validateConstraint = ((Boolean) constraintParameter).booleanValue()
super.setParameter(constraintParameter);
}
protected void processValidate(Object target, Object propertyValue, Errors errors) {
if (validateConstraint && !validate(target, propertyValue)) {
def args = (Object[]) [constraintPropertyName, constraintOwningClass,
propertyValue]
super.rejectValue(target, errors, DEFAULT_MESSAGE_CODE,
"not." + NAME, args);
}
}
boolean supports(Class type) {
return type != null && String.class.isAssignableFrom(type);
}
String getName() {
return NAME;
}
/**
* This is where the real work is. Use a regular expression to validate
* the phone number.
*
* The core logic of the constraint is implemented as its own method to make the
* constraint easier to test.
*/
boolean validate(target, propertyValue) {
propertyValue ==~ /^[01]?\s*[\(\.-]?(\d{3})[\)\.-]?\s*(\d{3})[\.-](\d{4})$/
}
}
The real work is in the validate function.
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.
Friday, June 13, 2008
BGG – Beginning Groovy and Grails – June 23
BGG is imminent. It is scheduled for release on June 23.
Here is a brief overview of the books structure.
Chapter 1 - Introduction to Groovy
This chapter defines Groovy, explains hot to install it, and then through example, demonstrates its power, flexibility, and readability compared to the Java language
Chapter 2 – Groovy Basics
This chapter explains the basic Groovy syntax, structures, and tools
Chapter 3 – More Advanced Groovy
This chapter goes beyond the Groovy basics to cover unit testing, XML processing, templating, and metaprograming. In includes a discussion on domain-specific languages (DSL).
Chapter 4 – Introduction to Grails
This chapter defines the Grails architecture and its features. It then explains how to install Grails and get started developing applications with scaffolding.
Chapter 5 – Building the User Interface
This chapter explains how to combine Groovy Server Pages (GSP), controllers, Grails tags, templates, and Cascading Style Sheets (CSS) to build a basic user interface.
Chapter 6 – Building Domains and Services
This chapter explains how Grails uses a domain-driven approach to developing applications and how domain objects can be persisted using the powerful Grails Object Relational Mapping (GORM) framework. The chapter concludes by showing how you organize application logic into reusable and injectable services.
Chapter 7 – Security in Grails
This chapter explains and demonstrates the alternative security options available in Grails.
Chapter 8 – Web 2.0 – Ajax and Friends
This chapter explains how to add usability to your application through adding Ajax functionality, searching, and RSS.
Chapter 9 – Web Services
This chapter shows how to expose parts of your application to other clients using representational state transfer (REST) web services.
Chapter 10 – Reporting
This chapter explains how to use JasperReports and iReports to expose reports in multiple formats, including PDF, HTML, XML, and XLS.
Chapter 11 – Batch Processing
This chapter showcases how to schedule jobs to run automatically and how to generate e-mail messages.
Chapter 12 – Deploying and Upgrading
This chapter describes how to configure, package, and deploy Grails applications to alternative database and application servers.
Chapter 13 – Alternative Clients
This chapter builds a Swing client using Groovy that interacts with the Grails application through the RESTful web services built in Chapter 9
You can order your copy from Amazon, Beginning Groovy and Grails
Wednesday, May 21, 2008
Beginning Groovy and Grails - New Book
You want to learn Groovy and Grails and don’t know where to start. The wait is almost over and your journey is about to begin. Beginning Groovy and Grails (BGG) is an ideal primer for learning Groovy and Grails.
BGG will take you from installation of Groovy and Grails all the way to developing a Collaborative Todo web application and a Groovy Swing user interface. Along the way, you will learn how to uses Web 2.0 and AJAX with Grails. You will explore 3 different security plugins. You will learn how use Jasper Reports and Quartz Plugin. You will develop RESTful web services. By the time you have completed your journey you will have a solid understanding of Groovy and Grails. You will be ready to start you’re your next assignment using Groovy and Grails.
Stay tuned to this Blog, . . . more information is coming. You can pre-order your copy of Beginning Groovy and Grails from Amazon.
Sunday, January 13, 2008
Groovy is a Better Java
At Code Mash, Neal Ford, Chris Judd, and I had a interesting chat about Groovy as a Better Java. The question that we came to ask : Is Groovy Java 3.0 or is it what JDK 2.0 should have been?
The one thing that we all agreed to is: Groovy is a Better Java.
What do you think?
Friday, December 28, 2007
Groovy Encode / Decode
Recently, I needed to encode and decode some information for a project I was working on. I wrote a quick little snippet to show encoding and decoding a string in the same program.
CODE:
def me = "Jim Shingler"
println "Me: ${me}"
// Encode it
def encoded = me.bytes.encodeBase64()
println "encoded: ${encoded}"
// because I need a string for decoding
StringWriter sw = new StringWriter()
encoded.writeTo(sw)
// Decode it
String decoded = new String(sw.toString().decodeBase64())
assert decoded == me
println "decoded: ${decoded}"
OUTPUT:
Me: Jim Shingler
encoded: SmltIFNoaW5nbGVy
decoded: Jim Shingler
Tuesday, December 11, 2007
Grails 1.1 RC3 - Released
Grails 1.1 RC-3 has been released and it includes Groovy 1.5.
Wow, This is really getting exciting.
You can download it at http://www.grails.org/Download
Sunday, December 2, 2007
Grails Exchange 2007 - Presentations posted
The Grails Exchange 2007 Presentations are Podcasts have been posted.
You can find it on the Grails Exchange site: http://grails-exchange.com/. (Just click on the sessions, you will find a PDF of the slides and google video.)
I have listed to many of the Podcasts, It looks like it was a really good conference. I wish I could have been there.
Check it out.
