zebrinho.controller.TweetController.java Source code

Java tutorial

Introduction

Here is the source code for zebrinho.controller.TweetController.java

Source

/* Handles tweet and search related controllers
   Copyright (C) 2012  Artur Ventura
    
Author: Artur Ventura
    
This file is part of Zebrinho.
    
Zebrinho is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
Zebrinho is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
package zebrinho.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.springframework.http.HttpStatus;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;

import zebrinho.domain.Tweet;
import zebrinho.domain.User;

@Controller
public class TweetController extends ZebrinhoController {

    @ResponseStatus(value = HttpStatus.NOT_FOUND)
    public static class ResourceNotFoundException extends RuntimeException {
    }

    @RequestMapping(value = "/tweet", method = RequestMethod.POST)
    public ModelAndView tweet(HttpServletRequest request, @RequestParam("tweet") String tweet) {
        User user = getLoggedUser(request);
        ModelAndView mv = new ModelAndView("redirect:/");
        if (user == null) {
            return mv;
        } else {
            user.tweet(tweet);
            return mv;
        }

    }

    @RequestMapping(value = "/tweetAsync", method = RequestMethod.POST)
    @ResponseBody
    public String tweetAsync(HttpServletRequest request, @RequestParam("tweet") String tweet) {
        User user = getLoggedUser(request);
        if (user == null) {
            return "ERROR";
        } else {
            user.tweet(tweet);
            return "OK";
        }
    }

    @RequestMapping(value = "/getTweetsAsync", method = RequestMethod.GET)
    @ResponseBody
    public String getTweetsAsync(HttpServletRequest request, HttpServletResponse response) {

        User user = getLoggedUser(request);
        if (user == null) {
            return "ERROR";
        } else {
            List<Tweet> wall = Tweet.forUserWall(user);
            JSONArray list = new JSONArray();
            for (Tweet tweet : wall) {
                JSONObject obj = new JSONObject();
                obj.put("content", tweet.getContent());
                obj.put("date", tweet.getFormatedDate());
                obj.put("user", tweet.getUser().getUsername());
                list.add(obj);
            }
            return list.toJSONString();
        }
    }

    @RequestMapping(value = "/user/{username}", method = RequestMethod.GET)
    public ModelAndView user(HttpServletRequest request, @PathVariable("username") String username) {
        User user = getLoggedUser(request);

        if (user == null) {
            return new ModelAndView("redirect:/");
        } else {
            User requestUser = User.fromUsername(username);

            if (requestUser == null) {
                throw new ResourceNotFoundException();
            }
            ModelAndView mv = new ModelAndView("user");
            mv.addObject("user", requestUser);
            mv.addObject("username", user.getUsername());
            mv.addObject("isOwn", user.getId() == requestUser.getId());
            mv.addObject("follows", user.follows(requestUser));
            return mv;
        }

    }

    @RequestMapping(value = "/follow/{username}", method = RequestMethod.GET)
    public ModelAndView follow(HttpServletRequest request, @PathVariable("username") String username) {
        User user = getLoggedUser(request);
        if (user == null) {
            return new ModelAndView("redirect:/");
        } else {
            User requestUser = User.fromUsername(username);
            user.follow(requestUser);
            ModelAndView mv = new ModelAndView("redirect:/user/" + requestUser.getUsername());
            return mv;
        }
    }

    @RequestMapping(value = "/unfollow/{username}", method = RequestMethod.GET)
    public ModelAndView unfollow(HttpServletRequest request, @PathVariable("username") String username) {
        User user = getLoggedUser(request);
        if (user == null) {
            return new ModelAndView("redirect:/");
        } else {
            User requestUser = User.fromUsername(username);
            user.unfollow(requestUser);
            ModelAndView mv = new ModelAndView("redirect:/user/" + requestUser.getUsername());
            return mv;
        }
    }

    @RequestMapping(value = "/search", method = RequestMethod.GET)
    public ModelAndView search(HttpServletRequest request) {
        User user = getLoggedUser(request);
        if (user == null) {
            return new ModelAndView("redirect:/");
        } else {
            ModelAndView mv = new ModelAndView("search");
            mv.addObject("username", user.getUsername());
            return mv;
        }
    }

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    public ModelAndView searchDo(HttpServletRequest request, @RequestParam("username") String username) {
        User user = getLoggedUser(request);
        if (user == null) {
            return new ModelAndView("redirect:/");
        } else {
            ModelAndView mv = new ModelAndView("search");
            List<User> users = User.all();
            List<User> result = new ArrayList<User>();
            for (User requestUser : users) {
                if (requestUser.getUsername().contains(username)) {
                    result.add(requestUser);
                }
            }
            mv.addObject("username", user.getUsername());
            mv.addObject("searchUsername", username);
            mv.addObject("users", result);
            return mv;
        }
    }
}