DatabaseDeleteController.java

package sk.iway.iwcm.components.memory_cleanup.database;

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.*;

import sk.iway.iwcm.Tools;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
import sk.iway.iwcm.utils.Pair;

import java.util.Calendar;
import java.util.Date;
import java.util.Map;

/**
 * Trieda sluzi na cistenie pamate pre Statistiku, E-maily, Historiu stranok, Monitorovanie servera a Audit.
 *
 * @author pgajdos
 * @since 24.07.2020
 */
@Datatable
@RestController
@RequestMapping(value = "/admin/rest/settings/date-dependent-entries")
@PreAuthorize(value = "@WebjetSecurityService.hasPermission('cmp_data_deleting')")
public class DatabaseDeleteController extends DatatableRestControllerV2<DatabaseDeleteBean, Long> {

    private final DatabaseDeleteService cleanupService;

    @Autowired
    public DatabaseDeleteController(DatabaseDeleteService cleanupService) {
        super(null);
        this.cleanupService = cleanupService;
    }

    /**
     * Mapping sluziaci na ziskanie skupin zaznamov.
     *
     * @param pageable Pageable objekt obsahujuci parametre pre strankovanie.
     * @return Page<MemoryCleanupDateDependentEntity> Page objekt obsahujuci MemoryCleanupDateDependentEntity.
     */
    @Override
    public Page<DatabaseDeleteBean> getAllItems(Pageable pageable) {
        Prop prop = Prop.getInstance(getRequest());
        DatatablePageImpl<DatabaseDeleteBean> page = new DatatablePageImpl<>(cleanupService.getAllItems(prop));
        page.addOptions("groupId", cleanupService.getGroupNames(prop), "label", "value", false);

        return page;
    }

    /**
     * Metoda sluzi na filtrovanie/sortovanie skupin zaznamov. Metoda sa taktiez stara o ziskavanie poctu zaznamov na mazanie.
     * Zaznamy sa ziskaju vtedy, pokial sa filtruje podla datumu (pokial params obsahuju datum z filtru tabulky).
     *
     * @param params   Parametre podla ktorych sa vykanava filtrovanie/sortovanie.
     * @param pageable Pageable objekt obsahujuci parametre pre strankovanie.
     * @param search   Prazdny objekt MemoryCleanupDateDependentEntity (funkcionalita z ineho modulu).
     * @return Page<MemoryCleanupDateDependentEntity> Page objekt obsahujuci upraveny zoznam MemoryCleanupDateDependentEntity.
     */
    @Override
    public Page<DatabaseDeleteBean> searchItem(Map<String, String> params, Pageable pageable, DatabaseDeleteBean search) {

        DatatablePageImpl<DatabaseDeleteBean> page;
        String dateRange = params.get("searchFrom");
        if (Tools.isNotEmpty(dateRange)) {
            Pair<Date, Date> dates = getCleanStatDateValue(dateRange);
            Prop prop = Prop.getInstance(getRequest());
            page = new DatatablePageImpl<>(cleanupService.getMemoryCleanupEntities(dates.first, dates.second, prop));
        }
        else {
            Prop prop = Prop.getInstance(getRequest());
            page = new DatatablePageImpl<>(cleanupService.getAllItems(prop));
        }
        return page;
    }

    /**
     * Mapping sluziaci na mazanie zaznamov.
     *
     * @param entities DatatableRequest objekt obsahujuci datumovi ramec v ktorom sa maju zaznami vymazat.
     * @return boolean pre potvrdenie mazania.
     */
    @Override
    public boolean deleteItem(DatabaseDeleteBean entity, long id) {
        setForceReload(true);
        return cleanupService.delete(entity);
    }


    /**
     * Metoda sluzi na spracovanie prichadzajuceho casoveho ramca.
     *
     * @param statDate String obsahujuci casovi ramec.
     * @return Pair objekt s dvoma datumami od/do.
     */
    private Pair<Date, Date> getCleanStatDateValue(String statDate) {
        String filteredDate = statDate.replace("daterange:", "");
        String[] stringDateArray = new String[2];

        if (filteredDate.contains("-")) {
            if (filteredDate.startsWith("-")) {
                stringDateArray[0] = "";
                stringDateArray[1] = filteredDate.replace("-", "");
            } else {
                stringDateArray = filteredDate.split("-");
            }
        } else {
            stringDateArray[0] = filteredDate;
            stringDateArray[1] = "";
        }

        long[] longDateArray = new long[]{Tools.getLongValue(stringDateArray[0], 0), Tools.getLongValue(stringDateArray[1], new Date().getTime())};

        Date dateFrom = new Date(longDateArray[0]);
        //datum do mame 7.10.2020 ale myslime do konca dna, posunieme teda o jeden den
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(longDateArray[1]);
        cal.add(Calendar.DATE, 1);
        cal.add(Calendar.SECOND, -1);
        Date dateTo = cal.getTime();
        return new Pair<>(dateFrom, dateTo);
    }
}