Commit 52a2f10c by Tuomas Riihimäki

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

…roppaamaan menu* kannat possusta)
1 parent f3ceaf25
Showing with 423 additions and 601 deletions
Manifest-Version: 1.0
Class-Path: LanBortalBeansClient.jar
Class-Path: lib/LanBortalBeansClient.jar
lib/LanBortalUtilities.jar
......@@ -14,10 +14,12 @@ import org.slf4j.LoggerFactory;
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.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;
/**
......@@ -45,36 +47,6 @@ public class Menubean implements MenubeanLocal {
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)
@Override
public void flushDefaultmenu()
......@@ -83,20 +55,22 @@ public class Menubean implements MenubeanLocal {
initializeMenu();
}
public void initializeMenu() {
// Frontpage
private synchronized void initializeMenu() {
LanEvent ev = eventbean.getCurrentEvent();
MenuNavigation usernavi = new MenuNavigation(ev, "supernavi.user");
MenuNavigation frontTopnavi = new MenuNavigation();
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);
navifacade.create(frontTopnavi);
// User
MenuNavigation userTopnavi = new MenuNavigation();
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"), null);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/accountEvents"), null);
......@@ -104,28 +78,65 @@ public class Menubean implements MenubeanLocal {
userTopnavi.addPage(menuitemfacade.findOrCreate("/place/insertToken"), 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/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/create"), UserPermission.WRITE_ROLES);
userTopnavi.addPage(menuitemfacade.findOrCreate("/user/listCardTemplates"), UserPermission.READ_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.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.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
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.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;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
......@@ -11,8 +10,6 @@ import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.slf4j.Logger;
......@@ -20,10 +17,8 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBean;
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.Menuitem;
import fi.insomnia.bortal.model.Menuitem_;
@Stateless
......@@ -53,8 +48,7 @@ public class MenuNavigationFacade extends GenericFacade<Integer, MenuNavigation>
return em;
}
public MenuNavigation find(String url, LanEvent event) {
logger.debug("Finding MenuNavigation with url {}", url);
public MenuNavigation find(String url) {
if (url == null || url.isEmpty())
{
return null;
......@@ -62,71 +56,37 @@ public class MenuNavigationFacade extends GenericFacade<Integer, MenuNavigation>
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MenuNavigation> cq = cb.createQuery(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.orderBy(cb.asc(root.get(MenuNavigation_.sort)));
List<MenuNavigation> results = em.createQuery(cq).getResultList();
cq.where(
cb.equal(root.get(MenuNavigation_.item).get(Menuitem_.url), url),
cb.equal(root.get(MenuNavigation_.event), eventbean.getCurrentEvent())
);
MenuNavigation ret = null;
for (MenuNavigation navi : results)
{
if (permbean.hasPermission(navi.getPermission()))
{
ret = navi;
}
}
if (ret == null && !results.isEmpty())
{
ret = results.get(0);
}
return super.getSingleNullableResult(em.createQuery(cq));
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
* have to be filtered for duplicates to get correct result!!
* Returns top level navigations
*
* @param event
* @return
* @return //
*/
public List<MenuNavigation> findToplevels() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MenuNavigation> cq = cb.createQuery(MenuNavigation.class);
Root<MenuNavigation> root = cq.from(MenuNavigation.class);
Path<LanEvent> eventpath = root.get(MenuNavigation_.event);
cq.where(cb.isNull(root.get(MenuNavigation_.parent)), cb.or(cb.equal(eventpath, eventbean.getCurrentEvent()), cb.isNull(eventpath)), cb.isTrue(root.get(MenuNavigation_.visible)));
cq.where(cb.isNull(root.get(MenuNavigation_.parent)),
cb.equal(root.get(MenuNavigation_.event), eventbean.getCurrentEvent()),
cb.isTrue(root.get(MenuNavigation_.visible)));
return em.createQuery(cq).getResultList();
}
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();
}
......
......@@ -28,6 +28,9 @@ public class MenuitemFacade extends GenericFacade<Integer, Menuitem> {
}
public Menuitem findOrCreate(String url) {
if (url == null || url.isEmpty()) {
return null;
}
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Menuitem> cq = cb.createQuery(Menuitem.class);
Root<Menuitem> root = cq.from(Menuitem.class);
......
......@@ -9,9 +9,12 @@ import fi.insomnia.bortal.model.MenuNavigation;
@Local
public interface MenubeanLocal {
MenuNavigation getMenuNavigation(String url);
List<MenuNavigation> getTopnavigations();
// List<MenuNavigation> getTopnavigations();
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;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
......@@ -16,6 +15,7 @@ import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
......@@ -25,16 +25,22 @@ import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
@Entity
@Table(name = "menu_navigation")
// uniqueConstraints = { @UniqueConstraint(columnNames = {
// MenuNavigation.ITEM_COLUMN, MenuNavigation.EVENT_COLUMN }) })
@Table(name = "menu_navigation",
uniqueConstraints = { @UniqueConstraint(columnNames = {
MenuNavigation.ITEM_COLUMN,
MenuNavigation.EVENT_COLUMN })
})
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class MenuNavigation extends GenericEntity implements Comparable<MenuNavigation> {
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 EVENT_COLUMN = "event_id";
@ManyToOne
@JoinColumn(nullable = false, name = EVENT_COLUMN)
private LanEvent event;
@Lob
private String key;
......@@ -57,14 +63,10 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
private SitePage sitepage;
@ManyToOne
@JoinColumn(nullable = true, name = EVENT_COLUMN)
private LanEvent event;
@ManyToOne
@JoinColumn(nullable = true)
private MenuNavigation parent;
@OneToMany(mappedBy = "parent", cascade = ALL, fetch = FetchType.EAGER)
@OneToMany(mappedBy = "parent", cascade = ALL)
@PrivateOwned
@OrderBy("sort")
private List<MenuNavigation> children = new ArrayList<MenuNavigation>();
......@@ -76,6 +78,17 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
private String application;
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() {
if (privateApp == null && application != null) {
privateApp = BortalApplication.valueOf(application);
......@@ -123,14 +136,6 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
this.parent = parent;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public Menuitem getItem() {
return item;
}
......@@ -182,8 +187,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
children = new ArrayList<MenuNavigation>();
}
MenuNavigation add = new MenuNavigation();
if (item != null)
{
add.setKey("submenu" + item.getUrl().replace("/", "."));
}
add.setItem(item);
add.setEvent(event);
add.setPermission(permission);
add.setParent(this);
add.setVisible(true);
......@@ -200,4 +209,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
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 {
this.allowedRoles = allowedRoles;
}
public String getUrl()
{
return new StringBuilder("/page/?id=").append(getId()).toString();
}
}
......@@ -6,13 +6,13 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-04-08T02:57:31.378+0300")
@Generated(value="Dali", date="2012-04-08T13:33:11.092+0300")
@StaticMetamodel(SalesEntity.class)
public class SalesEntity_ extends GenericEntity_ {
public static volatile SingularAttribute<SalesEntity, String> certificate;
public static volatile SingularAttribute<SalesEntity, String> name;
public static volatile SingularAttribute<SalesEntity, SalesEntityType> type;
public static volatile SingularAttribute<SalesEntity, Salespoint> point;
public static volatile SingularAttribute<SalesEntity, String> secret;
public static volatile SingularAttribute<SalesEntity, SalesEntityType> type;
public static volatile SingularAttribute<SalesEntity, Reader> reader;
public static volatile SingularAttribute<SalesEntity, Salespoint> point;
}
......@@ -28,34 +28,41 @@
</div>
<div id="login">
<h:outputText rendered="#{sessionHandler.loggedIn}" value="Olet kirjautunut käyttäjällä: #{sessionHandler.currentUser.nick}" />
<tools:loginLogout />
</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 id="wrapper">
<div id="navigation">
<ul class="menu" jsfc="ui:repeat" var="menuitem" value="#{menuView.topmenu}">
<li><h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" /></li>
<ul class="menu">
<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>
</div>
<div id="container" class="top" />
<div id="container" class="clearfix">
<c:if test="#{menuView.submenu.size() > 1}">
<ui:fragment rendered="#{menuView.getMenu(2).size() > 1}">
<div id="right">
<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" />
<li>
<h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" />
</li>
<li><h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" /></li>
</ui:repeat>
</ul>
</div>
</c:if>
</ui:fragment>
<div id="left">
<ui:insert name="title" />
<h:messages globalOnly="true" />
......
......@@ -9,6 +9,7 @@
</composite:interface>
<composite:implementation>
<h:form>
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<h:column>
<f:facet name="header">
......@@ -39,16 +40,12 @@
<h:outputText value="#{event.gamePoint}" />
</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.shopToUser']}" />
</h:column>
<h:column>
<h:commandButton rendered="#{!empty event.printedCard}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" />
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
......
body, html {width: 100%; height: 100%; color: #343434; font-family: trebuchet ms; background:url('../img/tausta.png') repeat-x #fff; margin: 0px;}
#header {width: 970px; height: 52px; margin: 0 auto;}
#logo {width: 255px; height: 52px; float: left;}
#login {width: 400px; height: 23px; float: right; margin-top: 15px; 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, .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;}
body,html {
width: 100%;
height: 100%;
color: #343434;
font-family: trebuchet ms;
background: url('../img/tausta.png') repeat-x #fff;
margin: 0px;
}
#header {
width: 970px;
height: 52px;
margin: 0 auto;
}
#logo {
width: 255px;
height: 52px;
float: left;
}
#login {
width: 400px;
height: 23px;
float: right;
margin-top: 15px;
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 {
@Produces
public EventMap getActiveMap() {
if (activeMap == null) {
activeMap = placeMapBean.getActiveMap();
}
return activeMap;
......
package fi.insomnia.bortal.web.cdiview.menu;
import fi.insomnia.bortal.model.MenuNavigation;
import fi.insomnia.bortal.model.Menuitem;
public class JsfMenuitem {
......@@ -11,12 +10,12 @@ public class JsfMenuitem {
public JsfMenuitem(MenuNavigation navi) {
this.navigation = navi;
if (navi.getSitepage() == null)
{
setItem(navi.getItem());
} else {
outcome = new StringBuilder("/page/?id=").append(navi.getSitepage().getId()).toString();
if (navi.getSitepage() != null) {
outcome = navi.getSitepage().getUrl();
} else if (navi.getItem() != null) {
this.outcome = navi.getItem().getUrl();
}
}
// public JsfMenuitem(SitePage sitepage) {
......@@ -45,15 +44,12 @@ public class JsfMenuitem {
return outcome;
}
public void setItem(Menuitem item) {
if (item != null)
{
this.outcome = item.getUrl();
}
}
public MenuNavigation getNavigation() {
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;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
......@@ -13,32 +14,55 @@ import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.MenubeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.model.MenuNavigation;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@RequestScoped
public class MenuView {
public class MenuView extends GenericCDIView {
private static final long serialVersionUID = -5720164797157054213L;
private String pagename;
private List<JsfMenuitem> submenu;
private List<JsfMenuitem> topmenu;
@Inject
private FacesContext context;
@EJB
private MenubeanLocal menubean;
@EJB
private PermissionBeanLocal permbean;
@EJB
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);
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() {
if (pagename == null) {
HttpServletRequest req = (HttpServletRequest) getContext().getExternalContext().getRequest();
......@@ -50,79 +74,96 @@ public class MenuView {
return pagename;
}
public List<JsfMenuitem> getSubmenu()
public LinkedList<List<JsfMenuitem>> getMenus()
{
if (submenu == null)
if (menus == null)
{
getTopmenu();
MenuNavigation topPage = menupath.get(menupath.size() - 1);
menus = new LinkedList<List<JsfMenuitem>>();
navis = new HashSet<MenuNavigation>();
MenuNavigation pathIter = menubean.findNavigation(getPagename());
submenu = new ArrayList<JsfMenuitem>();
for (MenuNavigation navi : topPage.getChildren()) {
if (permbean.hasPermission(navi.getPermission())) {
JsfMenuitem thisitem = new JsfMenuitem(navi);
submenu.add(thisitem);
if (menupath.contains(navi)) {
thisitem.setSelected();
while (pathIter != null) {
if (pathIter.isVisible()) {
navis.add(pathIter);
menus.add(0, addMenu(pathIter.getChildren()));
}
pathIter = pathIter.getParent();
}
menus.add(0, addMenu(menubean.getTopmenus()));
}
return menus;
}
return submenu;
private LinkedList<JsfMenuitem> addMenu(List<MenuNavigation> children) {
LinkedList<JsfMenuitem> ret = new LinkedList<JsfMenuitem>();
// Iterate through children
for (MenuNavigation child : children) {
// if is visible, permission is null or has permission, continue
if (!child.isVisible() || (child.getPermission() != null && !super.hasPermission(child.getPermission()))) {
continue;
}
public List<JsfMenuitem> getTopmenu() {
if (topmenu == null) {
topmenu = new ArrayList<JsfMenuitem>();
// this function will also initialize empty menu hierarchy, but only
// if there are no results!
List<MenuNavigation> menuitems = menubean.getTopnavigations();
JsfMenuitem jsfItem = new JsfMenuitem(child);
menupath = new ArrayList<MenuNavigation>();
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())) {
// if menulist does not have entries this is the lowest level we
// have menus, else we can use the outcome from the latest
// entry in menuarray.
if (!navis.contains(child) || menus.isEmpty() || menus.get(0).isEmpty()) {
String outcome = getOutcome(child);
// if we don't get outcome, we don't have permission to any
// subitems and this item should be skipped...
if (outcome == null) {
continue;
}
jsfItem.setOutcome(outcome);
} else {
jsfItem.setOutcome(menus.get(0).get(0).getOutcome());
}
}
if (navis.contains(child)) {
jsfItem.setSelected();
JsfMenuitem thisitem = new JsfMenuitem(m);
if (m.getItem() == null && m.getSitepage() == null)
{
for (MenuNavigation child : m.getChildren())
{
if (permbean.hasPermission(child.getPermission()))
{
thisitem.setItem(child.getItem());
break;
}
ret.add(jsfItem);
}
return ret;
}
if (thisitem.getOutcome() != null)
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())
{
topmenu.add(thisitem);
if (!child.isVisible() || (child.getPermission() != null && !super.hasPermission(child.getPermission()))) {
continue;
}
if (menupath.contains(m)) {
thisitem.setSelected();
// 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 topmenu;
}
return ret;
}
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!