Saturday, August 09, 2008

Visual words definition

Today I know the existence of this amazing page: Visuwords.
I think it is one of the most original things I can see in many time.

Thursday, August 07, 2008

Using JAXB to generate KML Java classes

Some days ago I write a post about using JAXB with the KML's XSD file.
Due to a comment I would like to write more explicitly how I generated the Java files.

First of all, what you need is the XSD files which defines the KML syntax (http://schemas.opengis.net/kml).
Also, you need the xjc utility, included in the JDK6 (or download the JAXB project files).

Uncompress the XSD zip file and go into the uncompressed folder. Execute:
xjc -xmlschema -verbose -extension ogckml22.xsd
and get an error similar to this:

[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 1058 of file:kml_files/ogckml22.xsd

[ERROR] (Related to above error) This is the other declaration.
line 255 of file:kml_files/ogckml22.xsd

[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 350 of file:kml_files/ogckml22.xsd

[ERROR] (Related to above error) This is the other declaration.
line 261 of file:kml_files/ogckml22.xsd


The problem is there are two scale elements defined, one like 'scale' and the other with upper case 'Scale'. And the same for the snippet element.
By default, JAXB uses case insensitive which will produce duplicated class names.

To resolve this there are some solutions. One is to customize the JAXB specifying the class name to be generated for some elements. The later is a workaround (that I used) that consist to change the name for one of the duplicated elements.
In line 255 change:




by




and in line 1391 chage:



by




The same for the snippet element.

Now you can re-execute the xjc command and a set of Java classes will be generated. The only difference is the change in the scale element which produces a different class name.

Sunday, July 27, 2008

Eastwood Charts

Today, via Dave Gilbert's blog, I know the existence of Eastwood Charts.

If you know about Google Chart API, Eastwood are the same thing but based in the powerful JFreeChart library. Here is a comparison.



The interesting part of Eastwood is it can be used as a servlet installed on your own server and thus you don't need to send your data to Google.

Remove too much files...

Sometimes (in Linux) if you try to delete all files in a directory (that contains a lot files) you get an:

> rm -rf * 
Argument list too long

Via DZone I found this tip to avoid this problem. Basically it used find command to get the list of interested files and remove it one by one.

Friday, July 18, 2008

JAXB for KML

Yesterday, I take a look at KML 2.2 specification.
To avoid create a million of classes to parse XML (KML) documents I put on my hands JAXB. After a while to resolve a duplicate element name (due to case insensitive in JAXB), finally I get a bunch of classes representing the KML element types.

After a couple of little test it seems is all right and now I need to spend some time (that I haven't) to integrate KML2.2 support into Balloon ;)

Thursday, July 17, 2008

Design Patterns

Today I would like to point to this post Design Patterns - Command Pattern.
Via DZone I can see David Cumps is written a series of post about design patterns.
Very interesting for all programmers.

Thursday, July 10, 2008

Quote

Everyone is as God has made him, and oftentimes a great deal worse.
Miguel de Cervantes
Spanish adventurer, author, & poet (1547 - 1616)

Friday, June 27, 2008

Working with time

It can seem trivial but sometimes working with time can become a real headache.
Here I present a short code snippet showing one common but confusing situation:
if you create two different Calendar objects and print it getting its Date and using 'println()' method they can seem the same.

Please read code comments which clarifies every situation.


import java.util.Calendar;
import java.util.TimeZone;

public class utc {

/**
* @param args
*/
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance(TimeZone
.getTimeZone("Europe/Madrid"));

Calendar c2 = (Calendar) c1.clone();
c2.setTimeZone(TimeZone.getTimeZone("UTC"));

// Print Calendars. By default the toString() Calendar method is called
// and gets a String version of the objects.
// As you can see the String version shows the time zone of the Calendar.
System.out.println("Cal1: " + c1);
System.out.println("Cal2: " + c2);

// Print the Date objects of each Calendar.
// Here the toString method of the Date objects are invoked and this method
// by default translates the Date to the default system timezone. Thus both Dates
// seems equal.
System.out.println("Cal1: " + c1.getTime());
System.out.println("Cal2: " + c2.getTime());

// Finally we get the value of HOUR, MINUTE and SECOND of each calendar and
// prints it on the screen.
int h1 = c1.get(Calendar.HOUR_OF_DAY);
int m1 = c1.get(Calendar.MINUTE);
int s1 = c1.get(Calendar.SECOND);

int h2 = c2.get(Calendar.HOUR_OF_DAY);
int m2 = c2.get(Calendar.MINUTE);
int s2 = c2.get(Calendar.SECOND);

System.out.println("Cal1: " + h1 + ":" + m1 + ":" + s1);
System.out.println("Cal2: " + h2 + ":" + m2 + ":" + s2);
}
}

Sunday, June 15, 2008

Why I like EJB3...

Today I would like to put a link to an Adam Bien post: Why I Like EJB 3.0 And Really Like EJB 3.1, that is a summary of EJB3 benefits.
You can achieve the same with other technologies, but EJB3 offers you the whole pack.

Wednesday, May 14, 2008

Using JPA in a web application

I usually work creating my entity data model classes using JPA and creating session beans (or stateless/web services beans) in an EJB module to acces this data. Later, I create a web/desktop application to access entities through the previous module.

But sometimes you need/want to do a more quickly/ugly job working with entities directly from your web application. For those (like me today ;)) I put here this link to a JEE5 blueprint named: Design Choices in a Web-only Application Using Java Persistence.
Among other things, It talks about using container or application managed entity managers.