JsTreeRestController.java
package sk.iway.iwcm.admin.jstree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.users.UsersDB;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* Title webjet8
* Company Interway a. s. (www.interway.sk)
* Copyright Interway a. s. (c) 2001-2019
* @author lpasek $
* @created 2020/07/13 12:50
*
* Abstraktny univerzalny RestController na pracu s JsTree
*
*/
public abstract class JsTreeRestController<T> {
private Prop prop;
@Autowired
private HttpServletRequest request;
/**
* Endpoint pre presun polozky v stromovej strukture
* @param item - {@link JsTreeMoveItem} presunuta polozka
* @return
*/
@PreAuthorize(value = "@WebjetSecurityService.checkAccessAllowedOnController(this)")
@PostMapping("/tree")
public ResponseEntity<Map<String, Object>> tree(@RequestBody JsTreeMoveItem item) {
Map<String, Object> result = new HashMap<>();
tree(result, item);
return ResponseEntity.ok(result);
}
/**
* Endpoint pre presun polozky v stromovej strukture
* @param item - {@link JsTreeMoveItem} presunuta polozka
* @return
*/
@PreAuthorize(value = "@WebjetSecurityService.checkAccessAllowedOnController(this)")
@PostMapping("/move")
public ResponseEntity<Map<String, Object>> moveItem(@RequestBody JsTreeMoveItem item) {
Map<String, Object> result = new HashMap<>();
move(result, item);
return ResponseEntity.ok(result);
}
/**
* Endpoint pre ulozenie polozky
* @param item - {@link JsTreeMoveItem} presunuta polozka
* @return
*/
@PreAuthorize(value = "@WebjetSecurityService.checkAccessAllowedOnController(this)")
@PostMapping("/save")
public ResponseEntity<Map<String, Object>> saveItem(@RequestBody T item) {
Map<String, Object> result = new HashMap<>();
save(result, item);
return ResponseEntity.ok(result);
}
/**
* Endpoint pre zmazanie polozky
* @param item - {@link JsTreeMoveItem} presunuta polozka
* @return
*/
@PreAuthorize(value = "@WebjetSecurityService.checkAccessAllowedOnController(this)")
@PostMapping("/delete")
public ResponseEntity<Map<String, Object>> deleteItem(@RequestBody T item) {
Map<String, Object> result = new HashMap<>();
delete(result, item);
return ResponseEntity.ok(result);
}
/**
* @param result - mapa s vysledkom, ocakava sa kluc result (boolean) a moze obsahovat error (String), ktory sa na FE zobrazi v toastr.error
* @param item - {@link JsTreeMoveItem} presunuta polozka
*/
protected abstract void tree(Map<String, Object> result, JsTreeMoveItem item);
/**
* @param result - mapa s vysledkom, ocakava sa kluc result (boolean) a moze obsahovat error (String), ktory sa na FE zobrazi v toastr.error
* @param item - {@link JsTreeMoveItem} presunuta polozka
*/
protected abstract void move(Map<String, Object> result, JsTreeMoveItem item);
/**
* @param result - mapa s vysledkom, ocakava sa kluc result (boolean) a moze obsahovat error (String), ktory sa na FE zobrazi v toastr.error
* @param item - {@link T} polozka na ulozenie
*/
protected abstract void save(Map<String, Object> result, T item);
/**
* @param result - mapa s vysledkom, ocakava sa kluc result (boolean) a moze obsahovat error (String), ktory sa na FE zobrazi v toastr.error
* @param item - {@link T} polozka na zmazanie
*/
protected abstract void delete(Map<String, Object> result, T item);
/**
* Metoda pre kontrolu pristupu pouzivatela pomocou requestu
* @param request
* @return
*/
public abstract boolean checkAccessAllowed(HttpServletRequest request);
protected Prop getProp() {
if (prop == null) {
prop = Prop.getInstance(getRequest());
}
return prop;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public Identity getUser(){
return UsersDB.getCurrentUser(getRequest());
}
}