IGoogleAnalytics.java
package com.itmill.toolkit.demo.sampler.gwt.client.ui;

import com.google.gwt.dom.client.Document;
import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
import com.itmill.toolkit.terminal.gwt.client.BrowserInfo;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;

public class IGoogleAnalytics extends Widget implements Paintable {

    public IGoogleAnalytics() {
        setElement(Document.get().createDivElement());
        if (BrowserInfo.get().isIE6()) {
            getElement().getStyle().setProperty("overflow""hidden");
            getElement().getStyle().setProperty("height""0");
            getElement().getStyle().setProperty("width""0");
        }
    }

    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
        if (isLocalHostUrl()) {
            // Do not track localhost page views
            return;
        }
        String trackerId = uidl.getStringAttribute("trackerid");
        String pageId = uidl.getStringAttribute("pageid");
        String domainName = uidl.getStringAttribute("domain");

        String res = trackPageview(trackerId, pageId, domainName);
        if (null != res) {
            ApplicationConnection.getConsole().log(
                    "WebAnalytics.trackPageview(" + trackerId + "," + pageId
                            "," + domainName + ") FAILED: " + res);
        else {
            ApplicationConnection.getConsole().log(
                    "WebAnalytics.trackPageview(" + trackerId + "," + pageId
                            "," + domainName + ") SUCCESS.");
        }
    }

    private native boolean isLocalHostUrl()
    /*-{
        var location = $wnd.location;
        var re = /^http:\/\/(localhost|127.0.0.1)/;
        return re.test(location);
    }-*/;

    private native String trackPageview(String trackerId, String pageId,
            String domainName)
    /*-{
        if (!$wnd._gat) {
            return "Tracker not found (running offline?)";
        }
        try {
            var pageTracker = $wnd._gat._getTracker(trackerId);
            if (domainName) {
                pageTracker._setDomainName(domainName);
            }
            if (pageId) {
                pageTracker._trackPageview(pageId);
            } else {
                pageTracker._trackPageview();
            }
            return null;
        } catch(err) {
            return ""+err;
        }
    }-*/;
}