de.appsolve.padelcampus.admin.controller.reports.AdminReportsUtilizationController.java Source code

Java tutorial

Introduction

Here is the source code for de.appsolve.padelcampus.admin.controller.reports.AdminReportsUtilizationController.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 de.appsolve.padelcampus.admin.controller.reports;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.appsolve.padelcampus.controller.BaseController;
import de.appsolve.padelcampus.data.DateRange;
import de.appsolve.padelcampus.db.dao.BookingDAOI;
import de.appsolve.padelcampus.db.model.Booking;
import de.appsolve.padelcampus.spring.LocalDateEditor;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import static de.appsolve.padelcampus.utils.FormatUtils.DATE_HUMAN_READABLE_PATTERN;
import static org.springframework.web.bind.annotation.RequestMethod.POST;

/**
 * @author dominik
 */
@Controller()
@RequestMapping("/admin/reports/utilization")
public class AdminReportsUtilizationController extends BaseController {

    @Autowired
    BookingDAOI bookingDAO;

    @Autowired
    ObjectMapper objectMapper;

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(LocalDate.class, new LocalDateEditor(DATE_HUMAN_READABLE_PATTERN, false));
    }

    @RequestMapping()
    public ModelAndView getIndex() throws JsonProcessingException {
        LocalDate endDate = new LocalDate();
        LocalDate startDate = endDate.minusMonths(3);
        DateRange dateRange = new DateRange();
        dateRange.setStartDate(startDate);
        dateRange.setEndDate(endDate);
        return getIndexView(dateRange);
    }

    @RequestMapping(method = POST)
    public ModelAndView postIndex(@ModelAttribute("DateRange") DateRange dateRange) throws JsonProcessingException {
        return getIndexView(dateRange);
    }

    private ModelAndView getIndexView(DateRange dateRange) throws JsonProcessingException {
        ModelAndView mav = new ModelAndView("admin/reports/utilization/index");
        List<Booking> bookings = bookingDAO.findBlockedBookingsBetween(dateRange.getStartDate(),
                dateRange.getEndDate());

        Map<Long, Integer> map = new TreeMap<>();
        for (Booking booking : bookings) {
            LocalDate date = booking.getBookingDate();
            Long millis = date.toDateTimeAtStartOfDay().getMillis();
            Integer count = map.get(millis);
            if (count == null) {
                count = 1;
            } else {
                count++;
            }
            map.put(millis, count);
        }

        mav.addObject("chartData", objectMapper.writeValueAsString(map));
        mav.addObject("DateRange", dateRange);

        return mav;
    }

}