Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • groovy-all 2.0.6
  • slf4j-api 1.7.2
  • slf4j-log4j12 1.7.2
  • jcl-over-slf4j 1.7.2
  • jul-to-slf4j 1.7.2
  • org.springframework.beans 3.1.2.RELEASE
  • org.springframework.context 3.1.2.RELEASE
  • org.springframework.context.support 3.1.2.RELEASE
  • org.springframework.core 3.1.2.RELEASE

Features

Buildtime

Developer Specific Configuration

There are two places where project specific configuration may be placed

Code Block
languagegroovy
$USER_HOME/.griffon/settings.groovy
griffon-app/conf/BuildConfig.groovy

The first is distribution wide (affects all projects) while the second is project specific. The first is never checked into SCM but the second may be. Where then, should a developer put specific configuration that only affects his or her environment without propagating those changes to the rest of the team? This is precisely the goal met by this feature, by reusing the global configuration file (settings.groovy) allowing a new configuration block where the keys are the name of the projects themselves, for example

Code Block
languagegroovy
projects {
   sample {
       griffon.cli.verbose = true
   }
   'custom-app' {
      griffon.'default'.artifact.repository = 'my-local'
   }
}

Runtime

I18N Aware Configuration

The application's runtime configuration is available through the config property of the application instance. This is a ConfigObject whose contents are obtained by merging Application.groovy and Config.groovy. Builder configuration is available through the builderConfig property and reflects the contents of Builder.groovy. Configuration files may also be provided as properties files; settings on the matching script will be overridden by those set in the properties file.

Configuration files are i18n aware which means you can append locale specific strings to a configuration file, for example Config_de_CH.groovy. Locale suffixes are resolved from least to most specific; for a locale with language = 'de', country = 'CH' and variant = 'Basel' the following files are loaded in order

  • Config.groovy
  • Config.properties
  • Config_de.groovy
  • Config_de.properties
  • Config_de_CH.groovy
  • Config_de_CH.properties
  • Config_de_CH_Basel.groovy
  • Config_de_CH_Basel.properties

By default the current Locale is used to determine values for language, country and variant; you can change this value by tweaking the application's locale.

I18N API

I18N support has been provided by the i18n plugin so far. Starting with this release the i18n API is now found in core. There's a new chapter in the Griffon Guide describing how messages can be configured and resolved.

Resource Management and Injection

Paired with I18N it's now possible to define resources that can be resolved and injected at boot time. For example

resources.properties

Code Block
languagegroovy
sample.SampleModel.griffonLogo = /griffon-logo-48x48.png
logo = /griffon-logo-{0}x{0}.png

SampleModel.groovy

Code Block
languagegroovy
package sample
import griffon.core.resources.InjectedResource
import javax.swing.Icon


class SampleModel {
    @InjectedResource Icon griffonLogo
    @InjectedResource(key='logo', args=['16']) Icon smallGriffonLogo
    @InjectedResource(key='logo', args=['64']) Icon largeGriffonLogo
}

The Griffon Guide includes a new chapter that describes all configuration options.

Toolkit Agnostic Action Manager

The actions plugin provides a mechanism that can harvest Controller actions and create a matching toolkit action (Swing based) on the group's builder. This behavior has been extended to support UI toolkits other than Swing, starting with JavaFX. The Griffon Guide includes a full description on how to setup this feature, or disable it if the occasion calls for it.

Fixes

Buildtime

Griffon command execution failure in Linux Mint

Default settings found on Linux Mint prevented the Griffon command from working properly as it contained bash specific code for verifying the location of $JAVA_HOME. Octavian Nita contributed a patch that makes use or standard shell instructions to accomplish the same goal.

Runtime

EventRouter spins up non-daemon thread

EventRouter makes use of an internal thread to dispatch events asynchrounously. Unfortunately this thread was not set as a daemon thread which resulted in JavaFX applications not exiting as expected. The thread is now marked as a daemon one.

Compatibility

The following plugins are now obsolete:

  • i18n
  • i18n-support
  • actions

...

New Commands

The following commands have been added

  • list-templates: displays a list of all available templates that can be used in the current project.
  • upload-release: uploads a release package to an artifact repository. This one differs from release as it expect the release package file to exist already, e.g. downloaded from a remote artifact repository.
  • wrapper: creates or updates files required by the Griffon wrapper command.

Toolkit Aware Plugin Install

Griffon supports several UI toolkits for which many plugins may exist. Some of these plugins provide the same behavior but targeting a different UI toolkit, for example miglayout (swing) vs. miglayout-javafx (javafx). Now, every Griffon application has a default UI toolkit specified in its metadata; this fact makes it possible to simplify plugin installation by only specifying the common plugin name, that is, the following command

Code Block
languagegroovy
griffon install-plugin miglayout

will install miglayout-javafx if the application has javafx defined as its UI toolkit. On the other hand, it will install miglayout if the UI toolkit is swing.

Usage Tracking

An opt-in usage tracking system has been put into place in order to monitor the development of the Griffon community and help drive the roadmap for future features. There's no personal information being recorded; usage tracking can be disabled/enabled at any time. Verifying the current status of usage tracking is done by invoking this command

Code Block
languagegroovy
griffon usage-stats

Enabling or disabling usage tracking is done with

Code Block
languagegroovy
griffon usage-stats --enabled=[true|false]

Usage tracking is turned off automatically if running in offline mode.

IDE Support

DSL descriptors for both Intellij IDEA and Eclipse have been updated to their latest compatible syntax.

Runtime

Service LifeCycle

Services now have their own life-cycle methods, similarly to their MVC counterparts. See the section Service LifeCycle for more information.

Service Configuration DSL

Services properties may now be configured externally to the service class, using a simple DSL. Refer to the Service Configuration DSL section to learn more.

External Configuration

Applications now have the ability to specify alternate locations for configuration files and scripts. Simply configure griffon.config.locations in Config.groovy, for example

Code Block
languagegroovy
griffon.config.locations = [
    "classpath:${appName}-config.properties",
    "classpath:${appName}-config.groovy",
    "file:${userHome}/.griffon/${appName}-config.properties",
    "file:${userHome}/.griffon/${appName}-config.groovy"]

Section External Configuration Support covers this feature in more detail.

New Application Events

Instances managed by the application (such as MVC members) will now trigger a DestroyInstance event when the instance is no longer needed. This event is the counterpart of NewInstance.

Compatibility

The following plugins need to be updated to their latest versions

  • dialogseclipse-support
  • spring
  • spock

Sample Applications

Griffon 1.12.0 ships with 8 sample applications of varying levels of complexity demonstrating various parts of the framework. In order of complexity they are:

...

To run the sample from source, change into the source directory and run griffon run-app from the command prompt.

Release Notes

1.

...

2.0

JIRA Issues
urlhttp://jira.codehaus.org/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?fixfor=1843018431&pid=11833&resolution=1&sorter/field=priority&sorter/order=DESC&sorter/field=issuekey&sorter/order=ASC&tempMax=1000