com.github.carlomicieli.nerdmovies.controllers.ShowController.java Source code

Java tutorial

Introduction

Here is the source code for com.github.carlomicieli.nerdmovies.controllers.ShowController.java

Source

/*
 * Copyright 2012 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.github.carlomicieli.nerdmovies.controllers;

import com.github.carlomicieli.nerdmovies.models.Movie;
import com.github.carlomicieli.nerdmovies.models.SearchMovieForm;
import com.github.carlomicieli.nerdmovies.models.Show;
import com.github.carlomicieli.nerdmovies.models.ShowForm;
import com.github.carlomicieli.nerdmovies.security.SecurityService;
import com.github.carlomicieli.nerdmovies.services.LocationService;
import com.github.carlomicieli.nerdmovies.services.MovieService;
import com.github.carlomicieli.nerdmovies.services.ShowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.validation.Valid;
import java.util.List;

/**
 * @author Carlo Micieli
 */
@Controller
@RequestMapping("/shows")
public class ShowController {
    private ShowService showService;
    private MovieService movieService;

    @Autowired
    private SecurityService securityService;
    @Autowired
    private LocationService locationService;

    @Autowired
    public ShowController(ShowService showService, MovieService movieService) {

        this.showService = showService;
        this.movieService = movieService;
    }

    // GET /shows/new

    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public String searchMovie(Model model) {
        model.addAttribute(new SearchMovieForm());
        return "show/new";
    }

    // POST /shows/new

    @RequestMapping(value = "/new", method = RequestMethod.POST)
    public String findMovies(@Valid SearchMovieForm form, BindingResult bindingResults, Model model) {

        if (bindingResults.hasErrors()) {
            return "show/new";
        }

        final List<Movie> movies = movieService.findMovies(form.getSearchCriteria());

        if (movies.size() == 1) {
            Movie m = movies.get(0);
            return String.format("redirect:/shows/%s/create", m.getSlug());
        }

        form.setResults(movies);
        model.addAttribute(form);
        return "show/new";
    }

    // GET /shows/{movieSlug}/create

    @RequestMapping(value = "/shows/{movieSlug}/create", method = RequestMethod.GET)
    public String createShow(@PathVariable String movieSlug, Model model) {
        final ShowForm sf = new ShowForm();
        sf.setMovie(movieService.findBySlug(movieSlug));
        model.addAttribute(sf);
        return "/show/create";
    }

    // POST /shows/{movie-slug}/create

    @RequestMapping(value = "/shows/create", method = RequestMethod.POST)
    public String save(@Valid ShowForm showForm, BindingResult bindingResults, Model model) {

        if (bindingResults.hasErrors()) {
            model.addAttribute(showForm);
            return "show/create";
        }

        double[] location = null;
        try {
            location = locationService.findLocation(showForm.getGeocodingAddress());
        } catch (Exception e) {
            e.printStackTrace();
        }

        final Show show = new Show();
        show.setHostedBy(securityService.getCurrentUser().getUsername());
        show.setMovie(showForm.getMovie());
        show.setDescription(showForm.getDescription());
        show.setDate(showForm.getDate());
        show.setAddress(showForm.getCompleteAddress());
        show.setLocation(location[0], location[1]);

        showService.create(show);
        return "show/view";
    }

    // GET /shows/new

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String list(Model model) {
        model.addAttribute("shows", showService.getAllShows());
        return "show/list";
    }

}