FormsArchiveController.java

package sk.iway.iwcm.components.forms.archive;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import sk.iway.iwcm.InitServlet;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.components.forms.FormColumns;
import sk.iway.iwcm.database.SimpleQuery;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRequest;
import sk.iway.iwcm.system.datatable.DatatableResponse;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

@RestController
@Datatable
@RequestMapping(value = "/admin/rest/forms/archive-list")
@PreAuthorize(value = "@WebjetSecurityService.hasPermission('cmp_form')")
public class FormsArchiveController extends DatatableRestControllerV2<FormsArchiveEntity, Long> {

    private final FormsArchiveServiceImpl formsService;

    @Autowired
    public FormsArchiveController(FormsArchiveRepository formsRepository, FormsArchiveServiceImpl formsService) {
        super(formsRepository);
        this.formsService = formsService;
    }

    @Override
    public Page<FormsArchiveEntity> getAllItems(Pageable pageable) {
        Page<FormsArchiveEntity> page = new DatatablePageImpl<>(formsService.getFormsList(getUser()));
        return page;
    }

    @GetMapping(path = "/columns/{formName}", produces = MediaType.APPLICATION_JSON_VALUE)
    public FormColumns getColumnNames(@PathVariable String formName) {
        return formsService.getColumnNames(formName, getUser());
    }

    @GetMapping(path = "/data/{formName}", produces = MediaType.APPLICATION_JSON_VALUE)
    public Page<FormsArchiveEntity> getSubList(@PathVariable String formName, @RequestParam Map<String, String> params, Pageable pageable) {
        Page<FormsArchiveEntity> data;
        if (getRequest().getParameter("size")==null) data = formsService.findInDataByColumns(formName, getUser(), params, null);
        else data = formsService.findInDataByColumns(formName, getUser(), params, pageable);

        if ("true".equals(getRequest().getParameter("export"))) {
            formsService.setExportDate(data.getContent());
        }

        return data;
    }

    @GetMapping(path = "/data/{formName}/search/findByColumns")
    public Page<FormsArchiveEntity> findInDataByColumns(@PathVariable String formName, @RequestParam Map<String, String> params, Pageable pageable, FormsArchiveEntity search) {

        Page<FormsArchiveEntity> data = formsService.findInDataByColumns(formName, getUser(), params, pageable);

        if ("true".equals(getRequest().getParameter("export"))) {
            formsService.setExportDate(data.getContent());
        }

        return data;
    }

    @PreAuthorize(value = "@WebjetSecurityService.checkAccessAllowedOnController(this)")
	@PostMapping(value = "/data/{formName}/editor", consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<DatatableResponse<FormsArchiveEntity>> handleEditorFormDetail(@PathVariable String formName, HttpServletRequest request, @RequestBody DatatableRequest<Long, FormsArchiveEntity> datatableRequest) {
        return super.handleEditor(request, datatableRequest);
    }

    @GetMapping(path="/html")
    public String getHtml(@RequestParam long id) {
        FormsArchiveEntity entity = formsService.getById(id);
        if (entity == null || Tools.isEmpty(entity.getFormName())) return null;

        if (formsService.isFormAccessible(entity.getFormName(), getUser())==false) return null;

        //html kod necitame v entite, musime ziskat takto
        String html = (new SimpleQuery()).forString("SELECT html FROM forms_archive WHERE id=?", id);
        return html;
    }

    @Override
    public FormsArchiveEntity editItem(FormsArchiveEntity entity, long id) {
        String note = entity.getNote();

        formsService.updateNote(note, id);

        return formsService.getById(id);
    }

    @Override
    public boolean deleteItem(FormsArchiveEntity entity, long id) {
        return formsService.deleteItem(entity, id);
    }

    @Override
    public boolean checkItemPerms(FormsArchiveEntity entity, Long id) {
        if (InitServlet.isTypeCloud()) {
            if (entity.getDomainId()!=CloudToolsForCore.getDomainId()) return false;
            FormsArchiveEntity old = getRepo().getById(entity.getId());
            if (old != null && old.getDomainId()!=CloudToolsForCore.getDomainId()) return false;
        }
        return true;
    }
}