Package org.eurekastreams.web.client.jsni

Source Code of org.eurekastreams.web.client.jsni.GadgetMetaDataFetcher$GotGadgetMetaDataCommand

/*
* Copyright (c) 2009-2010 Lockheed Martin Corporation
*
* 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 org.eurekastreams.web.client.jsni;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.eurekastreams.server.domain.GeneralGadgetDefinition;
import org.eurekastreams.server.domain.gadgetspec.GadgetMetaDataDTO;
import org.eurekastreams.server.domain.gadgetspec.UserPrefDTO;
import org.eurekastreams.web.client.events.GotGadgetMetaDataEvent;
import org.eurekastreams.web.client.ui.Session;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.ui.FlowPanel;

/**
* Wrapper class for shindigs gadget meta data fetcher.
*
*/
public class GadgetMetaDataFetcher extends FlowPanel
{
    /**
     * Interface for the command that will be executed once we get the metadata.
     *
     */
    public interface GotGadgetMetaDataCommand
    {
        /**
         * This method will be called after we get the metadata.
         *
         * @param metadata
         *            the metadata that we got from shindig.
         */
        void onGotGadgetMetaData(final List<GadgetMetaDataDTO> metadata);
    }

    /**
     * The command.
     */
    private static GotGadgetMetaDataCommand onGotGadgetMetaData = null;
    /**
     * The gadget defs to look up.
     */
    private static List<GeneralGadgetDefinition> gadgetDefs;

    /**
     * Default constructor.
     *
     * @param inGadgetDefs
     *            the gadget defs to look up.
     */
    @SuppressWarnings("unchecked")
    public GadgetMetaDataFetcher(final List inGadgetDefs)
    {
        gadgetDefs = inGadgetDefs;
    }

    /**
     * Adds a command to be executed when we have the metadata.
     *
     * @param inCommand
     *            the command to execute.
     */
    @Deprecated
    public void addOnMetaDataRetrievedCommand(final GotGadgetMetaDataCommand inCommand)
    {
        onGotGadgetMetaData = inCommand;
    }

    /**
     * Gets called from JSNI with the shindig results and wraps them into Java objects.
     *
     * @param metadata
     *            the shindig metadata.
     */
    public static void gotGadgetMetaData(final JavaScriptObject metadata)
    {
        List<GadgetMetaDataDTO> gadgetMetaDataList = new LinkedList<GadgetMetaDataDTO>();
        for (GeneralGadgetDefinition gadgetDef : gadgetDefs)
        {
            gadgetMetaDataList.add(new GadgetMetaDataDTO(gadgetDef));
        }

        for (int i = 0; i < getGadgetCount(metadata); i++)
        {
            if (isGadgetValid(metadata, i))
            {
                String url = getGadgetUrl(metadata, i);
                int j = 0;
                for (j = 0; j < gadgetDefs.size(); j++)
                {
                    if (gadgetDefs.get(j).getUrl().equals(url))
                    {
                        break;
                    }
                }
                GadgetMetaDataDTO gMetaData = new GadgetMetaDataDTO(gadgetDefs.get(j));
                gMetaData.setTitle(getGadgetTitle(metadata, i));
                gMetaData.setTitleUrl(getGadgetTitleUrl(metadata, i));
                gMetaData.setDescription(getGadgetDescription(metadata, i));
                gMetaData.setAuthor(getGadgetAuthor(metadata, i));
                gMetaData.setAuthorEmail(getGadgetAuthorEmail(metadata, i));
                gMetaData.setThumbnail(getGadgetThumbnail(metadata, i));
                gMetaData.setScreenshot(getGadgetScreenshot(metadata, i));
                gMetaData.setString(getGadgetString(metadata, i));


                List<UserPrefDTO> userPrefs = new ArrayList<UserPrefDTO>();
                String[] keys = getUserPrefsKeys(metadata, i);
                for (int k = 0; k < keys.length; k++)
                {
                    UserPrefDTO userPref = new UserPrefDTO();
                    userPref.setDisplayName(getUserPrefDisplayName(metadata, i, keys[k]));
                    userPref.setDataType(getUserPrefType(metadata, i, keys[k]).toUpperCase());
                    userPrefs.add(userPref);
                }
                gMetaData.setUserPrefs(userPrefs);

                List<String> features = new ArrayList<String>();
                String[] featuresFromGadget = getFeatures(metadata, i);
                for (int f = 0; f < featuresFromGadget.length; f++)
                {
                    features.add(featuresFromGadget[f]);
                }
                gMetaData.setFeatures(features);
                List<String> views = new ArrayList<String>();
                String[] viewsFromGadget = getViewNames(metadata, i);
                for (int f = 0; f < viewsFromGadget.length; f++)
                {
                    views.add(viewsFromGadget[f]);
                }
                gMetaData.setViewNames(views);

                gadgetMetaDataList.remove(j);
                gadgetMetaDataList.add(j, gMetaData);
            }
        }

        // DEPRECATED: Use event bus.
        if (onGotGadgetMetaData != null)
        {
            onGotGadgetMetaData.onGotGadgetMetaData(gadgetMetaDataList);
        }
        Session.getInstance().getEventBus().notifyObservers(new GotGadgetMetaDataEvent(gadgetMetaDataList));
    }

