package com.zdcf.action;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.LocaleEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.support.RequestContextUtils;
import com.zdcf.base.BaseAction;
import com.zdcf.base.Constants;
import com.zdcf.model.User;
import com.zdcf.service.AirticleService;
import com.zdcf.service.MessageService;
import com.zdcf.service.UserService;
import com.zdcf.tool.StringUtil;
import com.zdcf.tool.Tools;
import com.zdcf.tool.UserSessionUtil;
@Controller
@RequestMapping("/")
public class IndexAction extends BaseAction{
private static Logger logger = Logger.getLogger(IndexAction.class);
private static final int pageSize = 10;
@Resource
private AirticleService airticleService;
@Resource
private MessageService messageService;
@Autowired
private UserService userService;
@RequestMapping("/index")
public String index(HttpServletRequest request,HttpServletResponse response,ModelMap model){
// if(!isMobile()){
return "/index/index";
// }else{
// List<HashMap<String, Object>> themelist = new ArrayList<HashMap<String, Object>>();
// themelist = messageService.findNextTheme(0,10);
// model.addAttribute("themelist", themelist);
//
// List<HashMap<String, Object>> zhihuAirticlelist = new ArrayList<HashMap<String, Object>>();
// zhihuAirticlelist = messageService.findNextZhihuAirticle(0, 10);
// model.addAttribute("zhihuAirticlelist", zhihuAirticlelist);
//
// return "mobile/index";
// }
}
@RequestMapping("/loginvalidate")
public @ResponseBody Map<String, Object> loginvalidate(@RequestParam(value="username", required=false) String username,@RequestParam(value="password", required=false) String pwd,HttpSession httpSession){
Map<String, Object> map = this.initMapStatus();
if(StringUtil.isEmpty(username)||StringUtil.isEmpty(pwd)){
map.put("status", Boolean.FALSE);
return map;
}
User user=userService.getUserByName(username);
if(user!=null&&user.getPassword()!=null&&pwd.equals(user.getPassword()))
{
UserSessionUtil.setUser(user);
map.put("status", Boolean.TRUE);
}else
map.put("status", Boolean.FALSE);
return map;
}
@RequestMapping("/checkUsername")
public @ResponseBody Map<String, Object> checkUsername(@RequestParam(value="username") String username){
Map<String, Object> map = this.initMapStatus();
if(null==username){
map.put("status", Boolean.FALSE);
return map;
}
User user=userService.getUserByName(username);
if(user!=null)
{
map.put("status", Boolean.FALSE);
}else
map.put("status", Boolean.TRUE);
return map;
}
@RequestMapping("/login")
public String login(){
return "index/login";
}
@RequestMapping("/logout")
public String logout(HttpSession httpSession){
httpSession.removeAttribute(Constants.USER_SESSION_KEY);
//TODO 删除在登陆后放入的浏览器的cookie
return "redirect:/movie/toMovieList";
}
/**
* 国家化语言
*
* @param modelMap
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/changeLanguage", method = {RequestMethod.POST,RequestMethod.GET})
public Map changeLanguage(
@RequestParam(
value="language", required=false) String language,
HttpServletRequest request,
HttpServletResponse reponse,
ModelMap modelMap) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("msg","");
map.put("res","false");
try {
request.getSession().setAttribute(Constants.SYS_LANGUAGE_SESSION_KEY, language);
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
if (localeResolver == null) {
logger.debug("No LocaleResolver found: not in a DispatcherServlet request?");
}
LocaleEditor localeEditor = new LocaleEditor();
localeEditor.setAsText(language);
localeResolver.setLocale(request, reponse, (Locale) localeEditor.getValue());
map.put("res", "true");
}
catch(Exception e){
logger.debug("修改系统语言 /changeLanguage.do", e);
}
return map;
}
/**
* 日历
*/
@RequestMapping("/calendar")
public String calendar(){
return "index/calendar";
}
@RequestMapping("/toRegister")
public String toRegister(HttpServletRequest request,HttpServletResponse response,ModelMap model){
return "index/register";
}
@RequestMapping("/register")
public String register(String username,String password,@RequestParam(
value="email", required=false) String email,ModelMap model,HttpServletRequest request){
if(StringUtil.isEmpty(username)||StringUtil.isEmpty(password)){
return "index/login";
}
User u=userService.getUserByName(username);
if(u!=null){
return "index/login";
}
String ip = Tools.getNoHTMLString(getIpAddr(request));
User user =new User();
user.setEmail(email);
user.setUsername(username);
user.setPassword(password);
user.setAvatar("defaultAvatar.jpg");
user.setIp(ip);
userService.register(user);
logger.info("ip:"+ip+" 注册了"+username);
UserSessionUtil.setUser(user);
return "index/userInfo";
}
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Real-IP");
if (null != ip && !"".equals(ip.trim())
&& !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (null != ip && !"".equals(ip.trim())
&& !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
}
return request.getRemoteAddr();
}
public Map<String, Object> initMapStatus() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("status", Boolean.TRUE);
map.put("msg", "");
return map;
}
@RequestMapping("/userInfo")
public String userInfo(@RequestParam(value="id", required=false)Integer id,ModelMap model){
User u = UserSessionUtil.currentUser();
if(null!=id&&u!=null){
if(!id.equals(u.getId())){
User user =userService.getUserById(id);
model.addAttribute("user", user);
}
}else if(null==u){
return "index/login";
}
return "index/userInfo";
}
}