cz.PA165.vozovyPark.controller.VehicleController.java Source code

Java tutorial

Introduction

Here is the source code for cz.PA165.vozovyPark.controller.VehicleController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.PA165.vozovyPark.controller;

import cz.PA165.vozovyPark.dto.UserDTO;
import cz.PA165.vozovyPark.dto.VehicleDTO;
import cz.PA165.vozovyPark.enums.UserClassEnum;
import cz.PA165.vozovyPark.service.DriveService;
import cz.PA165.vozovyPark.service.ServiceIntervalService;
import cz.PA165.vozovyPark.service.UserService;
import cz.PA165.vozovyPark.service.VehicleService;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author jzelezny
 */
@Controller
public class VehicleController {

    @Autowired
    private VehicleService vehicleService;
    @Autowired
    private UserService userService;
    @Autowired
    private ServiceIntervalService serviceIntervalService;
    @Autowired
    private DriveService driveService;

    @RequestMapping(value = "vehicle/allVehicles")
    public String viewAllVehicles(ModelMap model) {
        List<UserDTO> userLoggedInList = userService.getByUsername(getLoggedUsername());
        if (userLoggedInList.size() == 1) {
            UserDTO userLoggedIn = userLoggedInList.get(0);
            if (userLoggedIn.getIsAdmin()) {
                model.put("allVehicles", vehicleService.findAll());
            } else {
                model.put("allVehicles", vehicleService.findByUserClass(userLoggedIn.getUserClass()));
            }
            return "vehicle/allVehicles";
        } else {
            model.put("allVehicles", vehicleService.findAll());
            return "vehicle/allVehicles";
        }
    }

    @RequestMapping(value = "/vehicle/{vehicleId}")
    public String viewVehicle(ModelMap model, @PathVariable Long vehicleId) { //retype Long to String? - where?
        model.put("vehicleById", vehicleService.getById(vehicleId));
        return "/vehicle/vehicleView";
    }

    @RequestMapping(value = "/vehicle/new", method = RequestMethod.GET)
    public String showAddVehicleForm(ModelMap model) {
        model.addAttribute("vehicle", new VehicleDTO());
        model.put("userClass", UserClassEnum.values());
        return "/vehicle/vehicleForm";
    }

    @RequestMapping(value = "/vehicle/new", method = RequestMethod.POST)
    public String addVehicle(@Valid @ModelAttribute("vehicle") VehicleDTO vehicle, BindingResult result) { // @Valid validates model after binding user input to it
        if (result.hasErrors()) {
            return "/vehicle/vehicleForm";
        }
        vehicleService.createVehicle(vehicle);
        return "redirect:/vehicle/allVehicles";
    }

    @RequestMapping(value = "/vehicle/update/{vehicleId}", method = RequestMethod.GET)
    public String showEditForm(ModelMap model, @PathVariable("vehicleId") Long id) {
        VehicleDTO vehicle = vehicleService.getById(id);
        model.put("vehicle", vehicle);
        model.put("userClass", UserClassEnum.values());
        //        int thisYear = DateTime.now().getYear();
        //        for (int i = thisYear; i >= 1950;i--){
        //            model.put("yearMade",i);
        //        }
        return "/vehicle/vehicleUpdateForm";
    }

    @RequestMapping(value = "/vehicle/update/{vehicleId}", method = RequestMethod.POST)
    public String updateVehicle(@ModelAttribute("vehicle") VehicleDTO vehicle, @PathVariable("vehicleId") Long id,
            BindingResult result) {

        if (result.hasErrors()) {
            return "/vehicle/vehicleUpdateForm";
        }
        if (id == null) {
            return "/vehicle/vehicleUpdateForm";
        }
        vehicleService.updateVehicle(vehicle);
        return "redirect:/vehicle/allVehicles";
    }

    @RequestMapping(value = "/vehicle/delete/{vehicleId}", method = RequestMethod.GET)
    public String deleteVehicle(@PathVariable("vehicleId") Long id, ModelMap model, HttpServletRequest req) {
        VehicleDTO vehicle = vehicleService.getById(id);
        if (serviceIntervalService.findAllByVehicle(vehicle).isEmpty() && !driveService.hasVehicleDrives(vehicle)) {
            vehicleService.removeVehicle(vehicle);
        } else {
            req.getSession().setAttribute("message", "Vehicle has service intervals or drives..");
            return "redirect:/vehicle/" + vehicle.getId();
        }
        return "redirect:/vehicle/allVehicles";
    }

    public String getLoggedUsername() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        return auth.getName();
    }

}