198 lines
7.1 KiB
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;
|
|
}
|
|
}
|