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

import java.util.List;

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

import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.separator.Separator;
import org.primefaces.component.submenu.Submenu;
import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;
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();
			MenuNavigation selectedTop = menubean.findNavigation(layoutview.getPagepath());
			while (selectedTop != null && selectedTop.getParent() != null)
			{
				selectedTop = selectedTop.getParent();
			}

			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())
				{
					MenuItem menuitem = mkMenuitem(m);
					if (menuitem != null)
					{

						menuModel.addMenuItem(menuitem);
					}
				} else {

					Submenu subm = addSubmenu(m);

					if (subm != null)
					{
						menuModel.addSubmenu(subm);
					}
				}
			}
			user = permbean.getCurrentUser();
			if (permbean.isLoggedIn())
			{
				Submenu nameSub = new Submenu();
				nameSub.setId("nameSubmenu");
				nameSub.setStyle("float:right;");
				nameSub.setLabel(user.getWholeName());

				MenuItem myprop = new MenuItem();
				myprop.setOutcome("/user/edit");
				myprop.setValue(I18n.get("user.myProperties"));
				nameSub.getChildren().add(myprop);

				MenuItem myPlces = new MenuItem();
				myPlces.setOutcome("/place/myGroups");
				myPlces.setValue(I18n.get("user.myPlaces"));
				nameSub.getChildren().add(myPlces);

				nameSub.getChildren().add(new Separator());

				MenuItem logout = new MenuItem();
				logout.setOutcome("/auth/logout");
				logout.setValue(I18n.get("user.logout"));
				nameSub.getChildren().add(logout);

				menuModel.addSubmenu(nameSub);

			} else {
				MenuItem loginbtn = new MenuItem();
				loginbtn.setId("loginMenuItem");
				loginbtn.setStyleClass("nameMenuItem");
				loginbtn.setOutcome("/auth/login");

				loginbtn.setValue(I18n.get("topmenu.login"));
				menuModel.addMenuItem(loginbtn);
			}

		}

		return menuModel;
	}

	private Submenu addSubmenu(MenuNavigation m) {
		Submenu ret = null;

		if (m.isVisible() && (m.getPermission() == null || super.hasPermission(m.getPermission())))
		{
			ret = new Submenu();
			ret.setLabel(I18n.get(m.getKey()));
			for (MenuNavigation child : m.getChildren())
			{
				if (child.getChildren().isEmpty()) {

					if (child.getItem() != null)
					{
						MenuItem item = mkMenuitem(child);
						if (item != null)
						{
							item.setValue(I18n.get(child.getKey()));
							ret.getChildren().add(item);
						}
					} else if (ret.getChildCount() > 0) {
						ret.getChildren().add(new Separator());
					}

				} else {
					Submenu subm = addSubmenu(child);
					if (subm != null)
					{
						subm.setLabel(I18n.get(child.getKey()));
						ret.getChildren().add(subm);
					}

				}
			}

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

		}
		return ret;
	}

	private MenuItem mkMenuitem(MenuNavigation m) {
		MenuItem item = null;
		if (m.isVisible() && (m.getPermission() == null || super.hasPermission(m.getPermission())))
		{
			item = new MenuItem();
			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;
	}

}