PrimeMenuView.java 4.45 KB
package fi.codecrew.moya.web.cdiview.menu;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSeparator;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
import org.primefaces.model.menu.Submenu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.beans.MenuBeanLocal;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.MenuNavigation;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.helper.LayoutView;

@Named
@RequestScoped
public class PrimeMenuView extends GenericCDIView {

	private static final long serialVersionUID = -5720164797157054213L;

	// private String pagename;

	// // @Inject
	// // private transient LayoutView layoutview;
	//
	@EJB
	private transient MenuBeanLocal menubean;

	// private LinkedList<List<JsfMenuitem>> menus;

	// private HashSet<MenuNavigation> navis;

	// private Map<String, List<PageContent>> contents = new HashMap<String,
	// List<PageContent>>();

	// @EJB
	// private transient SitePageBeanLocal pagebean;

	private DefaultMenuModel menuModel;

	@Inject
	private LayoutView layoutview;

	private MenuModel nameMenu;

	private EventUser user;

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

	// public MenuModel getNameMenu()
	// {
	//
	// if (nameMenu == null)
	// {
	// nameMenu = new DefaultMenuModel();
	// nameMenu.MenuItem item = new MenuItem();
	//
	// }
	// return nameMenu;
	// }

	public MenuModel getMenuModel()
	{
		if (menuModel == null)
		{
			menuModel = new DefaultMenuModel();
			Set<MenuNavigation> selectedSet = new HashSet<>();

			final MenuNavigation thisPage = menubean.findNavigation(layoutview.getPagepath());
			MenuNavigation selectedTop = thisPage;
			while (selectedTop != null && selectedTop.getParent() != null) {
				selectedTop = selectedTop.getParent();
				selectedSet.add(selectedTop);
			}

			List<MenuNavigation> tops = menubean.getTopmenus();
			if (!tops.contains(selectedTop) && !tops.isEmpty()) {
				selectedTop = tops.get(0);
			}

			for (MenuNavigation m : selectedTop.getChildren()) {
				if (m.getItem() != null && m.getChildren().isEmpty()) {
					DefaultMenuItem menuitem = mkMenuitem(m);
					if (menuitem != null) {

						menuModel.addElement(menuitem);
					}
				} else {

					Submenu subm = addSubmenu(m, selectedSet);

					if (subm != null) {
						menuModel.addElement(subm);
					}
				}
			}

		}

		return menuModel;
	}

	private DefaultSubMenu addSubmenu(MenuNavigation m, Set<MenuNavigation> selectedSet) {
		DefaultSubMenu ret = null;

		if (m.isVisible() && (m.getPermission() == null || super.hasPermission(m.getPermission())))
		{
			ret = new DefaultSubMenu();
			if (selectedSet.contains(m)) {
				ret.setStyleClass("prime-menu-selected");
			}
			ret.setLabel(I18n.get(m.getKey()));
			for (MenuNavigation child : m.getChildren())
			{
				if (child.getChildren().isEmpty()) {

					if (child.getItem() != null)
					{
						DefaultMenuItem item = mkMenuitem(child);
						if (item != null) {
							item.setValue(I18n.get(child.getKey()));
							ret.addElement(item);

						}
					} else if (ret.getElementsCount() > 0) {
						ret.addElement(new DefaultSeparator());
					}

				} else {
					DefaultSubMenu subm = addSubmenu(child, selectedSet);
					if (subm != null)
					{
						subm.setLabel(I18n.get(child.getKey()));
						ret.addElement(subm);
					}

				}
			}

			if (ret.getElementsCount() == 0) {
				ret = null;
			}

		}
		return ret;
	}

	private DefaultMenuItem mkMenuitem(MenuNavigation m) {
		DefaultMenuItem item = null;
		if (m.isVisible() && (m.getPermission() == null || super.hasPermission(m.getPermission())))
		{
			item = new DefaultMenuItem();

			String outcome;
			if (m.getSitepage() != null)
			{
				outcome = new StringBuilder("/pages/index?id=").append(m.getSitepage().getId()).toString();

			} else {
				outcome = m.getItem().getUrl();
			}
			String key = I18n.get(m.getKey());

			item.setValue(key);
			item.setOutcome(outcome);
		}
		return item;
	}

	public LayoutView getLayoutview() {
		return layoutview;
	}

	public void setLayoutview(LayoutView layoutview) {
		this.layoutview = layoutview;
	}

}