Package org.waveprotocol.wave.client.gadget.renderer

Source Code of org.waveprotocol.wave.client.gadget.renderer.ParticipantInformation

/**
* Copyright 2010 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 org.waveprotocol.wave.client.gadget.renderer;

import com.google.gwt.core.client.JavaScriptObject;

import org.waveprotocol.wave.client.account.Profile;
import org.waveprotocol.wave.client.account.ProfileManager;
import org.waveprotocol.wave.model.wave.ParticipantId;

import java.util.List;

/**
* Overlay and JSON converter class to hold the participant information.
* This class holds the data to be transferred in JSON form to the Gadget via
* RPC.
*
*/
public final class ParticipantInformation extends JavaScriptObject {

  /**
   * External construction is banned.
   */
  protected ParticipantInformation() {
  }

  /**
   * Creates participant information object.
   *
   * @param myId ID of the current user.
   * @param authorId ID of the author of the blip where the Gadget resides.
   * @param participants participants of the blip where the Gadget resides.
   * @param parentUrl parent URL to prepend to the image URL without host.
   * @return constructed participant information object.
   */
  public static ParticipantInformation create(
      String myId, String authorId, List<? extends ParticipantId> participants,
      String parentUrl, ProfileManager profileManger) {
    ParticipantInformation info = createInformationObject(myId, authorId);
    for (ParticipantId participant : participants) {
      info.addParticipant(participant, parentUrl, profileManger);
    }
    return info;
  }

  /**
   * Adds participant information to this object.
   *
   * @param participant participant to add.
   * @param parentUrl parent URL to prepend to the image URL without host.
   */
  public void addParticipant(ParticipantId participant, String parentUrl,
      ProfileManager profileManger) {
    Profile profile = profileManger.getProfile(participant);
    String imageUrl = "";
    String fullName = participant.getAddress();
    if (profile != null) {
      imageUrl = profile.getImageUrl();
      if (!(imageUrl.startsWith("http://") || imageUrl.startsWith("https://") ||
          imageUrl.startsWith("//"))) {
        imageUrl = parentUrl + imageUrl;
      }
    }
    addParticipantInfo(participant.getAddress(),
                       fullName,
                       imageUrl);
  }

  /**
   * Removes participant information from this object.
   *
   * @param participant participant to remove.
   */
  public void removeParticipant(ParticipantId participant) {
    removeParticipantInfo(participant.getAddress());
  }

  /**
   * Returns the ID of the current user stored in the object.
   *
   * @return ID of the current user.
   */
  public native String getMyId() /*-{
    return this['myId'];
  }-*/;

  /**
   * Creates JS object to represent this GWT object.
   *
   * @param myId ID of the current user.
   * @param authorId ID of the author of the blip where the Gadget resides.
   * @return JS object.
   */
  private static native ParticipantInformation createInformationObject(
      String myId, String authorId) /*-{
    return {
      'myId': myId,
      'authorId': authorId,
      'participants': {}
    };
  }-*/;

  private native void addParticipantInfo(String id, String name, String thumbnailUrl) /*-{
    // TODO(user): Add more fields such as presence, profile info, etc.
    var p = {
      'id': id,
      'displayName': name,
      'thumbnailUrl': thumbnailUrl
    };
    this['participants'][id] = p;
  }-*/;

  public native void removeParticipantInfo(String id) /*-{
    delete this['participants'][id];
  }-*/;
TOP

Related Classes of org.waveprotocol.wave.client.gadget.renderer.ParticipantInformation

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.