Package com.skyline.wo.controller

Source Code of com.skyline.wo.controller.ArticleController

package com.skyline.wo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
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.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.skyline.base.controller.BaseController;
import com.skyline.base.exception.NoResourceException;
import com.skyline.base.exception.NoVisitPermissionException;
import com.skyline.base.type.Activity;
import com.skyline.base.type.Authority;
import com.skyline.common.bean.Page;
import com.skyline.common.util.AuthorityUtil;
import com.skyline.common.util.Constant;
import com.skyline.common.util.ViewPaths;
import com.skyline.common.util.WebHelper;
import com.skyline.user.model.User;
import com.skyline.wo.model.Article;
import com.skyline.wo.model.Category;
import com.skyline.wo.service.ArticleService;
import com.skyline.wo.service.CategoryService;

/**
* 日志模块的Controller
*
* @author Jairus Chan
*
*/
@Controller
@RequestMapping("/article")
public class ArticleController extends BaseController {

//  private static final Log LOGGER = LogFactory.getLog(ArticleController.class);

  @Autowired
  private CategoryService categoryService;

  @Autowired
  private ArticleService articleService;

  // @Autowired
  // private AuthorityUtil authorityUtil;

//  private @Value("${view.aricle.listarticle}")
//  String listArticleView;
//
//  private @Value("${view.aricle.addarticle}")
//  String addArticleView;
//
//  private @Value("${view.aricle.viewarticle}")
//  String viewArticleView;
//
//  private @Value("${view.user.login}")
//  String userLoginView;
//
//  private @Value("${view.article.managecategory}")
//  String manageCategoryView;
//
//  private @Value("${view.article.modifyarticle}")
//  String modifyArticleView;

  private @Value("${article.listarticle.pagesize}")
  Integer listArticlePageSize;

  private String requestFrom = "article/category/manage" + URL_SUFFIX;

  @RequestMapping(value = "/list/user/{userid}", method = RequestMethod.GET)
  public ModelAndView listArticleByUserId(Page page, @PathVariable Long userid) {
    ModelAndView mav = new ModelAndView();
    // Page page = new Page();
    page.setSize(listArticlePageSize);
    // page.setCurpage(1);
    Integer authority = AuthorityUtil.getAuthority(null, userid);
    List<Article> articles = articleService.getArticleByOwnerId(page, userid, authority);
    mav.addObject("ARTICLES", articles);
    mav.setViewName(ViewPaths.ARTICLE_LISTARTICLE);
    mav.addObject("OWNER_ID", userid);
    List<Category> categories = categoryService.getCategoryByOwnerId(userid);
    Category category = new Category();
    category.setId(Long.valueOf(0));
    category.setCategoryName("全部日志");
    categories.add(0, category);
    mav.addObject("CATEGORIES", categories);
    mav.addObject("AUTHORITY", authority);
    mav.addObject("CURRENT_CATEGORY", Long.valueOf(0));
    mav.addObject("page", page);
    return mav;
  }

  @RequestMapping(value = "/list/category/{ownerId}/{categoryId}", method = RequestMethod.GET)
  public ModelAndView listArticleByCategoryId(Page page, @PathVariable Long categoryId, @PathVariable Long ownerId) {
    ModelAndView mav = new ModelAndView();
    Category currentCategory = categoryService.getCategoryById(categoryId);
    if (currentCategory != null) {
      // Page page = new Page();
      page.setSize(listArticlePageSize);
      // page.setCurpage(1);
      Integer authority = AuthorityUtil.getAuthority(null, currentCategory.getId());

      List<Article> articles = articleService.getArticleByCategoryId(page, categoryId, ownerId, authority);
      mav.addObject("ARTICLES", articles);

      mav.setViewName(ViewPaths.ARTICLE_LISTARTICLE);
      mav.addObject("CATEGORY_Id", categoryId);

      List<Category> categories = categoryService.getCategoryByOwnerId(currentCategory.getOwnerId());
      Category category = new Category();
      category.setId(Long.valueOf(0));
      category.setCategoryName("全部日志");
      categories.add(0, category);
      mav.addObject("CATEGORIES", categories);

      mav.addObject("CURRENT_CATEGORY", categoryId);

      mav.addObject("OWNER_ID", currentCategory.getOwnerId());
      mav.addObject("page", page);

      mav.addObject("AUTHORITY", authority);
      return mav;
    } else {
      throw new NoResourceException();
      // return null;
    }
  }

