MenuBean.java 19.2 KB
package fi.insomnia.bortal.beans;

import java.util.List;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.CompoPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.MenuNavigationFacade;
import fi.insomnia.bortal.facade.MenuitemFacade;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.MenuNavigation;

/**
 * Session Bean implementation class Menubean
 */
@Stateless
@LocalBean
@DeclareRoles(SpecialPermission.S_SUPERADMIN)
public class MenuBean implements MenuBeanLocal {

	public MenuBean() {
	}

	@EJB
	private MenuNavigationFacade navifacade;

	@EJB
	private MenuitemFacade menuitemfacade;

	@EJB
	private EventBean eventbean;

	@EJB
	private PermissionBeanLocal permbean;

	private static final Logger logger = LoggerFactory.getLogger(MenuBean.class);

	@RolesAllowed(SpecialPermission.S_SUPERADMIN)
	@Override
	public void flushDefaultmenu()
	{
		navifacade.deleteAllDefaults();
		initializeMenu();
	}

	@RolesAllowed(SpecialPermission.S_SUPERADMIN)
	@Override
	public void flushOldMenu()
	{
		navifacade.deleteAllDefaults();
		initializeOldMenu();
	}

	private synchronized void initializeMenu() {

		int menusort = 100;
		logger.info("Initializing menu");
		LanEvent ev = eventbean.getCurrentEvent();

		MenuNavigation usermenu = new MenuNavigation(ev, "topnavi.usernavi", menusort = +10);
		usermenu.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.ANYUSER);
		MenuNavigation userkauppa = usermenu.addPage(null, null);
		userkauppa.setKey("topnavi.usershop");
		userkauppa.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
		userkauppa.addPage(null, null);
		userkauppa.addPage(menuitemfacade.findOrCreate("/foodwave/list"), ShopPermission.SHOP_FOODWAVE);
		userkauppa.addPage(null, null);
		userkauppa.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN);

		MenuNavigation userevent = usermenu.addPage(null, null);
		userevent.setKey("topnavi.userevent");

		userevent.addPage(menuitemfacade.findOrCreate("/place/placemap"), MapPermission.VIEW);
		userevent.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);

		MenuNavigation usercompetitions = usermenu.addPage(null, null);
		usercompetitions.setKey("topnavi.competitions");

		usercompetitions.addPage(menuitemfacade.findOrCreate("/voting/compolist"), CompoPermission.VIEW_COMPOS);
		usercompetitions.addPage(menuitemfacade.findOrCreate("/voting/myEntries"), CompoPermission.VIEW_COMPOS);
		usercompetitions.addPage(menuitemfacade.findOrCreate("/voting/create"), CompoPermission.MANAGE);

		MenuNavigation createuser = usermenu.addPage(null, null);
		createuser.setKey("topnavi.createuser");
		createuser.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW);

		navifacade.create(usermenu);

		MenuNavigation adminmenu = new MenuNavigation(ev, "topnavi.adminnavi", menusort = +10);
		MenuNavigation adminuser = adminmenu.addPage(null, null);
		adminuser.setKey("topnavi.usermgmt");
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/create"), UserPermission.VIEW_ALL);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/list"), UserPermission.VIEW_ALL);

		MenuNavigation adminroles = adminuser.addPage(null, null);
		adminroles.setKey("subnavi.roles");
		adminroles.addPage(menuitemfacade.findOrCreate("/role/list"), UserPermission.READ_ROLES);
		adminroles.addPage(menuitemfacade.findOrCreate("/role/create"), UserPermission.WRITE_ROLES);

		MenuNavigation adminshop = adminmenu.addPage(null, null);
		adminshop.setKey("topnavi.adminshop");
		MenuNavigation adminShopProducts = adminshop.addPage(null, null);
		adminShopProducts.addPage(menuitemfacade.findOrCreate("/product/create"), ShopPermission.MANAGE_PRODUCTS);
		adminShopProducts.addPage(menuitemfacade.findOrCreate("/product/list"), ShopPermission.LIST_ALL_PRODUCTS);

		MenuNavigation adminShopReaders = adminshop.addPage(null, null);
		adminShopReaders.setKey("subnavi.readers");
		adminShopReaders.addPage(menuitemfacade.findOrCreate("/shop/showReaderEvents"), ShopPermission.SHOP_TO_OTHERS);
		adminShopReaders.addPage(menuitemfacade.findOrCreate("/shop/listReaders"), ShopPermission.SHOP_TO_OTHERS);

		MenuNavigation adminShopBilling = adminshop.addPage(null, null);
		adminShopReaders.setKey("subnavi.billing");
		adminShopBilling.addPage(menuitemfacade.findOrCreate("/bill/billSummary"), BillPermission.READ_ALL);
		adminShopBilling.addPage(menuitemfacade.findOrCreate("/bill/listAll"), BillPermission.WRITE_ALL);

		MenuNavigation adminevent = adminmenu.addPage(null, null);
		adminevent.setKey("topnavi.event");
		MenuNavigation adminEventCards = adminevent.addPage(null, null);
		adminEventCards.setKey("subnavi.cards");
		adminEventCards.addPage(menuitemfacade.findOrCreate("/useradmin/listCardTemplates"), UserPermission.READ_ROLES);
		adminEventCards.addPage(menuitemfacade.findOrCreate("/useradmin/createCardTemplate"), UserPermission.WRITE_ROLES);

		navifacade.create(adminmenu);

		MenuNavigation shopmenu = new MenuNavigation(ev, "topnavi.shopnavi", menusort = +10);
		// shopnavi.addPage(menuitemfacade.findOrCreate("/index3"),
		// UserPermission.ANYUSER);
		navifacade.create(shopmenu);

		/*
		 * MenuNavigation profileTopmenu = new MenuNavigation(ev,
		 * "topnavi.profile", menusort = +10);
		 * profileTopmenu.addPage(menuitemfacade
		 * .findOrCreate("/useradmin/create"), UserPermission.VIEW_ALL);
		 * profileTopmenu
		 * .addPage(menuitemfacade.findOrCreate("/useradmin/list"),
		 * UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
		 * profileTopmenu.addPage(menuitemfacade.findOrCreate("/user/edit"),
		 * UserPermission.VIEW_SELF);
		 * profileTopmenu.addPage(menuitemfacade.findOrCreate
		 * ("/user/changePassword"), UserPermission.VIEW_SELF);
		 */

		// MenuNavigation usermgmt = profileTopmenu.addPage(null, null);
		// usermgmt.setKey("topnavi.user.mgmt");
		// usermgmt.addPage(menuitemfacade.findOrCreate("/role/create"),
		// UserPermission.WRITE_ROLES);
		// usermgmt.addPage(menuitemfacade.findOrCreate("/role/list"),
		// UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks");
		// usermgmt.addPage(menuitemfacade.findOrCreate("/orgrole/list"),
		// UserPermission.READ_ORGROLES);
		// usermgmt.addPage(menuitemfacade.findOrCreate("/orgrole/create"),
		// UserPermission.WRITE_ORGROLES);
		// usermgmt.addPage(menuitemfacade.findOrCreate("/useradmin/listCardTemplates"),
		// UserPermission.READ_ROLES);
		// usermgmt.addPage(menuitemfacade.findOrCreate("/useradmin/createCardTemplate"),
		// UserPermission.WRITE_ROLES);
		//
		// navifacade.create(profileTopmenu);
		//
		// MenuNavigation miscTopmenu = new MenuNavigation(ev, "topnavi.misc",
		// menusort = +10);
		//
		// miscTopmenu.addPage(menuitemfacade.findOrCreate("/pages/list"),
		// ContentPermission.MANAGE_PAGES);
		// miscTopmenu.addPage(menuitemfacade.findOrCreate("/pages/create"),
		// ContentPermission.MANAGE_PAGES);
		// miscTopmenu.addPage(menuitemfacade.findOrCreate("/utils/flushCache"),
		// ContentPermission.MANAGE_PAGES);
		//
		// navifacade.create(miscTopmenu);

		// frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/create"),
		// UserPermission.CREATE_NEW);
		// frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/sendResetMail"),
		// UserPermission.LOGIN);
		// frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/invite"),
		// UserPermission.INVITE_USERS);

		// ////////////////////////////////////////////////////
		// ////////////////////////////////////////////////////
		// ////////////////////////////////////////////////////
		// ////////////////////////////////////////////////////
		// ////////////////////////////////////////////////////
		// ////////////////////////////////////////////////////
		// ////////////////////////////////////////////////////

	}

	private synchronized void initializeOldMenu() {

		LanEvent ev = eventbean.getCurrentEvent();
		int menusort = 100;

		MenuNavigation usernavi = new MenuNavigation(ev, "supernavi.user", menusort = +10);

		navifacade.create(usernavi);

		MenuNavigation frontTopnavi = usernavi.addPage(null, null);
		frontTopnavi.setKey("topnavi.frontpage");
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.ANYUSER);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/sendResetMail"), UserPermission.LOGIN);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/invite"), UserPermission.INVITE_USERS);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/permissionDenied"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/login"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/loginError"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logout"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logoutResponse"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetPassword"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetmailSent"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false);
		frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false);

		MenuNavigation userTopnavi = usernavi.addPage(null, null);
		userTopnavi.setKey("topnavi.user");
		userTopnavi.addPage(menuitemfacade.findOrCreate("/user/edit"), UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks");
		userTopnavi.addPage(menuitemfacade.findOrCreate("/user/changePassword"), UserPermission.VIEW_SELF);
		userTopnavi.addPage(menuitemfacade.findOrCreate("/user/accountEvents"), UserPermission.VIEW_SELF);
		userTopnavi.addPage(menuitemfacade.findOrCreate("/place/myGroups"), UserPermission.VIEW_SELF);
		userTopnavi.addPage(menuitemfacade.findOrCreate("/user/sendPicture"), UserPermission.VIEW_SELF);

		MenuNavigation placemapTopmenu = usernavi.addPage(null, null);
		placemapTopmenu.setKey("topnavi.placemap");
		placemapTopmenu.addPage(menuitemfacade.findOrCreate("/place/placemap"), MapPermission.VIEW);

		// MenuNavigation actionlogTopmenu = usernavi.addPage(null, null);
		// actionlogTopmenu.setKey("topnavi.actionlog");
		// actionlogTopmenu.addPage(menuitemfacade.findOrCreate("/actionlog/messagelist"),
		// ContentPermission.MANAGE_ACTIONLOG);

		MenuNavigation shopTopmenu = usernavi.addPage(null, null);
		shopTopmenu.setKey("topnavi.shop");
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/edit"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/showBill"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/failure"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/notification"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/pending"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/success"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/cancel"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/delayed"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/reject"), null).setVisible(false);
		shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/return"), null).setVisible(false);

		MenuNavigation foodwaveTopmenu = usernavi.addPage(null, null);
		foodwaveTopmenu.setKey("topnavi.foodwave");
		foodwaveTopmenu.addPage(menuitemfacade.findOrCreate("/foodwave/list"), ShopPermission.SHOP_FOODWAVE);
		// foodwaveTopmenu.addPage(menuitemfacade.findOrCreate("/foodwave/listTemplates"),
		// ShopPermission.SHOP_FOODWAVE);
		foodwaveTopmenu.addPage(menuitemfacade.findOrCreate("/foodwave/listProducts"), ShopPermission.SHOP_FOODWAVE).setVisible(false);
		foodwaveTopmenu.addPage(menuitemfacade.findOrCreate("/foodwave/ThanksForOrderingFromCounter"), ShopPermission.SHOP_FOODWAVE).setVisible(false);

		MenuNavigation pollTopmenu = usernavi.addPage(null, null);
		pollTopmenu.setKey("topnavi.poll");
		pollTopmenu.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);

		MenuNavigation compoMenu = usernavi.addPage(null, null);
		compoMenu.setKey("topnavi.compos");
		compoMenu.addPage(menuitemfacade.findOrCreate("/voting/compolist"), CompoPermission.VIEW_COMPOS);
		compoMenu.addPage(menuitemfacade.findOrCreate("/voting/myEntries"), CompoPermission.VIEW_COMPOS);
		compoMenu.addPage(menuitemfacade.findOrCreate("/voting/create"), CompoPermission.MANAGE);
		compoMenu.addPage(menuitemfacade.findOrCreate("/voting/submitEntry"), null).setVisible(false);
		compoMenu.addPage(menuitemfacade.findOrCreate("/voting/details"), null).setVisible(false);

		MenuNavigation adminnavi = new MenuNavigation(ev, "supernavi.admin", menusort = +10);
		navifacade.create(adminnavi);

		MenuNavigation adminuser = adminnavi.addPage(null, null);
		adminuser.setKey("topnavi.usermgmt");
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/list"), UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/create"), UserPermission.VIEW_ALL);
		adminuser.addPage(menuitemfacade.findOrCreate("/role/list"), UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks");
		adminuser.addPage(menuitemfacade.findOrCreate("/role/create"), UserPermission.WRITE_ROLES);
		adminuser.addPage(menuitemfacade.findOrCreate("/role/edit"), null).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/orgrole/list"), UserPermission.READ_ORGROLES);
		adminuser.addPage(menuitemfacade.findOrCreate("/orgrole/create"), UserPermission.WRITE_ORGROLES);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/listCardTemplates"), UserPermission.READ_ROLES);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/createCardTemplate"), UserPermission.WRITE_ROLES);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/editCardTemplate"), null).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false);

		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/edit"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/changePassword"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/accountEvents"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/place/adminGroups"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/place/adminInsertToken"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/foodwaveshop"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/foodwaveProducts"), UserPermission.VIEW_ALL).setVisible(false);
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/showTakePicture"), UserPermission.VIEW_ALL).setHeader("submenu.user.other");

		// MenuNavigation initUser = adminnavi.addPage(null, null);
		// initUser.setKey("topnavi.userinit");
		adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/validateUser"), UserPermission.VIEW_ALL);

		MenuNavigation usershop = adminnavi.addPage(null, null);
		usershop.setKey("topnavi.adminshop");
		usershop.addPage(menuitemfacade.findOrCreate("/shop/showReaderEvents"), ShopPermission.SHOP_TO_OTHERS);
		usershop.addPage(menuitemfacade.findOrCreate("/shop/listReaders"), ShopPermission.SHOP_TO_OTHERS);
		usershop.addPage(menuitemfacade.findOrCreate("/shop/editReader"), ShopPermission.SHOP_TO_OTHERS).setVisible(false);

		MenuNavigation billnavi = adminnavi.addPage(null, null);
		billnavi.setKey("topnavi.billing");
		billnavi.addPage(menuitemfacade.findOrCreate("/bill/billSummary"), BillPermission.READ_ALL);
		billnavi.addPage(menuitemfacade.findOrCreate("/bill/listAll"), BillPermission.WRITE_ALL);

		MenuNavigation mapnavi = adminnavi.addPage(null, null);
		mapnavi.setKey("topnavi.maps");
		mapnavi.addPage(menuitemfacade.findOrCreate("/map/list"), MapPermission.MANAGE_MAPS);
		mapnavi.addPage(menuitemfacade.findOrCreate("/map/create"), MapPermission.MANAGE_MAPS);
		mapnavi.addPage(menuitemfacade.findOrCreate("/map/edit"), null).setVisible(false);

		MenuNavigation prodnavi = adminnavi.addPage(null, null);
		prodnavi.setKey("topnavi.products");
		prodnavi.addPage(menuitemfacade.findOrCreate("/product/list"), ShopPermission.LIST_ALL_PRODUCTS);
		prodnavi.addPage(menuitemfacade.findOrCreate("/product/create"), ShopPermission.MANAGE_PRODUCTS);
		prodnavi.addPage(menuitemfacade.findOrCreate("/product/createDiscount"), null).setVisible(false);
		prodnavi.addPage(menuitemfacade.findOrCreate("/product/edit"), null).setVisible(false);

		MenuNavigation contentnavi = adminnavi.addPage(null, null);
		contentnavi.setKey("topnavi.contents");
		contentnavi.addPage(menuitemfacade.findOrCreate("/pages/list"), ContentPermission.MANAGE_PAGES);
		contentnavi.addPage(menuitemfacade.findOrCreate("/pages/create"), ContentPermission.MANAGE_PAGES);
		contentnavi.addPage(menuitemfacade.findOrCreate("/pages/edit"), null).setVisible(false);

		MenuNavigation lognavi = adminnavi.addPage(null, null);
		lognavi.setKey("topnavi.log");
		lognavi.addPage(menuitemfacade.findOrCreate("/actionlog/messagelist"), UserPermission.VIEW_ALL);
		lognavi.addPage(menuitemfacade.findOrCreate("/actionlog/taskview"), UserPermission.VIEW_ALL).setVisible(false);

		MenuNavigation foodnavi = adminnavi.addPage(null, null);
		foodnavi.setKey("topnavi.foodwave");
		foodnavi.addPage(menuitemfacade.findOrCreate("/foodmanager/listFoodwaves"), ShopPermission.MANAGE_FOODWAVES);
		foodnavi.addPage(menuitemfacade.findOrCreate("/foodmanager/listOrders"), ShopPermission.MANAGE_FOODWAVES).setVisible(false);

		foodnavi.addPage(menuitemfacade.findOrCreate("/foodadmin/listTemplates"), ShopPermission.MANAGE_FOODWAVES);
		foodnavi.addPage(menuitemfacade.findOrCreate("/foodadmin/createTemplate"), ShopPermission.MANAGE_FOODWAVES);
		foodnavi.addPage(menuitemfacade.findOrCreate("/foodadmin/editTemplate"), ShopPermission.MANAGE_FOODWAVES).setVisible(false);

	}

	@Override
	public MenuNavigation findNavigation(String pagename) {

		return navifacade.find(pagename);

	}

	@Override
	public List<MenuNavigation> getTopmenus() {
		List<MenuNavigation> ret = navifacade.findToplevels();
		if (ret == null || ret.isEmpty())
		{
			initializeMenu();
			navifacade.flush();
			ret = navifacade.findToplevels();
		}
		return ret;

	}

}