package com.lst.lc.web.backend.controller;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
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.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.lst.lc.dao.CategoryDao;
import com.lst.lc.dao.CourseDao;
import com.lst.lc.dao.DirectionDao;
import com.lst.lc.dao.LessonDao;
import com.lst.lc.entities.Category;
import com.lst.lc.entities.Course;
import com.lst.lc.entities.CourseLesson;
import com.lst.lc.entities.Direction;
import com.lst.lc.page.Page;
import com.lst.lc.page.PageHandler;
import com.lst.lc.utils.MultipartFileUtils;
@Controller
@RequestMapping("/manage/course")
public class CourseController {
@Autowired
@Qualifier("categoryDao")
private CategoryDao categoryDao;
@Autowired
@Qualifier("directionDao")
private DirectionDao directionDao;
@Autowired
@Qualifier("courseDao")
private CourseDao courseDao;
@Autowired
@Qualifier("lessonDao")
private LessonDao lessonDao;
@Autowired
private PageHandler<Course> pageHandler;
public CourseController() {
super();
}
@RequestMapping(value = "/courses", method = RequestMethod.GET)
public String listCourse(Model model, String pageNum, String pageSize) {
int pageNow = 1;
int pagesize = 10;
if (pageSize != null) {
pagesize = Integer.valueOf(pageSize);
}
if (pageSize != null) {
pageNow = Integer.valueOf(pageNum);
}
Page<Course> page = pageHandler
.getPage(pageNow, pagesize, Course.class);
model.addAttribute("module", "course");
model.addAttribute("page", page);
return "backend/course/list";
}
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(Model model) {
List<Direction> directions = directionDao.getEnabledDirections();
model.addAttribute("directions", directions);
return "backend/course/add";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(String title, String description, String difficulty,
int categoryId, int directionId, MultipartFile image,
String enabled, RedirectAttributes redirectAttributes) {
Category category = categoryDao.getCategory(categoryId);
Direction direction = directionDao.getDirection(directionId);
String imagePath = "/opt/LearningCommunity/thumb";
String imageUrl = MultipartFileUtils.saveFile(image, imagePath);
Course course = new Course(category, direction, title, description, 0,
0, new Date(), difficulty, imageUrl, "0", enabled);
courseDao.addCourse(course);
redirectAttributes.addFlashAttribute("courseMsg", "添加课程信息成功");
return "redirect:/manage/course/courses";
}
@RequestMapping(value = "/view/{courseId}", method = RequestMethod.GET)
public String view(@PathVariable int courseId, Model model) {
Course course = courseDao.getCourse(courseId);
List <Direction> directions = directionDao.getEnabledDirections();
List<CourseLesson> lessons = lessonDao.getLessonsOfCourse(courseId);
model.addAttribute("course", course);
model.addAttribute("directions",directions);
model.addAttribute("lessons", lessons);
return "backend/course/view";
}
@RequestMapping(value = "/edit/{courseId}", method = RequestMethod.GET)
public String edit(@PathVariable int courseId, Model model) {
Course course = courseDao.getCourse(courseId);
List<Direction> directions = directionDao.getEnabledDirections();
model.addAttribute("course", course);
model.addAttribute("directions", directions);
return "backend/course/edit";
}
@RequestMapping(value = "/edit/{courseId}", method = RequestMethod.POST)
public String edit(@PathVariable int courseId, String title,
String description, String difficulty, int categoryId,
int directionId, MultipartFile image, String enabled,
RedirectAttributes redirectAttributes) {
Course course = courseDao.getCourse(courseId);
if (image.getSize() == 0) {
courseDao.update(courseId, title, description, difficulty,
categoryId, directionId, enabled);
} else {
String imagePath = course.getImageUrl();
String imageUrl = MultipartFileUtils.updateFile(image, imagePath);
courseDao.update(courseId, title, description, difficulty,
categoryId, directionId, enabled, imageUrl);
}
redirectAttributes.addFlashAttribute("courseMsg", "修改课程信息成功");
return "redirect:/manage/course/courses";
}
@RequestMapping(value = "/delete/{courseId}", method = RequestMethod.GET)
public String delete(@PathVariable int courseId, Model model,RedirectAttributes redirectAttributes) {
Course course = courseDao.getCourse(courseId);
MultipartFileUtils.removeFile(course.getImageUrl());
courseDao.delete(courseId);
redirectAttributes.addFlashAttribute("courseMsg", "删除课程成功");
return "redirect:/manage/course/courses";
}
@RequestMapping(value = "/addlesson/{courseId}", method = RequestMethod.GET)
public String addLesson(@PathVariable int courseId, Model model) {
Course course = courseDao.getCourse(courseId);
model.addAttribute("course", course);
return "backend/course/addlesson";
}
@RequestMapping(value = "/addlesson/{courseId}", method = RequestMethod.POST)
public String addLesson(@PathVariable int courseId, Model model,
String title, String summary, String type, String content,
MultipartFile video, RedirectAttributes redirectAttributes,
HttpSession session) {
Course course = courseDao.getCourse(courseId);
CourseLesson courseLesson = new CourseLesson(course, title, summary, type);
if(type.equals("text")){
System.out.println(content);
courseLesson.setContent(content);
}else{
String videoPath = "/opt/LearningCommunity/video/"+courseId;
String videoUrl = MultipartFileUtils.saveFile(video, videoPath);
courseLesson.setVideoUrl(videoUrl);
}
lessonDao.addLesson(courseLesson);
redirectAttributes.addAttribute("courseMsg", "添加课程成功");
return "redirect:/manage/course/view/"+courseId;
}
@RequestMapping(value = "/editlesson/{lessonId}", method = RequestMethod.GET)
public String editLesson(@PathVariable int lessonId, Model model){
CourseLesson lesson = lessonDao.getLesson(lessonId);
model.addAttribute("lesson", lesson);
return "backend/course/editlesson";
}
@RequestMapping(value = "/editlesson/{lessonId}", method = RequestMethod.POST)
public String editLesson(@PathVariable int lessonId, Model model, String title, String summary, String type, String content,
MultipartFile video, RedirectAttributes redirectAttributes){
CourseLesson lesson = lessonDao.getLesson(lessonId);
String oldType = lesson.getType();
String videoUrl = null;
if(oldType.equals("video") && (video.getSize() != 0 || type.equals("text"))){
String videoPath = lesson.getVideoUrl();
if(type.equals("text")){
MultipartFileUtils.removeFile(videoPath);
}else{
videoUrl = MultipartFileUtils.updateFile(video, videoPath);
}
}
lessonDao.update(lessonId, title, summary, type, videoUrl, content);
redirectAttributes.addAttribute("courseMsg", "修改课程成功");
return "backend/course/editlesson";
}
}