    /**
     * Gets called by clients to fetch metadata.
     */
    public void fetchMetaData()
    {
        String[] urlArray = new String[gadgetDefs.size()];
        for (int i = 0; i < gadgetDefs.size(); i++)
        {
            urlArray[i] = gadgetDefs.get(i).getUrl();
        }
        fetchMetaData(urlArray);
    }

    /**
     * Gets the gadgets count from shindig.
     *
     * @param metadata
     *            the metadata object.
     * @return the count.
     */
    private static native int getGadgetCount(final JavaScriptObject metadata) /*-{
                                                        return metadata.gadgets.length;
                                                    }-*/;

    /**
     * Gets the user prefs count.
     *
     * @param metadata
     *            the metadata object.
     * @param index
     *            the index.
     * @return the user prefs count.
     */
    private static native String[] getUserPrefsKeys(final JavaScriptObject metadata, final int index) /*-{
                      var arr = [];
                      for (var p in metadata.gadgets[index].userPrefs)
                      {
                          arr.push(p);
                      }

                      return arr;
                   }-*/;

    /**
     * Gets the gadget view names.
     *
     * @param metadata
     *            the metadata object.
     * @param index
     *            the index.
     * @return the gadget view names.
     */
    private static native String[] getViewNames(final JavaScriptObject metadata, final int index) /*-{
                      var arr = [];
                      for (var p in metadata.gadgets[index].views)
                      {
                          arr.push(p);
                      }

                      return arr;
                   }-*/;

    /**
     * Gets the features.
     *
     * @param metadata
     *            the metadata object.
     * @param index
     *            the index.
     * @return the features.
     */
    private static native String[] getFeatures(final JavaScriptObject metadata, final int index) /*-{
                      return metadata.gadgets[index].features;
                   }-*/;

    /**
     * Gets the user pref display name.
     *
     * @param metadata
     *            the metadata object.
     * @param gadgetIndex
     *            the gadget index.
     * @param prefIndex
     *            the user pref index.
     * @return the user pref display name.
     */
    private static native String getUserPrefDisplayName(final JavaScriptObject metadata, final int gadgetIndex,
            final String prefIndex) /*-{
                   return metadata.gadgets[gadgetIndex].userPrefs[prefIndex].displayName;
                }-*/;

    /**
     * Gets the user pref type.
     *
     * @param metadata
     *            the metadata object.
     * @param gadgetIndex
     *            the gadget index.
     * @param prefIndex
     *            the user pref index.
     * @return the user pref type.
     */
    private static native String getUserPrefType(final JavaScriptObject metadata, final int gadgetIndex,
            final String prefIndex) /*-{
                   return metadata.gadgets[gadgetIndex].userPrefs[prefIndex].type;
                }-*/;

