/*
* Copyright 2011 the original author or authors.
*
* 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.xiaozhi.blog.web;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import com.tianji.test.core.redis.LoginHelper;
import com.xiaozhi.blog.formbean.UserForm;
import com.xiaozhi.blog.service.BlogService;
import com.xiaozhi.blog.service.FollowerService;
import com.xiaozhi.blog.service.FollowingService;
import com.xiaozhi.blog.service.UserService;
import com.xiaozhi.blog.utils.RetwisSecurity;
import com.xiaozhi.blog.utils.UserFormValidator;
import com.xiaozhi.blog.vo.Post;
import com.xiaozhi.blog.vo.User;
import com.xiaozhi.blog.vo.WebPost;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
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.bind.annotation.ResponseBody;
/**
* Annotation-driven controller for Retwis.
*
* @author Costin Leau
*/
@Controller
public class RetwisController {
private static Log logger = LogFactory.getLog(RetwisController.class);
@Autowired
private final UserService retwis;
@Autowired
private BlogService blogService;
@Autowired
public RetwisController(UserService twitter) {
this.retwis = twitter;
}
@Autowired
private FollowerService followerService;
@Autowired
private FollowingService followingService;
@Autowired
private RetwisSecurity retwisSecurity;
@Value(value="#{globalProperties['blog.list.pagesize']}")
private int pageSize;
@Autowired
private UserFormValidator userFormValidator;
@Autowired
private UserService userService;
/**
* 登录用户(自己)首页
* @param page
* @param model
* @return
*/
@RequestMapping("/main")
public String root(@RequestParam(required = false,defaultValue="1") Integer page, HttpServletRequest request,Model model) {
String targetUid = LoginHelper.getUserId();
model.addAttribute("post", new Post());
model.addAttribute("targetUid", targetUid);
model.addAttribute("followers", followerService.getFollowers(targetUid));
model.addAttribute("following", followingService.getFollowing(targetUid));
model.addAttribute("user", retwis.getUserById(targetUid));
if (!targetUid.equals(LoginHelper.getUserId())) {
model.addAttribute("also_followed", followerService.alsoFollowed(LoginHelper.getUserId(), targetUid,1,6));
model.addAttribute("common_followers", followerService.commonFollowers(LoginHelper.getUserId(), targetUid,1,6));
model.addAttribute("follows", followingService.isFollowing(LoginHelper.getUserId(), targetUid));
}
model.addAttribute("posts", (LoginHelper.isUserSignedIn(targetUid) ? blogService.getTimelineByPage(targetUid, page,this.pageSize)
: blogService.getPostsByPage(targetUid, page,this.pageSize)));
model.addAttribute("sessionId", request.getSession().getId());
return "home";
}
/**
* 注册
* @param userForm
* @param vresult
* @param model
* @param request
* @return
*/
@RequestMapping("/signUp")
public String signUp(@Valid UserForm userForm, BindingResult vresult,Model model, HttpServletRequest request) {
this.userFormValidator.validate(userForm, vresult);
if(vresult.hasErrors()){
List<FieldError> errors = vresult.getFieldErrors();
for(FieldError error : errors){
logger.debug("error--->"+error.getDefaultMessage()+"--"+error.getCode());
logger.debug("error--->"+error.getCode());
logger.debug("error--->"+error.getRejectedValue());
logger.debug("error--->"+error.getField());
}
return "signIn";
}
boolean result = retwis.addUser(new User(userForm.getName(), userForm.getNickname(),userForm.getPass()
,userForm.getSchool(),userForm.getCompany()));
/**注册成功后直接登录*/
if(result)retwisSecurity.authenticateUserAndSetSession(userForm.getName(), userForm.getPass(), request);
return "redirect:/u/" + LoginHelper.getUserId();
}
/**
* 登录页面
* @param name
* @param pass
* @param model
* @param response
* @return
*/
@RequestMapping("/signIn")
public String signIn(Model model){
//int a = Integer.getInteger("xiaozhi");
model.addAttribute("userForm", new UserForm());
return "signin";
}
/**
* 某用户首页
* @param name
* @param replyto
* @param replypid
* @param page
* @param model
* @return
*/
@RequestMapping(value = "/u/{uid}", method = RequestMethod.GET)
public String posts(@PathVariable String uid,
@RequestParam(required = false,defaultValue="1") Integer page,
HttpServletRequest request,
Model model) {
String targetUid = uid;
model.addAttribute("post", new Post());
model.addAttribute("targetUid", targetUid);
model.addAttribute("followers", followerService.getFollowers(targetUid));
model.addAttribute("following", followingService.getFollowing(targetUid));
model.addAttribute("user", retwis.getUserById(targetUid));
if (!targetUid.equals(LoginHelper.getUserId())) {
model.addAttribute("also_followed", followerService.alsoFollowed(LoginHelper.getUserId(), targetUid,1,6));
model.addAttribute("common_followers", followerService.commonFollowers(LoginHelper.getUserId(), targetUid,1,6));
model.addAttribute("follows", followingService.isFollowing(LoginHelper.getUserId(), targetUid));
}
model.addAttribute("posts", (LoginHelper.isUserSignedIn(uid) ? blogService.getTimelineByPage(targetUid, page,this.pageSize)
: blogService.getPostsByPage(targetUid, page,this.pageSize)));
model.addAttribute("sessionId", request.getSession().getId());
return "home";
}
/**
* ajax 微薄分页
* @param name
* @param page
* @param model
* @return
*/
@RequestMapping(value = "/u/{uid}/page", method = RequestMethod.GET)
public String postsPage(@PathVariable String uid,@RequestParam(required = false,defaultValue="1") Integer page,Model model) {
String targetUid = uid;
model.addAttribute("posts", (LoginHelper.isUserSignedIn(uid) ? blogService.getTimelineByPage(targetUid, page,this.pageSize)
: blogService.getPostsByPage(targetUid, page,this.pageSize)));
return "/fragments/post";
}
/**
* 提交微薄
* @param name
* @param post
* @param model
* @param request
* @return
*/
@RequestMapping(value = "/u/{uid}/post", method = RequestMethod.POST)
public String posts(WebPost post, Model model) {
if(logger.isDebugEnabled())logger.debug("#########################"+post.toString());
WebPost returnPost=blogService.post(LoginHelper.getUserId(), post,false);
//if(post.getBindTianJi())restClient.postStatus(name, post.getContent());//同步天际status
model.addAttribute("p",returnPost);
return "/fragments/newpost";
}
/**
* 关注他
* @param name
* @return
*/
@RequestMapping("/u/{uid}/follow")
public String follow(@PathVariable String uid) {
followingService.follow(uid,LoginHelper.getUserId());
return "redirect:/u/" + uid;
}
/**
* 取消关注
* @param name
* @return
*/
@RequestMapping("/u/{uid}/stopfollowing")
public String stopFollowing(@PathVariable String uid) {
followingService.stopFollowing(uid,LoginHelper.getUserId());
return "redirect:/u/" + uid;
}
/**
* 所有的微薄
* @param page
* @param model
* @return
*/
@RequestMapping("/timeline")
public String timeline(@RequestParam(required = false) Integer page, Model model) {
// sanitize page attribute
//page = (page != null ? Math.abs(page) : 1);
// model.addAttribute("page", page + 1);
//Range range = new Range(page);
// model.addAttribute("posts", blogService.timeline(range));
//model.addAttribute("users", retwis.newUsers(new Range()));
if(logger.isDebugEnabled())logger.debug("#########################UserName :"+LoginHelper.getUserName());
model.addAttribute("user", LoginHelper.getUserName());
return "timeline";
}
/**
* 用户名是否重复
* @param name
* @return
*/
@RequestMapping("/isNameDuplicate")
public @ResponseBody boolean isNameDuplicate(@RequestParam(required = true) String name) {
return this.userService.isNameDuplicate(name);
}
/**
* 用户昵称是否重复
* @param nickname
* @return
*/
@RequestMapping("/isNickNameDuplicate")
public @ResponseBody boolean isNickNameDuplicate(@RequestParam(required = true) String nickname) {
return this.userService.isNickNameDuplicate(nickname);
}
}