FolderPropertiesService.java

package sk.iway.iwcm.system.elfinder;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;

import sk.iway.iwcm.Identity;
import sk.iway.iwcm.SetCharacterEncodingFilter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.findexer.FileIndexer;
import sk.iway.iwcm.findexer.ResultBean;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.users.UsersDB;

public class FolderPropertiesService {
    
    private FolderPropertiesService() {
        // private constructor to hide the implicit public one
    }
    
    public static FolderPropertiesEntity getOneItem(HttpServletRequest request, Identity user, FolderPropertiesRepository repository) {
        FolderPropertiesEntity fpe;

        //We need DIR - required parameter
        String dir = request.getParameter("dir");
        if(Tools.isEmpty(dir) == true)
            throw new ResponseStatusException(HttpStatus.FORBIDDEN);
        dir = dir.replaceAll("\\s+","");

        //Check perms
        if(user.isFolderWritable(dir) == false)
            throw new ResponseStatusException(HttpStatus.FORBIDDEN);

        fpe = repository.findByDirUrl(dir).orElse(null);
        if(fpe == null) {
            //This URL is not in DB
            fpe = new FolderPropertiesEntity();
            fpe.setDirUrl(dir);
        }

        FolderPropertiesEditorFields editorFields = new FolderPropertiesEditorFields();
        editorFields.prepareFolderProperties(fpe, request);
        return fpe;
    }

    public static void indexFolder(String dir, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //If user is not logged, redirect him to loggon
        Identity user = UsersDB.getCurrentUser(request);
        List<ResultBean> indexedFiles = new ArrayList<>();
        response.setContentType("text/html; charset=" + SetCharacterEncodingFilter.getEncoding());
                    
        PrintWriter out = response.getWriter();
        Prop prop = Prop.getInstance(request);
        out.println("<html><body>");
        if (user.isFolderWritable(dir)) {
            if (Tools.isNotEmpty(dir) && dir != null && dir.contains("WEB-INF") == false) {
                //budeme rovno vypisovat ak sa nejedna o hromadne indexovanie
                sk.iway.iwcm.Encoding.setResponseEnc(request, response, "text/html");
                for (int i = 0; i < 10; i++) {
                    out.println("                                                                             ");
                }
                out.flush();
                FileIndexer.indexDir(dir, indexedFiles, request, out);
            }
        }
                    
        out.println(prop.getText("findex.done"));
        out.println("</body></html>");
    }

    public static void copyFolderProperties(String srcPath, String newPath, HttpServletRequest request) {
        if(Tools.isEmpty(srcPath) == true || Tools.isEmpty(newPath) == true)
            return;

        Identity loggedUser = UsersDB.getCurrentUser(request);    
        if(loggedUser.isFolderWritable(srcPath) == false) 
            return;

        FolderPropertiesRepository folderPropertiesRepository = Tools.getSpringBean("folderPropertiesRepository", FolderPropertiesRepository.class);
        FolderPropertiesEntity fromEntity = folderPropertiesRepository.findByDirUrl(srcPath).orElse(null);
        FolderPropertiesEntity toEntity = folderPropertiesRepository.findByDirUrl(newPath).orElse(null);

        if(fromEntity != null && toEntity != null) {
            //SWAP values
            toEntity.setLogonDocId(fromEntity.getLogonDocId());
            toEntity.setIndexFullText(fromEntity.isIndexFullText());
            toEntity.setPasswordProtected(fromEntity.getPasswordProtected());

            folderPropertiesRepository.save(toEntity);
        } else if(fromEntity != null && toEntity == null) {
            //Create new entity for new path
            fromEntity.setId(null);
            fromEntity.setDirUrl(newPath);

            folderPropertiesRepository.save(fromEntity);
        } else if(fromEntity == null && toEntity == null) {
            //BOTH null, create empty entity for new path
            toEntity = new FolderPropertiesEntity();
            toEntity.setDirUrl(newPath);
            toEntity.setLogonDocId(-1);

            folderPropertiesRepository.save(toEntity);
        }
    }

    public static void deleteFolderProperties(String path, HttpServletRequest request) {
        if(Tools.isEmpty(path) == true) 
            return;

        Identity loggedUser = UsersDB.getCurrentUser(request);    
        if(loggedUser.isFolderWritable(path) == false) 
            return;

        FolderPropertiesRepository folderPropertiesRepository = Tools.getSpringBean("folderPropertiesRepository", FolderPropertiesRepository.class);
        folderPropertiesRepository.deleteByPathLike(path + "%");
    }
}