Java tutorial
/* * Copyright 2014 Amazon Technologies, 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://aws.amazon.com/apache2.0 * * This file 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.amediamanager.controller; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.elastictranscoder.AmazonElasticTranscoder; import com.amazonaws.services.elastictranscoder.model.CreateJobOutput; import com.amazonaws.services.elastictranscoder.model.CreateJobRequest; import com.amazonaws.services.elastictranscoder.model.CreateJobResult; import com.amazonaws.services.elastictranscoder.model.JobInput; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.GetObjectMetadataRequest; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amediamanager.config.ConfigurationSettings; import com.amediamanager.config.ConfigurationSettings.ConfigProps; import com.amediamanager.dao.TagCount; import com.amediamanager.domain.ContentType; import com.amediamanager.domain.Privacy; import com.amediamanager.domain.Tag; import com.amediamanager.domain.User; import com.amediamanager.domain.Video; import com.amediamanager.service.TagsService; import com.amediamanager.service.VideoService; import com.amediamanager.util.CommaDelimitedTagEditor; import com.amediamanager.util.PrivacyEditor; import com.amediamanager.util.VideoUploadFormSigner; @Controller public class VideoController { private static final Logger LOG = LoggerFactory.getLogger(VideoController.class); @Autowired com.amediamanager.service.VideoServiceImpl videoService; @Autowired TagsService tagService; @Autowired ConfigurationSettings config; @Autowired AmazonS3 s3Client; @ModelAttribute("allPrivacy") public List<Privacy> populatePrivacy() { return Arrays.asList(Privacy.ALL); } @ModelAttribute("allContentType") public List<ContentType> populateContentType() { return Arrays.asList(ContentType.ALL); } @RequestMapping(value = "/videos", method = RequestMethod.GET) public String videos(ModelMap model) { return "redirect:/"; } @RequestMapping(value = "/tags/{tagId}", method = RequestMethod.GET) public String tags(ModelMap model, @PathVariable String tagId) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); List<Video> videos = new ArrayList<Video>(); List<TagCount> tags = new ArrayList<TagCount>(); try { // Get user's videos and tags videos = tagService.getVideosForUserByTag(auth.getName(), tagId); tags = tagService.getTagsForUser(auth.getName()); // Add expiring URLs (1 hour) videos = videoService.generateExpiringUrls(videos, 1000 * 60 * 60); } catch (Exception e) { return "redirect:/config"; } model.addAttribute("selectedTag", tagId); model.addAttribute("tags", tags); model.addAttribute("videos", videos); model.addAttribute("templateName", "only_videos"); return "base"; } @RequestMapping(value = "/video/{videoId}", method = RequestMethod.GET) public String videoGet(ModelMap model, @PathVariable String videoId, @RequestParam(value = "delete", required = false) String delete) { Video video = videoService.findById(videoId); if (null != delete) { videoService.delete(video); return videos(model); } else { video = videoService.generateExpiringUrl(video, 5000); model.addAttribute("video", video); model.addAttribute("templateName", "video_edit"); return "base"; } } @RequestMapping(value = "/video/{videoId}", method = RequestMethod.POST) public String videoEdit(@ModelAttribute Video video, @PathVariable String videoId, BindingResult result, RedirectAttributes attr, HttpSession session) { videoService.update(video); return "redirect:/"; } @RequestMapping(value = "/video/upload", method = RequestMethod.GET) public String videoUpload(ModelMap model, HttpServletRequest request, @ModelAttribute User user) { // Video redirect URL String redirectUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/video/ingest"; // Prepare S3 form upload VideoUploadFormSigner formSigner = new VideoUploadFormSigner( config.getProperty(ConfigProps.S3_UPLOAD_BUCKET), config.getProperty(ConfigProps.S3_UPLOAD_PREFIX), user, config, redirectUrl); model.addAttribute("formSigner", formSigner); model.addAttribute("templateName", "video_upload"); return "base"; } @RequestMapping(value = "/video/ingest", method = RequestMethod.GET) public String videoIngest(ModelMap model, @RequestParam(value = "bucket") String bucket, @RequestParam(value = "key") String videoKey) throws ParseException { Video video = videoService.save(bucket, videoKey); // Kick off preview encoding videoService.createVideoPreview(video); return "redirect:/"; } @InitBinder public void initDateBinder(final WebDataBinder dataBinder) { // Bind dates final String dateformat = "MM/dd/yyyy"; final SimpleDateFormat sdf = new SimpleDateFormat(dateformat); sdf.setLenient(false); dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, false)); } @InitBinder public void initTagsBinder(final WebDataBinder dataBinder) { // Bind tags dataBinder.registerCustomEditor(Set.class, new CommaDelimitedTagEditor()); } @InitBinder public void initPrivacyBinder(final WebDataBinder dataBinder) { // Bind tags dataBinder.registerCustomEditor(Privacy.class, new PrivacyEditor()); } }