  @RequestMapping(value = "/view/{articleId}", method = RequestMethod.GET)
  public ModelAndView viewArticleByArticleId(@PathVariable Long articleId) {
    // Date d1=new Date();
    ModelAndView mav = new ModelAndView();
    Article article = articleService.getArticleById(articleId);
    Integer authority = AuthorityUtil.getAuthority(null, article.getOwnerId());
    if (authority < article.getAuthority()) {
      throw new NoVisitPermissionException();
    } else {
      articleService.addVisitNum(articleId);
    }
    mav.addObject("ARTICLE", article);
    mav.addObject("AUTHORITY", authority);
    mav.setViewName(ViewPaths.ARTICLE_VIEWARTICLE);
    // Date d2=new Date();
    // System.out.println(d2.getTime()-d1.getTime());
    return mav;
  }

  @RequestMapping(value = "/prior/{categoryId}/{articleId}/{readAuthority}", method = RequestMethod.GET)
  public ModelAndView viewPriorArticle(@PathVariable Long articleId, @PathVariable Long categoryId, @PathVariable Integer readAuthority) {
    // Date d1=new Date();
    ModelAndView mav = new ModelAndView();
    Article article = articleService.getPriorArticle(categoryId, articleId, readAuthority);
    if (article != null) {
      Integer authority = AuthorityUtil.getAuthority(null, article.getOwnerId());
      if (authority < readAuthority || authority < article.getAuthority()) {
        throw new NoVisitPermissionException();
      } else {
        mav.addObject("AUTHORITY", authority);
        articleService.addVisitNum(articleId);
      }
    } else {
      return viewArticleByArticleId(articleId);
    }
    mav.addObject("ARTICLE", article);
    mav.setViewName(ViewPaths.ARTICLE_VIEWARTICLE);
    // Date d2=new Date();
    // System.out.println(d2.getTime()-d1.getTime());
    return mav;
  }

  @RequestMapping(value = "/next/{categoryId}/{articleId}/{readAuthority}", method = RequestMethod.GET)
  public ModelAndView viewNextArticle(@PathVariable Long articleId, @PathVariable Long categoryId, @PathVariable Integer readAuthority) {
    ModelAndView mav = new ModelAndView();
    Article article = articleService.getNextArticle(categoryId, articleId, readAuthority);
    if (article != null) {
      Integer authority = AuthorityUtil.getAuthority(null, article.getOwnerId());
      if (authority < readAuthority || authority < article.getAuthority()) {
        throw new NoVisitPermissionException();
      } else {
        mav.addObject("AUTHORITY", authority);
        articleService.addVisitNum(articleId);
      }
    } else {
      return viewArticleByArticleId(articleId);
    }
    mav.addObject("ARTICLE", article);
    mav.setViewName(ViewPaths.ARTICLE_VIEWARTICLE);
    return mav;
  }

  @RequestMapping(value = "add", method = RequestMethod.GET)
  public ModelAndView addArticleRequest() {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      mav.setViewName(ViewPaths.ARTICLE_ADDARTICLE);
      List<Category> categories = categoryService.getCategoryByOwnerId(user.getId());
      mav.addObject("CATEGORIES", categories);
    } else {
      mav.addObject("REQUEST_FROM", "article/add" + URL_SUFFIX);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "add", method = RequestMethod.POST)
  public ModelAndView addArticleExecute(String title, String content, String digest, Long categoryId, String categoryName,
      Integer authority, String submitToken) {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      Article article = new Article(authority, user.getId(), user.getPortrait(), user.getNickname(), title, content, digest,
          categoryId, categoryName);
      article.setSubmitToken(submitToken);
      // //
      String errMsg = validateForm("addArticleForm", article);
      if (errMsg != null) {
        ModelAndView returnMav = addArticleRequest();
        return processValidationErrors("errMsg", errMsg, returnMav);
      }
      // //
      articleService.addArticle(article);
      mav.setViewName("redirect:" + "list/user/" + user.getId() + URL_SUFFIX);
    } else {
      mav.addObject("REQUEST_FROM", "article/add" + URL_SUFFIX);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "delete/{articleId}", method = RequestMethod.GET)
  public ModelAndView deleteArticle(@PathVariable Long articleId) {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      articleService.deleteArticle(articleId, user.getId());
      mav.setViewName("redirect:" + "../list/user/" + user.getId() + URL_SUFFIX);
    } else {
      mav.addObject("REQUEST_FROM", "article/add" + URL_SUFFIX);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "modify/{articleId}", method = RequestMethod.GET)
  public ModelAndView modifyArticleRequest(@PathVariable Long articleId) {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      Article article = articleService.getArticleById(articleId);
      if (article != null && article.getOwnerId().equals(user.getId())) {
        List<Category> categories = categoryService.getCategoryByOwnerId(user.getId());
        mav.addObject("ARTICLE", article);
        mav.addObject("CATEGORIES", categories);
        mav.setViewName(ViewPaths.ARTICLE_MODIFYARTICLE);
      } else {
        mav.addObject("REQUEST_FROM", "article/modify/" + articleId + URL_SUFFIX);
        mav.setViewName(ViewPaths.USER_LOGIN);
      }
    } else {
      mav.addObject("REQUEST_FROM", "article/modify/" + articleId + URL_SUFFIX);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "modify/{articleId}", method = RequestMethod.POST)
  public ModelAndView modifyArticleExecute(@PathVariable Long articleId, String title, String content, String digest, Long categoryId,
      String categoryName, Integer authority, String submitToken) {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      Article article = new Article(authority, user.getId(), user.getPortrait(), user.getNickname(), title, content, digest,
          categoryId, categoryName);
      article.setSubmitToken(submitToken);
      // //
      String errMsg = validateForm("modifyArticleForm", article);
      if (errMsg != null) {
        ModelAndView returnMav = modifyArticleRequest(articleId);
        return processValidationErrors("errMsg", errMsg, returnMav);
      }
      // //
      articleService.modifyArticle(articleId, authority, user.getId(), title, content, digest, categoryId, categoryName);
      mav.setViewName("redirect:../view/" + articleId + URL_SUFFIX);
    } else {
      mav.addObject("REQUEST_FROM", "article/modify/" + articleId + URL_SUFFIX);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "up/{articleId}", method = RequestMethod.POST)
  public @ResponseBody
  void up(@PathVariable Long articleId) {
    articleService.up(articleId);
  }

