Adding GWT Geolocation support to Vaadin

If you're looking to add geolocation support to your Vaadin applications, I've whipped up a quick Vaadin widget to add support for the gwt-mobile-webkit Geolocation API feature.

I created a simple module in Eclipse with the Vaadin plugin and dropped the gwt-mobile-webkit Geolocation API feature into my project and worked up the server/client classes to pass back the longitude, latitude, and accuracy position information.

Here is some sample code demonstrating use in your application:

package org.vaadin.geolocation; 
import java.util.Date; 
import java.util.Map; 
import com.vaadin.Application; 
import com.vaadin.ui.Button; 
import com.vaadin.ui.Label; 
import com.vaadin.ui.Window; 
import com.vaadin.ui.Button.ClickEvent; 

public class GeolocationApplication extends Application { 
    private static final long serialVersionUID = 6180642880984113485L;
    private Geolocation geolocation; private Label currentLocation;
    
    @SuppressWarnings("serial")
    @Override public void init() { 
        Window mainWindow = new Window("Geolocation Application"); 
        // Add current location label 
        currentLocation = new Label("Unknown");
        mainWindow.addComponent(currentLocation); 

        // Add Geolocation support 
        geolocation = new Geolocation();
        mainWindow.addComponent(geolocation); 
        geolocation.addListener(new Geolocation.UpdateListener() {
            @Override public void locationUpdated(Geolocation geolocation) { 
                if(geolocation.isSupported()) { 
                    Map	pos = geolocation.getPosition(); 
                    double lat = pos.get("latitude"); 
                    double log = pos.get("longitude"); 
                    double acc = pos.get("accuracy");
                    currentLocation.setValue( "Lat: " + 
                        Double.toString(lat) + ", Long: " + 
                        Double.toString(log) + ", within " + 
                        Double.toString(acc) + " at " + 
                        new Date().toString()
                    ); 
                } else { 
                    currentLocation.setValue("Unsupported browser!"); 
                } 
        	}
    	});
        
        // Add refresh button 
        Button refresh = new Button(
            "Refresh", 
            new Button.ClickListener() { 
                @Override 
                public void buttonClick(ClickEvent event) { 							geolocation.getLocation(); 
                } 
            } 
        ); 
        mainWindow.addComponent(refresh); 
        setMainWindow(mainWindow); 
    } 
}

You can download the source here: org.vaadin.geolocation

You'll have to preview it on a browser with location services Firefox 3.5 or above.

This is about my second day of Vaadin development so please excuse and glaring bugs or missed best practices.

I used some of the examples for the Vaadin contrib repository to help springboard this undertaking and have to send thanks to the Vaadin forum users for their tips.

Any comments/suggestions are welcome below.