Package com.google.ytd.mobile

Source Code of com.google.ytd.mobile.PersistMobileSubmission

/* 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.mobile;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 com.google.gdata.data.youtube.VideoEntry;
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.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 mobile phone submissions, creating an appropriate
* datastore entry for them.
*/
@Singleton
public class PersistMobileSubmission extends HttpServlet {
  private static final Logger log = Logger.getLogger(PersistMobileSubmission.class.getName());
  @Inject
  private Util util;
  @Inject
  private PmfUtil pmfUtil;
  @Inject
  private EmailUtil emailUtil;
  @Inject
  private YouTubeApiHelper youtubeApiProxy;
  @Inject
  private UserAuthTokenDao userAuthTokenDao;
  @Inject
  private AssignmentDao assignmentDao;
  @Inject
  private AdminConfigDao adminConfigDao;

  private String decode(String input) {
    // TODO: This should use a URL decode method from a library.
    input = input.replaceAll("%26", "&");
    return input.replaceAll("%3D|%3d", "=");
  }

  private Map<String, String> processPostData(String postDataString) {
    Map<String, String> submissionData = new HashMap<String, String>();
    // remove new lines
    postDataString = postDataString.replaceAll("\\n", "");
    String[] nameValuePairs = postDataString.split("&");
    for (String nameValuePair : nameValuePairs) {
      String[] tuple = nameValuePair.split("=");
      if (tuple.length >= 2) {
        String name = decode(tuple[0]);
        String value = decode(tuple[1]);
        log.info(name);
        log.info(value);
        submissionData.put(name, value);
      } else {
        submissionData = null;
      }
    }
    return submissionData;
  }

  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    try {
      Map<String, String> submissionData = processPostData(util.getPostBody(req));
      if (submissionData == null) {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "invalid post data format");
      }

      long assignmentId = -1;
      String videoId = null;
      String location = null;
      String date = null;
      String authSubToken = null;
      String email = null;

      assignmentId = submissionData.get("assignmentId") != null ? Long.parseLong(submissionData
          .get("assignmentId")) : -1;
      videoId = submissionData.get("videoId");
      location = submissionData.get("location");
      date = submissionData.get("date");
      authSubToken = submissionData.get("authSubToken");
      email = submissionData.get("email");

      if (assignmentId <= 0) {
        // get default mobile assignment ID
        assignmentId = assignmentDao.getDefaultMobileAssignmentId();
      }
      if (util.isNullOrEmpty(videoId)) {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "missing videoId");
      }
      if (util.isNullOrEmpty(authSubToken)) {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "missing authSubToken");
      }

      youtubeApiProxy.setAuthSubToken(authSubToken);
      VideoEntry videoEntry = youtubeApiProxy.getUploadsVideoEntry(videoId);

      if (videoEntry == null) {
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST,
            "video id does not match the authsub token");
      } else {
        String youTubeName = videoEntry.getAuthors().get(0).getName();
        String title = videoEntry.getTitle().getPlainText();
        String description = videoEntry.getMediaGroup().getDescription().getPlainTextContent();
        List<String> tags = videoEntry.getMediaGroup().getKeywords().getKeywords();
        String sortedTags = util.sortedJoin(tags, ",");

        VideoSubmission submission = new VideoSubmission(assignmentId);
        submission.setVideoId(videoId);
        submission.setVideoTitle(title);
        submission.setVideoDescription(description);
        submission.setVideoTags(sortedTags);
        submission.setVideoLocation(location);
        submission.setVideoDate(date);
        submission.setYouTubeName(youTubeName);
        submission.setVideoSource(VideoSubmission.VideoSource.MOBILE_SUBMIT);
        submission.setNotifyEmail(email);

        userAuthTokenDao.setUserAuthToken(youTubeName, authSubToken);

        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);
        }
        pmfUtil.persistJdo(submission);
        emailUtil.sendNewSubmissionEmail(submission);

        resp.setContentType("text/plain");
        resp.getWriter().println("success");
      }
    } catch (IllegalArgumentException e) {
      log.log(Level.FINE, "", e);
      resp.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
    }
  }
}
TOP

Related Classes of com.google.ytd.mobile.PersistMobileSubmission

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.