Package com.google.ytd.command

Source Code of com.google.ytd.command.NewMobileVideoSubmission

package com.google.ytd.command;

import com.google.gdata.util.ServiceException;
import com.google.ytd.youtube.YouTubeApiHelper;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.inject.Inject;
import com.google.ytd.dao.AssignmentDao;
import com.google.ytd.dao.UserAuthTokenDao;
import com.google.ytd.dao.VideoSubmissionDao;
import com.google.ytd.dao.AdminConfigDao;
import com.google.ytd.model.UserAuthToken;
import com.google.ytd.model.VideoSubmission;
import com.google.ytd.util.Util;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

@NonAdmin
public class NewMobileVideoSubmission extends Command {
  private static final Logger log = Logger.getLogger(NewMobileVideoSubmission.class.getName());
  private VideoSubmissionDao submissionDao = null;
  private UserAuthTokenDao userAuthTokenDao = null;
  private AssignmentDao assignmentDao = null;
  YouTubeApiHelper youTubeApiHelper;
  private boolean isTokenClientLogin = false;

  private Util util = null;

  @Inject
  public NewMobileVideoSubmission(Util util, VideoSubmissionDao submissionDao,
      AssignmentDao assignmentDao, UserAuthTokenDao userAuthTokenDao,
      AdminConfigDao adminConfigDao, YouTubeApiHelper youTubeApiHelper) {
    this.util = util;
    this.assignmentDao = assignmentDao;
    this.submissionDao = submissionDao;
    this.userAuthTokenDao = userAuthTokenDao;
    this.youTubeApiHelper = youTubeApiHelper;
  }

  @Override
  public JSONObject execute() throws JSONException {
    JSONObject json = new JSONObject();
    String assignmentId = getParam("assignmentId");
    String videoId = getParam("videoId");
    String clientLoginToken = getParam("clientLoginToken");
    String authToken = getParam("authToken");
    String youTubeEmail = getParam("youTubeName");
    String title = getParam("title");
    String description = getParam("description");
    String videoDate = getParam("videoDate");
    String videoLocation = getParam("videoLocation");
    String tags = getParam("tags");

    if (!util.isNullOrEmpty(clientLoginToken)) {
      isTokenClientLogin = true;
    }

    if (util.isNullOrEmpty(assignmentId)) {
      assignmentId = this.assignmentDao.getDefaultMobileAssignmentId() + "";
    }

    if (util.isNullOrEmpty(videoId)) {
      throw new IllegalArgumentException("Missing required param: videoId");
    }

    if (util.isNullOrEmpty(clientLoginToken) && isTokenClientLogin) {
      throw new IllegalArgumentException("Missing required param: clientLoginToken");
    }

    if (util.isNullOrEmpty(authToken) && !isTokenClientLogin) {
      throw new IllegalArgumentException("Missing required param: authToken");
    }

    if (util.isNullOrEmpty(youTubeEmail)) {
      throw new IllegalArgumentException("Missing required param: youTubeName");
    }

    if (util.isNullOrEmpty(title)) {
      throw new IllegalArgumentException("Missing required param: title");
    }

    if (util.isNullOrEmpty(description)) {
      throw new IllegalArgumentException("Missing required param: description");
    }

    if (util.isNullOrEmpty(videoDate)) {
      throw new IllegalArgumentException("Missing required param: videoDate");
    }

    // translate the Google account email into YouTube account name
    String youTubeName = null;
    if (isTokenClientLogin) {
      youTubeName = getYouTubeName(clientLoginToken, youTubeEmail);
    } else {
      youTubeName = getYouTubeName(authToken, youTubeEmail);
    }

    VideoSubmission submission = new VideoSubmission();
    submission.setAssignmentId(Long.parseLong(assignmentId));
    submission.setYouTubeName(youTubeName);
    submission.setVideoSource(VideoSubmission.VideoSource.MOBILE_SUBMIT);
    submission.setVideoId(videoId);
    submission.setVideoTitle(title);
    submission.setVideoDescription(description);
    submission.setVideoDate(videoDate);

    if (!util.isNullOrEmpty(videoLocation)) {
      submission.setVideoLocation(videoLocation);
    }

    if (!util.isNullOrEmpty(tags)) {
      submission.setVideoTags(tags);
    }

    submissionDao.save(submission);

    if (isTokenClientLogin) {
    userAuthTokenDao.setUserAuthToken(youTubeName, clientLoginToken,
        UserAuthToken.TokenType.CLIENT_LOGIN);
    } else {
      userAuthTokenDao.setUserAuthToken(youTubeName, authToken,
        UserAuthToken.TokenType.AUTH_SUB);
    }

    return json;
  }

  /**
   * The mobile app sends user account email, e.g. joe.cool@gmail.com
   * we need the associated (linked) YouTube account name in order to access the feeds later on.
   * This method resolves account email to YouTube account name  
   * @param loginToken login token supplied by the mobile app
   * @param youTubeEmail email address supplied by the mobile app
   * @return YouTube account name
   * @throws JSONException when resolution fail
   */
  private String getYouTubeName(String loginToken, String youTubeEmail) throws JSONException {
    // the mobile app sends user account email, e.g. joe.cool@gmail.com
    // we need the associated (lnked) YouTube account name in order to access the feeds later on
    String youTubeName;
    if (isTokenClientLogin) {
      youTubeApiHelper.setClientLoginToken(loginToken);
    } else {
      youTubeApiHelper.setAuthSubToken(loginToken);
    }
    try {
      log.fine(String.format("Resolving email '%s' to YT user name", youTubeEmail));
      youTubeName = youTubeApiHelper.getCurrentUsername();
    } catch (ServiceException e) {
      log.log(Level.WARNING, "Unable to resolve :" + youTubeEmail + " to YT username", e);
      throw new JSONException(e);
    } catch (IOException e) {
      log.log(Level.WARNING, "Unable to resolve :" + youTubeEmail + " to YT username", e);
      throw new JSONException(e);
    }
    return youTubeName;
  }
}
TOP

Related Classes of com.google.ytd.command.NewMobileVideoSubmission

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.