  @RequestMapping(value = "down/{articleId}", method = RequestMethod.POST)
  public @ResponseBody
  void down(@PathVariable Long articleId) {
    articleService.down(articleId);
  }

  @RequestMapping(value = "category/manage", method = RequestMethod.GET)
  public ModelAndView manageCategory() {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      List<Category> categories = categoryService.getCategoryByOwnerId(user.getId());
      mav.setViewName(ViewPaths.ARTICLE_MANAGECATEGORY);
      // mav.addObject(userid);
      mav.addObject("CATEGORIES", categories);
    } else {
      mav.addObject("REQUEST_FROM", requestFrom);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "category/add", method = RequestMethod.POST)
  public ModelAndView addCategory(String categoryName) {

    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user != null) {
      //FIXME 不要使用redirect
      categoryService.createCategory(user.getId(), user.getPortrait(), user.getNickname(), categoryName, Activity.NORMAL);
      mav.setViewName("redirect:" + "manage" + URL_SUFFIX);
    } else {
      mav.addObject("REQUEST_FROM", requestFrom);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "category/ajaxadd")
  public @ResponseBody
  List<Category> ajaxAddCategory(String categoryName) {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    if (user != null
        && categoryService.createCategory(user.getId(), user.getPortrait(), user.getNickname(), categoryName, Activity.NORMAL)) {
      return categoryService.getCategoryByOwnerId(user.getId());
    } else {
      return null;
    }
  }

  @RequestMapping(value = "category/modify", method = RequestMethod.POST)
  public ModelAndView modifyCategory(Long id, String categoryName) {

    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    Category category = categoryService.getCategoryById(id);
    if (user != null && category != null && user.getId().equals(category.getOwnerId())) {
      //FIXME 不要使用redirect
      categoryService.modifyCategory(id, categoryName, user.getId());
      mav.setViewName("redirect:" + "manage" + URL_SUFFIX);
    } else {
      mav.addObject("REQUEST_FROM", requestFrom);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }

  @RequestMapping(value = "category/delete/{id}", method = RequestMethod.GET)
  public ModelAndView deleteCategory(@PathVariable Long id) {
    User user = (User) WebHelper.getSessionAttribute(null, Constant.SESSION_USER);
    // TODO:获取对该分类的访问权限;
    Integer authority = Authority.PRIVATE;
    ModelAndView mav = new ModelAndView();
    Category category = categoryService.getCategoryById(id);
    if (user != null && category != null && user.getId().equals(category.getOwnerId())) {
      // categoryService.modifyCategory(id, authority,
      //FIXME 不要使用redirect
      categoryService.deleteCategory(id, user.getId(), authority);
      mav.setViewName("redirect:" + "../manage" + URL_SUFFIX);
    } else {
      mav.addObject("REQUEST_FROM", requestFrom);
      mav.setViewName(ViewPaths.USER_LOGIN);
    }
    return mav;
  }
}
TOP

Related Classes of com.skyline.wo.controller.ArticleController

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.