Commit dedc6d80 by Tuomas Riihimäki Committed by Juho Juopperi

Rewrite of menu to dynamic generated. ( Jos olit campissa voi olla että joudut d…

…roppaamaan menu* kannat possusta)

Conflicts:

	code/LanBortalDatabase/src/fi/insomnia/bortal/model/salespoint/SalesEntity_.java
1 parent b2c3531d
Showing with 467 additions and 645 deletions
Manifest-Version: 1.0 Manifest-Version: 1.0
Class-Path: LanBortalBeansClient.jar Class-Path: lib/LanBortalBeansClient.jar
lib/LanBortalUtilities.jar lib/LanBortalUtilities.jar
...@@ -14,10 +14,12 @@ import org.slf4j.LoggerFactory; ...@@ -14,10 +14,12 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission; 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.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.MenuNavigationFacade; import fi.insomnia.bortal.facade.MenuNavigationFacade;
import fi.insomnia.bortal.facade.MenuitemFacade; import fi.insomnia.bortal.facade.MenuitemFacade;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.MenuNavigation; import fi.insomnia.bortal.model.MenuNavigation;
/** /**
...@@ -45,36 +47,6 @@ public class Menubean implements MenubeanLocal { ...@@ -45,36 +47,6 @@ public class Menubean implements MenubeanLocal {
private static final Logger logger = LoggerFactory.getLogger(Menubean.class); private static final Logger logger = LoggerFactory.getLogger(Menubean.class);
@Override
public MenuNavigation getMenuNavigation(String url) {
MenuNavigation ret = navifacade.find(url, eventbean.getCurrentEvent());
return ret;
}
@Override
public List<MenuNavigation> getTopnavigations() {
return navifacade.findToplevels();
// HashMap<Menuitem, MenuNavigation> ret = new HashMap<Menuitem,
// MenuNavigation>();
//
// for (MenuNavigation navi : )
// {
//
// ret.put(navi.getItem(), navi);
// }
// ArrayList<MenuNavigation> retlist = new
// ArrayList<MenuNavigation>(ret.values());
// if (retlist.isEmpty())
// {
// initializeMenu();
// }
// logger.info("Returning topmenus: {}", retlist);
// Collections.sort(retlist);
// return retlist;
}
@RolesAllowed(SpecialPermission.S_SUPERADMIN) @RolesAllowed(SpecialPermission.S_SUPERADMIN)
@Override @Override
public void flushDefaultmenu() public void flushDefaultmenu()
...@@ -83,20 +55,22 @@ public class Menubean implements MenubeanLocal { ...@@ -83,20 +55,22 @@ public class Menubean implements MenubeanLocal {
initializeMenu(); initializeMenu();
} }
public void initializeMenu() { private synchronized void initializeMenu() {
// Frontpage
LanEvent ev = eventbean.getCurrentEvent();
MenuNavigation frontTopnavi = new MenuNavigation(); MenuNavigation usernavi = new MenuNavigation(ev, "supernavi.user");
navifacade.create(usernavi);
MenuNavigation frontTopnavi = usernavi.addPage(null, null);
frontTopnavi.setKey("topnavi.frontpage"); frontTopnavi.setKey("topnavi.frontpage");
frontTopnavi.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.ANYUSER); frontTopnavi.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.ANYUSER);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW); frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/sendResetMail"), UserPermission.LOGIN); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/sendResetMail"), UserPermission.LOGIN);
navifacade.create(frontTopnavi);
// User MenuNavigation userTopnavi = usernavi.addPage(null, null);
MenuNavigation userTopnavi = new MenuNavigation();
userTopnavi.setKey("topnavi.user"); userTopnavi.setKey("topnavi.user");
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/edit"), UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks"); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/edit"), UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks");
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/changePassword"), null); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/changePassword"), null);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/accountEvents"), null); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/accountEvents"), null);
...@@ -104,28 +78,65 @@ public class Menubean implements MenubeanLocal { ...@@ -104,28 +78,65 @@ public class Menubean implements MenubeanLocal {
userTopnavi.addPage(menuitemfacade.findOrCreate("/place/insertToken"), null); userTopnavi.addPage(menuitemfacade.findOrCreate("/place/insertToken"), null);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/sendPicture"), null); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/sendPicture"), null);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/list"), UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks"); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/list"), UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.VIEW_ALL); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/adminCreate"), UserPermission.VIEW_ALL);
userTopnavi.addPage(menuitemfacade.findOrCreate("/role/list"), UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks"); userTopnavi.addPage(menuitemfacade.findOrCreate("/role/list"), UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks");
userTopnavi.addPage(menuitemfacade.findOrCreate("/role/create"), UserPermission.WRITE_ROLES); userTopnavi.addPage(menuitemfacade.findOrCreate("/role/create"), UserPermission.WRITE_ROLES);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/listCardTemplates"), UserPermission.READ_ROLES); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/listCardTemplates"), UserPermission.READ_ROLES);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/createCardTemplate"), UserPermission.WRITE_ROLES); userTopnavi.addPage(menuitemfacade.findOrCreate("/user/createCardTemplate"), UserPermission.WRITE_ROLES);
navifacade.create(userTopnavi);
MenuNavigation placemapTopmenu = new MenuNavigation(); MenuNavigation placemapTopmenu = usernavi.addPage(null, null);
placemapTopmenu.setKey("topnavi.placemap"); placemapTopmenu.setKey("topnavi.placemap");
placemapTopmenu.addPage(menuitemfacade.findOrCreate("/place/placemap"), MapPermission.VIEW); placemapTopmenu.addPage(menuitemfacade.findOrCreate("/place/placemap"), MapPermission.VIEW);
navifacade.create(placemapTopmenu);
MenuNavigation shopTopmenu = new MenuNavigation(); MenuNavigation shopTopmenu = usernavi.addPage(null, null);
shopTopmenu.setKey("topnavi.shop"); shopTopmenu.setKey("topnavi.shop");
shopTopmenu.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL); shopTopmenu.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN); shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN);
navifacade.create(shopTopmenu);
MenuNavigation pollTopmenu = new MenuNavigation(); MenuNavigation pollTopmenu = usernavi.addPage(null, null);
pollTopmenu.setKey("topnavi.poll"); pollTopmenu.setKey("topnavi.poll");
pollTopmenu.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER); pollTopmenu.addPage(menuitemfacade.findOrCreate("/poll/index"), PollPermission.ANSWER);
navifacade.create(pollTopmenu);
MenuNavigation adminnavi = new MenuNavigation(ev, "supernavi.admin");
navifacade.create(adminnavi);
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);
} }
@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();
}
logger.info("Returning topmenus: {}", ret);
return ret;
}
} }
package fi.insomnia.bortal.beans;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
@Singleton
@LocalBean
public class RfidContainerBean implements RfidContainerBeanLocal {
// private static final Logger logger =
// LoggerFactory.getLogger(RfidContainerBean.class);
//
// // -------------- EventId ---- Reader Id --- Rfidevent
// private final Map<Integer, Map<Integer, List<RfidEvent>>> events =
// Collections.synchronizedMap(new HashMap<Integer, Map<Integer,
// List<RfidEvent>>>());
//
// @EJB
// private EventBeanLocal evbean;
//
// public synchronized RfidEvent foundTag(Reader reader, String tag) {
// LanEvent currEv = evbean.getCurrentEvent();
//
// if (!events.containsKey(currEv.getId())) {
// events.put(currEv.getId(), new HashMap<Integer, List<RfidEvent>>());
// }
//
// Map<Integer, List<RfidEvent>> eventMap = events.get(currEv.getId());
//
// if (!eventMap.containsKey(reader)) {
// eventMap.put(reader.getId(), new LinkedList<RfidEvent>());
// }
//
// List<RfidEvent> readerevents = eventMap.get(reader);
// while (readerevents.size() > 20) {
// readerevents.remove(readerevents.size() - 1);
// logger.debug("Cleaning readerevents from reader {}", reader);
// }
//
// RfidEvent ret = null;
// if (readerevents.size() > 0 && readerevents.get(0).getTag().equals(tag))
// {
// ret = readerevents.get(0);
// readerevents.get(0).seen();
// } else {
// ret = new RfidEvent(reader, tag);
// readerevents.add(0, ret);
// }
//
// return ret;
// }
//
// @Override
// public List<RfidEvent> getReaderEvents(String readername) {
// LanEvent currEv = evbean.getCurrentEvent();
// List<RfidEvent> ret = null;
// if (events.containsKey(currEv.getId())) {
// ret = events.get(currEv.getId()).get(readername);
// }
// return ret;
//
// }
}
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -11,8 +10,6 @@ import javax.persistence.PersistenceContext; ...@@ -11,8 +10,6 @@ import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -20,10 +17,8 @@ import org.slf4j.LoggerFactory; ...@@ -20,10 +17,8 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBean; import fi.insomnia.bortal.beans.EventBean;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.MenuNavigation; import fi.insomnia.bortal.model.MenuNavigation;
import fi.insomnia.bortal.model.MenuNavigation_; import fi.insomnia.bortal.model.MenuNavigation_;
import fi.insomnia.bortal.model.Menuitem;
import fi.insomnia.bortal.model.Menuitem_; import fi.insomnia.bortal.model.Menuitem_;
@Stateless @Stateless
...@@ -53,8 +48,7 @@ public class MenuNavigationFacade extends GenericFacade<Integer, MenuNavigation> ...@@ -53,8 +48,7 @@ public class MenuNavigationFacade extends GenericFacade<Integer, MenuNavigation>
return em; return em;
} }
public MenuNavigation find(String url, LanEvent event) { public MenuNavigation find(String url) {
logger.debug("Finding MenuNavigation with url {}", url);
if (url == null || url.isEmpty()) if (url == null || url.isEmpty())
{ {
return null; return null;
...@@ -62,71 +56,37 @@ public class MenuNavigationFacade extends GenericFacade<Integer, MenuNavigation> ...@@ -62,71 +56,37 @@ public class MenuNavigationFacade extends GenericFacade<Integer, MenuNavigation>
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MenuNavigation> cq = cb.createQuery(MenuNavigation.class); CriteriaQuery<MenuNavigation> cq = cb.createQuery(MenuNavigation.class);
Root<MenuNavigation> root = cq.from(MenuNavigation.class); Root<MenuNavigation> root = cq.from(MenuNavigation.class);
Predicate eventFilter = null;
if (event == null)
{
eventFilter = cb.isNull(root.get(MenuNavigation_.event));
} else {
eventFilter = cb.equal(root.get(MenuNavigation_.event), event);
}
cq.where(cb.equal(root.get(MenuNavigation_.item).get(Menuitem_.url), url), eventFilter); cq.where(
cq.orderBy(cb.asc(root.get(MenuNavigation_.sort))); cb.equal(root.get(MenuNavigation_.item).get(Menuitem_.url), url),
List<MenuNavigation> results = em.createQuery(cq).getResultList(); cb.equal(root.get(MenuNavigation_.event), eventbean.getCurrentEvent())
);
MenuNavigation ret = null; return super.getSingleNullableResult(em.createQuery(cq));
for (MenuNavigation navi : results)
{
if (permbean.hasPermission(navi.getPermission()))
{
ret = navi;
}
}
if (ret == null && !results.isEmpty())
{
ret = results.get(0);
}
if (ret == null)
{
if (event != null)
{
return find(url, null);
} else {
Menuitem item = menuitemfacade.findOrCreate(url);
if (item.getNavigations() == null || item.getNavigations().isEmpty())
{
ret = new MenuNavigation();
ret.setItem(item);
ret.setEvent(null);
item.setNavigations(new ArrayList<MenuNavigation>());
item.getNavigations().add(ret);
}
}
}
return ret;
} }
/** /**
* Returns top level navigations for BOTH default and current event Results * Returns top level navigations
* have to be filtered for duplicates to get correct result!!
* *
* @param event * @param event
* @return * @return //
*/ */
public List<MenuNavigation> findToplevels() { public List<MenuNavigation> findToplevels() {
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MenuNavigation> cq = cb.createQuery(MenuNavigation.class); CriteriaQuery<MenuNavigation> cq = cb.createQuery(MenuNavigation.class);
Root<MenuNavigation> root = cq.from(MenuNavigation.class); Root<MenuNavigation> root = cq.from(MenuNavigation.class);
Path<LanEvent> eventpath = root.get(MenuNavigation_.event); cq.where(cb.isNull(root.get(MenuNavigation_.parent)),
cq.where(cb.isNull(root.get(MenuNavigation_.parent)), cb.or(cb.equal(eventpath, eventbean.getCurrentEvent()), cb.isNull(eventpath)), cb.isTrue(root.get(MenuNavigation_.visible))); cb.equal(root.get(MenuNavigation_.event), eventbean.getCurrentEvent()),
cb.isTrue(root.get(MenuNavigation_.visible)));
return em.createQuery(cq).getResultList(); return em.createQuery(cq).getResultList();
} }
public void deleteAllDefaults() { public void deleteAllDefaults() {
Query q = em.createQuery("delete from MenuNavigation where parent is null"); Query q = em.createQuery("delete from MenuNavigation where event = :event");
q.setParameter("event", eventbean.getCurrentEvent());
q.executeUpdate(); q.executeUpdate();
} }
......
...@@ -28,6 +28,9 @@ public class MenuitemFacade extends GenericFacade<Integer, Menuitem> { ...@@ -28,6 +28,9 @@ public class MenuitemFacade extends GenericFacade<Integer, Menuitem> {
} }
public Menuitem findOrCreate(String url) { public Menuitem findOrCreate(String url) {
if (url == null || url.isEmpty()) {
return null;
}
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Menuitem> cq = cb.createQuery(Menuitem.class); CriteriaQuery<Menuitem> cq = cb.createQuery(Menuitem.class);
Root<Menuitem> root = cq.from(Menuitem.class); Root<Menuitem> root = cq.from(Menuitem.class);
......
...@@ -9,9 +9,12 @@ import fi.insomnia.bortal.model.MenuNavigation; ...@@ -9,9 +9,12 @@ import fi.insomnia.bortal.model.MenuNavigation;
@Local @Local
public interface MenubeanLocal { public interface MenubeanLocal {
MenuNavigation getMenuNavigation(String url); // List<MenuNavigation> getTopnavigations();
List<MenuNavigation> getTopnavigations();
void flushDefaultmenu(); void flushDefaultmenu();
MenuNavigation findNavigation(String pagename);
List<MenuNavigation> getTopmenus();
} }
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface RfidContainerBeanLocal {
// List<RfidEvent> getReaderEvents(String readername);
}
...@@ -8,7 +8,6 @@ import java.util.List; ...@@ -8,7 +8,6 @@ import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
...@@ -16,6 +15,7 @@ import javax.persistence.OneToMany; ...@@ -16,6 +15,7 @@ import javax.persistence.OneToMany;
import javax.persistence.OrderBy; import javax.persistence.OrderBy;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient; import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking; import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType; import org.eclipse.persistence.annotations.OptimisticLockingType;
...@@ -25,16 +25,22 @@ import fi.insomnia.bortal.enums.BortalApplication; ...@@ -25,16 +25,22 @@ import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
@Entity @Entity
@Table(name = "menu_navigation") @Table(name = "menu_navigation",
// uniqueConstraints = { @UniqueConstraint(columnNames = { uniqueConstraints = { @UniqueConstraint(columnNames = {
// MenuNavigation.ITEM_COLUMN, MenuNavigation.EVENT_COLUMN }) }) MenuNavigation.ITEM_COLUMN,
MenuNavigation.EVENT_COLUMN })
})
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class MenuNavigation extends GenericEntity implements Comparable<MenuNavigation> { public class MenuNavigation extends GenericEntity implements Comparable<MenuNavigation> {
private static final long serialVersionUID = 1404769998091479699L; private static final long serialVersionUID = 1404769998091479699L;
protected static final String EVENT_COLUMN = "event_id";
protected static final String ITEM_COLUMN = "item_id"; protected static final String ITEM_COLUMN = "item_id";
protected static final String EVENT_COLUMN = "event_id";
@ManyToOne
@JoinColumn(nullable = false, name = EVENT_COLUMN)
private LanEvent event;
@Lob @Lob
private String key; private String key;
...@@ -57,14 +63,10 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi ...@@ -57,14 +63,10 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
private SitePage sitepage; private SitePage sitepage;
@ManyToOne @ManyToOne
@JoinColumn(nullable = true, name = EVENT_COLUMN)
private LanEvent event;
@ManyToOne
@JoinColumn(nullable = true) @JoinColumn(nullable = true)
private MenuNavigation parent; private MenuNavigation parent;
@OneToMany(mappedBy = "parent", cascade = ALL, fetch = FetchType.EAGER) @OneToMany(mappedBy = "parent", cascade = ALL)
@PrivateOwned @PrivateOwned
@OrderBy("sort") @OrderBy("sort")
private List<MenuNavigation> children = new ArrayList<MenuNavigation>(); private List<MenuNavigation> children = new ArrayList<MenuNavigation>();
...@@ -76,6 +78,17 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi ...@@ -76,6 +78,17 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
private String application; private String application;
private String permission; private String permission;
private MenuNavigation() {
super();
}
public MenuNavigation(LanEvent ev, String keyString) {
super();
this.event = ev;
this.key = keyString;
this.visible = true;
}
public BortalApplication getApplication() { public BortalApplication getApplication() {
if (privateApp == null && application != null) { if (privateApp == null && application != null) {
privateApp = BortalApplication.valueOf(application); privateApp = BortalApplication.valueOf(application);
...@@ -123,14 +136,6 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi ...@@ -123,14 +136,6 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
this.parent = parent; this.parent = parent;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public Menuitem getItem() { public Menuitem getItem() {
return item; return item;
} }
...@@ -182,8 +187,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi ...@@ -182,8 +187,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
children = new ArrayList<MenuNavigation>(); children = new ArrayList<MenuNavigation>();
} }
MenuNavigation add = new MenuNavigation(); MenuNavigation add = new MenuNavigation();
add.setKey("submenu" + item.getUrl().replace("/", ".")); if (item != null)
{
add.setKey("submenu" + item.getUrl().replace("/", "."));
}
add.setItem(item); add.setItem(item);
add.setEvent(event);
add.setPermission(permission); add.setPermission(permission);
add.setParent(this); add.setParent(this);
add.setVisible(true); add.setVisible(true);
...@@ -200,4 +209,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi ...@@ -200,4 +209,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
this.sitepage = sitepage; this.sitepage = sitepage;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -93,4 +93,9 @@ public class SitePage extends GenericEntity { ...@@ -93,4 +93,9 @@ public class SitePage extends GenericEntity {
this.allowedRoles = allowedRoles; this.allowedRoles = allowedRoles;
} }
public String getUrl()
{
return new StringBuilder("/page/?id=").append(getId()).toString();
}
} }
...@@ -6,7 +6,7 @@ import javax.annotation.Generated; ...@@ -6,7 +6,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-04-08T03:07:39.950+0300") @Generated(value="Dali", date="2012-04-08T13:33:11.092+0300")
@StaticMetamodel(SalesEntity.class) @StaticMetamodel(SalesEntity.class)
public class SalesEntity_ extends GenericEntity_ { public class SalesEntity_ extends GenericEntity_ {
public static volatile SingularAttribute<SalesEntity, String> certificate; public static volatile SingularAttribute<SalesEntity, String> certificate;
......
...@@ -28,40 +28,47 @@ ...@@ -28,40 +28,47 @@
</div> </div>
<div id="login"> <div id="login">
<h:outputText rendered="#{sessionHandler.loggedIn}" value="Olet kirjautunut käyttäjällä: #{sessionHandler.currentUser.nick}" /> <h:outputText rendered="#{sessionHandler.loggedIn}" value="Olet kirjautunut käyttäjällä: #{sessionHandler.currentUser.nick}" />
<tools:loginLogout /> <tools:loginLogout />
</div> </div>
<ui:fragment rendered="#{menuView.getMenu(0).size() > 1}">
<ul id="topmenu">
<li jsfc="ui:repeat" var="menuitem" value="#{menuView.getMenu(0)}">
<h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}"
styleClass="#{menuitem.selected?'active':''}" /></li>
</ul>
</ui:fragment>
</div> </div>
<div id="wrapper"> <div id="wrapper">
<div id="navigation"> <div id="navigation">
<ul class="menu" jsfc="ui:repeat" var="menuitem" value="#{menuView.topmenu}"> <ul class="menu">
<li><h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" /></li> <li jsfc="ui:repeat" var="menuitem" value="#{menuView.getMenu(1)}"><h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}"
styleClass="#{menuitem.selected?'active':''}" /></li>
</ul> </ul>
</div> </div>
<div id="container" class="top" /> <div id="container" class="top" />
<div id="container" class="clearfix"> <div id="container" class="clearfix">
<c:if test="#{menuView.submenu.size() > 1}"> <ui:fragment rendered="#{menuView.getMenu(2).size() > 1}">
<div id="right"> <div id="right">
<ul class="menu"> <ul class="menu">
<ui:repeat var="menuitem" value="#{menuView.submenu}"> <ui:repeat var="menuitem" value="#{menuView.getMenu(2)}">
<h:outputText rendered="#{!empty menuitem.header}" value="&lt;/ul>&lt;h1>#{i18n[menuitem.header]}&lt;/h1>&lt;ul>" escape="false" /> <h:outputText rendered="#{!empty menuitem.header}" value="&lt;/ul>&lt;h1>#{i18n[menuitem.header]}&lt;/h1>&lt;ul>" escape="false" />
<li> <li><h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" /></li>
<h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" />
</li>
</ui:repeat> </ui:repeat>
</ul> </ul>
</div> </div>
</c:if> </ui:fragment>
<div id="left"> <div id="left">
<ui:insert name="title" /> <ui:insert name="title" />
<h:messages globalOnly="true" /> <h:messages globalOnly="true" />
<ui:insert name="content" /> <ui:insert name="content" />
</div> </div>
</div> </div>
<div id="container" class="bottom"></div> <div id="container" class="bottom"></div>
</div> </div>
......
...@@ -9,46 +9,43 @@ ...@@ -9,46 +9,43 @@
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event"> <h:form>
<h:column> <h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<f:facet name="header"> <h:column>
<h:outputText value="${i18n['readerevent.']}" /> <f:facet name="header">
</f:facet> <h:outputText value="${i18n['readerevent.']}" />
</f:facet>
<h:outputText rendered="#{!empty event.printedCard}" id="cardtag" value="#{event.printedCard.rfidUid}" />
<h:outputText rendered="#{empty event.printedCard}" id="newtag" value="#{event.value}" /> <h:outputText rendered="#{!empty event.printedCard}" id="cardtag" value="#{event.printedCard.rfidUid}" />
</h:column> <h:outputText rendered="#{empty event.printedCard}" id="newtag" value="#{event.value}" />
</h:column>
<h:column>
<f:facet name="header"> <h:column>
<h:outputText value="${i18n['reader.user']}" /> <f:facet name="header">
</f:facet> <h:outputText value="${i18n['reader.user']}" />
<h:outputText rendered="#{!empty event.printedCard}" value="#{event.printedCard.user.wholeName} (#{event.printedCard.user.nick})" /> </f:facet>
</h:column> <h:outputText rendered="#{!empty event.printedCard}" value="#{event.printedCard.user.wholeName} (#{event.printedCard.user.nick})" />
</h:column>
<h:column>
<f:facet name="header"> <h:column>
<h:outputText value="${i18n['readerevent.seenSince']}" /> <f:facet name="header">
</f:facet> <h:outputText value="${i18n['readerevent.seenSince']}" />
<h:outputText value="#{event.seenSince}" /> </f:facet>
</h:column> <h:outputText value="#{event.seenSince}" />
<h:column> </h:column>
<f:facet name="header"> <h:column>
<h:outputText value="${i18n['gamepoints']}" /> <f:facet name="header">
</f:facet> <h:outputText value="${i18n['gamepoints']}" />
<h:outputText value="#{event.gamePoint}" /> </f:facet>
</h:column> <h:outputText value="#{event.gamePoint}" />
<h:column> </h:column>
<h:column>
<h:commandButton rendered="#{empty event.printedCard}" action="#{readerView.selectEvent()}" value="#{i18n['readerevent.associateToUser']}" /> <h:commandButton rendered="#{empty event.printedCard}" action="#{readerView.selectEvent()}" value="#{i18n['readerevent.associateToUser']}" />
<h:commandButton rendered="#{!empty event.printedCard}" action="#{readerView.selectEvent()}" value="#{i18n['readerevent.shopToUser']}" /> <h:commandButton rendered="#{!empty event.printedCard}" action="#{readerView.selectEvent()}" value="#{i18n['readerevent.shopToUser']}" />
</h:column> </h:column>
<h:column>
<h:commandButton rendered="#{!empty event.printedCard}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" /> </h:dataTable>
</h:column> </h:form>
</h:dataTable>
</composite:implementation> </composite:implementation>
......
body, html {width: 100%; height: 100%; color: #343434; font-family: trebuchet ms; background:url('../img/tausta.png') repeat-x #fff; margin: 0px;} body,html {
#header {width: 970px; height: 52px; margin: 0 auto;} width: 100%;
#logo {width: 255px; height: 52px; float: left;} height: 100%;
#login {width: 400px; height: 23px; float: right; margin-top: 15px; color:#fff;} color: #343434;
.form {background:url('../img/input.png') no-repeat; width: 130px; height: 23px; color:#fff; border:0px;padding-left: 10px;} font-family: trebuchet ms;
.button {background:url('../img/button.png') no-repeat; width: 100px; text-align: center; border:0px; height:23px;color:#fff; padding:0px;} background: url('../img/tausta.png') repeat-x #fff;
.button:hover {background:url('../img/button2.png') no-repeat; cursor:pointer;} margin: 0px;
#wrapper {width: 970px; margin: 0 auto;} }
#navigation {margin: 15px 0px; height: 33px; width: 100%;}
#navigation ul {list-style-type:none; margin: 0px; padding: 0px;} #header {
#navigation ul li {float: left; margin-right: 10px;} width: 970px;
#navigation ul li a {display: block; height: 33px; padding: 0px 10px; line-height: 33px; text-decoration: none; font-weight: bold; color: #0073bc;} height: 52px;
#navigation ul li a:hover, .active {background:#fff; border-radius: 5px; border: 1px solid #c0c0c0; color:#7dac0c !important;} margin: 0 auto;
a {color: #0037bc;} }
a:hover {color: #7dac0c;}
#container {width: 100%; background:url(../img/container.png) repeat-y; font-size: 13px;} #logo {
#container #left {padding: 10px 20px;} width: 255px;
#left h1 {color:#7dac0c; font-size: 24px; padding-top:0px; margin-top: 0px;} height: 52px;
#left h2 {color:#7dac0c; font-size: 18px;} float: left;
#left h3 {color:#7dac0c; font-size: 16px;} }
#right {float:right; border-left: 1px dotted #c0c0c0; padding: 10px 20px; width: 200px;}
#right h1, #right h1 a {color:#7dac0c; font-size: 18px; padding-top: 0px; margin-top:0px; text-decoration:none;} #login {
width: 400px;
#container.top {width: 100%; background:url(../img/container-top.png) no-repeat; height: 15px;} height: 23px;
#container.bottom {width: 100%; background:url(../img/container-bottom.png) no-repeat; height: 16px;} float: right;
margin-top: 15px;
.clearfix:after {content: ".";display: block;clear: both;visibility: hidden;line-height: 0;height: 0;} color: #fff;
}
.form {
background: url('../img/input.png') no-repeat;
width: 130px;
height: 23px;
color: #fff;
border: 0px;
padding-left: 10px;
}
.button {
background: url('../img/button.png') no-repeat;
width: 100px;
text-align: center;
border: 0px;
height: 23px;
color: #fff;
padding: 0px;
}
.button:hover {
background: url('../img/button2.png') no-repeat;
cursor: pointer;
}
#wrapper {
width: 970px;
margin: 0 auto;
}
#navigation {
margin: 15px 0px;
height: 33px;
width: 100%;
}
#navigation ul {
list-style-type: none;
margin: 0px;
padding: 0px;
}
#navigation ul li {
float: left;
margin-right: 10px;
}
#navigation ul li a {
display: block;
height: 33px;
padding: 0px 10px;
line-height: 33px;
text-decoration: none;
font-weight: bold;
color: #0073bc;
}
#navigation ul li a:hover,#navigation ul li .active {
background: #fff;
border-radius: 5px;
border: 1px solid #c0c0c0;
color: #7dac0c !important;
}
a {
color: #0037bc;
}
a:hover {
color: #7dac0c;
}
#container {
width: 100%;
background: url(../img/container.png) repeat-y;
font-size: 13px;
}
#container #left {
padding: 10px 20px;
}
#left h1 {
color: #7dac0c;
font-size: 24px;
padding-top: 0px;
margin-top: 0px;
}
#left h2 {
color: #7dac0c;
font-size: 18px;
}
#left h3 {
color: #7dac0c;
font-size: 16px;
}
#right {
float: right;
border-left: 1px dotted #c0c0c0;
padding: 10px 20px;
width: 200px;
}
#right h1,#right h1 a {
color: #7dac0c;
font-size: 18px;
padding-top: 0px;
margin-top: 0px;
text-decoration: none;
}
#container.top {
width: 100%;
background: url(../img/container-top.png) no-repeat;
height: 15px;
}
#container.bottom {
width: 100%;
background: url(../img/container-bottom.png) no-repeat;
height: 16px;
}
.clearfix:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
#topmenu {
font-size: 0.8em;
float: right;
list-style-type: none;
margin: 5px 15px 0 0;
padding: 0px;
}
#topmenu a {
color: #fff;
text-decoration:none;
display:block;
}
#topmenu li {
margin: 0 7px;
color: #fff;
float: left;
}
\ No newline at end of file
...@@ -77,9 +77,7 @@ public class MapView extends GenericCDIView { ...@@ -77,9 +77,7 @@ public class MapView extends GenericCDIView {
@Produces @Produces
public EventMap getActiveMap() { public EventMap getActiveMap() {
if (activeMap == null) { if (activeMap == null) {
activeMap = placeMapBean.getActiveMap(); activeMap = placeMapBean.getActiveMap();
} }
return activeMap; return activeMap;
......
package fi.insomnia.bortal.web.cdiview.menu; package fi.insomnia.bortal.web.cdiview.menu;
import fi.insomnia.bortal.model.MenuNavigation; import fi.insomnia.bortal.model.MenuNavigation;
import fi.insomnia.bortal.model.Menuitem;
public class JsfMenuitem { public class JsfMenuitem {
...@@ -11,12 +10,12 @@ public class JsfMenuitem { ...@@ -11,12 +10,12 @@ public class JsfMenuitem {
public JsfMenuitem(MenuNavigation navi) { public JsfMenuitem(MenuNavigation navi) {
this.navigation = navi; this.navigation = navi;
if (navi.getSitepage() == null) if (navi.getSitepage() != null) {
{ outcome = navi.getSitepage().getUrl();
setItem(navi.getItem()); } else if (navi.getItem() != null) {
} else { this.outcome = navi.getItem().getUrl();
outcome = new StringBuilder("/page/?id=").append(navi.getSitepage().getId()).toString();
} }
} }
// public JsfMenuitem(SitePage sitepage) { // public JsfMenuitem(SitePage sitepage) {
...@@ -45,15 +44,12 @@ public class JsfMenuitem { ...@@ -45,15 +44,12 @@ public class JsfMenuitem {
return outcome; return outcome;
} }
public void setItem(Menuitem item) {
if (item != null)
{
this.outcome = item.getUrl();
}
}
public MenuNavigation getNavigation() { public MenuNavigation getNavigation() {
return navigation; return navigation;
} }
public void setOutcome(String outcome2) {
outcome = outcome2;
}
} }
package fi.insomnia.bortal.web.cdiview.menu;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.faces.context.FacesContext;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
//@SessionScoped
//@Named
public class MenuDataView {
private ArrayList<JsfMenuitem> topmenu;
private ArrayList<JsfMenuitem> submenu;
private Integer pagegroupId;
private PageGroup currentPagegroup;
// @Inject
private FacesContext context;
// @EJB
private PermissionBeanLocal permbean;
// @EJB
private SitePageBeanLocal sitePageBean;
private ResourceBundle rb;
private static List<PageGroup> PAGEGROUPS;
private String localize(String key) {
String value = null;
try {
value = getResourcebundle().getString(key);
} catch (MissingResourceException e) {
value = null;
}
if (key == null) {
value = "########";
} else if (value == null) {
value = "???" + key + "???";
}
return value;
}
private ResourceBundle getResourcebundle() {
if (rb == null) {
rb = context.getApplication().getResourceBundle(context, "i18n");
}
return rb;
}
public List<PageGroup> getPagegroups()
{
return PAGEGROUPS;
}
static {
PageGroup userpages = new PageGroup("userpages");
PageGroup adminpages = new PageGroup("adminpages");
PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(userpages, adminpages));
// Frontpage
userpages.initMenugroup("frontpage");
userpages.addPage("/index", UserPermission.ANYUSER);
userpages.addPage("/user/create", UserPermission.CREATE_NEW);
userpages.addPage("/auth/sendResetMail", UserPermission.LOGIN);
// User
userpages.initMenugroup("user");
userpages.addPage("/user/edit", UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks");
userpages.addPage("/user/changePassword", null);
userpages.addPage("/user/accountEvents", null);
userpages.addPage("/place/myGroups", null);
userpages.addPage("/place/insertToken", null);
userpages.addPage("/user/sendPicture", null);
userpages.addPage("/user/list", UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
userpages.addPage("/user/create", UserPermission.VIEW_ALL);
userpages.addPage("/role/list", UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks");
userpages.addPage("/role/create", UserPermission.WRITE_ROLES);
userpages.addPage("/user/listCardTemplates", UserPermission.READ_ROLES);
userpages.addPage("/user/createCardTemplate", UserPermission.WRITE_ROLES);
// Placemap
userpages.initMenugroup("placemap");
userpages.addPage("/place/placemap", MapPermission.VIEW);
// Shop
userpages.initMenugroup("shop");
userpages.addPage("/shop/createBill", BillPermission.CREATE_BILL);
userpages.addPage("/bill/list", BillPermission.VIEW_OWN);
// Poll
userpages.initMenugroup("poll");
userpages.addPage("/poll/index", PollPermission.ANSWER);
}
public void setContext(FacesContext context) {
this.context = context;
}
public FacesContext getContext() {
return context;
}
// public List<JsfMenuitem> getTopmenu() {
//
// if (topmenu == null) {
// topmenu = new ArrayList<JsfMenuitem>();
//
// Menuitem currentPage = PAGEGROUPS.get(getPagename());
// MenuGroup currentGroup = null;
// if (currentPage != null) {
// currentGroup = currentPage.getGroup();
// }
//
// for (MenuGroup m : PAGEGROUPS) {
// for (Menuitem item : m.getItems()) {
// if (permbean.hasPermission(item.getPermission())) {
// JsfMenuitem thisitem = new JsfMenuitem(item, this.localize(item,
// "menu"));
// topmenu.add(thisitem);
// if (m.equals(currentGroup)) {
// thisitem.setSelected();
// }
// break;
// }
// }
// }
//
// for (SitePage sitepage : sitePageBean.getPagerootsForUser())
// {
// topmenu.add(new JsfMenuitem(sitepage));
// }
// }
//
// return topmenu;
// }
private String localize(Menuitem item, String prefix) {
StringBuilder sb = new StringBuilder(prefix);
for (String part : item.getUrl().split("/")) {
if (!part.isEmpty()) {
sb.append(".").append(part);
}
}
return localize(sb.toString());
}
public void setSubmenu(ArrayList<JsfMenuitem> submenu) {
this.submenu = submenu;
}
// public ArrayList<JsfMenuitem> getSubmenu() {
// if (submenu == null) {
// Menuitem currentPage = PAGEGROUPS.get(getPagename());
// if (currentPage != null) {
// MenuGroup currentGroup = currentPage.getGroup();
//
// submenu = new ArrayList<JsfMenuitem>();
// for (Menuitem item : currentGroup.getItems()) {
// if (permbean.hasPermission(item.getPermission())) {
// JsfMenuitem thisitem = new JsfMenuitem(item, localize(item, "submenu"));
// submenu.add(thisitem);
// if (currentPage.equals(item)) {
// thisitem.setSelected();
// }
// }
// }
//
// }
// }
// return submenu;
// }
}
\ No newline at end of file
package fi.insomnia.bortal.web.cdiview.menu;
import java.util.ArrayList;
import java.util.List;
import fi.insomnia.bortal.enums.apps.IAppPermission;
public class MenuGroup {
private final List<Menuitem> items = new ArrayList<Menuitem>();
private final String groupname;
public MenuGroup(String name) {
groupname = name;
}
public String getGroupname() {
return groupname;
}
public List<Menuitem> getItems() {
return items;
}
public Menuitem addPage(String url, IAppPermission perm) {
Menuitem ret = new Menuitem(url, this, perm);
items.add(ret);
return ret;
}
}
package fi.insomnia.bortal.web.cdiview.menu; package fi.insomnia.bortal.web.cdiview.menu;
import java.util.ArrayList; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -13,32 +14,55 @@ import javax.servlet.http.HttpServletRequest; ...@@ -13,32 +14,55 @@ import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.MenubeanLocal; import fi.insomnia.bortal.beans.MenubeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.SitePageBeanLocal; import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.model.MenuNavigation; import fi.insomnia.bortal.model.MenuNavigation;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
@RequestScoped @RequestScoped
public class MenuView { public class MenuView extends GenericCDIView {
private static final long serialVersionUID = -5720164797157054213L;
private String pagename; private String pagename;
private List<JsfMenuitem> submenu;
private List<JsfMenuitem> topmenu;
@Inject @Inject
private FacesContext context; private FacesContext context;
@EJB @EJB
private MenubeanLocal menubean; private MenubeanLocal menubean;
@EJB @EJB
private PermissionBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB @EJB
private SitePageBeanLocal sitepagebean; private SitePageBeanLocal sitepagebean;
private ArrayList<MenuNavigation> menupath; @EJB
private EventBeanLocal eventbean;
private LinkedList<List<JsfMenuitem>> menus;
private HashSet<MenuNavigation> navis;
private static final Logger logger = LoggerFactory.getLogger(MenuView.class); private static final Logger logger = LoggerFactory.getLogger(MenuView.class);
public List<JsfMenuitem> getMenu(Integer level)
{
getMenus();
if (level == null || menus.isEmpty() || level < 0 || level >= menus.size())
{
return null;
}
List<JsfMenuitem> ret = menus.get(level);
logger.info("Trying to get menu for level {}, menus {}", level, ret);
return ret;
}
public String getPagename() { public String getPagename() {
if (pagename == null) { if (pagename == null) {
HttpServletRequest req = (HttpServletRequest) getContext().getExternalContext().getRequest(); HttpServletRequest req = (HttpServletRequest) getContext().getExternalContext().getRequest();
...@@ -50,79 +74,96 @@ public class MenuView { ...@@ -50,79 +74,96 @@ public class MenuView {
return pagename; return pagename;
} }
public List<JsfMenuitem> getSubmenu() public LinkedList<List<JsfMenuitem>> getMenus()
{ {
if (submenu == null) if (menus == null)
{ {
getTopmenu(); menus = new LinkedList<List<JsfMenuitem>>();
navis = new HashSet<MenuNavigation>();
MenuNavigation topPage = menupath.get(menupath.size() - 1); MenuNavigation pathIter = menubean.findNavigation(getPagename());
submenu = new ArrayList<JsfMenuitem>(); while (pathIter != null) {
if (pathIter.isVisible()) {
for (MenuNavigation navi : topPage.getChildren()) { navis.add(pathIter);
if (permbean.hasPermission(navi.getPermission())) { menus.add(0, addMenu(pathIter.getChildren()));
JsfMenuitem thisitem = new JsfMenuitem(navi);
submenu.add(thisitem);
if (menupath.contains(navi)) {
thisitem.setSelected();
}
} }
pathIter = pathIter.getParent();
} }
menus.add(0, addMenu(menubean.getTopmenus()));
} }
return menus;
return submenu;
} }
public List<JsfMenuitem> getTopmenu() { private LinkedList<JsfMenuitem> addMenu(List<MenuNavigation> children) {
if (topmenu == null) { LinkedList<JsfMenuitem> ret = new LinkedList<JsfMenuitem>();
topmenu = new ArrayList<JsfMenuitem>(); // Iterate through children
for (MenuNavigation child : children) {
// this function will also initialize empty menu hierarchy, but only // if is visible, permission is null or has permission, continue
// if there are no results! if (!child.isVisible() || (child.getPermission() != null && !super.hasPermission(child.getPermission()))) {
List<MenuNavigation> menuitems = menubean.getTopnavigations(); continue;
}
menupath = new ArrayList<MenuNavigation>(); JsfMenuitem jsfItem = new JsfMenuitem(child);
MenuNavigation currentPage = menubean.getMenuNavigation(getPagename());
while (currentPage != null) // if menuitem does not have any content, it should get it from the
// first child.
if (child.getItem() == null && child.getSitepage() == null)
{ {
menupath.add(currentPage);
currentPage = currentPage.getParent();
}
for (MenuNavigation m : menuitems) {
if (m.getPermission() != null && !permbean.hasPermission(m.getPermission())) {
continue;
}
JsfMenuitem thisitem = new JsfMenuitem(m); // if menulist does not have entries this is the lowest level we
if (m.getItem() == null && m.getSitepage() == null) // have menus, else we can use the outcome from the latest
{ // entry in menuarray.
for (MenuNavigation child : m.getChildren()) if (!navis.contains(child) || menus.isEmpty() || menus.get(0).isEmpty()) {
{ String outcome = getOutcome(child);
if (permbean.hasPermission(child.getPermission())) // if we don't get outcome, we don't have permission to any
{ // subitems and this item should be skipped...
thisitem.setItem(child.getItem()); if (outcome == null) {
break; continue;
}
} }
jsfItem.setOutcome(outcome);
} else {
jsfItem.setOutcome(menus.get(0).get(0).getOutcome());
} }
}
if (navis.contains(child)) {
jsfItem.setSelected();
if (thisitem.getOutcome() != null)
{
topmenu.add(thisitem);
if (menupath.contains(m)) {
thisitem.setSelected();
}
}
} }
ret.add(jsfItem);
} }
return ret;
}
return topmenu; private String getOutcome(MenuNavigation navi) {
String ret = null;
// try to get the outcome from the first child we have permission to.
for (MenuNavigation child : navi.getChildren())
{
if (!child.isVisible() || (child.getPermission() != null && !super.hasPermission(child.getPermission()))) {
continue;
}
// try to get item from this child.
if (child.getItem() != null) {
ret = child.getItem().getUrl();
}
// try to get sitepage url.
else if (child.getSitepage() != null) {
ret = child.getSitepage().getUrl();
}
// if navigation does not have menuitem or sitepage we go deeper in
// to the tree..
else {
ret = getOutcome(child);
}
// If we found outcome, brek from iterator.
if (ret != null) {
break;
}
}
return ret;
} }
public FacesContext getContext() { public FacesContext getContext() {
......
package fi.insomnia.bortal.web.cdiview.menu;
import fi.insomnia.bortal.enums.apps.IAppPermission;
public class Menuitem {
private final String url;
private final MenuGroup group;
private final IAppPermission permission;
private String header;
public Menuitem(String url, MenuGroup group, IAppPermission perm) {
this.url = url;
this.permission = perm;
this.group = group;
}
public String getUrl() {
return url;
}
public MenuGroup getGroup() {
return group;
}
public IAppPermission getPermission() {
return permission;
}
public Menuitem setHeader(String string) {
header = string;
return this;
}
public String getHeader() {
return header;
}
}
package fi.insomnia.bortal.web.cdiview.menu;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import fi.insomnia.bortal.enums.apps.IAppPermission;
public class PageGroup {
private final String name;
private final List<MenuGroup> menugroups;
private MenuGroup currentMenugroup;
private final Map<String, Menuitem> pages;
public PageGroup(String name) {
this.name = name;
this.menugroups = new ArrayList<MenuGroup>();
pages = new HashMap<String, Menuitem>();
}
public String getName()
{
return name;
}
public Menuitem addPage(String url, IAppPermission perm) {
Menuitem ret = currentMenugroup.addPage(url, perm);
pages.put(url, ret);
return ret;
}
public void initMenugroup(String menuname) {
currentMenugroup = new MenuGroup(menuname);
menugroups.add(currentMenugroup);
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!