<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Towards better software &#187; groovy</title>
	<atom:link href="http://krzysztofadamczyk.com/tag/groovy/feed/" rel="self" type="application/rss+xml" />
	<link>http://krzysztofadamczyk.com</link>
	<description>About software development, domain driven design, code quality and IT in general</description>
	<lastBuildDate>Thu, 25 Aug 2011 06:26:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='krzysztofadamczyk.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Towards better software &#187; groovy</title>
		<link>http://krzysztofadamczyk.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://krzysztofadamczyk.com/osd.xml" title="Towards better software" />
	<atom:link rel='hub' href='http://krzysztofadamczyk.com/?pushpress=hub'/>
		<item>
		<title>First steps with Groovy</title>
		<link>http://krzysztofadamczyk.com/2009/11/27/first-steps-with-groovy/</link>
		<comments>http://krzysztofadamczyk.com/2009/11/27/first-steps-with-groovy/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 16:42:42 +0000</pubDate>
		<dc:creator>Krzysztof Adamczyk</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://krzysztofadamczyk.com/?p=27</guid>
		<description><![CDATA[Inspired by Scott Davies and his great talk during Java Developers&#8217; Day in Krakow I decided to try out Groovy. As a first step I want to create a running application which contains both Java and Groovy classes talking to each other. I&#8217;ll also take Scott&#8217;s idea to use a Geocoding RESTful web service to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=krzysztofadamczyk.com&amp;blog=20688394&amp;post=27&amp;subd=krzysztofadamczyk&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Inspired by Scott Davies and his great talk during <a href="http://09.jdd.org.pl/">Java Developers&#8217; Day</a> in Krakow I decided to try out Groovy. As a first step I want to create a running application which contains both Java and Groovy classes talking to each other. I&#8217;ll also take Scott&#8217;s idea to use a Geocoding RESTful web service to show how simple dealing with XML in Groovy is. So &#8211; let&#8217;s start.</p>
<ul>
<li><span style="font-size:14pt;"><strong>Step 0 &#8211; Download software</strong></span></li>
</ul>
<p><a href="http://groovy.codehaus.org/Download">Groovy</a>, <a href="http://groovy.codehaus.org/Eclipse+Plugin">Eclipse plug-in</a>,</p>
<ul>
<li><span style="font-size:14pt;"><strong>Step 1 &#8211; create Maven project with GMaven<br />
</strong></span></li>
</ul>
<p><strong>mvn archetype:generate</strong> <strong>-DarchetypeGroupId</strong>=org.codehaus.groovy.maven.archetypes <strong>-DarchetypeArtifactId</strong>=gmaven-archetype-basic <strong>-DarchetypeVersion</strong>=1.0-rc-5 <strong>-DgroupId</strong>=com.krzysztofadamczyk.playground.geocoder <strong>-DartifactId</strong>=geocoder<em></em></p>
<ul>
<li><span style="font-size:14pt;"><strong>Step 2 &#8211; build project &amp; import to Eclipse<br />
</strong></span></li>
</ul>
<p>Add &#8220;java&#8221; directories to both src/main and src/test directories</p>
<p><strong>mvn</strong> install</p>
<p><strong>mvn</strong> -Declipse.downloadSources <strong>eclipse:eclipse</strong></p>
<ul>
<li><span style="font-size:14pt;"><strong>Step 3 &#8211; implement domain class in Java</strong></span></li>
</ul>
<pre class="java">package com.krzysztofadamczyk.playground.geocoder.domain;

public class Location {

    private final double longitude;
    private final double latitude;

    public Location(final double longitude, final double latitude) {
        this.longitude = longitude;
        this.latitude = latitude;
    }

    public double getLongitude() {
        return this.longitude;
    }

    public double getLatitude() {
        return this.latitude;
    }

    public String toString() {
        return "Location [latitude=" + this.latitude + ", longitude=" + this.longitude + "]";
    }

}</pre>
<ul>
<li><span style="font-size:14pt;"><strong>Step 4 &#8211; </strong></span><span style="font-size:14pt;"><strong>implement web service client in Groovy</strong></span></li>
</ul>
<pre class="groovy">package com.krzysztofadamczyk.playground.geocoder

import com.krzysztofadamczyk.playground.geocoder.domain.Location
public class GroovyGeocoder{
	private final def BASEURL = "http://worldkit.org/geocoder/rest/?city=";

	public def Location getLocation(String city, String twoLetterCountryCode) {
		def wsAddress = BASEURL + city + "," + twoLetterCountryCode
		def geocoded = wsAddress.toURL().text
		def RDF = new XmlSlurper().parseText(geocoded)

		new Location(Double.valueOf(RDF.Point.long.text() ), Double.valueOf(RDF.Point.lat.text()))
	}

}</pre>
<ul>
<li><strong><span style="font-size:14pt;">Step 5 &#8211; Implement main class in Java</span></strong></li>
</ul>
<pre class="java">package com.krzysztofadamczyk.playground.geocoder.runner;

import com.krzysztofadamczyk.playground.geocoder.GroovyGeocoder;
import com.krzysztofadamczyk.playground.geocoder.domain.Location;

public class Runner {
    public static void main(final String[] args) {
        final GroovyGeocoder geocoder = new GroovyGeocoder();
        final Location location = geocoder.getLocation("Krakow", "PL");
        System.out.println(location);
    }

}</pre>
<p>Running this simple example produces the following output:</p>
<pre class="java">Location [latitude=50.0833333, longitude=19.9166667]</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/krzysztofadamczyk.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/krzysztofadamczyk.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/krzysztofadamczyk.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/krzysztofadamczyk.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/krzysztofadamczyk.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/krzysztofadamczyk.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/krzysztofadamczyk.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/krzysztofadamczyk.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=krzysztofadamczyk.com&amp;blog=20688394&amp;post=27&amp;subd=krzysztofadamczyk&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://krzysztofadamczyk.com/2009/11/27/first-steps-with-groovy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ef9affbd5f509bd5d4d1ac20cf4651aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">krzysztofadamczyk</media:title>
		</media:content>
	</item>
	</channel>
</rss>
