Package com.google.ytd.embed

Source Code of com.google.ytd.embed.UploadResponseHandler

/* Copyright (c) 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.ytd.embed;

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

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONException;
import org.json.JSONObject;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.ytd.dao.AdminConfigDao;
import com.google.ytd.dao.AssignmentDao;
import com.google.ytd.dao.UserAuthTokenDao;
import com.google.ytd.dao.VideoSubmissionDao;
import com.google.ytd.model.AdminConfig;
import com.google.ytd.model.Assignment;
import com.google.ytd.model.UserSession;
import com.google.ytd.model.VideoSubmission;
import com.google.ytd.util.EmailUtil;
import com.google.ytd.util.Util;
import com.google.ytd.youtube.YouTubeApiHelper;

/**
* Servlet that is invoked as part of the browser-based YouTube video upload
* flow. If it detects a successful upload, it creates a new VideoSubmission
* object in the datastore that corresponds to the new video, and return a JSON
* representation of it.
*/
@Singleton
public class UploadResponseHandler extends HttpServlet {
  private static final Logger log = Logger.getLogger(UploadResponseHandler.class.getName());

  @Inject
  private EmailUtil emailUtil;
  @Inject
  private Util util;
  @Inject
  private UserSessionManager userSessionManager;
  @Inject
  private YouTubeApiHelper youTubeApiHelper;
  @Inject
  private VideoSubmissionDao submissionDao;
  @Inject
  private UserAuthTokenDao userAuthTokenDao;
  @Inject
  private AdminConfigDao adminConfigDao;
  @Inject
  private AssignmentDao assignmentDao;

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String videoId = req.getParameter("id");
    String status = req.getParameter("status");

    UserSession userSession = userSessionManager.getUserSession(req);

    if (status.equals("200")) {
      String authSubToken = userSession.getMetaData("authSubToken");
      String articleUrl = userSession.getMetaData("articleUrl");
      String assignmentId = userSession.getMetaData("assignmentId");
      String videoTitle = userSession.getMetaData("videoTitle");
      String videoDescription = userSession.getMetaData("videoDescription");
      String youTubeName = userSession.getMetaData("youTubeName");
      String email = userSession.getMetaData("email");
      String phoneNumber = userSession.getMetaData("phoneNumber");
      String videoTags = userSession.getMetaData("videoTags");
      String videoLocation = userSession.getMetaData("videoLocation");
      String videoDate = userSession.getMetaData("videoDate");

      log.fine(String.format("Attempting to persist VideoSubmission with YouTube id '%s' "
          + "for assignment id '%s'...", videoId, assignmentId));

      VideoSubmission submission = submissionDao.newSubmission(Long.parseLong(assignmentId));

      submission.setArticleUrl(articleUrl);
      submission.setVideoId(videoId);
      submission.setVideoTitle(videoTitle);
      submission.setVideoDescription(videoDescription);
      submission.setVideoTags(videoTags);
      submission.setVideoLocation(videoLocation);
      submission.setVideoDate(videoDate);
      submission.setYouTubeName(youTubeName);
      submission.setVideoSource(VideoSubmission.VideoSource.NEW_UPLOAD);
      submission.setNotifyEmail(email);
      submission.setPhoneNumber(phoneNumber);

      userAuthTokenDao.setUserAuthToken(youTubeName, authSubToken);

      AdminConfig adminConfig = adminConfigDao.getAdminConfig();

      youTubeApiHelper.setAuthSubToken(adminConfig.getYouTubeAuthSubToken());

      if (adminConfig.getModerationMode() == AdminConfig.ModerationModeType.NO_MOD.ordinal()) {
        // NO_MOD is set, auto approve all submission
        // TODO: This isn't enough, as the normal approval flow (adding the branding, tags, emails,
        // etc.) isn't taking place.
        submission.setStatus(VideoSubmission.ModerationStatus.APPROVED);
        youTubeApiHelper.updateModeration(videoId, true);
       
        // Add video to YouTube playlist if it isn't in it already.
        // This code is kind of ugly and is mostly copy/pasted from UpdateVideoSubmissionStatus
        // TODO: It should be refactored into a common helper method somewhere...
        if (!submission.isInPlaylist()) {
          Assignment assignment = assignmentDao.getAssignmentById(assignmentId);

          if (assignment == null) {
            log.warning(String.format("Couldn't find assignment id '%d' for video id '%s'.",
                assignmentId, videoId));
          } else {
            String playlistId = assignment.getPlaylistId();
            if (util.isNullOrEmpty(playlistId)) {
              log.warning(String.format("Assignment id '%d' does not have an associated playlist.",
                  assignmentId));
            } else {
              if (youTubeApiHelper.insertVideoIntoPlaylist(playlistId, videoId)) {
                submission.setIsInPlaylist(true);
              }
            }
          }
        }
      } else {
        youTubeApiHelper.updateModeration(videoId, false);
      }

      submission = submissionDao.save(submission);

      log.fine("...VideoSubmission persisted.");

      emailUtil.sendNewSubmissionEmail(submission);

      try {
        JSONObject responseJsonObj = new JSONObject();
        responseJsonObj.put("videoId", videoId);
        responseJsonObj.put("status", status);
        resp.setContentType("text/html");
        resp.getWriter().println(responseJsonObj.toString());
      } catch (JSONException e) {
        log.warning(e.toString());
        resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
      }
    } else {
      String code = req.getParameter("code");
      log.warning(String.format("Upload request for user with session id '%s' failed with "
          + "status '%s' and code '%s'.", userSession.getId(), status, code));
      resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, code);
    }
  }
}
TOP

Related Classes of com.google.ytd.embed.UploadResponseHandler

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.