DirTreeRestController.java
package sk.iway.iwcm.system.elfinder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
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.FileTools;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.admin.jstree.JsTreeMoveItem;
import sk.iway.iwcm.admin.jstree.JsTreeRestController;
import sk.iway.iwcm.io.IwcmFile;
/**
* REST rozhranie pre zobrazenie stromovej struktury v type pola json
* http://docs.webjetcms.sk/v2021/#/developer/datatables-editor/field-json
*/
@RestController
@RequestMapping(value = "/admin/rest/elfinder/tree")
@PreAuthorize(value = "@WebjetSecurityService.isAdmin()")
public class DirTreeRestController extends JsTreeRestController<DirTreeItem> {
@Override
protected void tree(Map<String, Object> result, JsTreeMoveItem item) {
String parentPath = item.getId();
if ("-1".equals(parentPath)) parentPath = "/";
boolean isRoot = "/".equals(parentPath);
Identity user = getUser();
List<DirTreeItem> items;
String click = getRequest().getParameter("click");
if ("-1".equals(item.getId()) && isRoot && click != null && click.contains("-root") && user.isFolderWritable("/")) {
//show Root folder for first call (id is sent as -1 instead of / for first request)
DirTreeItem rootItem = new DirTreeItem(new IwcmFile(Tools.getRealPath("/")));
rootItem.setId("/");
rootItem.setText(getProp().getText("stat_settings.group_id"));
rootItem.setIcon("ti ti-home");
rootItem.getState().setLoaded(true);
rootItem.getState().setOpened(true);
items = new ArrayList<>();
items.add(rootItem);
} else {
List<IwcmFile> files;
if (isRoot || user.isFolderWritable(parentPath)) {
IwcmFile directory = new IwcmFile(Tools.getRealPath(parentPath));
files = Arrays.asList(FileTools.sortFilesByName(directory.listFiles(file -> {
if (file.isFile()) return false;
//System.out.println("path="+file.getVirtualPath()+" isRoot="+isRoot+" isJarPackaging="+file.isJarPackaging());
if (isRoot==false && file.isJarPackaging()) return false;
if (user.isFolderWritable(file.getVirtualPath())==false) return false;
return true;
})));
} else {
files = new ArrayList<>();
}
items = files.stream().map(f -> new DirTreeItem(f)).collect(Collectors.toList());
}
result.put("result", true);
result.put("items", items);
}
@Override
protected void move(Map<String, Object> result, JsTreeMoveItem item) {
result.put("result", false);
result.put("error", getProp().getText("components.jstree.access_denied__group"));
return;
}
@Override
protected void save(Map<String, Object> result, DirTreeItem item) {
result.put("result", false);
result.put("error", getProp().getText("components.jstree.access_denied__group"));
return;
}
@Override
protected void delete(Map<String, Object> result, DirTreeItem item) {
result.put("result", false);
result.put("error", getProp().getText("components.jstree.access_denied__group"));
return;
}
@Override
public boolean checkAccessAllowed(HttpServletRequest request) {
//prava kontrolujeme hore v cykle
return true;
}
}