com.denormans.googleanalyticsgwt.api.GoogleAnalytics.java Source code

Java tutorial

Introduction

Here is the source code for com.denormans.googleanalyticsgwt.api.GoogleAnalytics.java

Source

/*
 * Copyright (c) 2012 deNormans
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.denormans.googleanalyticsgwt.api;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.ScriptElement;
import com.google.gwt.user.client.Window;

import javax.annotation.Nullable;

public final class GoogleAnalytics extends JavaScriptObject {
    private static boolean IsAlreadyInjected = false;

    /* Must have zero-arg constructor */
    protected GoogleAnalytics() {
    }

    public static void init() {
        injectAnalytics(null);
    }

    public static void init(String defaultTrackerID) {
        injectAnalytics(defaultTrackerID);
    }

    private static boolean isSSL() {
        if (Window.Location.getProtocol().equals("https:")) {
            return true;
        }
        return false;
    }

    private static boolean injectAnalytics(@Nullable final String defaultTrackerID) {
        if (defaultTrackerID != null) {
            setupDefaultTrackerID(defaultTrackerID);
        }

        if (IsAlreadyInjected) {
            return true;
        }

        IsAlreadyInjected = true;

        boolean isAlreadyLoaded = get() != null;
        if (isAlreadyLoaded) {
            return true;
        }

        String src;
        if (isSSL()) {
            src = "https://ssl.google-analytics.com/ga.js";
        } else {
            src = "http://www.google-analytics.com/ga.js";
        }

        Document doc = Document.get();
        ScriptElement script = doc.createScriptElement();
        script.setSrc(src);
        script.setType("text/javascript");
        script.setAttribute("async", "true");

        doc.getBody().appendChild(script);

        return false;
    }

    private static native void setupDefaultTrackerID(final String defaultTrackerID) /*-{
                                                                                    $wnd._gaq = $wnd._gaq || [];
                                                                                    $wnd._gaq.push(['_setAccount', defaultTrackerID]);
                                                                                    }-*/;

    /**
     * Return the Google Analytics API
     *
     * @return The API if available, otherwise <tt>null</tt>
     */
    public static native GoogleAnalytics get() /*-{
                                               return $wnd._gat;
                                               }-*/;

    /**
     * Creates a page tracker with the given ID.
     *
     * @param trackerID The tracker ID
     * @return A new page tracker with the given ID, if any
     *
     * @deprecated Use {@link #createTracker(String, String)} or {@link #withTracker(String, AsyncTrackerCommand)} instead
     */
    @Deprecated
    public synchronized static GoogleAnalyticsTracker getTracker(final String trackerID) {
        final GoogleAnalytics googleAnalytics = get();
        if (googleAnalytics == null) {
            return null;
        }

        return googleAnalytics.getTrackerJS(trackerID);
    }

    private native GoogleAnalyticsTracker getTrackerJS(final String trackerID) /*-{
                                                                               return this._getTracker(trackerID);
                                                                               }-*/;

    /**
     * Execute the given command with the default tracker.
     *
     * @param command The command to execute
     */
    public static void withTracker(final AsyncTrackerCommand command) {
        withTracker("", command);
    }

    /**
     * Execute the given command with the tracker.
     *
     * @param trackerName The tracker name
     * @param command The command to execute
     */
    public static native void withTracker(final String trackerName, final AsyncTrackerCommand command) /*-{
                                                                                                       $wnd._gaq = $wnd._gaq || [];
                                                                                                       $wnd._gaq.push(function() {
                                                                                                       @com.denormans.googleanalyticsgwt.api.GoogleAnalytics::executeWithTracker(Ljava/lang/String;Lcom/denormans/googleanalyticsgwt/api/AsyncTrackerCommand;)(trackerName, command);
                                                                                                       });
                                                                                                       }-*/;

    private static void executeWithTracker(String trackerName, final AsyncTrackerCommand command) {
        GoogleAnalytics googleAnalytics = get();
        command.execute(googleAnalytics, googleAnalytics.getTrackerByName(trackerName));
    }

    /**
     * Creates the default page tracker with the given ID.
     *
     * @param trackerID The tracker ID
     * @return A new event tracker with the given ID
     */
    public native GoogleAnalyticsTracker createDefaultTracker(final String trackerID) /*-{
                                                                                      return this._createTracker(trackerID);
                                                                                      }-*/;

    /**
     * Creates a page tracker with the given ID.
     *
     * @param trackerID The tracker ID
     * @param trackerName The name of the tracker to be retrieved later
     * @return A new event tracker with the given ID
     */
    public native GoogleAnalyticsTracker createTracker(final String trackerID, final String trackerName) /*-{
                                                                                                         return this._createTracker(trackerID, trackerName);
                                                                                                         }-*/;

    /**
     * Retrieves the default tracker.
     *
     * @return The default event tracker if available, otherwise <tt>null</tt>
     */
    public native GoogleAnalyticsTracker getDefaultTracker() /*-{
                                                             return this._getTrackerByName();
                                                             }-*/;

    /**
     * Retrieves a tracker by name.
     *
     * @param trackerName The name of the tracker to retrieve
     *
     * @return The event tracker if available, otherwise <tt>null</tt>
     */
    public native GoogleAnalyticsTracker getTrackerByName(final String trackerName) /*-{
                                                                                    return this._getTrackerByName(trackerName);
                                                                                    }-*/;

    /**
     * Clear out the last octet of the IP address
     */
    public native void anonymizeIP() /*-{
                                     this._anonymizeIp();
                                     }-*/;

}