FilePropertiesRestController.java

package sk.iway.iwcm.system.elfinder;

import java.util.ArrayList;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;

import sk.iway.iwcm.Logger;
import sk.iway.iwcm.PathFilter;
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/elfinder/file-properties/")
@PreAuthorize("@WebjetSecurityService.hasPermission('cmp_elfinder')")
@Datatable
public class FilePropertiesRestController extends DatatableRestControllerV2<FilePropertiesDTO, Long> {

    private HttpServletResponse response;
    
    @Autowired
    public FilePropertiesRestController(HttpServletResponse response) {
        super(null);
        this.response = response;
    }

    @Override
    public Page<FilePropertiesDTO> getAllItems(Pageable pageable) {
        return new DatatablePageImpl<>( new ArrayList<>() );
    }

    @Override
    public FilePropertiesDTO getOneItem(long id) {
        return FilePropertiesService.getOneItem(getRequest(), getUser());
    }

    @Override
    public void beforeSave(FilePropertiesDTO entity) {
        if(getUser().isFolderWritable(entity.getDirPath() + "/") == false)   
            throw new ResponseStatusException(HttpStatus.FORBIDDEN);
    }

    /* IT'S ALWAYS INSERT - because editor is always opened as create */
    @Override
    public FilePropertiesDTO insertItem(FilePropertiesDTO entity) {
        return FilePropertiesService.saveFile(entity, getRequest(), getUser());
    }

    @Override
    public void afterSave(FilePropertiesDTO entity, FilePropertiesDTO saved) {
        //refreshni zoznam v PathFilter
        PathFilter.reloadProtectedDirs();
    }

    @GetMapping("/fulltext-index")
    public void indexFolder(@RequestParam(required = true) String dir, @RequestParam(required = true) String file) {
        try {
            FilePropertiesService.indexFile(dir, file, getRequest(), response, getUser());
        } catch (Exception e) {
            Logger.error(e);
        }
    }
}