    /**
     * Checks if the gadget is valid.
     *
     * @param metadata
     *            the metadata object.
     * @param index
     *            the index.
     * @return whether or not the gadget is valid.
     */
    private static native boolean isGadgetValid(final JavaScriptObject metadata, final int index) /*-{
                                                        return metadata.gadgets[index].errors == null;
                                                    }-*/;

    /**
     * Gets the gadget title.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the title.
     */
    private static native String getGadgetTitle(final JavaScriptObject metadata, final int index) /*-{
                                                        return metadata.gadgets[index].title;
                                                    }-*/;

    /**
     * Gets the gadget url.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the url.
     */
    private static native String getGadgetTitleUrl(final JavaScriptObject metadata, final int index) /*-{
                                                    return metadata.gadgets[index].titleUrl;
                                                 }-*/;

    /**
     * Gets the gadget url.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            hte index.
     * @return the url.
     */
    private static native String getGadgetUrl(final JavaScriptObject metadata, final int index) /*-{
                                                    return metadata.gadgets[index].url;
                                                 }-*/;

    /**
     * Gets the gadget desc.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the desc.
     */
    private static native String getGadgetDescription(final JavaScriptObject metadata, final int index) /*-{
                                                    return metadata.gadgets[index].description;
                                                 }-*/;

    /**
     * Gets the gadget author.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the author.
     */
    private static native String getGadgetAuthor(final JavaScriptObject metadata, final int index) /*-{
                                                    return metadata.gadgets[index].author;
                                                 }-*/;

    /**
     * Gets the gadget author email.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the authors email.
     */
    private static native String getGadgetAuthorEmail(final JavaScriptObject metadata, final int index) /*-{
                                                    return metadata.gadgets[index].authorEmail;
                                                 }-*/;

    /**
     * Gets the gadget thumbnail.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the thumbnail.
     */
    private static native String getGadgetThumbnail(final JavaScriptObject metadata, final int index) /*-{
                                                    return metadata.gadgets[index].thumbnail;
                                                 }-*/;

    /**
     * Gets the gadget screenshot.
     *
     * @param metadata
     *            the metadata.
     * @param index
     *            the index.
     * @return the screenshot.
     */
    private static native String getGadgetScreenshot(
            final JavaScriptObject metadata, final int index) /*-{
                                  return metadata.gadgets[index].screenshot;
                               }-*/;

    /**
     * Gets the gadget string.
     *
     * @param metadata
     *            the metadata.
     *
     * @param index
     *            the index.     *
     * @return the string.
     */
    private static native String getGadgetString(
            final JavaScriptObject metadata, final int index) /*-{
                                  return metadata.gadgets[index].string;
                               }-*/;


    /**
     * Fetches the metadata from shindig.
     *
     * @param url
     *            the urls to fetch for.
     */
    private native void fetchMetaData(final String[] url) /*-{
                                                        var request = '{';
                                                        request += '"context": {';
                                                        request += '"country": "default",';
                                                        request += '"language": "default",';
                                                        request += '"view": "preview",';
                                                        request += '"container": "eureka"';
                                                        request += '},"gadgets": [';

                                                        for(var i=0;i<url.length;i++)
                                                        {
                                                            request += '{"url": "' + url[i] +  '"}';
                                                            if(i!=url.length-1)
                                                            {
                                                                request += ",";
                                                            }
                                                        }

                                                        request += ']}';

                                                        var callback = function(m){
                                                              if (m != null )
                                                              {
                   @org.eurekastreams.web.client.jsni.GadgetMetaDataFetcher::gotGadgetMetaData(Lcom/google/gwt/core/client/JavaScriptObject;)(m);
                                                              }
                                                        };


            $wnd.eurekastreams.util.sendRequestToServer("/gadgets/metadata",
                                                    "POST", request,
                                                            callback, true);

                                                    }-*/;
TOP

Related Classes of org.eurekastreams.web.client.jsni.GadgetMetaDataFetcher$GotGadgetMetaDataCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.