Package com.google.ytd.embed

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

/* 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.List;
import java.util.logging.Level;
import java.util.logging.Logger;

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

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

import com.google.gdata.data.youtube.VideoEntry;
import com.google.gdata.data.youtube.YtStatistics;
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.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.PmfUtil;
import com.google.ytd.util.Util;
import com.google.ytd.youtube.YouTubeApiHelper;

/**
* Servlet that handles the submission of an existing YouTube video. It creates
* a new VideoSubmission object and persists it to the datastore. The response
* is the JSON representation of the new object.
*/
@Singleton
public class SubmitExistingVideo extends HttpServlet {
  private static final Logger log = Logger.getLogger(SubmitExistingVideo.class.getName());

  @Inject
  private Util util;
  @Inject
  private EmailUtil emailUtil;
  @Inject
  private PmfUtil pmfUtil;
  @Inject
  private UserSessionManager userSessionManager;
  @Inject
  private YouTubeApiHelper apiManager;
  @Inject
  private UserAuthTokenDao userAuthTokenDao;
  @Inject
  private AdminConfigDao adminConfigDao;
  @Inject
  private AssignmentDao assignmentDao;


  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String json = util.getPostBody(req);

    try {
      JSONObject jsonObj = new JSONObject(json);

      JSONArray videoIds = jsonObj.getJSONArray("videoIds");
      String location = jsonObj.getString("location");
      String phoneNumber = jsonObj.getString("phoneNumber");
      String date = jsonObj.getString("date");
      String email = jsonObj.getString("email");

      String assignmentId = null;
      if (jsonObj.has("assignmentId")) {
        assignmentId = jsonObj.getString("assignmentId");
      }
     
      if (videoIds.length() < 1) {
        throw new IllegalArgumentException("No video ids were provided.");
      }

      // Grab user session meta data
      UserSession userSession = userSessionManager.getUserSession(req);
      String youTubeName = userSession.getMetaData("youTubeName");
      String authSubToken = userSession.getMetaData("authSubToken");
      String articleUrl = userSession.getMetaData("articleUrl");

      // Assignment id might be set in the JSON object if there wasn't an assignment associated
      // with the embedded iframe, and the assignment was chosen at run time.
      if (util.isNullOrEmpty(assignmentId)) {
        assignmentId = userSession.getMetaData("assignmentId");
      } else {
        userSession.addMetaData("assignmentId", assignmentId);
      }
     
      apiManager.setAuthSubToken(authSubToken);

      for (int i = 0; i < videoIds.length(); i++) {
        String videoId = videoIds.getString(i);
       
        VideoEntry videoEntry = apiManager.getUploadsVideoEntry(videoId);
 
        if (videoEntry == null) {
          JSONObject responseJsonObj = new JSONObject();
          responseJsonObj.put("success", "false");
          responseJsonObj.put("message", "Cannot find this video in your account.");
 
          resp.setContentType("text/javascript");
          resp.getWriter().println(responseJsonObj.toString());
        } else {
          String title = videoEntry.getTitle().getPlainText();
          String description = videoEntry.getMediaGroup().getDescription().getPlainTextContent();
 
          List<String> tags = videoEntry.getMediaGroup().getKeywords().getKeywords();
          String sortedTags = util.sortedJoin(tags, ",");
 
          long viewCount = -1;
 
          YtStatistics stats = videoEntry.getStatistics();
          if (stats != null) {
            viewCount = stats.getViewCount();
          }
 
          VideoSubmission submission = new VideoSubmission(Long.parseLong(assignmentId));
 
          submission.setArticleUrl(articleUrl);
          submission.setVideoId(videoId);
          submission.setVideoTitle(title);
          submission.setVideoDescription(description);
          submission.setVideoTags(sortedTags);
          submission.setVideoLocation(location);
          submission.setPhoneNumber(phoneNumber);
          submission.setVideoDate(date);
          submission.setYouTubeName(youTubeName);
 
          userAuthTokenDao.setUserAuthToken(youTubeName, authSubToken);
 
          submission.setViewCount(viewCount);
          submission.setVideoSource(VideoSubmission.VideoSource.EXISTING_VIDEO);
          submission.setNotifyEmail(email);
 
          AdminConfig adminConfig = adminConfigDao.getAdminConfig();
          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);
           
            // 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' doesn't have an associated playlist.",
                      assignmentId));
                } else {
                  apiManager.setAuthSubToken(adminConfig.getYouTubeAuthSubToken());
                  if (apiManager.insertVideoIntoPlaylist(playlistId, videoId)) {
                    submission.setIsInPlaylist(true);
                  }
                }
              }
            }
          }
 
          pmfUtil.persistJdo(submission);
 
          emailUtil.sendNewSubmissionEmail(submission);
        }
      }
     
      JSONObject responseJsonObj = new JSONObject();
      responseJsonObj.put("success", "true");

      resp.setContentType("text/javascript");
      resp.getWriter().println(responseJsonObj.toString());
    } catch (IllegalArgumentException e) {
      log.log(Level.FINE, "", e);
      resp.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
    } catch (JSONException e) {
      log.log(Level.WARNING, "", e);
      resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
    }
  }
}
TOP

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

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.