Java tutorial
/* * Copyright 2009 Google Inc. * * 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.google.gwt.gdata.client; import com.google.gwt.ajaxloader.client.AjaxLoader; import com.google.gwt.ajaxloader.client.AjaxLoader.AjaxLoaderOptions; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT.UncaughtExceptionHandler; /** * A collection of static methods and API wide constants. */ public class GData { static String targetGDataJsApiVersion = "2.2"; /** * Return the GData API Version currently loaded. * * @return the GData API Version currently loaded. */ public static String getVersion() { return targetGDataJsApiVersion; } /** * Check for the availability of the GData API. This means that the API * script is loaded and has successfully initialized. * * @return <code>true</code> if the GData API is loaded. */ public static native boolean isLoaded() /*-{ if($wnd.google === undefined) return false; if($wnd.google.gdata === undefined) return false; return true; }-*/; /** * Check for the availability of the specified GData packages. This means * that the API script for the specified packages is loaded and has * successfully initialized. * * @param packages the GData packages to check for. * @return <code>true</code> if the GData packages are loaded. */ public static boolean isLoaded(GDataPackage... packages) { if (!isLoaded()) { return false; } for (GDataPackage p : packages) { if (!isLoaded(p.getValue())) { return false; } } return true; } /** * Initializes the GData API using the AjaxLoader. This is in lieu of * specifying the <script> tag for .google.com in your hosted HTML * page or project's GWT module specification. * * @see "http://code.google.com/apis/gdata/documentation/#AJAX_Loader" * * @param key GData API key. See http://code.google.com/apis/gdata/signup.html * @param version The version of the gdata API to load. For example, "2.x" * Note that not all GData versions may be compatible with a give version of * the GWT-GData API. * @param settings other AjaxLoader settings for the GData API. This * parameter must not be <code>null</code>. * @param onLoad callback to be invoked when the library is loaded. */ public static void loadGDataApi(String key, String version, AjaxLoaderOptions settings, final Runnable onLoad) { assert settings != null; AjaxLoader.init(key); Runnable onGDataLoad = onLoad; /* * If loading for the first time insert a call to gdata.onLoad. * This fixes an issue where AuthSub doesn't consume the token * whenever the API is loaded asynchronously. */ if (!isLoaded()) { onGDataLoad = new Runnable() { public void run() { UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler(); if (handler != null) { try { runAll(); } catch (Throwable e) { e.printStackTrace(); handler.onUncaughtException(e); } } else { runAll(); } } private native void callGDataOnLoad() /*-{ if(typeof($wnd.google.gdata) !== undefined) $wnd.google.gdata.onLoad(); }-*/; private void runAll() { callGDataOnLoad(); onLoad.run(); } }; } AjaxLoader.loadApi("gdata", version, onGDataLoad, settings); } /** * Initializes the GData API using the AjaxLoader. This is in lieu of * specifying the <script> tag for gdata.google.com in your hosted HTML * page or project's GWT module specification. * * @see "http://code.google.com/apis/gdata/documentation/#AJAX_Loader" * * @param key GData API key. See http://code.google.com/apis/gdata/signup.html * @param version The version of the gdata API to load. For example, "2.x". * Note that not all GData versions may be compatible with a given version of * the GWT-GData API. * @param onLoad callback to be invoked when the library is loaded. */ public static void loadGDataApi(String key, String version, Runnable onLoad) { loadGDataApi(key, version, AjaxLoaderOptions.newInstance(), onLoad); } /** * Initializes the target version of the GData API using the AjaxLoader. This * is in lieu of specifying the <script> tag for gdata.google.com in * your hosted HTML page or project's GWT module specification. * * @see "http://code.google.com/apis/gdata/documentation/#AJAX_Loader" * * @param key GData API key. See http://code.google.com/apis/gdata/signup.html * @param onLoad callback to be invoked when the library is loaded. * @param packages the GData packages that should be loaded (e.g. Calendar, * Blogger, etc.) */ public static void loadGDataApi(String key, Runnable onLoad, GDataPackage... packages) { AjaxLoaderOptions options = AjaxLoaderOptions.newInstance(); String[] packageNames = new String[packages.length]; for (int i = 0; i < packages.length; i++) { packageNames[i] = packages[i].getValue(); } options.setPackages(packageNames); loadGDataApi(key, targetGDataJsApiVersion, options, onLoad); } /** * Initializes the target version of the GData API using the AjaxLoader. * This is in lieu of specifying the <script> tag for gdata.google.com * in your hosted HTML page or project's GWT module specification. * * @see "http://code.google.com/apis/gdata/documentation/#AJAX_Loader" * * @param key GData API key. See http://code.google.com/apis/gdata/signup.html * @param onLoad callback to be invoked when the library is loaded. */ public static void loadGDataApi(String key, Runnable onLoad) { loadGDataApi(key, targetGDataJsApiVersion, AjaxLoaderOptions.newInstance(), onLoad); } /** * Check for the availability of the specified GData package. This means that * the API script for the specified packages is loaded and has successfully * initialized. * * @param packageName the GData package to check for. * @return <code>true</code> if the GData package is loaded. */ private static native boolean isLoaded(String packageName) /*-{ return $wnd.google.gdata[packageName] !== undefined; }-*/; /** * Use private constructor so this class can't be instantiated. */ private GData() { } }