CalendarTypesRestController.java

package sk.iway.iwcm.components.calendar.rest;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import sk.iway.iwcm.Cache;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.components.calendar.jpa.CalendarTypesEntity;
import sk.iway.iwcm.components.calendar.jpa.CalendarTypesRepository;
import sk.iway.iwcm.components.users.userdetail.UserDetailsEntity;
import sk.iway.iwcm.components.users.userdetail.UserDetailsRepository;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;

@RestController
@RequestMapping("/admin/rest/calendar/types")
@PreAuthorize("@WebjetSecurityService.hasPermission('cmp_calendar')")
@Datatable
public class CalendarTypesRestController extends DatatableRestControllerV2<CalendarTypesEntity, Long> {

    private final CalendarTypesRepository calendarTypesRepository;
    private final UserDetailsRepository userDetailsRepository;

    @Autowired
    public CalendarTypesRestController(CalendarTypesRepository calendarTypesRepository, UserDetailsRepository userDetailsRepository) {
        super(calendarTypesRepository);
        this.calendarTypesRepository = calendarTypesRepository;
        this.userDetailsRepository = userDetailsRepository;
    }

    @Override
    public Page<CalendarTypesEntity> getAllItems(Pageable pageable) {

        Page<CalendarTypesEntity> items =  calendarTypesRepository.findAllByDomainId(CloudToolsForCore.getDomainId(), pageable);

        //Create page
        DatatablePageImpl<CalendarTypesEntity> page = new DatatablePageImpl<>(items);

        List<UserDetailsEntity> approvers = userDetailsRepository.findAllByAdmin(true);
        //Add default value
        page.addOption("approverId", getProp().getText("calendar_type.approver_select.none"), "-1", false);
        for(UserDetailsEntity approver : approvers) {
            page.addOption("approverId", approver.getFirstName() + " " + approver.getLastName(), approver.getId().toString(), false);
        }

        return page;
    }

    @Override
    public CalendarTypesEntity getOneItem(long id) {
        CalendarTypesEntity entity;
        if(id == -1) {
            entity = new CalendarTypesEntity();
            entity.setApproverId(-1);
        } else {
            entity = calendarTypesRepository.findFirstByIdAndDomainId(id, CloudToolsForCore.getDomainId()).orElse(null);
        }

        return entity;
    }

	@Override
	public void beforeSave(CalendarTypesEntity entity) {
        //Set domain id, not null
        if(entity.getId() == null || entity.getId() == -1)
            entity.setDomainId(CloudToolsForCore.getDomainId());
	}

    @Override
    public void afterSave(CalendarTypesEntity entity, CalendarTypesEntity saved) {
        Cache c = Cache.getInstance();
        String cacheKey = "sk.iway.iwcm.calendar.EventTypeDB.domain=" + CloudToolsForCore.getDomainId();
        c.removeObject(cacheKey);
    }


}