uoa-admin-tools/src/main/java/eu/dnetlib/uoaadmintools/services/MenuItemService.java

198 lines
7.1 KiB
Java

package eu.dnetlib.uoaadmintools.services;
import eu.dnetlib.uoaadmintools.dao.MenuItemDAO;
import eu.dnetlib.uoaadmintools.entities.menu.MenuItem;
import eu.dnetlib.uoaadmintools.entities.menu.MenuItemFull;
import eu.dnetlib.uoaadmintoolslibrary.handlers.MismatchingContentException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class MenuItemService {
private final Logger log = Logger.getLogger(this.getClass());
@Autowired
private MenuItemDAO menuItemDAO;
public MenuItem getMenuItem(String id) {
return menuItemDAO.findById(id);
}
public MenuItemFull getMenuItemFull(String id) {
return this.getMenuItemFull(id, 1);
}
public MenuItemFull getMenuItemFull(String id, int maxDepth) {
MenuItem menuItem = menuItemDAO.findById(id);
MenuItemFull menuItemFull = new MenuItemFull(menuItem);
if(maxDepth == 0) {
menuItemFull.setItems(new ArrayList<>());
return menuItemFull;
}
List<MenuItemFull> menuItemsFull = new ArrayList<>();
for(String menuItemString : menuItem.getItems()) {
menuItemsFull.add(this.getMenuItemFull(menuItemString, maxDepth-1));
}
menuItemFull.setItems(menuItemsFull);
return menuItemFull;
}
public List<MenuItem> getMenuItems(String portalPid) {
if(portalPid != null) {
return menuItemDAO.findByPortalPid(portalPid);
} else {
return menuItemDAO.findAll();
}
}
public List<MenuItem> getMenuItemsByParent(String parentId, String portalPid) {
if(portalPid != null) {
return menuItemDAO.findByParentItemIdAndPortalPid(parentId, portalPid);
} else {
return menuItemDAO.findByParentItemId(parentId);
}
}
public List<MenuItemFull> getRootMenuItemsFull(String portalPid) {
List<MenuItem> rootMenuItems = this.getMenuItemsByParent(null, portalPid);
List<MenuItemFull> rootMenuItemsFull = new ArrayList<>();
for(MenuItem rootMenuItem : rootMenuItems) {
MenuItemFull rootMenuItemFull = new MenuItemFull(rootMenuItem);
List<MenuItemFull> childrenMenuItemsFull = new ArrayList<>();
for(String childMenuItemString : rootMenuItem.getItems()) {
childrenMenuItemsFull.add(this.getMenuItemFull(childMenuItemString));
}
rootMenuItemFull.setItems(childrenMenuItemsFull);
rootMenuItemsFull.add(rootMenuItemFull);
}
return rootMenuItemsFull;
}
// public MenuItemFull saveAndReturn(MenuItemFull menuItemFull) {
// menuItemFull.setId(save(menuItemFull));
// return menuItemFull;
// }
public MenuItemFull insertMenuItem(MenuItem menuItem, String portalPid) {
// for(MenuItemFull childMenuItemFull : menuItemFull.getItems()) {
// childMenuItemFull.setId(this.save(childMenuItemFull));
// }
// MenuItem menuItem = getMenuItemByMenuItemFull(menuItemFull);
// menuItemDAO.save(menuItem);
//
// return menuItem.getId();
MenuItem parent = null;
if(menuItem.getParentItemId() != null && !menuItem.getParentItemId().equals("")) {
parent = getMenuItem(menuItem.getParentItemId());
if (!parent.getPortalPid().equals(portalPid)) {
// EXCEPTION - MismatchingContent
throw new MismatchingContentException("insertMenuItem: parent ("+parent.getParentItemId()+") of MenuItem has portalPid: " + parent.getPortalPid() + " instead of " + portalPid);
}
} else {
menuItem.setParentItemId(null);
}
// MenuItem menuItem = getMenuItemByMenuItemFull(menuItemFull);
if(menuItem.getItems() == null) {
List<String> menuItems = new ArrayList<String>();
menuItem.setItems(menuItems);
}
menuItemDAO.save(menuItem);
if(parent != null) {
List<String> siblingsOfNew = parent.getItems();
siblingsOfNew.add(menuItem.getId());
parent.setItems(siblingsOfNew);
menuItemDAO.save(parent);
}
MenuItemFull menuItemFull = new MenuItemFull(menuItem);
menuItemFull.setItems(new ArrayList<>());
return menuItemFull;
}
public MenuItemFull updateMenuItem(MenuItemFull menuItemFull) {
MenuItem menuItem = getMenuItemByMenuItemFull(menuItemFull);
// Update should not affect parent or children - only basic info can be updated
MenuItem oldMenuItem = getMenuItem(menuItemFull.getId());
menuItem.setItems(oldMenuItem.getItems());
menuItem.setParentItemId(oldMenuItem.getParentItemId());
menuItemDAO.save(menuItem);
menuItemFull = getMenuItemFull(menuItem.getId());
return menuItemFull;
}
public Boolean deleteMenuItem(String id, String portalPid) throws Exception {
// menuItemDAO.delete(id);
log.debug("delete menu item; "+id);
List<String> menuItems = new ArrayList<>();
menuItems.add(id);
return deleteMenuItems(menuItems, portalPid);
}
public Boolean deleteMenuItems(List<String> menuItems, String portalPid) throws Exception {
if(menuItems == null) {
return true;
}
for (String id: menuItems) {
MenuItem menuItem = menuItemDAO.findById(id);
if(!portalPid.equals(menuItem.getPortalPid())) {
// EXCEPTION - MismatchingContent
throw new MismatchingContentException("Delete Menu Items: MenuItem with id: "+id+" has portalPid: "+menuItem.getPortalPid()+" instead of "+portalPid);
}
deleteMenuItems(menuItem.getItems(), portalPid);
if(menuItem.getParentItemId() != null && !menuItem.getParentItemId().equals("")) {
MenuItem parent = menuItemDAO.findById(menuItem.getParentItemId());
List<String> siblingsOfDeleted = parent.getItems();
siblingsOfDeleted.remove(id);
parent.setItems(siblingsOfDeleted);
menuItemDAO.save(parent);
}
menuItemDAO.delete(id);
}
return true;
}
private MenuItem getMenuItemByMenuItemFull(MenuItemFull menuItemFull) {
MenuItem menuItem = new MenuItem();
menuItem.setId(menuItemFull.getId());
menuItem.setTitle(menuItemFull.getTitle());
menuItem.setUrl(menuItemFull.getUrl());
menuItem.setType(menuItemFull.getType());
menuItem.setRoute(menuItemFull.getRoute());
menuItem.setPortalPid(menuItemFull.getPortalPid());
menuItem.setParentItemId(menuItemFull.getParentItemId());
List<MenuItemFull> menuItemsFull = menuItemFull.getItems();
List<String> menuItems = new ArrayList<String>();
if(menuItemsFull != null) {
for (MenuItemFull childMenuItemFull : menuItemsFull) {
menuItems.add(childMenuItemFull.getId());
}
}
menuItem.setItems(menuItems);
return menuItem;
}
}