<?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/"
	>

<channel>
	<title>Another Random Developer Blog</title>
	<atom:link href="http://blog.jdevelop.eu/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jdevelop.eu</link>
	<description>Under development by Siegfried Bolz</description>
	<pubDate>Mon, 18 Jul 2011 21:22:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SBQueue - An Objective-C Queue for iOS 4.3</title>
		<link>http://blog.jdevelop.eu/2011/07/18/sbqueue-an-objective-c-queue-for-ios-43/</link>
		<comments>http://blog.jdevelop.eu/2011/07/18/sbqueue-an-objective-c-queue-for-ios-43/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 21:18:29 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[apple]]></category>

		<category><![CDATA[iphone development]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[nsqueue]]></category>

		<category><![CDATA[objective-c]]></category>

		<category><![CDATA[sbqueue]]></category>

		<category><![CDATA[unit tests]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=619</guid>
		<description><![CDATA[

Because of the missing NSQueue, i have developed my own Queue equivalent. You can download it for free there (click). I have added some Unit Tests to make sure the Queue is working.
Below you can see the List of supported Queue-Methods:

Using it is very simple, just initialize the SBQueue and add Objects to it:

#import &#34;SBQueue.h&#34;

SBQueue [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/iphonesimulator.png" alt="" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Because of the missing NSQueue, i have developed my own Queue equivalent. You can download it for free <a href="http://blog.jdevelop.eu/downloads/sbqueue/SBQueueProject.zip" onclick="javascript:pageTracker._trackPageview ('/downloads/zip/sbqueueproject.zip');">there (click)</a>. I have added some Unit Tests to make sure the Queue is working.</p>
<p>Below you can see the List of supported Queue-Methods:<br />
<div id="attachment_621" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.jdevelop.eu/uploads/2011/07/sbqueue_methods.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/07/sbqueue_methods-300x221.png" alt="SBQueue Methods" title="SBQueue Methods" width="300" height="221" class="size-medium wp-image-621" /></a><p class="wp-caption-text">SBQueue Methods</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Using it is very simple, just initialize the SBQueue and add Objects to it:</p>
<pre class="syntax-highlight:java">
#import &quot;SBQueue.h&quot;

SBQueue *queue = [[SBQueue alloc] initWithQueueSize:10];
[queue addObject:[[NSString alloc] initWithString:@&quot;Hello SBQueue&quot;]];
</pre>
<p>If you have some improvements, feel free to drop a line below.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/apple' rel='tag' target='_self'>apple</a>, <a class='technorati-link' href='http://technorati.com/tag/iphone+development' rel='tag' target='_self'>iphone development</a>, <a class='technorati-link' href='http://technorati.com/tag/mac' rel='tag' target='_self'>mac</a>, <a class='technorati-link' href='http://technorati.com/tag/nsqueue' rel='tag' target='_self'>nsqueue</a>, <a class='technorati-link' href='http://technorati.com/tag/objective-c' rel='tag' target='_self'>objective-c</a>, <a class='technorati-link' href='http://technorati.com/tag/sbqueue' rel='tag' target='_self'>sbqueue</a>, <a class='technorati-link' href='http://technorati.com/tag/unit+tests' rel='tag' target='_self'>unit tests</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2011/07/18/sbqueue-an-objective-c-queue-for-ios-43/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to create a Grails Web Service with a Selenium Test</title>
		<link>http://blog.jdevelop.eu/2011/05/16/how-to-create-a-grails-web-service-with-a-selenium-test/</link>
		<comments>http://blog.jdevelop.eu/2011/05/16/how-to-create-a-grails-web-service-with-a-selenium-test/#comments</comments>
		<pubDate>Mon, 16 May 2011 19:28:52 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[Grails]]></category>

		<category><![CDATA[intellij idea]]></category>

		<category><![CDATA[annotations]]></category>

		<category><![CDATA[contract last]]></category>

		<category><![CDATA[create]]></category>

		<category><![CDATA[cxf]]></category>

		<category><![CDATA[gui test]]></category>

		<category><![CDATA[jax-ws]]></category>

		<category><![CDATA[selenium]]></category>

		<category><![CDATA[soap]]></category>

		<category><![CDATA[test]]></category>

		<category><![CDATA[testing]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=595</guid>
		<description><![CDATA[

Table of contents


Introduction
Create the Application
Create the Selenium Test
Download
Conclusion



Introduction

For a Customer Project i had to write a SOAP Web Service (for Interaction with an iPhone App) and for Test Driven Development i needed an easy way to create some Tests. First, i wrote a JUnit Test. Ok it worked, but the problem is that it is [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/grails.png" alt="" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Table of contents<br />
<strong></strong></p>
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Create">Create the Application</a>
<li><a href="#Selenium">Create the Selenium Test</a>
<li><a href="#Download">Download</a></li>
<li><a href="#Conclusion">Conclusion</a></li>
</ul>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="Introduction" name="Introduction"></a>Introduction</strong><br />
<strong></strong><br />
For a Customer Project i had to write a SOAP Web Service (for Interaction with an iPhone App) and for Test Driven Development i needed an easy way to create some Tests. First, i wrote a JUnit Test. Ok it worked, but the problem is that it is not usable with Continuous Integration, because it can only be tested against a running Grails-App. So i decided to use the good old Selenium-Framework. </p>
<p>The Selenium-Framework starts the Grails-App (with the Server) and runs the Tests against it! Now i want to show you the (simple!) solution.</p>
<p>I am using Grails 1.3.7 .</p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Create" name="Create"></a>Create the Application</strong><br />
<strong></strong><br />
First, you have to add the Plugins &#8220;<strong><em>cxf</em></strong>&#8221; and &#8220;<strong><em>selenium-rc</em></strong>&#8221; to your project (in this example the project is named as &#8220;<strong><em>GrailsWebServiceWithSeleniumTest</em></strong>&#8220;. Here is my configuration-file:</p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong>application.properties</strong></p>
<pre class="syntax-highlight:xml">
app.grails.version=1.3.7
app.name=GrailsWebServiceWithSeleniumTest
app.servlet.version=2.4
app.version=0.1
plugins.cxf=0.7.0
plugins.hibernate=1.3.7
plugins.selenium-rc=1.0.2
plugins.tomcat=1.3.7
</pre>
<p>Add this line to your &#8220;<strong><em>BuildConfig.groovy</em></strong>&#8221; to resolve the correct Maven dependency for the &#8220;<em>Apache Httpclient commons</em>&#8220;.</p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong>BuildConfig.groovy</strong></p>
<pre class="syntax-highlight:xml">
runtime(&quot;commons-httpclient:commons-httpclient:3.1&quot;)
</pre>
<p><strong><span style="text-decoration: underline"></span></strong></p>
<p>Create the Service &#8220;<strong><em>eu.jdevelop.blog.MyTestService</em></strong>&#8221;  and insert this code:</p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong>MyTestService.groovy</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.blog

import javax.jws.WebParam
import javax.jws.WebResult
import javax.jws.WebService
import javax.jws.WebMethod

/**
 * Creates a Web Service with JAX-WS Annotations
 * URL: http://localhost:8080/GrailsWebServiceWithSeleniumTest/services/myTest?wsdl
 *
 * @author Siegfried Bolz
 */
@WebService(name = &quot;MyTestWebService&quot;, targetNamespace = &quot;eu.jdevelop.blog&quot;, serviceName = &quot;MyTestWebServiceName&quot;)
class MyTestService {

  // Using Plugin cxf
  static expose = ['cxfjax']

  /**
   * Web Service Operation
   *
   * @param firstName String
   * @param lastName String
   * @return message String
   */
  @WebResult(name = &quot;loginResult&quot;)
  @WebMethod(operationName = &quot;login&quot;)
  String login(@WebParam(name = &quot;firstname&quot;) String firstName, @WebParam(name = &quot;lastname&quot;) String lastName) {
    return &quot;Hello &quot; + firstName + &quot; &quot; + lastName
  }
}
</pre>
<p>This is the Web Service, using JAX-WS-Annotations for the Contract Last approach. As you can see, i declare everything with the Annotations. </p>
<p>Now start the Grails Application, you can browse to it at:<br />
<strong><span style="text-decoration: underline"></span></strong></p>
<pre class="syntax-highlight:java">
http://localhost:8080/GrailsWebServiceWithSeleniumTest/services/myTest?wsdl
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_610" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.jdevelop.eu/uploads/2011/05/wsdl.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/05/wsdl-300x221.png" alt="Created WSDL" title="Created WSDL" width="300" height="221" class="size-medium wp-image-610" /></a><p class="wp-caption-text">Created WSDL</p></div><br />
<strong><span style="text-decoration: underline"></span></strong></p>
<p>You can use Tools like &#8220;<strong><em>soapui</em></strong>&#8221; to create sample Requests for testing.</p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Selenium" name="Selenium"></a>Create the Selenium Test</strong><br />
<strong></strong><br />
The next step is to create the Selenium Test. In Grails there is now the new Directory &#8220;<strong><em>/test/selenium</em></strong>&#8220;. Create the file &#8220;<strong><em>eu.jdevelop.blog.MyTestServiceSeleniumTests.groovy</em></strong>&#8221;  and insert this:</p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong>MyTestServiceSeleniumTests.groovy</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.blog

import grails.plugins.selenium.SeleniumAware
import org.apache.commons.httpclient.HttpClient
import org.apache.commons.httpclient.methods.PostMethod
import org.apache.commons.httpclient.methods.StringRequestEntity

/**
 * Selenium-Test for the Web Service, uses Selenium for starting the Grails Server.
 *
 * @author Siegfried Bolz
 */
@Mixin(SeleniumAware)
class MyTestServiceSeleniumTests extends GroovyTestCase {

  void testLoginMethod() {
    selenium.open &quot;http://localhost:8080/GrailsWebServiceWithSeleniumTest/services/myTest?wsdl&quot;

    def url = &quot;http://localhost:8080/GrailsWebServiceWithSeleniumTest/services/myTest?wsdl&quot;

    def payload = &quot;&quot;&quot;
            &lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:eu=&quot;eu.jdevelop.blog&quot;&gt;
              &lt;soapenv:Header/&gt;
                &lt;soapenv:Body&gt;
                  &lt;eu:login&gt;
                    &lt;firstname&gt;Siegfried&lt;/firstname&gt;
                    &lt;lastname&gt;Bolz&lt;/lastname&gt;
                  &lt;/eu:login&gt;
                &lt;/soapenv:Body&gt;
            &lt;/soapenv:Envelope&gt;&quot;&quot;&quot;

    def method = new PostMethod(url)
    def client = new HttpClient()

    payload = payload.trim()
    method.addRequestHeader(&quot;Content-Type&quot;, &quot;text/xml&quot;)
    method.addRequestHeader(&quot;Accept&quot;, &quot;text/xml,application/xml;q=0.9&quot;)
    method.setRequestEntity(new StringRequestEntity(payload))
    def statusCode = client.executeMethod(method)
    println &quot;STATUS CODE : ${statusCode}&quot;

    assertEquals &quot;Status Code 200 expected&quot;, 200, statusCode

    def resultsString = method.getResponseBodyAsString()
    println resultsString

    assertTrue &quot;Result did not contain the expected result message&quot;, resultsString.contains(&quot;&lt;loginResult&gt;Hello Siegfried Bolz&lt;/loginResult&gt;&quot;)

    method.releaseConnection()
  }

}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong></p>
<p>To start the test, execute this command:</p>
<pre class="syntax-highlight:java">
test-app :selenium eu.jdevelop.blog.MyTestServiceSeleniumTests.testLoginMethod -echoOut
</pre>
<p>As VM parameters i recommend:</p>
<pre class="syntax-highlight:java">
-Xmx1024m -Xms1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:MaxPermSize=256m
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><div id="attachment_615" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.jdevelop.eu/uploads/2011/05/idea1.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/05/idea1-300x221.png" alt="Selenium Test in IDEA" title="Selenium Test in IDEA" width="300" height="221" class="size-medium wp-image-615" /></a><p class="wp-caption-text">Selenium Test in IDEA</p></div></p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Download" name="Download"></a>Download</strong><br />
<strong></strong><br />
A working example for Grails 1.3.7 and IntelliJ IDEA 10 is available <a href="http://blog.jdevelop.eu/downloads/grails_ws_with_selenium_test/GrailsWebServiceWithSeleniumTests.zip" onclick="javascript:pageTracker._trackPageview ('/downloads/zip/grailswebservicewithseleniumtests.zip');">here (click)</a></p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Conclusion" name="Conclusion"></a>Conclusion</strong><br />
<strong></strong><br />
As you can see, it is very simple to create a Web Service with a Selenium Test. If you have any comments, drop a line below.<br />
<strong></strong><br />
<strong></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/annotations' rel='tag' target='_self'>annotations</a>, <a class='technorati-link' href='http://technorati.com/tag/contract+last' rel='tag' target='_self'>contract last</a>, <a class='technorati-link' href='http://technorati.com/tag/create' rel='tag' target='_self'>create</a>, <a class='technorati-link' href='http://technorati.com/tag/cxf' rel='tag' target='_self'>cxf</a>, <a class='technorati-link' href='http://technorati.com/tag/Grails' rel='tag' target='_self'>Grails</a>, <a class='technorati-link' href='http://technorati.com/tag/gui+test' rel='tag' target='_self'>gui test</a>, <a class='technorati-link' href='http://technorati.com/tag/intellij+idea' rel='tag' target='_self'>intellij idea</a>, <a class='technorati-link' href='http://technorati.com/tag/jax-ws' rel='tag' target='_self'>jax-ws</a>, <a class='technorati-link' href='http://technorati.com/tag/selenium' rel='tag' target='_self'>selenium</a>, <a class='technorati-link' href='http://technorati.com/tag/soap' rel='tag' target='_self'>soap</a>, <a class='technorati-link' href='http://technorati.com/tag/test' rel='tag' target='_self'>test</a>, <a class='technorati-link' href='http://technorati.com/tag/testing' rel='tag' target='_self'>testing</a>, <a class='technorati-link' href='http://technorati.com/tag/tutorial' rel='tag' target='_self'>tutorial</a>, <a class='technorati-link' href='http://technorati.com/tag/web+service' rel='tag' target='_self'>web service</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2011/05/16/how-to-create-a-grails-web-service-with-a-selenium-test/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simple Validation-Framework for UITextField &#038; UITextView -Fields</title>
		<link>http://blog.jdevelop.eu/2011/04/30/simple-validation-framework-for-uitextfield-uitextview-fields/</link>
		<comments>http://blog.jdevelop.eu/2011/04/30/simple-validation-framework-for-uitextfield-uitextview-fields/#comments</comments>
		<pubDate>Sat, 30 Apr 2011 16:26:04 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[framework]]></category>

		<category><![CDATA[gui]]></category>

		<category><![CDATA[ipad]]></category>

		<category><![CDATA[objective-c]]></category>

		<category><![CDATA[uitextfield]]></category>

		<category><![CDATA[uitextview]]></category>

		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=571</guid>
		<description><![CDATA[

Table of contents


Introduction
How to use it
Download
Conclusion



Introduction

Validation of GUI-Components on an iPhone/iPad (iDevice) is not a simple task. The most common (stupid) way is to use a specific validation-method for every field. This is much boilerplate code which i want to avoid. So i have written a simple validation framework only for the UITextField and UITextView [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/iphonesimulator.png" alt="" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Table of contents<br />
<strong></strong></p>
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Howtouseit">How to use it</a>
<li><a href="#Download">Download</a></li>
<li><a href="#Conclusion">Conclusion</a></li>
</ul>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="Introduction" name="Introduction"></a>Introduction</strong><br />
<strong></strong><br />
Validation of GUI-Components on an iPhone/iPad (iDevice) is not a simple task. The most common (stupid) way is to use a specific validation-method for every field. This is much boilerplate code which i want to avoid. So i have written a simple validation framework only for the UITextField and UITextView -fields. Other components are following soon with a more advanced framework.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
So, what can my simple validation framework do? First, take a look at these pictures (click on each for fullsize):<br />
<strong><span style="text-decoration: underline"></span></strong></p>
<p><div id="attachment_573" class="wp-caption aligncenter" style="width: 378px"><a href="http://blog.jdevelop.eu/uploads/2011/04/screenshot1.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/04/screenshot1.png" alt="Some empty input fields" title="Some empty input fields" width="184" height="358" class="size-full wp-image-573" /></a><p class="wp-caption-text">Some empty input fields</p></div></p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
Now i insert some values and hit the &#8220;Validate&#8221;-Button.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>
<p><div id="attachment_578" class="wp-caption aligncenter" style="width: 378px"><a href="http://blog.jdevelop.eu/uploads/2011/04/screenshot2.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/04/screenshot2.png" alt="Validation errors" title="Validation errors" width="184" height="358" class="size-full wp-image-578" /></a><p class="wp-caption-text">Validation errors</p></div></p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
You see a Popup-Window with a summary of the found validation errors. After click on &#8216;ok&#8217; you see all fields with errors marked red.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>
<p><div id="attachment_584" class="wp-caption aligncenter" style="width: 378px"><a href="http://blog.jdevelop.eu/uploads/2011/04/screenshot3.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/04/screenshot3.png" alt="Fields with validation errors are marked red" title="Fields with validation errors are marked red" width="184" height="358" class="size-full wp-image-584" /></a><p class="wp-caption-text">Fields with validation errors are marked red</p></div></p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Howtouseit" name="Howtouseit"></a>How to use it</strong><br />
<strong></strong><br />
As the title of this posting said, it is very simple. First, drop the framework-class-files (header and implementation) into your project. These are:</p>
<ul>
<li>ValidationModel</li>
<li>Validator</li>
<li>ValidatorTextFieldProtocol</li>
<li>MyColors</li>
<li>EnhancedTextField</li>
<li>EnhancedTextView</li>
</ul>
<p>Then connect all of your UITextField and UITextView-fields with Outlets. After that you have to create for each of these fields a ValidationModel and store it into a NSMutableArray. You have to pass some parameters for the Validation. These are &#8216;<strong>Minimum char length</strong>&#8216;, &#8216;<strong>Maximum char length</strong>&#8216; and &#8216;<strong>Empty field allowed</strong>&#8216;.  Additionally you can specify a special error message, shown when the field is empty, to tell the User why and what he has to enter.</p>
<pre class="syntax-highlight:java">
- (void)viewDidLoad
{
  [super viewDidLoad];
  [self showTextView:self.view :comments];

  // Save all fields which you want to validate inside the 'propertiesList'
  propertiesList = [[NSMutableArray alloc] init];

  [propertiesList addObject:[[ValidationModel alloc] initWithValues:name :NO :@&quot;You have to insert a very important value!&quot; :2 :5]];
  [propertiesList addObject:[[ValidationModel alloc] initWithValues:street :YES :nil :0 :10]];
  [propertiesList addObject:[[ValidationModel alloc] initWithValues:comments :NO :nil :1 :5]];
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Now connect the Button, which activates the validation (or saves the data), with an Action. In this method you will instantiate the Validation-Engine and call the Validation-Method with the (previously created) ValidationModels-List. </p>
<pre class="syntax-highlight:java">
/**
 * This method is called when the User hits the 'Validate'-Button. It now
 * validates the TextFields/TextViews, previously assigned in the 'viewDidLoad'.
 */
- (IBAction)validateAction:(id)sender {
  // Initalize the Validator-Engine with standard error messages
  Validator *val = [[Validator alloc] initWithErrorMessages:@&quot;You have to insert %@ chars as a minimum!&quot; :@&quot;You have insert to much chars. Maximum are %@ chars&quot; :@&quot;Empty field is not allowed!&quot;];

  // Validate now! The return-value contains the error-messages with the corresponding fieldname
  NSMutableDictionary *resultErrorMap = [val validatePropertiesList:propertiesList];
  NSLog(@&quot;*** Received Error messages: %i&quot;, [resultErrorMap count]);

}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
That&#8217;s it! Your Validation-Framework is armed and ready for action! You can parse the &#8216;<strong>resultErrorMap</strong>&#8216; and show a splash screen with some infos about the errors (like in the first Screenshot above).</p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Download" name="Download"></a>Download</strong><br />
<strong></strong><br />
A working example for iOS 4.3 is available <a href="http://blog.jdevelop.eu/downloads/simplevalidationframework/simplevalidationframework.zip" onclick="javascript:pageTracker._trackPageview ('/downloads/zip/simplevalidationframework.zip');">here (click)</a></p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Conclusion" name="Conclusion"></a>Conclusion</strong><br />
<strong></strong><br />
This framework is very simple and easy to use. You can only validate the most common input-fields, but you have the ability to include other UITextField/UITextView-Implementations by using the &#8216;<strong>ValidatorTextFieldProtocol</strong>&#8216; (polymorphic stuff). I hope you can use it, drop a line in the comments what you think about it.<br />
<strong></strong><br />
I am currently working on an advanced framework which uses plugins to customize the validation for the other GUI-Components of the UIKit-Framework. So stay tuned!<br />
<strong></strong><br />
<strong></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/framework' rel='tag' target='_self'>framework</a>, <a class='technorati-link' href='http://technorati.com/tag/gui' rel='tag' target='_self'>gui</a>, <a class='technorati-link' href='http://technorati.com/tag/ipad' rel='tag' target='_self'>ipad</a>, <a class='technorati-link' href='http://technorati.com/tag/iPhone' rel='tag' target='_self'>iPhone</a>, <a class='technorati-link' href='http://technorati.com/tag/objective-c' rel='tag' target='_self'>objective-c</a>, <a class='technorati-link' href='http://technorati.com/tag/uitextfield' rel='tag' target='_self'>uitextfield</a>, <a class='technorati-link' href='http://technorati.com/tag/uitextview' rel='tag' target='_self'>uitextview</a>, <a class='technorati-link' href='http://technorati.com/tag/validation' rel='tag' target='_self'>validation</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2011/04/30/simple-validation-framework-for-uitextfield-uitextview-fields/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Read some interesting data from your iDevice with iOS 4.3</title>
		<link>http://blog.jdevelop.eu/2011/03/23/read-some-interesting-data-from-your-idevice-with-ios-43/</link>
		<comments>http://blog.jdevelop.eu/2011/03/23/read-some-interesting-data-from-your-idevice-with-ios-43/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 20:06:14 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[appstore]]></category>

		<category><![CDATA[imei]]></category>

		<category><![CDATA[iokit-extension]]></category>

		<category><![CDATA[ios 4.3]]></category>

		<category><![CDATA[objective-c]]></category>

		<category><![CDATA[phone number]]></category>

		<category><![CDATA[serial number]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=551</guid>
		<description><![CDATA[

Ever tried to read some interesting data like the Serial Number, IMEI, Phone Number&#8230; from your iPhone (or an other iDevice) ? Some data is easy to access, some other uses not supported API calls. I have written a simple App which can read the above mentioned data. You can download it here (click)

The App [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/iphonesimulator.png" alt="" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Ever tried to read some interesting data like the <em>Serial Number</em>, <em>IMEI</em>, <em>Phone Number</em>&#8230; from your iPhone (or an other iDevice) ? Some data is easy to access, some other uses not supported API calls. I have written a simple App which can read the above mentioned data. You can download it <a href="http://blog.jdevelop.eu/downloads/read_idevice_data/ReadIDeviceData.zip" onclick="javascript:pageTracker._trackPageview ('/downloads/zip/readidevicedata.zip');">here (click)</a><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>The App looks like this:</strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_557" class="wp-caption aligncenter" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2011/03/readidevicedatascreenshot.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2011/03/readidevicedatascreenshot.png" alt="ReadIDevice-App" title="ReadIDevice-App" width="320" height="480" class="size-full wp-image-557" target="_blank"/></a><p class="wp-caption-text">ReadIDevice-App</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Reading common data is very easy, this is the Code for the <em>UniqueIdentifier</em>, <em>iDevice Name</em>, <em>System Name</em>, <em>System Version</em> and <em>Model</em>:</p>
<pre class="syntax-highlight:java">
// Stores the complete Text Output
NSMutableString *data = [[NSMutableString alloc] init];

// Reading Legal Apple Data
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;phoneUniqueIdentifier&quot;, [[UIDevice currentDevice] uniqueIdentifier]]];
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;name&quot;, [[UIDevice currentDevice] name]]];
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;systemName&quot;, [[UIDevice currentDevice] systemName]]];
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;systemVersion&quot;, [[UIDevice currentDevice] systemVersion]]];
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;model&quot;, [[UIDevice currentDevice] model]]];
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;localizedModel&quot;, [[UIDevice currentDevice] localizedModel]]];
</pre>
<p>To access the IMEI and Serial Number you have to use the (semi)public IOKit framework. <a href="http://ericasadun.com/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/ericasadun.com');">Erica Sadun</a> has managed this and released the overwritten IOKit-Extension. I have included these files in my App and used it this way:</p>
<pre class="syntax-highlight:java">
#import &quot;UIDevice-IOKitExtensions.h&quot;

// Reading not by the Appstore supported Data
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;IMEI&quot;, [[UIDevice currentDevice] imei]]];
[data appendString:[NSString stringWithFormat: @&quot;%@: %@nn&quot;, @&quot;SerialNr&quot;, [[UIDevice currentDevice] serialnumber]]];
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
Be aware that you cannot submit an App with this IOKit-Extension into the Appstore!<br />
<strong><span style="text-decoration: underline"></span></strong><br />
Sadly, i found no solution for reading the Phone Number. In previous versions it was possible, but nevermore in iOS 4.3 . If someone has a solution, please drop a line in the comments.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/appstore' rel='tag' target='_self'>appstore</a>, <a class='technorati-link' href='http://technorati.com/tag/imei' rel='tag' target='_self'>imei</a>, <a class='technorati-link' href='http://technorati.com/tag/iokit-extension' rel='tag' target='_self'>iokit-extension</a>, <a class='technorati-link' href='http://technorati.com/tag/ios+4.3' rel='tag' target='_self'>ios 4.3</a>, <a class='technorati-link' href='http://technorati.com/tag/iPhone' rel='tag' target='_self'>iPhone</a>, <a class='technorati-link' href='http://technorati.com/tag/objective-c' rel='tag' target='_self'>objective-c</a>, <a class='technorati-link' href='http://technorati.com/tag/phone+number' rel='tag' target='_self'>phone number</a>, <a class='technorati-link' href='http://technorati.com/tag/serial+number' rel='tag' target='_self'>serial number</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2011/03/23/read-some-interesting-data-from-your-idevice-with-ios-43/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Use Generators to create boilerplate code in GWT 2.0</title>
		<link>http://blog.jdevelop.eu/2010/01/17/use-generators-to-create-boilerplate-code-in-gwt-20/</link>
		<comments>http://blog.jdevelop.eu/2010/01/17/use-generators-to-create-boilerplate-code-in-gwt-20/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 18:01:47 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[Google Web Toolkit]]></category>

		<category><![CDATA[annotation]]></category>

		<category><![CDATA[boilerplate code]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[field]]></category>

		<category><![CDATA[generate]]></category>

		<category><![CDATA[generators]]></category>

		<category><![CDATA[gwt 2.0]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[label]]></category>

		<category><![CDATA[labelfieldgenerator]]></category>

		<category><![CDATA[printwriter]]></category>

		<category><![CDATA[textbox]]></category>

		<category><![CDATA[textfieldgenerator]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=515</guid>
		<description><![CDATA[

Table of contents


Introduction
A simple Example
Launch the Application
Conclusion



Introduction

A very annoying point in GWT is to write the (same) code to create Widgets and set the Properties. Most lines are filled with these boilerplate code. GWT 2.0 has a solution for this, it is called Generators. Generators are classes that are invoked by the GWT compiler to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://code.google.com/intl/de-DE/webtoolkit/images/gwt-logo.png" alt="google web toolkit" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Table of contents<br />
<strong></strong></p>
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Example">A simple Example</a>
<li><a href="#launch">Launch the Application</a></li>
<li><a href="#Conclusion">Conclusion</a></li>
</ul>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="Introduction" name="Introduction"></a>Introduction</strong><br />
<strong></strong><br />
A very annoying point in GWT is to write the (same) code to create Widgets and set the Properties. Most lines are filled with these boilerplate code. GWT 2.0 has a solution for this, it is called <strong>Generators</strong>. Generators are classes that are invoked by the GWT compiler to generate a Java implementation of a class during compilation. Instead of writing:</p>
<pre class="syntax-highlight:java">
TextBox myTextBox = new TextBox();
myTextBox.setText(&quot;Hello World TextBox&quot;);
myTextBox.setName(&quot;blablubb&quot;);
myTextBox.setStyleName(&quot;ihatethis&quot;);
...
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
You can write this:</p>
<pre class="syntax-highlight:java">
@FormField(styleName = &quot;GWTstyleTextBox&quot;, parentAccessor = &quot;verticalPanel&quot;, defaultText= &quot;Hello World TextBox&quot;)
TextBox nameField;
</pre>
<p><strong><span style="text-decoration: underline"></span></strong></p>
<p>What has happened? The boilerplate code was replaced by an Annotation. First the Generator translates the Annotation into a Java class and after that the compiler creates the corresponding JavaScript-Code (very crazy i know). You can use Annotations for nearly everything, but this blog shows you how to create TextBox and Label -fields.</p>
<p><strong></strong><br />
<strong style="font-size: 1.3em"><a title="Example" name="Example"></a>A simple Example</strong><br />
<strong></strong><br />
First, take a look at <em>MyPanel.java</em>, where you can see the <strong>@FormField</strong>-Annotation in action, which generates code for a TextBox (<em>nameField</em>) and a Label (<em>labelField</em>). This is only working when the deferred binding mechanism <em>GWT.create()</em> is encountered while compiling.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>MyPanel.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import eu.jdevelop.gwt.anno.client.ui.forms.FormBinder;
import eu.jdevelop.gwt.anno.client.ui.forms.FormField;

/**
 * Component which contains an annotated TextField and LabelField
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public class MyPanel {

	// Create this in every annotated class to support Field-Annotations
	interface InternalFormBinder extends FormBinder&lt;MyPanel&gt; {}
	private static final InternalFormBinder formBinder = GWT.create(InternalFormBinder.class);

	// Parent (Store) for the annotated Fields
	final VerticalPanel verticalPanel = new VerticalPanel();

	// Create a LabelField
	@FormField(styleName = &quot;GWTstyleLabel&quot;, parentAccessor = &quot;verticalPanel&quot;, defaultText= &quot;Hello World Label&quot;)
	Label labelField;

	// Create a TextField
	@FormField(styleName = &quot;GWTstyleTextBox&quot;, parentAccessor = &quot;verticalPanel&quot;, defaultText= &quot;Hello World TextBox&quot;)
	TextBox nameField;

	public MyPanel() {
		// Bind this instance to the FormBinder
		formBinder.bind(this);
	}

	public VerticalPanel getPanel() {
		return verticalPanel;
	}
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
The <strong>FormField</strong>-Annotation has only 3 parameters, which are set on every Field. If you want specific parameters you can create more Annotations or enhance this one with an intelligent system to activate them.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>FormField.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.client.ui.forms;

import java.lang.annotation.*;

/**
 * Annotation for all Field-Types
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface FormField {
  String styleName() default &quot;&quot;;
  String parentAccessor();
  String defaultText() default &quot;&quot;;
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
The FormBinder-Interface is used for the deferred binding operation, the parameter can be accessed in the <em>FormBinderGenerator</em>-class.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>FormBinder.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.client.ui.forms;

import eu.jdevelop.gwt.anno.client.MyPanel;

/**
 * Simple Interface for binding operations
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public interface FormBinder&lt;T&gt; {

  // Make &quot;bind&quot; generic to support more components
  void bind(MyPanel component);
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
The Generators are creating the Java-files. I have splitted this operation in three main and two sub files. <em>BaseGenerator</em> is used to create an empty File with imports, <em>FormBinderGenerator</em> adds some default actions like <em>Field instantiation, setStyleName..</em> and implementations of <em>FieldGenerator</em> adds Field specific operations.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>BaseGenerator.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui;

import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JParameter;
import com.google.gwt.core.ext.typeinfo.NotFoundException;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.uibinder.rebind.IndentedWriter;

import java.io.PrintWriter;

/**
 * Create the Implementation-Class and add a basic header data for ALL
 * generated Annotations.
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public abstract class BaseGenerator extends Generator {
  protected static final String IMPORT = &quot;import %1$s;&quot;;
  protected static final String PACKAGE = &quot;package %s;&quot;;

  protected JClassType interfaceType(TypeOracle oracle, String s, TreeLogger treeLogger) throws UnableToCompleteException {
    JClassType interfaceType;
    try {
      interfaceType = oracle.getType(s);
    } catch (NotFoundException e) {
      treeLogger.log(TreeLogger.ERROR, String.format(&quot;%s: Could not find the interface [%s]. %s&quot;, e.getClass().getName(), s, e.getMessage()));
      throw new UnableToCompleteException();
    }
    return interfaceType;
  }

  @Override
  public String generate(TreeLogger treeLogger, GeneratorContext generatorContext, String s) throws UnableToCompleteException {
    JClassType interfaceType = interfaceType(generatorContext.getTypeOracle(), s, treeLogger);

    String packageName = interfaceType.getPackage().getName();
    PrintWriterManager writers = new PrintWriterManager(generatorContext, treeLogger, packageName);
    String implName = interfaceType.getName().replace(&quot;.&quot;, &quot;_&quot;) + &quot;Impl&quot;;
    PrintWriter printWriter = writers.tryToMakePrintWriterFor(implName);
    if (printWriter != null) {
      IndentedWriter writer = new IndentedWriter(printWriter);
      writer.write(String.format(PACKAGE, packageName));
      writer.newline();
      doGenerate(interfaceType, implName, writer);
      writers.commit();
    }
    return packageName + &quot;.&quot; + implName;
  }

  protected abstract void doGenerate(JClassType interfaceType, String implName, IndentedWriter writer);

  protected void writeClassIntro(JClassType interfaceType, String implName, IndentedWriter writer) {
    writer.write(&quot;public class %1$s implements %2$s {&quot;, implName, interfaceType.getName());
    writer.indent();
    writer.newline();
  }

  protected JParameter[] extractInterfaceMethodParams(JClassType interfaceType) {
    return interfaceType.getImplementedInterfaces()[0].getMethods()[0].getParameters();
  }

  protected void writeOutro(IndentedWriter writer) {
    writer.outdent();
    writer.write(&quot;}&quot;);
    writer.outdent();
    writer.write(&quot;}&quot;);
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>FormBinderGenerator.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui.forms.generator;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.core.ext.typeinfo.JParameter;
import com.google.gwt.uibinder.rebind.IndentedWriter;
import eu.jdevelop.gwt.anno.client.ui.forms.FormField;
import eu.jdevelop.gwt.anno.ui.BaseGenerator;

/**
 * Generate the Class-Framework for all Annotations
 * which are implementing the FormBinder-interface.
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public class FormBinderGenerator extends BaseGenerator {

  @Override
  protected void doGenerate(JClassType interfaceType, String implName, IndentedWriter writer) {
    JParameter[] methodParams = extractInterfaceMethodParams(interfaceType);
    writeImports(writer, methodParams);
    writeClassIntro(interfaceType, implName, writer);
    writeFieldsIntro(writer);
    writeMethodIntro(writer, methodParams);
    writeFieldsBinding(interfaceType, writer);
    writeOutro(writer);
  }

  /**
   * Generate default code for all generated Components
   *
   * @param interfaceType
   * @param writer
   */
  private void writeFieldsBinding(JClassType interfaceType, IndentedWriter writer) {
    for (JField jField : interfaceType.getEnclosingType().getFields()) {
      FormField annotation = jField.getAnnotation(FormField.class);
      if(annotation != null) {
        writer.write(&quot;component.%1$s = new %2$s();&quot;, jField.getName(), jField.getType().getQualifiedSourceName());
        writer.write(&quot;component.%1$s.setStyleName(&quot;%2$s&quot;);&quot;, jField.getName(), annotation.styleName());
        writer.write(&quot;GWT.log(&quot;Adding Field: %1$s of Type: %2$s to: %3$s&quot;,null);&quot;, jField.getName(), jField.getType().getQualifiedSourceName(), annotation.parentAccessor());
        writer.write(&quot;component.%1$s.add(component.%2$s);&quot;, annotation.parentAccessor(), jField.getName());
        FieldGeneratorFactory.getInstance().createFor(jField).write(jField, annotation, writer);
      }
    }
  }

  private void writeMethodIntro(IndentedWriter writer, JParameter[] parameters) {
    writer.write(&quot;public void bind(%1$s component) {&quot;, parameters[0].getType().getQualifiedSourceName());
    writer.indent();
  }

  private void writeFieldsIntro(IndentedWriter writer) {
    // nothing to do now
    writer.newline();
  }

  private void writeImports(IndentedWriter writer, JParameter[] parameters) {
    writer.write(IMPORT, GWT.class.getName());
    //writer.write(IMPORT, parameters[1].getType().getQualifiedSourceName());
    writer.newline();
  }

}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>FieldGenerator.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui.forms.generator;

import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.uibinder.rebind.IndentedWriter;
import eu.jdevelop.gwt.anno.client.ui.forms.FormField;

/**
 * Extend this abstract class to create a FieldGenerator.
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public abstract class FieldGenerator {
  public abstract void write(JField jField, FormField annotation, IndentedWriter writer);

}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
In this class i am adding a specific operation only for the <em>TextBox</em>.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>TextFieldGenerator.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui.forms.generator;

import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.uibinder.rebind.IndentedWriter;
import eu.jdevelop.gwt.anno.client.ui.forms.FormField;

/**
 * Generates additional Code only for the TextBox
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public class TextFieldGenerator extends FieldGenerator {

  @Override
  public void write(JField jField, FormField annotation, IndentedWriter writer) {
    writer.write(&quot;component.%1$s.setEnabled(true);&quot;, jField.getName());
    writer.write(&quot;component.%1$s.setText(&quot;%2$s&quot;);&quot;, jField.getName(), annotation.defaultText());
    writer.write(&quot;component.%1$s.setName(&quot;%1$s&quot;);&quot;, jField.getName());
  }

  private boolean isInstanceOf(JField jField, final Class&lt;?&gt; aClass) {
    try {
      return aClass.isAssignableFrom(Class.forName(jField.getType().getQualifiedSourceName(), false, this.getClass().getClassLoader()));
    } catch (ClassNotFoundException e) {
      throw new RuntimeException(e);
    }
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
In this class i am adding a specific operation only for the <em>Label</em>.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>LabelFieldGenerator.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui.forms.generator;

import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.uibinder.rebind.IndentedWriter;

import eu.jdevelop.gwt.anno.client.ui.forms.FormField;

/**
 * Generates additional Code only for the Label
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public class LabelFieldGenerator extends FieldGenerator {

	@Override
	public void write(JField jField, FormField annotation, IndentedWriter writer) {
		writer.write(&quot;component.%1$s.setText(&quot;%2$s&quot;);&quot;, jField.getName(), annotation.defaultText());
	}

	private boolean isInstanceOf(JField jField, final Class&lt;?&gt; aClass) {
		try {
			return aClass.isAssignableFrom(Class.forName(jField.getType()
					.getQualifiedSourceName(), false, this.getClass().getClassLoader()));
		} catch (ClassNotFoundException e) {
			throw new RuntimeException(e);
		}
	}
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
To create a relation between the Fields and the Generators, i am using the <em>FieldGeneratorFactory</em>.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>FieldGeneratorFactory.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui.forms.generator;

import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;

import java.util.HashMap;
import java.util.Map;

/**
 * Register all Generators.
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */

public class FieldGeneratorFactory {
  private static final FieldGeneratorFactory INSTANCE = new FieldGeneratorFactory();
  private static final Map&lt;String, FieldGenerator&gt; generators = new HashMap&lt;String, FieldGenerator&gt;();
  static {
    generators.put(TextBox.class.getName(), new TextFieldGenerator());
    generators.put(Label.class.getName(), new LabelFieldGenerator());
  }

  private FieldGeneratorFactory() {
  }

  public static FieldGeneratorFactory getInstance() {
    return INSTANCE;
  }

  public FieldGenerator createFor(JField jField) {
    String className = jField.getType().getQualifiedSourceName();
    FieldGenerator generator = generators.get(className);
    if(generator == null) {
      throw new IllegalArgumentException(&quot;Did not find any generator for the [&quot; + className +&quot;].&quot;);
    }
    return generator;
  }

}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
The last class is used to write the Java-Files.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>PrintWriterManager.java</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.ui;

import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;

import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;

/**
 * Write the generated Java files.
 *
 * @author Siegfried Bolz
 * @since 09.01.2010
 */
public class PrintWriterManager {
  private final GeneratorContext genCtx;
  private final String packageName;
  private final TreeLogger logger;
  private final Set&lt;PrintWriter&gt; writers = new HashSet&lt;PrintWriter&gt;();

  public PrintWriterManager(GeneratorContext genCtx, TreeLogger logger,
      String packageName) {
    this.genCtx = genCtx;
    this.packageName = packageName;
    this.logger = logger;
  }

  /**
   * Commit all writers we have vended.
   */
  public void commit() {
    for (PrintWriter writer : writers) {
      genCtx.commit(logger, writer);
    }
  }

  /**
   * @param name classname
   * @return the printwriter
   * @throws RuntimeException if this class has already been written
   */
  public PrintWriter makePrintWriterFor(String name) {
    PrintWriter writer = tryToMakePrintWriterFor(name);
    if (writer == null) {
      throw new RuntimeException(String.format(&quot;Tried to write %s.%s twice.&quot;, packageName, name));
    }
    return writer;
  }

  /**
   * @param name classname
   * @return the printwriter, or null if this class has already been written
   */
  public PrintWriter tryToMakePrintWriterFor(String name) {
    PrintWriter writer = genCtx.tryCreate(logger, packageName, name);
    if (writer != null) {
      writers.add(writer);
    }
    return writer;
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
The last thing to do, is to create the module-file <em>FormBinder.gwt.xml</em> and insert it into the project module file <em>GwtAnnotations.gwt.xml</em><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>FormBinder.gwt.xml</strong></p>
<pre class="syntax-highlight:xml">
&lt;module&gt;
    &lt;inherits name=&quot;com.google.gwt.resources.Resources&quot; /&gt;

    &lt;generate-with class=&quot;eu.jdevelop.gwt.anno.ui.forms.generator.FormBinderGenerator&quot;&gt;
        &lt;when-type-assignable class=&quot;eu.jdevelop.gwt.anno.client.ui.forms.FormBinder&quot; /&gt;
    &lt;/generate-with&gt;
&lt;/module&gt;
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
Here you can see the whole project opened in Eclipse.<br />
<div id="attachment_531" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2010/01/open_eclipse_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2010/01/open_eclipse_project-150x150.png" alt="Eclipse Project" title="Eclipse Project" width="150" height="150" class="size-thumbnail wp-image-531" /></a><p class="wp-caption-text">Open Eclipse Project</p></div><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="launch" name="launch"></a>Launch the Application</strong><br />
<strong></strong><br />
The compiled view is very simple, you can see only the generated Label and TextBox -Fields.<br />
<strong></strong><br />
<div id="attachment_529" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2010/01/browser_running.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2010/01/browser_running-150x150.png" alt="Launched Application in Chrome" title="Launched Application in Chrome" width="150" height="150" class="size-thumbnail wp-image-529" /></a><p class="wp-caption-text">Launched Application in Chrome</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Inside the Hosted Mode Debug Window, you can see some info dropped from the <em>FormBinderGenerator</em>.<br />
<strong></strong><br />
<div id="attachment_535" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2010/01/hostedmode_info_window.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2010/01/hostedmode_info_window-150x150.png" alt="Debug Window" title="Debug Window" width="150" height="150" class="size-thumbnail wp-image-535" /></a><p class="wp-caption-text">Debug Window</p></div><br />
<strong></strong><br />
This is the generated Java-file with the boilerplate code. Every line has been moved from the Project into this file. Imagine how many lines this file contains if you create 10, 100 or more Fields?<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>Generated MyPanel file</strong></p>
<pre class="syntax-highlight:java">
package eu.jdevelop.gwt.anno.client;

import com.google.gwt.core.client.GWT;

public class MyPanel_InternalFormBinderImpl implements MyPanel.InternalFormBinder {

  public void bind(eu.jdevelop.gwt.anno.client.MyPanel component) {
    component.labelField = new com.google.gwt.user.client.ui.Label();
    component.labelField.setStyleName(&quot;GWTstyleLabel&quot;);
    GWT.log(&quot;Adding Field: labelField of Type: com.google.gwt.user.client.ui.Label to: verticalPanel&quot;,null);
    component.verticalPanel.add(component.labelField);
    component.labelField.setText(&quot;Hello World Label&quot;);
    component.nameField = new com.google.gwt.user.client.ui.TextBox();
    component.nameField.setStyleName(&quot;GWTstyleTextBox&quot;);
    GWT.log(&quot;Adding Field: nameField of Type: com.google.gwt.user.client.ui.TextBox to: verticalPanel&quot;,null);
    component.verticalPanel.add(component.nameField);
    component.nameField.setEnabled(true);
    component.nameField.setText(&quot;Hello World TextBox&quot;);
    component.nameField.setName(&quot;nameField&quot;);
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="Conclusion" name="Conclusion"></a>Conclusion</strong><br />
<strong></strong><br />
Using Generators can help you to clean up your code by getting rid of boilerplate code. Don&#8217;t waste time by writing the same stuff, just generate it. One positive aspect is, that you have one point to make changes and don&#8217;t have to refactor the whole project. Ok you could use a factory with static methods (like <em>WidgetsCreatorHelper.createLabelField(String name, String styleName)</em> ), but this is old school and not so beautiful like Annotations.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/annotation' rel='tag' target='_self'>annotation</a>, <a class='technorati-link' href='http://technorati.com/tag/boilerplate+code' rel='tag' target='_self'>boilerplate code</a>, <a class='technorati-link' href='http://technorati.com/tag/eclipse' rel='tag' target='_self'>eclipse</a>, <a class='technorati-link' href='http://technorati.com/tag/field' rel='tag' target='_self'>field</a>, <a class='technorati-link' href='http://technorati.com/tag/generate' rel='tag' target='_self'>generate</a>, <a class='technorati-link' href='http://technorati.com/tag/generators' rel='tag' target='_self'>generators</a>, <a class='technorati-link' href='http://technorati.com/tag/gwt+2.0' rel='tag' target='_self'>gwt 2.0</a>, <a class='technorati-link' href='http://technorati.com/tag/Java' rel='tag' target='_self'>Java</a>, <a class='technorati-link' href='http://technorati.com/tag/label' rel='tag' target='_self'>label</a>, <a class='technorati-link' href='http://technorati.com/tag/labelfieldgenerator' rel='tag' target='_self'>labelfieldgenerator</a>, <a class='technorati-link' href='http://technorati.com/tag/printwriter' rel='tag' target='_self'>printwriter</a>, <a class='technorati-link' href='http://technorati.com/tag/textbox' rel='tag' target='_self'>textbox</a>, <a class='technorati-link' href='http://technorati.com/tag/textfieldgenerator' rel='tag' target='_self'>textfieldgenerator</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2010/01/17/use-generators-to-create-boilerplate-code-in-gwt-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Experiences with the migration from GWT 1.7.1 to 2.0</title>
		<link>http://blog.jdevelop.eu/2009/12/10/experiences-with-the-migration-from-gwt-171-to-20/</link>
		<comments>http://blog.jdevelop.eu/2009/12/10/experiences-with-the-migration-from-gwt-171-to-20/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 12:29:48 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[Google Web Toolkit]]></category>

		<category><![CDATA[compilation time]]></category>

		<category><![CDATA[draftcompile]]></category>

		<category><![CDATA[experience]]></category>

		<category><![CDATA[gin]]></category>

		<category><![CDATA[Guice]]></category>

		<category><![CDATA[gwt 1.7.1]]></category>

		<category><![CDATA[gwt 2.0]]></category>

		<category><![CDATA[gwt-log]]></category>

		<category><![CDATA[gxt]]></category>

		<category><![CDATA[migrating]]></category>

		<category><![CDATA[presenter]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=493</guid>
		<description><![CDATA[


With the release of GWT 2.0 there are several new features (like Code Splitting, Compiler improvements, faster development mode) introduced and i decided to make a test run on my current enterprise project to see what have changed in this points: 

Compilation time
API changes
Startup time of the new Development Mode
Problems with other libraries


My enterprise project [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://code.google.com/intl/de-DE/webtoolkit/images/gwt-logo.png" alt="google web toolkit" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
With the release of GWT 2.0 there are several new <a href="http://googlewebtoolkit.blogspot.com/2009/12/introducing-google-web-toolkit-20-now.html" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/googlewebtoolkit.blogspot.com');">features </a>(like Code Splitting, Compiler improvements, faster development mode) introduced and i decided to make a test run on my current enterprise project to see what have changed in this points: </p>
<ul>
<li>Compilation time</li>
<li>API changes</li>
<li>Startup time of the new Development Mode</li>
<li>Problems with other libraries</li>
</ul>
<p><strong><span style="text-decoration: underline"></span></strong><br />
My enterprise project currently needs 66 seconds to build 8 permutations and is using this technologies:</p>
<ul>
<li>GWT 1.7.1</li>
<li>GXT 2.1.0</li>
<li>GIN 1.0 (with Guice 2.0)</li>
<li>GWT-Presenter 1.0.0</li>
<li>GWT-Log 2.6.2</li>
<li>gwtrpc-spring 1.01</li>
<li>Spring Framework 2.5.6</li>
<li>Spring Security 2.0.5</li>
<li>Hibernate Libs 3.x (core, annotation, validator&#8230;)</li>
</ul>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.2em"><a title="project" name="project"></a>GWT 2.0</strong><br />
<strong></strong><br />
After i have replaced the old gwt-jar files with the new files, cleaned the project, i started the build target and launched the application. Here are the results:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.1em"><a title="com" name="com"></a>Compilation time</strong><br />
Without compiler optimization the build need 107 seconds for 8 permutations. Using the <em>draftCompile</em> parameter the build needs &#8220;only&#8221; 82 seconds. These are not the results i have awaited.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.1em"><a title="api" name="api"></a>API changes</strong><br />
Due to the fact that my build runs through without any errors or warnings, i think the major switch from listener to handler was done with the migration vom GWT 1.5 to 1.6 . So i think there aren&#8217;t any critical showstoppers waiting for me.</p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.1em"><a title="dev" name="dev"></a>Startup time of the new Development Mode</strong><br />
Changing from <em>com.google.gwt.dev.HostedMode</em> to <em>com.google.gwt.dev.DevMode</em> was a great speedup! Using any browser you want, instead of this old Hosted Mode-Browser is a useful improvement. I can strongly recommend google Chrome 4 with the new Speed Tracer for development.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.1em"><a title="lib" name="lib"></a>Problems with other libraries</strong><br />
In the technology-list above you can see that i use a wide range of gwt-technologies. I had some doubts about GXT, because i am using many widgets from it like the TabPanel, Drag and Drop, special Layouts, TreePanels, Accordion Window, Grids&#8230; , but i did not noticed any errors! I launched my Selenium-Tests many times and every result was green. The people from GXT have done a good job with the recently released version 2.1.0 .<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.1em"><a title="lib" name="lib"></a>Conclusion</strong><br />
Overall i think that migration could be possible with less effort if you have implemented an extensive test-suite. I see the most problems in Widget libraries like GXT, SmartGwt.. which are using <em>listeners</em> from API 1.5 .<br />
<strong><span style="text-decoration: underline"></span></strong><br />
If you have any comments, drop a line below.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/compilation+time' rel='tag' target='_self'>compilation time</a>, <a class='technorati-link' href='http://technorati.com/tag/draftcompile' rel='tag' target='_self'>draftcompile</a>, <a class='technorati-link' href='http://technorati.com/tag/experience' rel='tag' target='_self'>experience</a>, <a class='technorati-link' href='http://technorati.com/tag/gin' rel='tag' target='_self'>gin</a>, <a class='technorati-link' href='http://technorati.com/tag/Google+Web+Toolkit' rel='tag' target='_self'>Google Web Toolkit</a>, <a class='technorati-link' href='http://technorati.com/tag/Guice' rel='tag' target='_self'>Guice</a>, <a class='technorati-link' href='http://technorati.com/tag/gwt+1.7.1' rel='tag' target='_self'>gwt 1.7.1</a>, <a class='technorati-link' href='http://technorati.com/tag/gwt+2.0' rel='tag' target='_self'>gwt 2.0</a>, <a class='technorati-link' href='http://technorati.com/tag/gwt-log' rel='tag' target='_self'>gwt-log</a>, <a class='technorati-link' href='http://technorati.com/tag/gxt' rel='tag' target='_self'>gxt</a>, <a class='technorati-link' href='http://technorati.com/tag/migrating' rel='tag' target='_self'>migrating</a>, <a class='technorati-link' href='http://technorati.com/tag/presenter' rel='tag' target='_self'>presenter</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2009/12/10/experiences-with-the-migration-from-gwt-171-to-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fixed the Plugin &#8220;EclipseMode&#8221; for IntelliJ IDEA 9</title>
		<link>http://blog.jdevelop.eu/2009/12/01/fixed-the-plugin-eclipsemode-for-intellij-idea-9/</link>
		<comments>http://blog.jdevelop.eu/2009/12/01/fixed-the-plugin-eclipsemode-for-intellij-idea-9/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 22:39:36 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[intellij idea]]></category>

		<category><![CDATA[bug fixed]]></category>

		<category><![CDATA[eclipse mode]]></category>

		<category><![CDATA[EclipseMode]]></category>

		<category><![CDATA[incremental compilation]]></category>

		<category><![CDATA[intellij idea 9]]></category>

		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=472</guid>
		<description><![CDATA[


Update: Works perfectly with the new IDEA 10 ! Have a lot of fun with it :)


The IDEA-Plugin EclipseMode, originally developed by Alexey Efimov for the Java-IDE IntelliJ IDEA, is useful for activating incremental compilation (well-known from Eclipse). It is working fine for IDEA 8 but not for IDEA 9. So i have fixed a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/idea9betalogo.png" alt="" /><br />
<strong></strong><br />
<strong></strong></p>
<h2><strong><span style="color:red">Update: Works perfectly with the new IDEA 10 ! Have a lot of fun with it :)</span></strong></h2>
<p><strong></strong><br />
<strong></strong><br />
The IDEA-Plugin <strong>EclipseMode</strong>, originally developed by Alexey Efimov for the Java-IDE <a href="http://www.jetbrains.com/idea/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/www.jetbrains.com');">IntelliJ IDEA</a>, is useful for activating <strong>incremental compilation</strong> (well-known from Eclipse). It is working fine for IDEA 8 but not for IDEA 9. So i have fixed a bug in this plugin and it is now working with <strong>IDEA 9.0 Beta</strong> and <strong>IDEA 92.65</strong>.<br />
<strong></strong><br />
<strong><a name="project"></a>Installation</strong><br />
<strong></strong><br />
<a href="http://blog.jdevelop.eu/downloads/idea9_eclipse_plugin/EclipseMode_v0.1.2.zip" onclick="javascript:pageTracker._trackPageview ('/downloads/zip/eclipsemode_v0.1.2.zip');">Download</a> and extract the plugin-archive into the IDEA 9-Subdirectory <strong>plugins</strong>.<br />
<strong></strong></p>
<p><div id="attachment_473" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/12/bild1.png" target="_blank"><img class="size-thumbnail wp-image-473" title="Plugins-Directory" src="http://blog.jdevelop.eu/uploads/2009/12/bild1-150x150.png" alt="Plugins-Directory" width="150" height="150" /></a><p class="wp-caption-text">Plugins-Directory</p></div></p>
<p><strong></strong><br />
Start IDEA 9 and open the <strong>Application Settings</strong> (press STRG+ALT+S). Navigate to <strong>plugins</strong> and search there for <strong>EclipseMode</strong>. Activate it and restart IDEA.<br />
<strong></strong></p>
<p><div id="attachment_479" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/12/bild2.png" target="_blank"><img class="size-thumbnail wp-image-479" title="IDEA 9 Settings" src="http://blog.jdevelop.eu/uploads/2009/12/bild2-150x150.png" alt="IDEA 9 Settings" width="150" height="150" /></a><p class="wp-caption-text">IDEA 9 Settings</p></div></p>
<p><strong></strong><br />
Open again the <strong>Application Settings</strong> and you see inside the <strong>IDE Settings</strong> the new entry <strong>Eclipse Mode</strong>. Activate it.<br />
<strong></strong></p>
<p><div id="attachment_480" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/12/bild3.png" target="_blank"><img class="size-thumbnail wp-image-480" title="Enable incremental compilation" src="http://blog.jdevelop.eu/uploads/2009/12/bild3-150x150.png" alt="Enable incremental compilation" width="150" height="150" /></a><p class="wp-caption-text">Enable incremental compilation</p></div></p>
<p><strong></strong><br />
When you now change any class and save it, it will be immediately compiled. Errors are shown inside the Messages-Window.<br />
<strong></strong></p>
<p><div id="attachment_481" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/12/bild4.png" target="_blank"><img class="size-thumbnail wp-image-481" title="Plugin Example" src="http://blog.jdevelop.eu/uploads/2009/12/bild4-150x150.png" alt="Plugin Example" width="150" height="150" /></a><p class="wp-caption-text">Plugin Example</p></div></p>
<p><strong></strong><br />
That&#8217;s it. If you have any comments, drop a line below.<br />
<strong></strong><br />
<strong></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/bug+fixed' rel='tag' target='_self'>bug fixed</a>, <a class='technorati-link' href='http://technorati.com/tag/eclipse+mode' rel='tag' target='_self'>eclipse mode</a>, <a class='technorati-link' href='http://technorati.com/tag/EclipseMode' rel='tag' target='_self'>EclipseMode</a>, <a class='technorati-link' href='http://technorati.com/tag/incremental+compilation' rel='tag' target='_self'>incremental compilation</a>, <a class='technorati-link' href='http://technorati.com/tag/intellij+idea+9' rel='tag' target='_self'>intellij idea 9</a>, <a class='technorati-link' href='http://technorati.com/tag/plugin' rel='tag' target='_self'>plugin</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2009/12/01/fixed-the-plugin-eclipsemode-for-intellij-idea-9/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Create a GWT Application from Scratch</title>
		<link>http://blog.jdevelop.eu/2009/11/11/create-a-gwt-application-from-scratch/</link>
		<comments>http://blog.jdevelop.eu/2009/11/11/create-a-gwt-application-from-scratch/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 21:14:00 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[Google Web Toolkit]]></category>

		<category><![CDATA[NetBeans]]></category>

		<category><![CDATA[create project]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[gwt]]></category>

		<category><![CDATA[i18n]]></category>

		<category><![CDATA[import]]></category>

		<category><![CDATA[intellij idea]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=400</guid>
		<description><![CDATA[


Many people are asking (especially in the GWT Group) how to create a GWT Application for their favourite IDE. In this blog i will show you how to do this for Eclipse, NetBeans and IntelliJ IDEA.

Table of contents


Create the Project-files
Using Eclipse
Using NetBeans
Using IntelliJ IDEA



Create the Project-files

During my growing experience with GWT i learned that it [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/googlecode.png" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Many people are asking (especially in the <a href="http://groups.google.com/group/google-web-toolkit/topics" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/groups.google.com');">GWT Group</a>) how to create a GWT Application for their favourite IDE. In this blog i will show you how to do this for Eclipse, NetBeans and IntelliJ IDEA.</p>
<p><strong><span style="text-decoration: underline"></span></strong><br />
Table of contents<br />
<strong></strong></p>
<ul>
<li><a href="#project">Create the Project-files</a></li>
<li><a href="#eclipse">Using Eclipse</a>
<li><a href="#netbeans">Using NetBeans</a></li>
<li><a href="#idea">Using IntelliJ IDEA</a></li>
</ul>
<p><strong></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="project" name="project"></a>Create the Project-files</strong><br />
<strong></strong><br />
During my growing experience with GWT i learned that it is better to create the project from scratch and import it into the IDE rather then using a IDE-wizard which often creates not all files you need. So let&#8217;s start bei downloading the <a href="http://code.google.com/intl/de-DE/webtoolkit/download.html" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">Google Web Toolkit Archive</a> and extract it. Open a shell (Windows-User run &#8220;<strong>cmd</strong>&#8220;) and navigate to the directory where you have extracted the GWT-archive. Run the following commands:</p>
<ul>
<li>webAppCreator.cmd -out MyProjectDirectory eu.jdevelop.gwt.MyApp</li>
<li>i18nCreator.cmd -eclipse MyGwtProject -createMessages -out MyProjectDirectory eu.jdevelop.gwt.client.constants.i18n.MyLanguageConstants</li>
</ul>
<p>So what have you done? You have created a GWT-Project and added support for Eclipse and internationalization (i18n).<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_406" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/1_create_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/1_create_project-150x150.png" alt="Create the Project" title="Create the Project" width="150" height="150" class="aligncenter size-thumbnail wp-image-405" /></a><p class="wp-caption-text">Create the Project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Change into the created directory <strong>MyProjectDirectory </strong>and run the following commands to see that all is working:</p>
<ul>
<li>ant build</li>
<li>ant hosted</li>
</ul>
<p><div id="attachment_407" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/2_ant.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/2_ant-150x150.png" alt="Running Ant targets" title="Running Ant targets" width="150" height="150" class="aligncenter size-thumbnail wp-image-407" /></a><p class="wp-caption-text">Running Ant targets</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_408" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/3_hosted.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/3_hosted-150x150.png" alt="Hosted Mode" title="Hosted Mode" width="150" height="150" class="size-thumbnail wp-image-408" /></a><p class="wp-caption-text">Hosted Mode</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Well done, now it is time to import this project into your favourite IDE.<br />
<strong></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="eclipse" name="eclipse"></a>Using Eclipse</strong><br />
<strong></strong><br />
Open Eclipse (i am using version 3.5) and point it to an empty directory for your Workspace. In the menu open &#8220;<strong>Help</strong>&#8220;->&#8221;<strong>Install New Software</strong>&#8221; and install the <a href="http://code.google.com/intl/de-DE/eclipse/docs/download.html" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/code.google.com');">plugin</a> for your Eclipse version. Restart Eclipse after Installation.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_413" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/4_eclipse_plugin.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/4_eclipse_plugin-150x150.png" alt="Eclipse Plugin" title="Eclipse Plugin" width="150" height="150" class="size-thumbnail wp-image-413" /></a><p class="wp-caption-text">Eclipse Plugin</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Now import the previously created project. Click on &#8220;<strong>File</strong>&#8220;->&#8221;<strong>Import</strong>&#8220;:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_414" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/5_import.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/5_import-150x150.png" alt="Import GWT Project" title="Import GWT Project" width="150" height="150" class="size-thumbnail wp-image-414" /></a><p class="wp-caption-text">Import GWT Project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
..and select &#8220;<strong>General</strong>&#8220;->&#8221;<strong>Existing Projects into Workspace</strong>&#8220;.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_416" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/6_import_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/6_import_project-150x150.png" alt="Import project" title="Import project" width="150" height="150" class="size-thumbnail wp-image-416" /></a><p class="wp-caption-text">Import project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Choose the directory where your project is located. After importing, you should see something like this:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_418" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/7_eclipse_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/7_eclipse_project-150x150.png" alt="Eclipse with GWT-Project" title="Eclipse with GWT-Project" width="150" height="150" class="size-thumbnail wp-image-418" /></a><p class="wp-caption-text">Eclipse with GWT-Project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
At last you have to activate the GWT-Plugin. Open the project properties and navigate to &#8220;<strong>Google</strong>&#8220;->&#8221;<strong>Web Toolkit</strong>&#8220;. Activate the plugin. That&#8217;s it!<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_419" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/8_properties.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/8_properties-150x150.png" alt="Project properties" title="Project properties" width="150" height="150" class="size-thumbnail wp-image-419" /></a><p class="wp-caption-text">Project properties</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
You can use Ant targets or the Eclipse commands to run the application.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_420" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/9_run.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/9_run-150x150.png" alt="Launch the application" title="Launch the application" width="150" height="150" class="size-thumbnail wp-image-420" /></a><p class="wp-caption-text">Launch the application</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="netbeans" name="netbeans"></a>Using NetBeans</strong><br />
<strong></strong><br />
Using NetBeans and GWT is not very difficult. Here i am using NetBeans v6.7.1 . First open in the menu &#8220;<strong>Tools</strong>&#8220;->&#8221;<strong>Plugins</strong>&#8221; and install the <a href="http://gwt4nb.dev.java.net/" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/gwt4nb.dev.java.net');">GWT4NB</a>-Plugin.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_423" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/10_netbeans_plugin.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/10_netbeans_plugin-150x150.png" alt="Install the NetBeans Plugin" title="Install the NetBeans Plugin" width="150" height="150" class="size-thumbnail wp-image-423" /></a><p class="wp-caption-text">Install the NetBeans Plugin</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Create a new &#8220;<strong>Web Application</strong>&#8220;-Project:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_425" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/11_webapp.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/11_webapp-150x150.png" alt="Web Application" title="Web Application" width="150" height="150" class="size-thumbnail wp-image-425" /></a><p class="wp-caption-text">Web Application</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Choose a directory for it:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_426" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/12_directory.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/12_directory-150x150.png" alt="Directory" title="Directory" width="150" height="150" class="size-thumbnail wp-image-426" /></a><p class="wp-caption-text">Directory</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Select a Server:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_427" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/13_server.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/13_server-150x150.png" alt="Server" title="Server" width="150" height="150" class="size-thumbnail wp-image-427" /></a><p class="wp-caption-text">Server</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Select the &#8220;<strong>Google Web Toolkit</strong>&#8220;-Framework in the next page and insert in the &#8220;<strong>GWT Module</strong>&#8220;-Textfield this: &#8220;<strong>eu.jdevelop.gwt.MyApp</strong>&#8220;. Notice the missing &#8220;<strong>client</strong>&#8220;-subpackage? It will be automatically created by the GWT4NB-Plugin.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_428" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/14_framework.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/14_framework-150x150.png" alt="GWT Framework" title="GWT Framework" width="150" height="150" class="size-thumbnail wp-image-428" /></a><p class="wp-caption-text">GWT Framework</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
After that you will see the created project from the GWT4NB-Plugin:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_429" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/15_netbeans_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/15_netbeans_project-150x150.png" alt="GWT4NB Project" title="GWT4NB Project" width="150" height="150" class="size-thumbnail wp-image-429" /></a><p class="wp-caption-text">GWT4NB Project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
When you launch the application you can see that it is deployed into your previously selected Server:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_432" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/16_running_server.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/16_running_server-150x150.png" alt="Running in Tomcat" title="Running in Tomcat" width="150" height="150" class="size-thumbnail wp-image-432" /></a><p class="wp-caption-text">Running in Tomcat</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_433" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/17_chrome.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/17_chrome-150x150.png" alt="App in Chrome" title="App in Chrome" width="150" height="150" class="size-thumbnail wp-image-433" /></a><p class="wp-caption-text">App in Chrome</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Where is now the &#8220;<strong>hosted mode</strong>&#8221; ? To use it, only click on the <strong>Debug</strong>-Button in the menu. To use Ant-Targets you have to make some changes. First open the &#8220;<strong>project properties</strong>&#8221; and change the &#8220;<strong>web page folder</strong>&#8221; from &#8220;<strong>web</strong>&#8221; to &#8220;<strong>war</strong>&#8220;:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_434" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/18_war.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/18_war-150x150.png" alt="Change the directory" title="Change the directory" width="150" height="150" class="size-thumbnail wp-image-434" /></a><p class="wp-caption-text">Change the directory</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Open the file &#8220;<strong>build.xml</strong>&#8220;, located inside your GWT-Project (created in <a href="#project">Create the Project-files</a>):<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_436" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/19_original_buildxml.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/19_original_buildxml-150x150.png" alt="Original build.xml" title="Original build.xml" width="150" height="150" class="size-thumbnail wp-image-436" /></a><p class="wp-caption-text">Original build.xml</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Copy the content inside the &#8220;<strong>&lt;project&gt;&lt;/project&gt;</strong>&#8220;-tags and insert it into the &#8220;<strong>build.xml</strong>&#8220;-file, located in your NetBeans-Project directory:<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_437" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/20_changed_buildxml.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/20_changed_buildxml-150x150.png" alt="Changed build.xml" title="Changed build.xml" width="150" height="150" class="size-thumbnail wp-image-437" /></a><p class="wp-caption-text">Changed build.xml</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Replace all appearances of &#8220;<strong>src</strong>&#8221; with &#8220;<strong>src/java</strong>&#8220;, because source files are located in a different directory.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_440" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/21_replace_content.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/21_replace_content-150x150.png" alt="Search and replace" title="Search and replace" width="150" height="150" class="size-thumbnail wp-image-440" /></a><p class="wp-caption-text">Search and replace</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
You are now able to run the new ant targets &#8220;<strong>gwtc</strong>&#8221; and &#8220;<strong>hosted</strong>&#8220;:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_442" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/22_new_targets.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/22_new_targets-150x150.png" alt="new ant targets" title="new ant targets" width="150" height="150" class="size-thumbnail wp-image-442" /></a><p class="wp-caption-text">new ant targets</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
The last step is the integration of i18n. Copy the whole &#8220;<strong>&#8230;gwt-windows-1.7.1\MyProjectDirectory\src\eu\jdevelop\gwt\client\<em><span style="color: red">constants\</span></em></strong>&#8220;-directory into the corresponding directory of your NetBeans-project.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_445" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/23_i18n.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/23_i18n-150x150.png" alt="Copied content" title="Copied content" width="150" height="150" class="size-thumbnail wp-image-445" /></a><p class="wp-caption-text">Copied content</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Don&#8217;t forget to copy the file &#8220;<strong>MyLanguageConstants-i18n.cmd</strong>&#8220;, you need it to create the i18n-java-file! You have to open it in NetBeans and update the source-directory (there are two!) to &#8220;<strong>src/java</strong>&#8220;:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_446" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/24_i18nfile.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/24_i18nfile-150x150.png" alt="Edit the i18n-file" title="Edit the i18n-file" width="150" height="150" class="size-thumbnail wp-image-446" /></a><p class="wp-caption-text">Edit the i18n-file</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_448" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/25_netbeans_hostedmode.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/25_netbeans_hostedmode-150x150.png" alt="Hosted mode in NetBeans" title="Hosted mode in NetBeans" width="150" height="150" class="size-thumbnail wp-image-448" /></a><p class="wp-caption-text">Hosted mode in NetBeans</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong></strong><br />
<strong style="font-size: 1.3em"><a title="idea" name="idea"></a>Using IntelliJ IDEA</strong><br />
<strong></strong><br />
First create an empty directory (i am using &#8220;<strong>C:\Temp\IdeaGWT</strong>&#8221; in this example) and copy the contents from the created GWT-Project (&#8221;<strong>…gwt-windows-1.7.1\MyProjectDirectory</strong>&#8221; into it.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_451" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/26_ideagwt_directory.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/26_ideagwt_directory-150x150.png" alt="IDEA Project" title="IDEA Project" width="150" height="150" class="size-thumbnail wp-image-451" /></a><p class="wp-caption-text">IDEA Project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Open IDEA (i am using version 8.1.3) and click on &#8220;<strong>Create New Project</strong>&#8220;. Select &#8220;<strong>Import project from external model</strong>&#8220;:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_452" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/27_create_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/27_create_project-150x150.png" alt="Import project" title="Import project" width="150" height="150" class="size-thumbnail wp-image-452" /></a><p class="wp-caption-text">Import project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Follow now the next pictures and select the same options:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_453" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/28_select_eclipse.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/28_select_eclipse-150x150.png" alt="Select Eclipse" title="Select Eclipse" width="150" height="150" class="size-thumbnail wp-image-453" /></a><p class="wp-caption-text">Select Eclipse</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_454" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/29_eclipse_directory.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/29_eclipse_directory-150x150.png" alt="Eclipse directory" title="Eclipse directory" width="150" height="150" class="size-thumbnail wp-image-454" /></a><p class="wp-caption-text">Eclipse directory</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_455" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/30_choose_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/30_choose_project-150x150.png" alt="Choose project" title="Choose project" width="150" height="150" class="size-thumbnail wp-image-455" /></a><p class="wp-caption-text">Choose project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_456" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/31_same_directory.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/31_same_directory-150x150.png" alt="Use the same directory" title="Use the same directory" width="150" height="150" class="size-thumbnail wp-image-456" /></a><p class="wp-caption-text">Use the same directory</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_457" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/32_created_idea_project.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/32_created_idea_project-150x150.png" alt="Created IDEA project" title="Created IDEA project" width="150" height="150" class="size-thumbnail wp-image-457" /></a><p class="wp-caption-text">Created IDEA project</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Open the &#8220;<strong>Edit configurations</strong>&#8220;-screen and create a new &#8220;<strong>Tomcat Server</strong>&#8220;-configuration:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_459" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/33_tomcat_server.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/33_tomcat_server-150x150.png" alt="Tomcat Server" title="Tomcat Server" width="150" height="150" class="size-thumbnail wp-image-459" /></a><p class="wp-caption-text">Tomcat Server</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Click on the &#8220;<strong>FIX</strong>&#8220;-Button and choose your deployment source:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_460" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/34_fix_button.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/34_fix_button-150x150.png" alt="Fix the problem" title="Fix the problem" width="150" height="150" class="size-thumbnail wp-image-460" /></a><p class="wp-caption-text">Fix the problem</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
You can now launch the Tomcat Server and see your Application working.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_461" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/35_launched.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/35_launched-150x150.png" alt="Launched Tomcat" title="Launched Tomcat" width="150" height="150" class="size-thumbnail wp-image-461" /></a><p class="wp-caption-text">Launched Tomcat</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_462" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/36_tomcat_chrome.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/36_tomcat_chrome-150x150.png" alt="Tomcat and Chrome 4" title="Tomcat and Chrome 4" width="150" height="150" class="size-thumbnail wp-image-462" /></a><p class="wp-caption-text">Tomcat and Chrome 4</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Where is now the hosted mode? This famous question can be answered! Open on the right side of IDEA the &#8220;<strong>Ant Build</strong>&#8220;-Panel and add the &#8220;<strong>build.xml</strong>&#8221; -file. You will see all Ant targets and there you can launch &#8220;<strong>hosted</strong>&#8220;.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_464" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/11/37_hostedmode.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/11/37_hostedmode-150x150.png" alt="hosted mode target" title="hosted mode target" width="150" height="150" class="size-thumbnail wp-image-464" /></a><p class="wp-caption-text">hosted mode target</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
That&#8217;s it. If you have any improvements, drop a line below.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/create+project' rel='tag' target='_self'>create project</a>, <a class='technorati-link' href='http://technorati.com/tag/eclipse' rel='tag' target='_self'>eclipse</a>, <a class='technorati-link' href='http://technorati.com/tag/Google+Web+Toolkit' rel='tag' target='_self'>Google Web Toolkit</a>, <a class='technorati-link' href='http://technorati.com/tag/gwt' rel='tag' target='_self'>gwt</a>, <a class='technorati-link' href='http://technorati.com/tag/i18n' rel='tag' target='_self'>i18n</a>, <a class='technorati-link' href='http://technorati.com/tag/import' rel='tag' target='_self'>import</a>, <a class='technorati-link' href='http://technorati.com/tag/intellij+idea' rel='tag' target='_self'>intellij idea</a>, <a class='technorati-link' href='http://technorati.com/tag/NetBeans' rel='tag' target='_self'>NetBeans</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2009/11/11/create-a-gwt-application-from-scratch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Solve the circular reference problem with Guice and Spring</title>
		<link>http://blog.jdevelop.eu/2009/10/15/solve-the-circular-reference-problem-with-guice-and-spring/</link>
		<comments>http://blog.jdevelop.eu/2009/10/15/solve-the-circular-reference-problem-with-guice-and-spring/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 19:46:01 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[Guice]]></category>

		<category><![CDATA[Spring]]></category>

		<category><![CDATA[circular reference dependencies]]></category>

		<category><![CDATA[google guice]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=382</guid>
		<description><![CDATA[&#160;&#160;


The problem

Just imagine you run into a case where two objects are dependent on each other. The following picture and code snippet shows one such relationship.

Server.java

public class Server {
  private final Client client;

  public Server(Client client) {
  	this.client = client;
  }
}



Client.java

public class Client {
  private final Server server;

  public [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/googlecode.png" />&nbsp;&nbsp;<img src="http://blog.jdevelop.eu/uploads/spring.gif" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.3em"><a title="problem" name="problem"></a>The problem</strong><br />
<strong></strong><br />
Just imagine you run into a case where two objects are dependent on each other. The following picture and code snippet shows one such relationship.<br />
<div id="attachment_385" class="wp-caption aligncenter" style="width: 280px"><a href="http://blog.jdevelop.eu/uploads/2009/10/problem.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/10/problem.png" alt="Circular reference problem" title="Circular reference problem" width="270" height="191" class="size-full wp-image-385" /></a><p class="wp-caption-text">Circular reference problem</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>Server.java</strong></p>
<pre class="syntax-highlight:java">
public class Server {
  private final Client client;

  public Server(Client client) {
  	this.client = client;
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>Client.java</strong></p>
<pre class="syntax-highlight:java">
public class Client {
  private final Server server;

  public Client(Server server) {
  	this.server = server;
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
Both <strong>Server</strong> and <strong>Client</strong> refer to the same instances of each other, using Constructor-Injection. <strong>Server</strong> refers to <strong>Client</strong>, which refers back to <strong>Server</strong> in a circle.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.3em"><a title="springsolution" name="springsolution"></a>The solution for Spring</strong><br />
<strong></strong><br />
As you can see, you can&#8217;t directly use constructor wiring to make circular referents point to one another. To break the circularity without affecting the overall semantic of interdependence, is to introduce a <strong>proxy</strong>. First you have to decouple the <strong>Server</strong> and <strong>Client</strong> with interfaces.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>Server.java</strong></p>
<pre class="syntax-highlight:java">
public interface Server{
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>Client.java</strong></p>
<pre class="syntax-highlight:java">
public interface Client {
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>ServerImpl.java</strong></p>
<pre class="syntax-highlight:java">
public class ServerImpl implements Server {
  private final Client client;

  public ServerImpl(Client client) {
  	this.client = client;
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>ClientImpl.java</strong></p>
<pre class="syntax-highlight:java">
public class ClientImpl implements Client {
  private final Server server;

  public ClientImpl(Server server) {
  	this.server = server;
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
The dependencies of <strong>ServerImpl</strong> and <strong>ClientImpl</strong> are now on a contract (interface) of each other, rather than a concrete class. This is where the <strong>proxy</strong> comes in:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>ServerProxy.java</strong></p>
<pre class="syntax-highlight:java">
public class ServerProxy implements Server {
  private Server delegate;

  public void setDelegate(Server delegate) {
    this.delegate = delegate;
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
The <strong>ServerProxy</strong> is wired with setter injection, allowing <strong>ServerImpl</strong> and <strong>ClientImpl</strong> to declare their fields immutable and use constructor injection.<br />
<a href="http://blog.jdevelop.eu/uploads/2009/10/solution.png" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/10/solution.png" alt="solution" title="solution" width="269" height="246" class="aligncenter size-full wp-image-395" /></a><br />
<strong><span style="text-decoration: underline"></span></strong><br />
This is the corresponding Spring-Configuration:<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>applicationContext.xml</strong></p>
<pre class="syntax-highlight:xml">
&lt;beans&gt;
		&lt;bean id=&quot;serverProxy&quot; class=&quot;ServerProxy&quot;&gt;
				&lt;property name=&quot;delegate&quot; ref=&quot;host&quot; /&gt;
	  &lt;/bean&gt;

	  &lt;bean id=&quot;server&quot; class=&quot;ServerImpl&quot;&gt;
				&lt;constructor-arg ref=&quot;client&quot;/&gt;
	  &lt;/bean&gt;

	  &lt;bean id=&quot;client&quot; class=&quot;ClientImpl&quot;&gt;
				&lt;constructor-arg ref=&quot;serverProxy&quot;/&gt;
	  &lt;/bean&gt;
&lt;/beans&gt;
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong style="font-size: 1.3em"><a title="guicesolution" name="guicesolution"></a>The solution for Guice</strong><br />
<strong></strong><br />
Solving the circular reference problem with Guice is similar to Spring. All you need is to configure your bindings.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong>MyModule.java</strong></p>
<pre class="syntax-highlight:java">
public class MyModule extends AbstractModule {

  @Override
  public void configure() {
    bind(Server.class).to(ServerImpl.class).in(Singleton.class);
    bind(Client.class).to(ClientImpl.class).in(Singleton.class);
  }
}
</pre>
<p><strong><span style="text-decoration: underline"></span></strong><br />
The Guice injector automatically provides the proxy so that the correct order of the construction would be guaranteed.<br />
<strong><span style="text-decoration: underline"></span></strong><br />
That&#8217;s it <img src="http://blog.jdevelop.eu/uploads/smilies/smile.gif" alt="smile" /><br />
<strong></strong><br />
<strong></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/circular+reference+dependencies' rel='tag' target='_self'>circular reference dependencies</a>, <a class='technorati-link' href='http://technorati.com/tag/google+guice' rel='tag' target='_self'>google guice</a>, <a class='technorati-link' href='http://technorati.com/tag/Java' rel='tag' target='_self'>Java</a>, <a class='technorati-link' href='http://technorati.com/tag/Spring' rel='tag' target='_self'>Spring</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2009/10/15/solve-the-circular-reference-problem-with-guice-and-spring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NetBeans RSS Reader - My first iPhone application released !</title>
		<link>http://blog.jdevelop.eu/2009/05/26/netbeans-rss-reader-my-first-iphone-application-released/</link>
		<comments>http://blog.jdevelop.eu/2009/05/26/netbeans-rss-reader-my-first-iphone-application-released/#comments</comments>
		<pubDate>Tue, 26 May 2009 13:12:50 +0000</pubDate>
		<dc:creator>Siegfried Bolz</dc:creator>
		
		<category><![CDATA[NetBeans]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[app store]]></category>

		<category><![CDATA[free app]]></category>

		<category><![CDATA[glassfish feed]]></category>

		<category><![CDATA[netbeans feed]]></category>

		<category><![CDATA[rss reader]]></category>

		<guid isPermaLink="false">http://blog.jdevelop.eu/?p=293</guid>
		<description><![CDATA[&#160;&#160;


I have developed and released my first iPhone Application in the iTunes-Store for free, it is an RSS Feed Reader for the following two feeds:

NetBeans.org
http://blogs.sun.com/theaquarium/

Now you can read the latest infos when you are on the road 


This application has the following functionalities:

Read the message-description inside the application
Open the message-url inside the application or with [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jdevelop.eu/uploads/2009/05/rsslogoohnehintergrund.png" alt="netbeansrssreaderlogo" title="netbeansrssreaderlogo" width="69" height="64" class="alignnone size-full wp-image-372" />&nbsp;&nbsp;<img src="http://blog.jdevelop.eu/uploads/2009/05/iphone.gif" alt="iphone" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
I have developed and released my first iPhone Application in the iTunes-Store for free, it is an RSS Feed Reader for the following two feeds:</p>
<ul>
<li>NetBeans.org</li>
<li>http://blogs.sun.com/theaquarium/</li>
</ul>
<p>Now you can read the latest infos when you are on the road <img src="http://blog.jdevelop.eu/uploads/smilies/smile.gif" alt="" /><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
This application has the following functionalities:</p>
<ul>
<li>Read the message-description inside the application</li>
<li>Open the message-url inside the application or with the safari browser</li>
<li>The possibility to the change the two Feed-URLs</li>
</ul>
<p><strong><span style="text-decoration: underline"></span></strong><br />
You can download this application for free&nbsp;&nbsp;<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=315960147" target="_blank" onclick="javascript:pageTracker._trackPageview ('/outbound/itunes.apple.com');"><img src="http://blog.jdevelop.eu/uploads/appstore.png" alt="" /></a><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong><br />
Here are some screenshots<br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_31x" class="wp-caption alignnone" style="width: 160px"><a href="http://blog.jdevelop.eu/uploads/2009/05/das-programmicon.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/das-programmicon.jpg" alt="program icon" title="program icon" width="320" height="480" class="size-thumbnail wp-image-313" /></a><p class="wp-caption-text">Program Icon</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_351" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/der-netbeans-feed.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/der-netbeans-feed.jpg" alt="The NetBeans-Feed" title="The NetBeans-Feed" width="320" height="480" class="size-full wp-image-351" /></a><p class="wp-caption-text">The NetBeans-Feed</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_352" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/beschreibung-einer-nachricht-ansehen.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/beschreibung-einer-nachricht-ansehen.jpg" alt="Read the Message Description" title="Read the Message Description" width="320" height="480" class="size-full wp-image-352" /></a><p class="wp-caption-text">Read the Message Description</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_357" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/nachricht-wird-geladen.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/nachricht-wird-geladen.jpg" alt="Loading the News inside the app" title="Loading the News inside the app" width="320" height="480" class="size-full wp-image-357" /></a><p class="wp-caption-text">Loading News inside the app</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_358" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/nachricht-ist-geladen-in-der-anwendung.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/nachricht-ist-geladen-in-der-anwendung.jpg" alt="News loaded inside the app" title="News loaded inside the app" width="320" height="480" class="size-full wp-image-358" /></a><p class="wp-caption-text">News loaded inside the app</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_360" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/the-aquarium-feed-uebersicht.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/the-aquarium-feed-uebersicht.jpg" alt="The Aquarium Feed" title="The Aquarium Feed" width="320" height="480" class="size-full wp-image-360" /></a><p class="wp-caption-text">The Aquarium Feed</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_361" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/die-einstellungen.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/die-einstellungen.jpg" alt="The Settings View" title="The Settings View" width="320" height="480" class="size-full wp-image-361" /></a><p class="wp-caption-text">The Settings View</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_363" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/aendern-der-netbeans-feed-url.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/aendern-der-netbeans-feed-url.jpg" alt="Change Feed-URL" title="Change Feed-URL" width="320" height="480" class="size-full wp-image-363" /></a><p class="wp-caption-text">Change Feed-URL</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_364" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/restore-default-settings.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/restore-default-settings.jpg" alt="Restore default Settings" title="Restore default Settings" width="320" height="480" class="size-full wp-image-364" /></a><p class="wp-caption-text">Restore default Settings</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<div id="attachment_365" class="wp-caption alignnone" style="width: 330px"><a href="http://blog.jdevelop.eu/uploads/2009/05/about-screen.jpg" target="_blank"><img src="http://blog.jdevelop.eu/uploads/2009/05/about-screen.jpg" alt="About View" title="About View" width="320" height="480" class="size-full wp-image-365" /></a><p class="wp-caption-text">About View</p></div><br />
<strong><span style="text-decoration: underline"></span></strong><br />
<strong><span style="text-decoration: underline"></span></strong></p>

<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/app+store' rel='tag' target='_self'>app store</a>, <a class='technorati-link' href='http://technorati.com/tag/free+app' rel='tag' target='_self'>free app</a>, <a class='technorati-link' href='http://technorati.com/tag/glassfish+feed' rel='tag' target='_self'>glassfish feed</a>, <a class='technorati-link' href='http://technorati.com/tag/iPhone' rel='tag' target='_self'>iPhone</a>, <a class='technorati-link' href='http://technorati.com/tag/netbeans+feed' rel='tag' target='_self'>netbeans feed</a>, <a class='technorati-link' href='http://technorati.com/tag/rss+reader' rel='tag' target='_self'>rss reader</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://blog.jdevelop.eu/2009/05/26/netbeans-rss-reader-my-first-iphone-application-released/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.816 seconds -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-21 03:37:11 -->
<!-- Compression = gzip -->
