Commit 47e28be6 by Tuomas Riihimäki

Muutettu oikeusjärjestelmä. Laskujen ja paikkojen varaus toteutettu ja testattu

1 parent e03df159
Showing with 1599 additions and 1122 deletions
......@@ -68,6 +68,7 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
@Override
protected void authenticateUser() throws LoginException {
log((new StringBuilder()).append("CustomRealm Auth Info:_username:")
.append(_username)
// .append(";_password:").append(_passwd)
......
......@@ -75,7 +75,6 @@ public class BortalRealm extends AppservRealm {
throws BadRealmException, NoSuchRealmException {
super.init(properties);
log("Init BortalRealm");
String propJaasContext = properties.getProperty(JAAS_CONTEXT_PARAM);
if (propJaasContext != null) {
setProperty(JAAS_CONTEXT_PARAM, propJaasContext);
......
......@@ -12,7 +12,5 @@
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="src" path="/LanBortalUtilities"/>
<classpathentry kind="src" path="/UtilClasses"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
Manifest-Version: 1.0
Class-Path: LanBortalBeansClient.jar
Class-Path: LanBortalBeansClient.jar
lib/LanBortalUtilities.jar
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
<security-role-mapping>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
<role-name>USER/READ_ROLES</role-name>
<group-name>USER/READ_ROLES</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ORGANIZATION_ROOT</role-name>
<group-name>ORGANIZATION_ROOT</group-name>
<role-name>USER/WRITE_ROLES</role-name>
<group-name>USER/WRITE_ROLES</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SUPERADMIN</role-name>
<group-name>SUPERADMIN</group-name>
<role-name>USER/VIEW_ALL</role-name>
<group-name>USER/VIEW_ALL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ADMIN_BASE</role-name>
<group-name>ADMIN_BASE</group-name>
<role-name>USER/VIEW_SELF</role-name>
<group-name>USER/VIEW_SELF</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_BASE</role-name>
<group-name>USER_BASE</group-name>
<role-name>USER/CREATE_NEW</role-name>
<group-name>USER/CREATE_NEW</group-name>
<principal-name>ANONYMOUS</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/READ</role-name>
<group-name>LOGIN/READ</group-name>
<role-name>USER/MODIFY</role-name>
<group-name>USER/MODIFY</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/WRITE</role-name>
<group-name>LOGIN/WRITE</group-name>
<role-name>SUPERADMIN</role-name>
<group-name>SUPERADMIN</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/EXECUTE</role-name>
<group-name>LOGIN/EXECUTE</group-name>
<role-name>BILL/WRITE_ALL</role-name>
<group-name>BILL/WRITE_ALL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_MANAGEMENT/READ</role-name>
<group-name>USER_MANAGEMENT/READ</group-name>
<role-name>POLL/ANSWER</role-name>
<group-name>POLL/ANSWER</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_MANAGEMENT/WRITE</role-name>
<group-name>USER_MANAGEMENT/WRITE</group-name>
<role-name>POLL/ANSWER</role-name>
<group-name>POLL/ANSWER</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER_MANAGEMENT/EXECUTE</role-name>
<group-name>USER_MANAGEMENT/EXECUTE</group-name>
<role-name>POLL/VIEW_RESULTS</role-name>
<group-name>POLL/VIEW_RESULTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ACCOUNT_MANAGEMENT/READ</role-name>
<group-name>ACCOUNT_MANAGEMENT/READ</group-name>
<role-name>POLL/CREATE</role-name>
<group-name>POLL/CREATE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ACCOUNT_MANAGEMENT/WRITE</role-name>
<group-name>ACCOUNT_MANAGEMENT/WRITE</group-name>
<role-name>BILL/READ_ALL</role-name>
<group-name>BILL/READ_ALL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ACCOUNT_MANAGEMENT/EXECUTE</role-name>
<group-name>ACCOUNT_MANAGEMENT/EXECUTE</group-name>
<role-name>BILL/CREATE_BILL</role-name>
<group-name>BILL/CREATE_BILL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/READ</role-name>
<group-name>BILL/READ</group-name>
<role-name>LOGIN/LOGOUT</role-name>
<group-name>LOGIN/LOGOUT</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/WRITE</role-name>
<group-name>BILL/WRITE</group-name>
<role-name>LOGIN/LOGIN</role-name>
<group-name>LOGIN/LOGIN</group-name>
<principal-name>ANONUMOUS</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/EXECUTE</role-name>
<group-name>BILL/EXECUTE</group-name>
<role-name>MAP/MANAGE_OTHERS</role-name>
<group-name>MAP/MANAGE_OTHERS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/READ</role-name>
<group-name>MAP/READ</group-name>
<role-name>MAP/BUY_PLACES</role-name>
<group-name>MAP/BUY_PLACES</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/WRITE</role-name>
<group-name>MAP/WRITE</group-name>
<role-name>MAP/VIEW</role-name>
<group-name>MAP/VIEW</group-name>
<principal-name>ANONUMOUS</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/EXECUTE</role-name>
<group-name>MAP/EXECUTE</group-name>
<role-name>MAP/MANAGE_MAPS</role-name>
<group-name>MAP/MANAGE_MAPS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/READ</role-name>
<group-name>ROLE_MANAGEMENT/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/WRITE</role-name>
<group-name>ROLE_MANAGEMENT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/EXECUTE</role-name>
<group-name>ROLE_MANAGEMENT/EXECUTE</group-name>
<role-name>SHOP/LIST_ALL_PRODUCTS</role-name>
<group-name>SHOP/LIST_ALL_PRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>PRODUCT/READ</role-name>
<group-name>PRODUCT/READ</group-name>
<role-name>SHOP/MANAGE_PRODUCTS</role-name>
<group-name>SHOP/MANAGE_PRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>PRODUCT/WRITE</role-name>
<group-name>PRODUCT/WRITE</group-name>
<role-name>ROLE_MANAGEMENT/WRITE</role-name>
<group-name>ROLE_MANAGEMENT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>PRODUCT/EXECUTE</role-name>
<group-name>PRODUCT/EXECUTE</group-name>
<role-name>SHOP/SHOP_PRODUCTS</role-name>
<group-name>SHOP/SHOP_PRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/READ</role-name>
<group-name>SHOP/READ</group-name>
<role-name>SHOP/LIST_USERPRODUCTS</role-name>
<group-name>SHOP/LIST_USERPRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/WRITE</role-name>
<group-name>SHOP/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/EXECUTE</role-name>
<group-name>SHOP/EXECUTE</group-name>
<role-name>USER</role-name>
<group-name>USER</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GAME/READ</role-name>
<group-name>GAME/READ</group-name>
<role-name>USER/LOGIN</role-name>
<group-name>USER/LOGIN</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GAME/WRITE</role-name>
<group-name>GAME/WRITE</group-name>
<role-name>MAP/READ</role-name>
<group-name>MAP/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GAME/EXECUTE</role-name>
<group-name>GAME/EXECUTE</group-name>
<role-name>SHOP/SHOP_TO_OTHERS</role-name>
<group-name>SHOP/SHOP_TO_OTHERS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/READ</role-name>
<group-name>POLL/READ</group-name>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/WRITE</role-name>
<group-name>POLL/WRITE</group-name>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/EXECUTE</role-name>
<group-name>POLL/EXECUTE</group-name>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<enterprise-beans/>
<enterprise-beans/>
</sun-ejb-jar>
package fi.insomnia.bortal;
public interface PermissionStrings {
}
......@@ -15,6 +15,8 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventPk;
......@@ -27,7 +29,7 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class AccountEventBean
*/
@Stateless
@DeclareRoles({ "ACCOUNT_MANAGEMENT/READ", "ACCOUNT_MANAGEMENT/WRITE", "SHOP/EXECUTE" })
@DeclareRoles({ UserPermission.S_VIEW_ACCOUNTEVENTS })
public class AccountEventBean implements AccountEventBeanLocal {
@EJB
......@@ -53,13 +55,13 @@ public class AccountEventBean implements AccountEventBeanLocal {
}
@Override
@RolesAllowed("ACCOUNT_MANAGEMENT/WRITE")
@RolesAllowed(UserPermission.S_MODIFY_ACCOUNTEVENTS)
public AccountEvent merge(AccountEvent account) {
return accountfacade.merge(account);
}
@Override
@RolesAllowed("ACCOUNT_MANAGEMENT/WRITE")
@RolesAllowed(UserPermission.S_MODIFY_ACCOUNTEVENTS)
public void delete(AccountEvent account) {
AccountEvent acco = accountfacade.find(account.getId());
......@@ -84,29 +86,39 @@ public class AccountEventBean implements AccountEventBeanLocal {
return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u);
}
/**
* Create accountevents for the products in the parameter shopMap
*/
@Override
@RolesAllowed("SHOP/EXECUTE")
@RolesAllowed(ShopPermission.S_SHOP_PRODUCTS)
public List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal> shopMap, boolean buyInstant) throws PermissionDeniedException {
logger.debug("Shoping cash. buyinstant {}", buyInstant);
User seller = permbean.getCurrentUser();
shoppingUser = userbean.findById(shoppingUser.getId());
ArrayList<AccountEvent> ret = new ArrayList<AccountEvent>();
LanEvent ev = eventBean.getCurrentEvent();
User seller = permbean.getCurrentUser();
BigDecimal tot = BigDecimal.ZERO;
for (Entry<Product, BigDecimal> prodentry : shopMap.entrySet()) {
// Create account event for the product.
AccountEvent ac = new AccountEvent(ev, shoppingUser, prodentry.getKey(), prodentry.getKey().getPrice(), prodentry.getValue(), Calendar.getInstance());
ac.setSeller(seller);
shoppingUser.getAccountEvents().add(ac);
if (buyInstant && prodentry.getKey().getPrice().compareTo(BigDecimal.ZERO) > 0) {
tot = tot.add(prodentry.getValue().multiply(prodentry.getKey().getPrice()));
}
if (prodentry.getKey().isPrepaidInstant() && prodentry.getKey().getPlaces() != null && prodentry.getKey().getPlaces().size() > 0) {
if (prodentry.getKey().isPrepaidInstant() && prodentry.getKey().getPlaces() != null && !prodentry.getKey().getPlaces().isEmpty()) {
logger.debug("Prepaidplace");
placebean.lockPlaceProduct(shoppingUser, prodentry.getKey(), BigDecimal.ONE);
}
ac.setSeller(seller);
shoppingUser.getAccountEvents().add(ac);
}
logger.debug("ShopCash price {}", tot);
......
package fi.insomnia.bortal.beans;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
......@@ -23,20 +22,22 @@ import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n;
/**
* Session Bean implementation class BillBean
*/
@Stateless
@LocalBean
@DeclareRoles({ "BILL/READ", "USER_MANAGEMENT/EXECUTE", "USER_MANAGEMENT/READ" })
@DeclareRoles({ "USER", "BILL/WRITE_ALL", "BILL/READ_ALL", "BILL/CREATE_BILL" })
public class BillBean implements BillBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(BillBean.class);
......@@ -60,6 +61,10 @@ public class BillBean implements BillBeanLocal {
@EJB
private PermissionBeanLocal permissionbean;
@EJB
private UserFacade userfacade;
@EJB
private UtilBean utilbean;
/**
* Default constructor.
......@@ -69,7 +74,8 @@ public class BillBean implements BillBeanLocal {
}
@Override
public Bill findById(int id) throws PermissionDeniedException {
@RolesAllowed("USER")
public Bill findById(int id) {
LanEvent event = eventbean.getCurrentEvent();
if (id <= 0) {
return null;
......@@ -78,9 +84,8 @@ public class BillBean implements BillBeanLocal {
User currentuser = permbean.getCurrentUser();
logger.debug("bill {} user {}", bill, currentuser);
if (bill == null || !currentuser.equals(bill.getUser())) {
if (bill != null && !currentuser.equals(bill.getUser()) && !permbean.hasPermission(BillPermission.READ_ALL)) {
bill = null;
permbean.fatalPermission(BillPermission.READ_ALL, "No right to read bill: ", bill);
}
return bill;
......@@ -112,62 +117,75 @@ public class BillBean implements BillBeanLocal {
}
@Override
public Bill createEmptyBill(User shoppingUser) throws PermissionDeniedException {
if (permbean.isCurrentUser(shoppingUser)) {
permbean.fatalPermission(BillPermission.CREATE_BILL, "No permission to create empty bill for self");
} else {
permbean.fatalPermission(BillPermission.WRITE_ALL, "Trying to create bill to someone else without sufficient permission");
}
LanEvent event = eventbean.getCurrentEvent();
Bill ret = new Bill(event, shoppingUser);
billFacade.create(ret);
ret.setUser(shoppingUser);
em.flush();
logger.debug("Created bill with id {} and user {}", ret.getId(), ret.getUser());
return ret;
}
// @Override
// public Bill createEmptyBill(User shoppingUser) throws
// PermissionDeniedException {
// if (permbean.isCurrentUser(shoppingUser)) {
// permbean.fatalPermission(BillPermission.CREATE_BILL,
// "No permission to create empty bill for self");
// } else {
// permbean.fatalPermission(BillPermission.WRITE_ALL,
// "Trying to create bill to someone else without sufficient permission");
// }
//
// LanEvent event = eventbean.getCurrentEvent();
// Bill ret = new Bill(event, shoppingUser);
// billFacade.create(ret);
// ret.setUser(shoppingUser);
// em.flush();
// logger.debug("Created bill with id {} and user {}", ret.getId(),
// ret.getUser());
// return ret;
// }
// @Override
// @RolesAllowed("SHOP/EXECUTE")
// public BillLine addProductToBill(Bill bill, Product product, BigDecimal
// count) throws PermissionDeniedException {
//
// // If bill number > 0 bill has been sent and extra privileges are needed
// // to modify.
// boolean iscurrent = permissionbean.isCurrentUser(bill.getUser());
// Integer billnr = bill.getBillNumber();
// if (!iscurrent || billnr != null) {
// permbean.fatalPermission(BillPermission.WRITE_ALL,
// "User tried to modify bill ", bill, "without sufficient permissions");
// }
// BillLine line = new BillLine(bill, product.getName(),
// product.getUnitName(), count, product.getPrice(), product.getVat());
// line.setLineProduct(product);
// billLineFacade.create(line);
//
// List<Discount> discounts = productBean.getActiveDiscounts(product,
// count);
//
// for (Discount disc : discounts) {
// BigDecimal unitPrice =
// product.getPrice().subtract(product.getPrice().multiply(disc.getPercentage())).negate().setScale(2,
// RoundingMode.HALF_UP);
// BigDecimal vatPrice =
// product.getVat().subtract(product.getVat().multiply(disc.getPercentage())).negate().setScale(2,
// RoundingMode.HALF_UP);
//
// BillLine discountLine = new BillLine(bill, disc.getShortdesc(),
// product.getUnitName(), count, unitPrice, vatPrice);
// billLineFacade.create(discountLine);
//
// }
//
// em.flush();
// return line;
// }
@Override
@RolesAllowed("SHOP/EXECUTE")
public BillLine addProductToBill(Bill bill, Product product, BigDecimal count) throws PermissionDeniedException {
// If bill number > 0 bill has been sent and extra privileges are needed
// to modify.
boolean iscurrent = permissionbean.isCurrentUser(bill.getUser());
Integer billnr = bill.getBillNumber();
if (!iscurrent || billnr != null) {
permbean.fatalPermission(BillPermission.WRITE_ALL, "User tried to modify bill ", bill, "without sufficient permissions");
}
BillLine line = new BillLine(bill, product.getName(), product.getUnitName(), count, product.getPrice(), product.getVat());
line.setLineProduct(product);
billLineFacade.create(line);
List<Discount> discounts = productBean.getActiveDiscounts(product, count);
for (Discount disc : discounts) {
BigDecimal unitPrice = product.getPrice().subtract(product.getPrice().multiply(disc.getPercentage())).negate().setScale(2, RoundingMode.HALF_UP);
BigDecimal vatPrice = product.getVat().subtract(product.getVat().multiply(disc.getPercentage())).negate().setScale(2, RoundingMode.HALF_UP);
BillLine discountLine = new BillLine(bill, disc.getShortdesc(), product.getUnitName(), count, unitPrice, vatPrice);
billLineFacade.create(discountLine);
}
em.flush();
return line;
}
@Override
@RolesAllowed("BILL/WRITE")
@RolesAllowed("BILL/READ_ALL")
public List<Bill> findAll() {
return billFacade.findAll(eventbean.getCurrentEvent());
}
@Override
@RolesAllowed("BILL/READ")
@RolesAllowed("BILL/READ_ALL")
public Collection<BillSummary> getBillLineSummary() {
Collection<BillSummary> ret = billLineFacade.getLineSummary(eventbean.getCurrentEvent());
......@@ -175,7 +193,7 @@ public class BillBean implements BillBeanLocal {
}
@Override
@RolesAllowed("BILL/WRITE")
@RolesAllowed("BILL/WRITE_ALL")
public void markPaid(Bill bill, Calendar when) {
Product creditproduct = productBean.findCreditProduct();
......@@ -189,7 +207,7 @@ public class BillBean implements BillBeanLocal {
bill.setAccountEvent(ac);
bill.setPaidDate(when);
billFacade.merge(bill);
bill = billFacade.merge(bill);
for (BillLine bl : bill.getBillLines()) {
Product prod = bl.getLineProduct();
......@@ -205,6 +223,24 @@ public class BillBean implements BillBeanLocal {
}
}
}
MailMessage msg = new MailMessage();
msg.setSubject(I18n.get("bill.billMarkedPaidMail.subject"));
msg.setMessage(I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString()));
msg.setTo(bill.getUser());
utilbean.sendMail(msg);
}
@Override
@RolesAllowed("BILL/CREATE_BILL")
public void createBill(Bill bill) throws PermissionDeniedException {
if (!permbean.isCurrentUser(bill.getUser())) {
permbean.fatalPermission(BillPermission.WRITE_ALL, "Not enought rights to create bill for user ", bill.getUser());
}
User user = userfacade.find(bill.getUser().getId());
if (user.getBills() == null) {
user.setBills(new ArrayList<Bill>());
}
user.getBills().add(bill);
}
}
......@@ -5,15 +5,19 @@ import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.LanEvent;
/**
* Session Bean implementation class EventMapBean
*/
@Stateless
@DeclareRoles({ "MAP/WRITE" })
@DeclareRoles({ "MAP/MANAGE_MAPS" })
public class EventMapBean implements EventMapBeanLocal {
@EJB
......@@ -22,15 +26,17 @@ public class EventMapBean implements EventMapBeanLocal {
@EJB
private EventBeanLocal eventbean;
private static final Logger logger = LoggerFactory.getLogger(EventMapBean.class);
@Override
@RolesAllowed("MAP/WRITE")
@RolesAllowed("MAP/MANAGE_MAPS")
public EventMap saveMap(EventMap eventmap) {
return eventmapfacade.merge(eventmap);
}
@Override
@RolesAllowed("MAP/WRITE")
@RolesAllowed("MAP/MANAGE_MAPS")
public EventMap create(String mapname) throws PermissionDeniedException {
EventMap ret = new EventMap(eventbean.getCurrentEvent());
ret.setName(mapname);
......@@ -42,13 +48,20 @@ public class EventMapBean implements EventMapBeanLocal {
}
@Override
@RolesAllowed("MAP/WRITE")
@RolesAllowed("MAP/MANAGE_MAPS")
public void sendImage(int destId, byte[] imagedata) {
LanEvent event = eventbean.getCurrentEvent();
EventMap map = eventmapfacade.find(event.getId(), destId);
EventMap map = eventmapfacade.find(event, destId);
logger.debug("Setting mapdata for map {}", map);
if (map != null) {
map.setMapData(imagedata);
}
}
@Override
@RolesAllowed("MAP/MANAGE_MAPS")
public EventMap find(Integer mapId) {
return eventmapfacade.find(new EventPk(eventbean.getCurrentEvent(), mapId));
}
}
......@@ -2,6 +2,8 @@ package fi.insomnia.bortal.beans;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
......@@ -12,6 +14,7 @@ import fi.insomnia.bortal.model.EventOrganiser;
* Session Bean implementation class EventOrganiserBean
*/
@Stateless
@DeclareRoles({ "SUPERADMIN" })
public class EventOrganiserBean implements EventOrganiserBeanLocal {
@EJB
......@@ -30,27 +33,18 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal {
}
@Override
public void save(EventOrganiser eventorg) throws PermissionDeniedException {
fatalPermission(eventorg);
public void save(EventOrganiser eventorg) {
eventorgfacade.merge(eventorg);
}
@Override
public void fatalPermission(EventOrganiser eventorg) throws PermissionDeniedException {
if (!permbean.isCurrentUser(eventorg.getAdmin()) && !permbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "Someone other than admin tried to access EventOrganiser: " + eventorg.toString());
}
}
@Override
public List<EventOrganiser> getEventOrganisers() throws PermissionDeniedException {
if (!permbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "Non-superadmin tried to list all EventOrganisers");
}
@RolesAllowed("SUPERADMIN")
public List<EventOrganiser> getEventOrganisers() {
return eventorgfacade.findAll();
}
@Override
@RolesAllowed("SUPERADMIN")
public EventOrganiser create(String name) {
EventOrganiser ret = new EventOrganiser();
ret.setAdmin(permbean.getCurrentUser());
......@@ -58,4 +52,10 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal {
eventorgfacade.create(ret);
return ret;
}
@Override
@RolesAllowed("SUPERADMIN")
public EventOrganiser find(Integer orgId) {
return eventorgfacade.find(orgId);
}
}
......@@ -16,6 +16,7 @@ import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
......@@ -36,14 +37,18 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
private UserBean userbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private EventBeanLocal eventbean;
public User tryLogin(String username, String password) {
User user = userfacade.findByLogin(username.trim());
logger.debug("Trying to login as {}", username);
User ret = null;
if (user != null) {
if (user.checkPassword(password)) {
if (user.isAnonymous()) {
logger.info("logging in as anonymous!!!");
ret = user;
} else if (user.checkPassword(password)) {
ret = user;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password for username ", username);
......@@ -58,6 +63,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
@Override
public boolean authenticate(String username, String password) {
logger.warn("Trying to login as {}", username);
boolean ret = (tryLogin(username, password) != null);
return ret;
......@@ -65,34 +71,42 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
@Override
public Enumeration<String> getGroupNames(String user) {
logger.info("Fetching groupNames for user {}", user);
User usr = userbean.getUser(user);
HashSet<String> roleset = new HashSet<String>();
if (usr != null) {
if (permbean.isLoggedIn()) {
roleset.add("USER");
}
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr.isSuperadmin()) {
for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName());
}
if (usr == null) {
usr = permbean.getAnonUser();
}
if (usr != null && !usr.isAnonymous()) {
roleset.add("USER");
}
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr.isSuperadmin()) {
for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName());
}
roleset.add(BeanRole.SUPERADMIN.name());
} else {
List<Role> usrroles = userbean.localFindUsersRoles(usr);
for (Role role : usrroles) {
for (ApplicationPermission apperm : role.getPermissions()) {
roleset.add(apperm.getPermission().getFullName());
}
}
roleset.add(BeanRole.SUPERADMIN.name());
} else {
List<Role> usrroles = userbean.localFindUsersRoles(usr);
for (Role role : usrroles) {
for (ApplicationPermission apperm : role.getPermissions()) {
roleset.add(apperm.getPermission().getFullName());
}
}
LanEvent event = eventbean.getCurrentEvent();
if (event != null && !usr.isAnonymous() && event.getDefaultRole() != null) {
for (ApplicationPermission apperm : event.getDefaultRole().getPermissions()) {
roleset.add(apperm.getPermission().getFullName());
}
}
}
Vector<String> retvect = new Vector<String>();
retvect.addAll(roleset);
logger.debug("group names for user {}: {}", user, retvect);
logger.info("group names for user {}: {}", user, retvect);
return retvect.elements();
}
......
......@@ -11,22 +11,44 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User;
@Stateless
@DeclareRoles({ "ANONYMOUS", "SUPERADMIN", "USER", "LOGIN/READ", "LOGIN/WRITE",
"LOGIN/EXECUTE", "USER_MANAGEMENT/READ", "USER_MANAGEMENT/WRITE",
"USER_MANAGEMENT/EXECUTE", "ACCOUNT_MANAGEMENT/READ",
"ACCOUNT_MANAGEMENT/WRITE", "ACCOUNT_MANAGEMENT/EXECUTE", "BILL/READ",
"BILL/WRITE", "BILL/EXECUTE", "MAP/READ", "MAP/WRITE", "MAP/EXECUTE",
"ROLE_MANAGEMENT/READ", "ROLE_MANAGEMENT/WRITE", "ROLE_MANAGEMENT/EXECUTE",
"PRODUCT/READ", "PRODUCT/WRITE", "PRODUCT/EXECUTE", "SHOP/READ",
"SHOP/WRITE", "SHOP/EXECUTE", "GAME/READ", "GAME/WRITE", "GAME/EXECUTE",
"POLL/READ", "POLL/WRITE", "POLL/EXECUTE" })
@DeclareRoles({
UserPermission.S_CREATE_NEW,
UserPermission.S_LOGIN,
UserPermission.S_LOGOUT,
UserPermission.S_MODIFY,
UserPermission.S_MODIFY_ACCOUNTEVENTS,
UserPermission.S_READ_ROLES,
UserPermission.S_VIEW_ACCOUNTEVENTS,
UserPermission.S_VIEW_ALL,
UserPermission.S_VIEW_SELF,
UserPermission.S_WRITE_ROLES,
MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS,
MapPermission.S_MANAGE_OTHERS,
MapPermission.S_BUY_PLACES,
ShopPermission.S_LIST_ALL_PRODUCTS,
ShopPermission.S_LIST_USERPRODUCTS,
ShopPermission.S_SHOP_TO_OTHERS,
ShopPermission.S_MANAGE_PRODUCTS,
ShopPermission.S_SHOP_PRODUCTS,
BillPermission.S_CREATE_BILL,
BillPermission.S_READ_ALL,
BillPermission.S_WRITE_ALL,
"ANONYMOUS", "SUPERADMIN", "USER" })
public class PermissionBean implements PermissionBeanLocal {
public static final String DEFAULT_USER_LOGIN = "anonymous";
private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class);
......@@ -53,54 +75,10 @@ public class PermissionBean implements PermissionBeanLocal {
return getCurrentUser().isSuperadmin()
|| context.isCallerInRole(perm.getFullName());
// User user = getCurrentUser();
//
// Boolean ret = BortalLocalContextHolder.hasPermission(target,
// permission);
// // Boolean ret = BortalLocalContextHolder.hasPermission(target,
// // permission);
// if (ret == null) {
// try {
// for (Role role : userbean.findUsersRoles(user)) {
// if (role == null) {
// continue;
// }
//
// for (RoleRight rr : role.getRoleRights()) {
// BortalLocalContextHolder.setPermission(rr);
//
// ret = BortalLocalContextHolder.hasPermission(target, permission);
// if (ret != null) {
// break;
// }
//
// }
// if (ret != null) {
// break;
// }
// }
// } catch (PermissionDeniedException e) {
// logger.warn("Permission denied when it should be allowed!!", e);
// }
// }
//
// // TODO: FIX THIS!! really bad idea....
//
// if (user.isSuperadmin()) {
// return true;
// }
//
// if (ret == null) {
// ret = false;
// BortalLocalContextHolder.setPermission(target, permission, ret);
// }
//
// return ret;
}
@Override
public void fatalPermission(IAppPermission permission, Object... failmessage) throws PermissionDeniedException {
public boolean fatalPermission(IAppPermission permission, Object... failmessage) throws PermissionDeniedException {
boolean ret = hasPermission(permission);
if (!ret) {
StringBuilder message = new StringBuilder().append(" permission: ").append(permission);
......@@ -116,6 +94,7 @@ public class PermissionBean implements PermissionBeanLocal {
throw new PermissionDeniedException(loggingbean, getCurrentUser(), message.toString());
}
return true;
}
@Override
......@@ -133,8 +112,6 @@ public class PermissionBean implements PermissionBeanLocal {
@Override
public boolean isLoggedIn() {
logger.info("Anonuser {}, currentuser {}", getAnonUser(), getCurrentUser());
logger.info("Is current superadmin {}", getCurrentUser().isSuperadmin());
return !getAnonUser().equals(getCurrentUser()) || getCurrentUser().isSuperadmin();
}
......@@ -155,14 +132,14 @@ public class PermissionBean implements PermissionBeanLocal {
*/
@Override
public User getAnonUser() {
User defaultUser = userfacade.findByLogin(DEFAULT_USER_LOGIN);
User defaultUser = userfacade.findByLogin(User.ANONYMOUS_LOGINNAME);
if (defaultUser == null) {
defaultUser = new User();
defaultUser.setLogin(DEFAULT_USER_LOGIN);
defaultUser.setNick(DEFAULT_USER_LOGIN);
defaultUser.setLogin(User.ANONYMOUS_LOGINNAME);
defaultUser.setNick(User.ANONYMOUS_LOGINNAME);
userfacade.create(defaultUser);
defaultUser.setSuperadmin(true);
// defaultUser.setSuperadmin(true);
}
return defaultUser;
}
......
......@@ -47,7 +47,9 @@ import fi.insomnia.bortal.model.User;
*/
@Stateless
@LocalBean
@DeclareRoles({ "MAP/READ", "MAP/WRITE", "MAP/EXECUTE", "SHOP/EXECUTE" })
@DeclareRoles({ MapPermission.S_BUY_PLACES,
"MAP/BUY_PLACES",
MapPermission.S_MANAGE_MAPS })
public class PlaceBean implements PlaceBeanLocal {
private static final String PLACE_RESERVE_TIMEOUTER = "Map reserve timeouter";
private static final Logger logger = LoggerFactory.getLogger(PlaceBean.class);
......@@ -75,7 +77,7 @@ public class PlaceBean implements PlaceBeanLocal {
private UserFacade userfacade;
@Override
@RolesAllowed("MAP/WRITE")
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
public Place mergeChanges(Place place) {
return placeFacade.merge(place);
}
......@@ -144,7 +146,7 @@ public class PlaceBean implements PlaceBeanLocal {
public Place findPlace(EventMap e, int x, int y) {
for (Place place : e.getPlaces()) {
if (place.isCoordinateInPlace(x, y)) {
return place;
return placeFacade.find(place.getId());
}
}
return null;
......@@ -160,9 +162,10 @@ public class PlaceBean implements PlaceBeanLocal {
* @return true when successfull. On any error false.
*/
@Override
@RolesAllowed("MAP/EXECUTE")
@RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean reservePlace(Place place, User user) {
place = placeFacade.find(place.getId());
user = userfacade.find(user.getId());
boolean ret = false;
if (place.isBuyable() && !place.isTaken()) {
place.setCurrentUser(user);
......@@ -204,49 +207,57 @@ public class PlaceBean implements PlaceBeanLocal {
}
@Override
@RolesAllowed("MAP/EXECUTE")
public boolean buySelectedPlaces(User user) throws BortalCatchableException, PermissionDeniedException {
permbean.fatalPermission(MapPermission.BUY_PLACES, "No rights to buy places from map");
@RolesAllowed(MapPermission.S_BUY_PLACES)
public PlaceGroup buySelectedPlaces(User user) throws BortalCatchableException, PermissionDeniedException {
if (user == null) {
user = permbean.getCurrentUser();
} else if (!user.equals(permbean.getCurrentUser())) {
permbean.fatalPermission(MapPermission.MANAGE_OTHERS, "Can not buy places for user ", user);
} else {
if (!user.equals(permbean.getCurrentUser())) {
permbean.fatalPermission(MapPermission.MANAGE_OTHERS, "Can not buy places for user ", user);
}
user = userfacade.find(user.getId());
}
LanEvent event = eventBean.getCurrentEvent();
List<Place> places = placeFacade.findUsersReservations(event, user);
if (places.size() <= 0) {
return false;
return null;
}
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
productBean.createAccountEvent(line.getKey(), new BigDecimal(line.getValue()), user);
}
// PlaceGroup pg = pgbean.createPlaceGroup(user);
BigDecimal totalprice = totalReservationPrice(user, null);
BigDecimal balance = user.getAccountBalance();
if (balance.compareTo(totalprice) < 0) {
logger.debug("User {} Could not buy things because account balance is too low!", user);
return false;
return null;
}
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(user);
user.getPlaceGroups().add(pg);
userfacade.flush();
for (Place p : places) {
if (!p.isReservedFor(user)) {
throw new BortalCatchableException("Trying to buy place not reserved for that user");
}
logger.info("Buying place {} for user {}", p.getName(), user.getLogin());
buy(p, pg, user);
}
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
productBean.createAccountEvent(line.getKey(), new BigDecimal(line.getValue()), user);
}
user.getPlaceGroups().add(pg);
return true;
// adding account event does funny stuff. evicting helps...
userfacade.evict(user);
return pg;
}
// This method should not be available in the local bean client
public void lockPlaceProduct(User user, Product prod, BigDecimal quantity) {
void lockPlaceProduct(User user, Product prod, BigDecimal quantity) {
int loop = quantity.intValue();
// BigDecimal loop = BigDecimal.ZERO;
......@@ -299,7 +310,7 @@ public class PlaceBean implements PlaceBeanLocal {
}
@Override
@RolesAllowed("MAP/WRITE")
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
public int setBuyable(EventMap map, String like, boolean b) {
return placeFacade.setBuyable(map, like, b);
......@@ -385,7 +396,7 @@ public class PlaceBean implements PlaceBeanLocal {
* @return true when successfull, on any erroro false.
*/
@Override
@RolesAllowed("MAP/EXECUTE")
@RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean releasePlace(Place place) {
place = placeFacade.find(place.getId());
User user = permbean.getCurrentUser();
......@@ -400,13 +411,13 @@ public class PlaceBean implements PlaceBeanLocal {
}
@Override
@RolesAllowed("MAP/EXECUTE")
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
public Place find(int placeId) {
return placeFacade.find(eventBean.getCurrentEvent(), placeId);
}
@Override
@RolesAllowed("MAP/WRITE")
@RolesAllowed(MapPermission.S_BUY_PLACES)
public void unbuyPlace(Place place) {
place = placeFacade.find(place.getId());
if (place.getGroup() != null) {
......
......@@ -81,8 +81,13 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
}
@Override
@RolesAllowed("USER")
public boolean associateToToken(User user, String token) {
@RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean associateToToken(User user, String token) throws PermissionDeniedException {
if (!permbean.isCurrentUser(user)) {
permbean.fatalPermission(MapPermission.MANAGE_OTHERS);
}
token = token.trim();
GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false;
......
......@@ -26,7 +26,7 @@ import fi.insomnia.bortal.model.PossibleAnswer;
*/
@Stateless
@DeclareRoles("USER")
@DeclareRoles({ "POLL/ANSWER", "POLL/VIEW_RESULTS", "POLL/CREATE" })
public class PollBean implements PollBeanLocal {
@EJB
......@@ -57,7 +57,7 @@ public class PollBean implements PollBeanLocal {
}
@Override
@RolesAllowed("USER")
@RolesAllowed("POLL/ANSWER")
public List<Poll> findPolls() {
List<Poll> list = new ArrayList<Poll>();
......@@ -102,7 +102,7 @@ public class PollBean implements PollBeanLocal {
}
@Override
@RolesAllowed("USER")
@RolesAllowed("POLL/ANSWER")
public boolean createAnswers(List<PollAnswer> answers) {
for (PollAnswer answer : answers) {
......@@ -123,13 +123,21 @@ public class PollBean implements PollBeanLocal {
}
@Override
@RolesAllowed("POLL/CREATE")
public void createPoll(Poll poll) {
pollFacade.create(poll);
}
@Override
@RolesAllowed("POLL/ANSWER")
public void createAnswers(PollQuestion q) {
pqfacade.create(q);
}
@Override
@RolesAllowed("POLL/ANSWER")
public Poll find(Integer pollId) {
return pollFacade.find(eventBean.getCurrentEvent(), pollId);
}
}
......@@ -2,7 +2,6 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
......@@ -12,12 +11,14 @@ import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.facade.DiscountFacade;
import fi.insomnia.bortal.facade.DiscountInstanceFacade;
import fi.insomnia.bortal.facade.ProductFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.DiscountInstance;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
......@@ -25,7 +26,8 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class ProductBean
*/
@Stateless
@DeclareRoles({ "PRODUCT/WRITE", "PRODUCT/READ", "SHOP/EXECUTE" })
@DeclareRoles({ "SHOP/LIST_USERPRODUCTS", "SHOP/LIST_ALL_PRODUCTS", "SHOP/LIST_USERPRODUCTS",
"SHOP/MANAGE_PRODUCTS" })
public class ProductBean implements ProductBeanLocal {
private static final String DEFAULT_CREDIT_PRODCT = "Automagic Credit product";
......@@ -41,6 +43,8 @@ public class ProductBean implements ProductBeanLocal {
@EJB
private DiscountInstanceFacade discountinstancefacade;
@EJB
private DiscountFacade discountfacade;
@EJB
private UserFacade userFacade;
@EJB
......@@ -54,40 +58,42 @@ public class ProductBean implements ProductBeanLocal {
}
@Override
@RolesAllowed("SHOP/EXECUTE")
@RolesAllowed("SHOP/LIST_USERPRODUCTS")
public List<Product> listUserShoppableProducts() {
return productFacade.findPrepaidProducts(eventBean.getCurrentEvent());
}
@Override
@RolesAllowed("PRODUCT/WRITE")
public Product createProduct(String name, BigDecimal price) {
Product entity = new Product(eventBean.getCurrentEvent(), name, price);
productFacade.create(entity);
return entity;
@RolesAllowed("SHOP/MANAGE_PRODUCTS")
public void create(Product prod) {
productFacade.create(prod);
}
@Override
@RolesAllowed("PRODUCT/READ")
@RolesAllowed("SHOP/LIST_ALL_PRODUCTS")
public List<Product> getProducts() {
return productFacade.findAll(eventBean.getCurrentEvent());
}
@Override
@RolesAllowed("PRODUCT/WRITE")
@RolesAllowed("SHOP/MANAGE_PRODUCTS")
public Product mergeChanges(Product product) {
return productFacade.merge(product);
}
@Override
public Product findCreditProduct() {
Product ret = productFacade.findProductByPrice(eventBean.getCurrentEvent(), BigDecimal.ONE.negate());
if (ret == null) {
ret = new Product(eventBean.getCurrentEvent(), DEFAULT_CREDIT_PRODCT, BigDecimal.ONE.negate());
productFacade.create(ret);
List<Product> ret = productFacade.findProductsByPrice(eventBean.getCurrentEvent(), BigDecimal.ONE.negate());
Product retProd = null;
if (ret == null || ret.isEmpty()) {
retProd = new Product(eventBean.getCurrentEvent());
retProd.setName(DEFAULT_CREDIT_PRODCT);
retProd.setPrice(BigDecimal.ONE.negate());
productFacade.create(retProd);
} else {
retProd = ret.get(0);
}
return ret;
return retProd;
}
@Override
......@@ -96,32 +102,35 @@ public class ProductBean implements ProductBeanLocal {
throw new RuntimeException("Some parameter is null!");
}
BigDecimal total = product.getPrice();
for (Discount d : getActiveDiscounts(product, quantity)) {
for (Discount d : product.getActiveDiscounts(quantity)) {
total = total.multiply(d.getPercentage());
}
return total.setScale(2, RoundingMode.HALF_UP).multiply(quantity);
}
// TODO: alennukset lasketaan täällä. HUOMHUOM!!
@Override
public List<Discount> getActiveDiscounts(Product product, BigDecimal quantity) {
ArrayList<Discount> ret = new ArrayList<Discount>();
for (Discount d : product.getDiscounts()) {
if (d.isActive() && quantity.compareTo(d.getAmountMax()) <= 0 && quantity.compareTo(d.getAmountMin()) >= 0) {
ret.add(d);
}
}
return ret;
}
// // TODO: alennukset lasketaan täällä. HUOMHUOM!!
// @Override
// public List<Discount> getActiveDiscounts(Product product, BigDecimal
// quantity) {
// ArrayList<Discount> ret = new ArrayList<Discount>();
// for (Discount d : product.getDiscounts()) {
// if (d.isActive() && quantity.compareTo(d.getAmountMax()) <= 0 &&
// quantity.compareTo(d.getAmountMin()) >= 0) {
// ret.add(d);
// }
// }
// return ret;
// }
@Override
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, User user) {
BigDecimal unitPrice = product.getPrice().negate();
List<Discount> discounts = getActiveDiscounts(product, quantity);
List<Discount> discounts = product.getActiveDiscounts(quantity);
for (Discount d : discounts) {
unitPrice = unitPrice.multiply(d.getPercentage());
}
user = userFacade.find(user.getId());
AccountEvent ret = new AccountEvent(eventBean.getCurrentEvent(), user, product, unitPrice, quantity, Calendar.getInstance());
......@@ -147,9 +156,21 @@ public class ProductBean implements ProductBeanLocal {
}
@Override
@RolesAllowed("SHOP/EXECUTE")
@RolesAllowed("SHOP/LIST_ALL_PRODUCTS")
public List<Product> findForStaffshop() {
return productFacade.findAll(eventBean.getCurrentEvent());
}
@RolesAllowed("SHOP/MANAGE_PRODUCTS")
@Override
public Discount findDiscount(Integer discountid) {
return discountfacade.find(new EventPk(eventBean.getCurrentEvent(), discountid));
}
@Override
@RolesAllowed("SHOP/MANAGE_PRODUCTS")
public Discount save(Discount discount) {
return discountfacade.merge(discount);
}
}
......@@ -19,7 +19,9 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
......@@ -28,7 +30,7 @@ import fi.insomnia.bortal.model.Role;
* @author tuukka
*/
@Stateless
@DeclareRoles({ "ROLE_MANAGEMENT/READ", "ROLE_MANAGEMENT/WRITE" })
@DeclareRoles({ "USER/READ_ROLES", "USER/WRITE_ROLES" })
public class RoleBean implements RoleBeanLocal {
// private static final String PUBLIC_ROLE_NAME =
......@@ -42,31 +44,30 @@ public class RoleBean implements RoleBeanLocal {
private RoleFacade roleFacade;
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
@RolesAllowed("USER/READ_ROLES")
public List<Role> listRoles() {
return listRoles(eventBean.getCurrentEvent());
}
@RolesAllowed("ROLE_MANAGEMENT/READ")
@RolesAllowed("USER/READ_ROLES")
public List<Role> listRoles(LanEvent event) {
return roleFacade.findAll(event);
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
@RolesAllowed("USER/WRITE_ROLES")
public Role mergeChanges(Role role) {
return roleFacade.merge(role);
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
public Role create(Role role) {
@RolesAllowed("USER/WRITE_ROLES")
public void create(Role role) {
roleFacade.create(role);
return role;
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
@RolesAllowed("USER/READ_ROLES")
public List<Role> getPossibleParents(Role role) {
List<Role> roleList = listRoles();
......@@ -132,9 +133,37 @@ public class RoleBean implements RoleBeanLocal {
// }
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
public Role find(int id) {
return roleFacade.find(id);
}
@Override
@RolesAllowed("USER/WRITE_ROLES")
public Role setPermissions(Role role, List<IAppPermission> newPerms) {
role = roleFacade.find(role.getId());
List<ApplicationPermission> permissions = role.getPermissions();
HashSet<ApplicationPermission> rmlist = new HashSet<ApplicationPermission>();
for (ApplicationPermission appPerm : permissions) {
// If role contains permission not in parameter newPerms remove
// it.
if (!newPerms.contains(appPerm.getPermission())) {
rmlist.add(appPerm);
}
// remove handled permission from newPerms
newPerms.remove(appPerm.getPermission());
}
// Concurrent modification prevention!!
if (!rmlist.isEmpty()) {
permissions.removeAll(rmlist);
}
// Add permissions not existing in role
for (IAppPermission perm : newPerms) {
permissions.add(new ApplicationPermission(role, perm));
}
roleFacade.flush();
return role;
}
}
......@@ -3,7 +3,6 @@ package fi.insomnia.bortal.beans;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.util.Calendar;
import java.util.List;
......@@ -26,7 +25,6 @@ import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.Compo;
import fi.insomnia.bortal.model.CompoEntry;
import fi.insomnia.bortal.model.EventMap;
......@@ -151,53 +149,56 @@ public class TestDataBean implements TestDataBeanLocal {
return u;
}
@Override
public Bill createBill(User u) {
Bill b = new Bill(eventBean.getCurrentEvent());
b.setUser(u);
b.setAddr1("Kalle Kävijä");
b.setAddr2("co / Pelivieroitus Ry");
b.setAddr3("Pallokorvankatu 1");
b.setAddr4("696969 Keikyä");
b.setAddr5("FINLAND! \\o/");
b.setBillNumber(123123);
b.setDelayIntrest(11);
b.setDeliveryTerms("Toimitetaan, ehkä...");
Calendar duedate = Calendar.getInstance();
duedate.add(Calendar.DATE, 14);
b.setNotes("Some notes...");
b.setNoticetime("14 vrk");
b.setOurReference("Meitin viite ( Insomnia XII )");
b.setPaymentTime(14);
b.setSentDate(Calendar.getInstance());
b.setTheirReference("Niitten viite ( tyhjä? )");
billFacade.create(b);
createBillLine(b, "Tuote1", 1239.3, "kpl", 11.0, 0.22);
createBillLine(b, "Tuote2", 0.3, "pss", 11.0, 0.22);
createBillLine(b, "Tuote3", 9.3, "l", 11.0, 0.22);
createBillLine(b, "Tuote4", 9, "kWh", 99931911.0, 0);
createBillLine(b, "Tuote5", 33, "mol", 11.0, 0.22);
createBillLine(b, "Tuote6", 39939.23123123, "rad", 122.0, 0.18);
return b;
}
private BillLine createBillLine(Bill b, String line, double d, String qname, double e, double f) {
return createBillLine(b, line, new BigDecimal(d), qname, new BigDecimal(e), new BigDecimal(f));
}
private BillLine createBillLine(Bill b, String line, BigDecimal q, String qname, BigDecimal price, BigDecimal vat) {
BillLine bl = new BillLine(b);
bl.setName(line);
bl.setQuantity(q);
bl.setUnitName(qname);
bl.setUnitPrice(price);
bl.setVat(vat);
// @Override
// public Bill createBill(User u) {
// Bill b = new Bill(eventBean.getCurrentEvent());
// b.setUser(u);
// b.setAddr1("Kalle Kävijä");
// b.setAddr2("co / Pelivieroitus Ry");
// b.setAddr3("Pallokorvankatu 1");
// b.setAddr4("696969 Keikyä");
// b.setAddr5("FINLAND! \\o/");
// b.setBillNumber(123123);
// b.setDelayIntrest(11);
// b.setDeliveryTerms("Toimitetaan, ehkä...");
// Calendar duedate = Calendar.getInstance();
// duedate.add(Calendar.DATE, 14);
// b.setNotes("Some notes...");
// b.setNoticetime("14 vrk");
// b.setOurReference("Meitin viite ( Insomnia XII )");
// b.setPaymentTime(14);
// b.setSentDate(Calendar.getInstance());
// b.setTheirReference("Niitten viite ( tyhjä? )");
// billFacade.create(b);
// createBillLine(b, "Tuote1", 1239.3, "kpl", 11.0, 0.22);
// createBillLine(b, "Tuote2", 0.3, "pss", 11.0, 0.22);
// createBillLine(b, "Tuote3", 9.3, "l", 11.0, 0.22);
// createBillLine(b, "Tuote4", 9, "kWh", 99931911.0, 0);
// createBillLine(b, "Tuote5", 33, "mol", 11.0, 0.22);
// createBillLine(b, "Tuote6", 39939.23123123, "rad", 122.0, 0.18);
//
// return b;
// }
billLineFacade.create(bl);
return bl;
}
// private BillLine createBillLine(Bill b, String line, double d, String
// qname, double e, double f) {
// return createBillLine(b, line, new BigDecimal(d), qname, new
// BigDecimal(e), new BigDecimal(f));
//
// }
// private BillLine createBillLine(Bill b, String line, BigDecimal q, String
// qname, BigDecimal price, BigDecimal vat) {
// BillLine bl = new BillLine(b);
// bl.setName(line);
// bl.setQuantity(q);
// bl.setUnitName(qname);
// bl.setUnitPrice(price);
// bl.setVat(vat);
//
// billLineFacade.create(bl);
// return bl;
// }
@Override
public EventMap generateTestMap() {
......@@ -298,4 +299,10 @@ public class TestDataBean implements TestDataBeanLocal {
q.executeUpdate();
}
@Override
public Bill createBill(User u) {
// TODO Auto-generated method stub
return null;
}
}
......@@ -31,13 +31,14 @@ import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.utilities.SearchResult;
/**
* Session Bean implementation class UserBean
*/
@LocalBean
@Stateless
@DeclareRoles({ "USER/EXECUTE" })
@DeclareRoles({ "USER/EXECUTE", "USER/VIEW_ALL", "USER" })
public class UserBean implements UserBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UserBean.class);
......@@ -74,7 +75,7 @@ public class UserBean implements UserBeanLocal {
private GroupMembershipFacade gmfacade;
@Override
@RolesAllowed("USER_MANAGEMENT/READ")
@RolesAllowed("USER/VIEW_ALL")
public List<User> getUsers() {
List<User> ret = userFacade.findAll();
......@@ -192,10 +193,10 @@ public class UserBean implements UserBeanLocal {
return ret;
}
@Override
public List<User> searchName(String name) {
return userFacade.searchForName(name);
}
// @Override
// public List<User> searchName(String name) {
// return userFacade.searchForName(name);
// }
@Override
public User createNewUser(User user, String password) {
......@@ -233,21 +234,23 @@ public class UserBean implements UserBeanLocal {
}
@Override
public boolean initPasswordReset(User user, String hash, String mailpath) {
logger.debug("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath });
public User initPasswordReset(User user, String hash, String mailpath) {
if (hash == null || hash.length() < 20 || user == null || user.getEmail() == null || user.getEmail().length() <= 5) {
return false;
logger.info("Not sending email with params {} {} {}", new Object[] { user, user.getEmail(), hash });
return null;
}
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath });
MailMessage msg = new MailMessage();
msg.setTo(user);
msg.setSubject(I18n.get("passwordreset.mailSubject"));
msg.setMessage(I18n.get("passwordreset.mailBody", mailpath));
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath });
utilbean.sendMail(msg);
user = userFacade.find(user.getId());
user.setConfirmHash(hash);
userFacade.merge(user);
return true;
return user;
}
......@@ -257,14 +260,14 @@ public class UserBean implements UserBeanLocal {
}
@Override
public List<User> getUsers(int page, int pagesize, String sort, String search) {
public SearchResult<User> getUsers(int page, int pagesize, String sort, String search) {
return userFacade.searchUser(page, pagesize, sort, search);
}
@Override
public long getUsersCount(String search) {
return userFacade.searchUserCount(search);
}
// @Override
// public long getUsersCount(String search) {
// return userFacade.searchUserCount(search);
// }
@Override
@RolesAllowed("USER/EXECUTE")
......@@ -299,7 +302,6 @@ public class UserBean implements UserBeanLocal {
gm.setInviteAccepted(Calendar.getInstance());
userFacade.create(user);
}
}
package fi.insomnia.bortal.beans;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class UserUtilBean
*/
@Stateless
// @TransactionManagement(TransactionManagementType.BEAN)
@LocalBean
public class UserUtilBean implements UserUtilBeanLocal {
/**
* Default constructor.
*/
public UserUtilBean() {
// TODO Auto-generated constructor stub
}
@EJB
private UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(UserUtilBean.class);
@EJB
private UserFacade userfacade;
@Override
public void convertUsernames() {
for (User u : userbean.getUsers()) {
if (u.getLogin().trim().isEmpty()) {
logger.warn("User {} has empty login...");
continue;
}
User testU = userfacade.findByLogin(u.getLogin().toLowerCase());
if (testU == null || testU.equals(u)) {
u.setLogin(u.getLogin().toLowerCase());
logger.info("Converted user {}", u.getLogin());
} else {
logger.warn("Could not convert user {}", u.getLogin(), testU.getLogin());
}
}
}
}
......@@ -11,6 +11,8 @@ import java.math.RoundingMode;
import java.util.Date;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
......@@ -34,6 +36,7 @@ import fi.insomnia.bortal.util.MailMessage;
*/
@Stateless
@LocalBean
@DeclareRoles("SUPERADMIN")
public class UtilBean implements UtilBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UtilBean.class);
......@@ -57,6 +60,7 @@ public class UtilBean implements UtilBeanLocal {
@Override
public boolean sendMail(MailMessage message) {
logger.info("Sending mail message {} ", message);
Date d = new Date();
try {
QueueConnection conn = mailQuefactory.createQueueConnection();
......@@ -66,13 +70,14 @@ public class UtilBean implements UtilBeanLocal {
session.createProducer(mailQueue).send(objmessage);
conn.close();
} catch (JMSException e) {
logger.debug("Got exception sending mail", e);
logger.warn("Got exception sending mail", e);
}
logger.debug("Message time {}", new Date().getTime() - d.getTime());
return true;
}
@Override
@RolesAllowed("SUPERADMIN")
public void checkAllUsersImages() throws PermissionDeniedException {
for (User usr : userbean.getUsers()) {
......@@ -137,4 +142,5 @@ public class UtilBean implements UtilBeanLocal {
}
return true;
}
}
......@@ -10,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.EventPk_;
import fi.insomnia.bortal.model.GenericEventChild;
import fi.insomnia.bortal.model.GenericEventChild_;
import fi.insomnia.bortal.model.LanEvent;
......@@ -41,7 +42,8 @@ public abstract class EventChildGenericFacade<T extends GenericEventChild> exten
Root<T> root = cq.from(getEntityClass());
cq.where(cb.equal(root.get(GenericEventChild_.event), event));
cq.orderBy(cb.asc(root.get(GenericEventChild_.id)));
cq.orderBy(cb.asc(root.get(GenericEventChild_.id).get(EventPk_.id)));
return getEm().createQuery(cq).getResultList();
}
......
......@@ -4,46 +4,57 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEvent_;
@Stateless
@LocalBean
public class EventFacade extends GenericFacade<Integer, LanEvent> {
// private static final Logger logger = LoggerFactory.getLogger(EventFacade.class);
@PersistenceContext
private EntityManager em;
// private static final Logger logger =
// LoggerFactory.getLogger(EventFacade.class);
@PersistenceContext
private EntityManager em;
public EventFacade() {
super(LanEvent.class);
}
public EventFacade() {
super(LanEvent.class);
}
@Override
protected EntityManager getEm() {
return em;
}
protected EntityManager getEm() {
return em;
}
public LanEvent findByHostname(String hostname) {
public LanEvent findByHostname(String hostname) {
TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByReferer", LanEvent.class);
q.setParameter("referer", hostname);
return getSingleNullableResult(q);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<LanEvent> cq = cb.createQuery(LanEvent.class);
Root<LanEvent> root = cq.from(LanEvent.class);
cq.where(cb.equal(root.get(LanEvent_.eventEnabled), true));
}
// TypedQuery<LanEvent> q =
// em.createNamedQuery("LanEvent.findByReferer", LanEvent.class);
// q.setParameter("referer", hostname);
return getSingleNullableResult(em.createQuery(cq));
public LanEvent findByName(String name) {
// TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByName", LanEvent.class);
// q.setParameter("name", name);
// return getSingleNullableResult(q);
return this.find(1);
}
}
public String flushCache() {
getEm().getEntityManagerFactory().getCache().evictAll();
return "Evicted all!";
}
public LanEvent findByName(String name) {
// TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByName",
// LanEvent.class);
// q.setParameter("name", name);
// return getSingleNullableResult(q);
return this.find(1);
}
public String flushCache() {
getEm().getEntityManagerFactory().getCache().evictAll();
return "Evicted all!";
}
}
......@@ -13,26 +13,27 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.iki.tuomari.utils.beans.callbacks.FacadeCallback;
import fi.iki.tuomari.utils.jpa.IntegerModelInterface;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericFacade<I extends Serializable, C extends ModelInterface<I>> {
protected static <T, C extends IntegerModelInterface> List<SingularAttribute<C, T>> mkAttrlist(SingularAttribute<C, T>... types) {
List<SingularAttribute<C, T>> ret = new ArrayList<SingularAttribute<C, T>>();
for (SingularAttribute<C, T> a : types) {
ret.add(a);
}
return Collections.unmodifiableList(ret);
}
// protected static <T, C extends ModelInterface<T>>
// List<SingularAttribute<C, T>> mkAttrlist(SingularAttribute<C, T>...
// types) {
// List<SingularAttribute<C, T>> ret = new ArrayList<SingularAttribute<C,
// T>>();
// for (SingularAttribute<C, T> a : types) {
// ret.add(a);
// }
// return Collections.unmodifiableList(ret);
//
// }
private final Class<C> entClass;
private static final Logger logger = LoggerFactory.getLogger(GenericFacade.class);
......@@ -61,6 +62,10 @@ public abstract class GenericFacade<I extends Serializable, C extends ModelInter
}
public void refresh(C usr) {
getEm().refresh(usr);
}
public C find(I id) {
if (id == null) {
return null;
......@@ -267,4 +272,7 @@ public abstract class GenericFacade<I extends Serializable, C extends ModelInter
getEm().flush();
}
public void evict(C clz) {
getEm().getEntityManagerFactory().getCache().evict(getEntityClass(), clz.getId());
}
}
......@@ -156,6 +156,9 @@ public class PlaceFacade extends EventChildGenericFacade<Place> {
}
public int setBuyable(EventMap map, String like, boolean b) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class);
Query q = em.createQuery("UPDATE Place p set p.buyable = :b where p.name like :like");
q.setParameter("b", b);
......
......@@ -8,48 +8,49 @@ import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.Product_;
@Stateless
@LocalBean
public class ProductFacade extends EventChildGenericFacade<Product> {
@PersistenceContext
private EntityManager em;
public ProductFacade() {
super(Product.class);
}
protected EntityManager getEm() {
return em;
}
public Product getCreditProduct() {
throw new RuntimeException();
}
public Product findProductByPrice(LanEvent event, BigDecimal price) {
// EventPk id = new EventPk(event);
TypedQuery<Product> q = em.createQuery("select p from Product p where p.id.eventId = :eventid and p.price = :price", Product.class);
q.setParameter("price", price);
q.setParameter("eventid", event.getId());
List<Product> results = q.getResultList();
if (results.size() > 0) {
return results.get(0);
}
return null;
}
public List<Product> findPrepaidProducts(LanEvent e) {
TypedQuery<Product> q = em.createQuery("select p from Product p where p.id.eventId = :eventid and p.prepaid = true", Product.class);
q.setParameter("eventid", e.getId());
return q.getResultList();
}
@PersistenceContext
private EntityManager em;
public ProductFacade() {
super(Product.class);
}
@Override
protected EntityManager getEm() {
return em;
}
public Product getCreditProduct() {
throw new RuntimeException();
}
public List<Product> findProductsByPrice(LanEvent event, BigDecimal price) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
cq.where(cb.equal(root.get(Product_.event), event),
cb.equal(root.get(Product_.price), price));
return em.createQuery(cq).getResultList();
}
public List<Product> findPrepaidProducts(LanEvent e) {
TypedQuery<Product> q = em.createQuery("select p from Product p where p.id.eventId = :eventid and p.prepaid = true", Product.class);
q.setParameter("eventid", e.getId());
return q.getResultList();
}
}
......@@ -6,10 +6,13 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.Role_;
import fi.insomnia.bortal.model.User;
@Stateless
......@@ -28,18 +31,21 @@ public class RoleFacade extends GenericFacade<Integer, Role> {
return em;
}
public Role findByName(String name, LanEvent event) {
TypedQuery<Role> q = em.createNamedQuery("Role.findByRoleName", Role.class);
q.setParameter("name", name);
q.setParameter("event", event);
return getSingleNullableResult(q);
}
// public Role findByName(String name, LanEvent event) {
// TypedQuery<Role> q = em.createNamedQuery("Role.findByRoleName",
// Role.class);
// q.setParameter("name", name);
// q.setParameter("event", event);
// return getSingleNullableResult(q);
// }
public List<Role> findForUser(User user, LanEvent event) {
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForUser", Role.class);
q.setParameter("user", user);
q.setParameter("event", event);
return q.getResultList();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Role> cq = cb.createQuery(Role.class);
Root<Role> root = cq.from(Role.class);
cq.where(cb.equal(root.get(Role_.event), event), cb.isMember(user, root.get(Role_.users)));
return em.createQuery(cq).getResultList();
}
public Role createRole(LanEvent event, String rolename) {
......@@ -50,9 +56,12 @@ public class RoleFacade extends GenericFacade<Integer, Role> {
}
public List<Role> findAll(LanEvent event) {
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForEvent", Role.class);
q.setParameter("event", event);
return q.getResultList();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Role> cq = cb.createQuery(Role.class);
Root<Role> root = cq.from(Role.class);
cq.where(cb.equal(root.get(Role_.event), event));
return em.createQuery(cq).getResultList();
}
}
......@@ -6,12 +6,20 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.callbacks.OrderCallback;
import fi.insomnia.bortal.facade.callbacks.StringPredicateField;
import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.User_;
import fi.insomnia.bortal.utilities.SearchResult;
@Stateless
@LocalBean
......@@ -19,10 +27,28 @@ public class UserFacade extends GenericFacade<Integer, User> {
private static final Logger logger = LoggerFactory.getLogger(UserFacade.class);
public enum UserField {
id, nick, login, firstname, lastname
private enum Userfields implements StringPredicateField<User> {
nick(User_.nick), login(User_.login), firstnames(User_.firstnames), lastname(User_.lastname), email(User_.email);
private SingularAttribute<User, String> field;
Userfields(SingularAttribute<User, String> f) {
field = f;
}
@Override
public SingularAttribute<User, String> getField() {
return field;
}
}
// final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname",
// "email" };
//
// public enum UserField {
// id, nick, login, firstname, lastname
// }
@PersistenceContext
private EntityManager em;
......@@ -36,24 +62,28 @@ public class UserFacade extends GenericFacade<Integer, User> {
}
/**
* Find user by username. Username is converted to lowercase before
* searching.
* Find user by username.
*
* @param login
* @return
*/
public User findByLogin(String login) {
TypedQuery<User> q = em.createNamedQuery("User.findByLogin", User.class);
q.setParameter("login", login.toLowerCase());
return getSingleNullableResult(q);
}
private static final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", "email" };
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.where(cb.equal(root.get(User_.login), login));
public List<User> searchForName(String name) {
return this.search(name, NAMEFIELDS, "login");
return getSingleNullableResult(em.createQuery(cq));
}
// public SearchResult<User> searchForName(String name) {
// return super.searcher(0, 0,
// new StringSearchPredicateCreator<User>(name, Userfields.values()),
// new OrderCallback<User>(true, User_.login)
// );
// // return this.search(name, NAMEFIELDS, "login");
// }
@Override
public void create(User user) {
user.setLogin(user.getLogin().toLowerCase().trim());
......@@ -66,29 +96,36 @@ public class UserFacade extends GenericFacade<Integer, User> {
return super.merge(user);
}
public List<User> searchUser(int page, int pagesize, String sort, String search) {
String query = null;
public SearchResult<User> searchUser(int page, int pagesize, String sort, String search) {
if (sort == null || sort.isEmpty()) {
sort = "nick";
}
if (search != null) {
query = new StringBuilder().append("%").append(search).append('%').toString();
}
return this.search(page, pagesize, query, NAMEFIELDS, sort);
}
public long searchUserCount(String search) {
String query = null;
if (search != null) {
query = new StringBuilder().append("%").append(search).append('%').toString();
}
return this.searchCount(query, NAMEFIELDS);
return super.searcher(page, pagesize,
new StringSearchPredicateCreator<User>(search, Userfields.values()),
new OrderCallback<User>(true, sort)
);
// return this.search(page, pagesize, query, NAMEFIELDS, sort);
}
// public long searchUserCount(String search) {
// String query = null;
// if (search != null) {
// query = new
// StringBuilder().append("%").append(search).append('%').toString();
// }
// return this.searchCount(query, NAMEFIELDS);
// }
public List<User> findByEmail(String email) {
TypedQuery<User> q = em.createQuery("SELECT u from User u where u.email = :usr", User.class);
q.setParameter("usr", email);
return q.getResultList();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.where(cb.equal(root.get(User_.email), email));
return em.createQuery(cq).getResultList();
}
}
package fi.iki.tuomari.utils.beans.callbacks;
package fi.insomnia.bortal.facade.callbacks;
import java.util.Collections;
import java.util.List;
......
package fi.iki.tuomari.utils.beans.callbacks;
package fi.insomnia.bortal.facade.callbacks;
import java.util.List;
......@@ -31,9 +31,6 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) {
if (sort == null) {
return;
}
Expression<?> path = null;
if (sort == null) {
if (sortstr == null) {
......@@ -47,6 +44,7 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
} else {
path = root.get(sort);
}
if (path == null) {
return;
}
......
package fi.insomnia.bortal.facade.callbacks;
import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface StringPredicateField<T extends ModelInterface<?>> {
SingularAttribute<T, String> getField();
}
package fi.iki.tuomari.utils.beans.callbacks;
package fi.insomnia.bortal.facade.callbacks;
import java.util.Collections;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
......@@ -14,17 +13,25 @@ import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class StringSearchPredicateCreator<T extends ModelInterface<?>> implements FacadeCallback<T> {
private static final String WILDCARD = "%";
private String searchstr = null;
private List<SingularAttribute<T, String>> attributes = null;
private StringPredicateField<T>[] attributes = null;
private SingularAttribute<T, String> attr;
public StringSearchPredicateCreator(String search, List<SingularAttribute<T, String>> attrs) {
// public StringSearchPredicateCreator(String search,
// List<SingularAttribute<T, String>> attrs) {
// if (addSearch(search)) {
// attributes = attrs.;
// }
// }
public StringSearchPredicateCreator(String search, SingularAttribute<T, String> from) {
if (addSearch(search)) {
attributes = attrs;
from = attr;
}
}
public StringSearchPredicateCreator(String search, SingularAttribute<T, String> from) {
if (addSearch(search)) {
attributes = Collections.singletonList(from);
public StringSearchPredicateCreator(String name, StringPredicateField<T>[] values) {
if (addSearch(name)) {
attributes = values;
}
}
......@@ -43,14 +50,18 @@ public class StringSearchPredicateCreator<T extends ModelInterface<?>> implement
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) {
if (searchstr == null || attributes == null || attributes.isEmpty()) {
if (searchstr == null || (attr == null && (attributes == null || attributes.length == 0))) {
return;
}
Predicate[] preds = new Predicate[attributes.size()];
int i = 0;
for (SingularAttribute<T, String> attr : attributes) {
preds[i++] = cb.equal(root.get(attr), searchstr);
if (attr == null) {
predicates.add(cb.equal(root.get(attr), searchstr));
} else {
Predicate[] preds = new Predicate[attributes.length];
int i = 0;
for (StringPredicateField<T> attr : attributes) {
preds[i++] = cb.equal(root.get(attr.getField()), searchstr);
}
predicates.add(cb.and(preds));
}
predicates.add(cb.and(preds));
}
}
......@@ -23,6 +23,7 @@ public interface AccountEventBeanLocal {
List<Role> getRolesFromAccountEvents(User u);
List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal> shopMap, boolean buyInstant) throws PermissionDeniedException;
List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal>
shopMap, boolean buyInstant) throws PermissionDeniedException;
}
package fi.insomnia.bortal.beans;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
......@@ -10,18 +9,17 @@ import javax.ejb.Local;
import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
@Local
public interface BillBeanLocal {
Bill findById(int id) throws PermissionDeniedException;
Bill createEmptyBill(User shoppingUser) throws PermissionDeniedException;
BillLine addProductToBill(Bill bill, Product product, BigDecimal count) throws PermissionDeniedException;
//
// Bill createEmptyBill(User shoppingUser) throws PermissionDeniedException;
//
// BillLine addProductToBill(Bill bill, Product product, BigDecimal count)
// throws PermissionDeniedException;
List<Bill> findAll();
......@@ -31,4 +29,6 @@ public interface BillBeanLocal {
void getPdfBillStream(Bill bill, OutputStream ostream);
void createBill(Bill bill) throws PermissionDeniedException;
}
......@@ -13,4 +13,6 @@ public interface EventMapBeanLocal {
void sendImage(int destId, byte[] imagedata);
EventMap find(Integer mapId);
}
......@@ -11,10 +11,10 @@ public interface EventOrganiserBeanLocal {
void save(EventOrganiser eventorg) throws PermissionDeniedException;
void fatalPermission(EventOrganiser eventorg) throws PermissionDeniedException;
List<EventOrganiser> getEventOrganisers() throws PermissionDeniedException;
List<EventOrganiser> getEventOrganisers();
EventOrganiser create(String createorgname);
EventOrganiser find(Integer orgId);
}
......@@ -7,6 +7,7 @@ import fi.insomnia.bortal.model.User;
@Local
public interface PermissionBeanLocal {
boolean hasPermission(IAppPermission perm);
User getCurrentUser();
......@@ -15,7 +16,7 @@ public interface PermissionBeanLocal {
boolean isCurrentUser(User thisuser);
void fatalPermission(IAppPermission perm, Object... failmessage) throws PermissionDeniedException;
boolean fatalPermission(IAppPermission perm, Object... failmessage) throws PermissionDeniedException;
void fatalNotLoggedIn() throws PermissionDeniedException;
......
......@@ -12,6 +12,7 @@ import javax.ejb.Local;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
/**
......@@ -34,7 +35,7 @@ public interface PlaceBeanLocal {
Place mergeChanges(Place place);
boolean buySelectedPlaces(User user) throws BortalCatchableException, PermissionDeniedException;
PlaceGroup buySelectedPlaces(User user) throws BortalCatchableException, PermissionDeniedException;
BigDecimal totalReservationPrice(User user, Place newPlace) throws PermissionDeniedException;
......
......@@ -17,7 +17,7 @@ public interface PlaceGroupBeanLocal {
// List<GroupMembership> getMemberships(User user);
boolean associateToToken(User user, String token);
boolean associateToToken(User user, String token) throws PermissionDeniedException;
void releaseAndGenerateToken(GroupMembership gmem) throws PermissionDeniedException;
......
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
......@@ -11,18 +12,16 @@ import fi.insomnia.bortal.model.PossibleAnswer;
@Local
public interface PollBeanLocal {
List<Poll> findPolls();
boolean createAnswers(List<PollAnswer> answers);
List<Poll> findPolls();
PossibleAnswer findPossibleAnwerById(int id);
boolean createAnswers(List<PollAnswer> answers);
PossibleAnswer findPossibleAnwerById(int id);
void createPoll(Poll poll);
void createPoll(Poll poll);
void createAnswers(PollQuestion q1);
void createAnswers(PollQuestion q1);
Poll find(Integer pollId);
}
......@@ -15,7 +15,7 @@ public interface ProductBeanLocal {
List<Product> listUserShoppableProducts();
Product createProduct(String name, BigDecimal price);
void create(Product prod);
List<Product> getProducts();
......@@ -27,10 +27,14 @@ public interface ProductBeanLocal {
AccountEvent createAccountEvent(Product product, BigDecimal quantity, User user);
List<Discount> getActiveDiscounts(Product product, BigDecimal quantity);
// List<Discount> getActiveDiscounts(Product product, BigDecimal quantity);
Product findById(int parseInt);
List<Product> findForStaffshop();
Discount findDiscount(Integer discountid);
Discount save(Discount discount);
}
......@@ -9,6 +9,7 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.Role;
/**
......@@ -22,10 +23,12 @@ public interface RoleBeanLocal {
public Role mergeChanges(Role role);
public Role create(Role role);
public void create(Role role);
public List<Role> getPossibleParents(Role role);
public Role find(int val);
public Role setPermissions(Role role, List<IAppPermission> newPerms);
}
......@@ -8,15 +8,16 @@ import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.utilities.SearchResult;
@Local
public interface UserBeanLocal {
List<User> getUsers();
List<User> getUsers(int page, int pagesize, String sort, String search);
SearchResult<User> getUsers(int page, int pagesize, String sort, String search);
User getUser(String nick);
User getUser(String login);
User mergeChanges(User currentUser) throws PermissionDeniedException;
......@@ -32,7 +33,7 @@ public interface UserBeanLocal {
UserImage findUserImage(int id) throws PermissionDeniedException;
List<User> searchName(String name);
// List<User> searchName(String name);
User createNewUser(User user, String password);
......@@ -40,14 +41,12 @@ public interface UserBeanLocal {
boolean resetPassword(User user, String password, String hash);
boolean initPasswordReset(User user, String hash, String mailpath);
User initPasswordReset(User user, String hash, String mailpath);
List<Role> findUsersRoles(User u) throws PermissionDeniedException;
User findById(Integer integer);
long getUsersCount(String search);
boolean invite(String invitemail);
GroupMembership findToken(String token);
......
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface UserUtilBeanLocal {
void convertUsernames();
}
......@@ -134,6 +134,7 @@ public class AccountEvent extends GenericEventChild {
public AccountEvent(LanEvent event, User u, Product prod, BigDecimal unitPrice, BigDecimal quantity, Calendar eventTime) {
setId(new EventPk(event));
this.setEvent(event);
this.setUnitPrice(unitPrice);
this.setQuantity(quantity);
this.product = prod;
......
......@@ -92,14 +92,15 @@ public class ApplicationPermission extends GenericEntity {
public IAppPermission getPermission() {
if (privatePerm == null && application != null && permission != null) {
for (IAppPermission appPerm : BortalApplication.valueOf(application).getPermissions()) {
if (appPerm.equals(permission)) {
for (IAppPermission appPerm : getApplication().getPermissions()) {
if (appPerm.toString().equals(permission)) {
privatePerm = appPerm;
break;
}
}
}
return privatePerm;
}
}
......@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model;
import static javax.persistence.TemporalType.DATE;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
......@@ -28,6 +29,8 @@ import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.PrivateOwned;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The system can send bills to the users. When user pays bill a AccountEvent
......@@ -133,13 +136,11 @@ public class Bill extends GenericEventChild {
@ManyToOne(optional = false)
private User user;
@ManyToOne
@JoinColumn(name = "event_id", referencedColumnName = "id", updatable = false, insertable = false)
private LanEvent event;
private static final Logger logger = LoggerFactory.getLogger(Bill.class);
public Integer getReferenceNumberBase() {
if (event != null && event.getReferenceNumberBase() != null && billNumber != null) {
return event.getReferenceNumberBase() + billNumber;
if (getEvent() != null && getEvent().getReferenceNumberBase() != null && getBillNumber() != null) {
return getEvent().getReferenceNumberBase() + getBillNumber();
}
return null;
}
......@@ -246,14 +247,6 @@ public class Bill extends GenericEventChild {
this.user = usersId;
}
public LanEvent getEvent() {
return event;
}
public void setBillNumber(Integer billNumber) {
this.billNumber = billNumber;
}
public Integer getBillNumber() {
return billNumber;
}
......@@ -354,4 +347,29 @@ public class Bill extends GenericEventChild {
return delayIntrest;
}
public void addProduct(Product product, BigDecimal count) {
// If bill number > 0 bill has been sent and extra privileges are needed
// to modify.
// if (!iscurrent || billnr != null) {
// permbean.fatalPermission(BillPermission.WRITE_ALL,
// "User tried to modify bill ", bill,
// "without sufficient permissions");
// }
if (this.billLines == null) {
billLines = new ArrayList<BillLine>();
}
logger.info("Adding billine: {}", this.getEvent());
this.getBillLines().add(new BillLine(this, product, count));
logger.info("Adding billine2: {}", this.getEvent());
for (Discount disc : product.getActiveDiscounts(count)) {
this.getBillLines().add(new BillLine(this, product, disc, count));
}
}
public void setBillNumber(Integer billNumber) {
this.billNumber = billNumber;
}
}
......@@ -6,6 +6,7 @@
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import java.math.RoundingMode;
import javax.persistence.Column;
import javax.persistence.Entity;
......@@ -109,20 +110,27 @@ public class BillLine extends GenericEventChild {
super();
}
public BillLine(Bill bill) {
super();
setId(new EventPk(bill.getId().getEventId()));
this.bill = bill;
}
public BillLine(Bill bill, String product, String unitName, BigDecimal units,
BigDecimal unitPrice, BigDecimal vat) {
this(bill);
this.unitName = unitName;
this.name = product;
this.setQuantity(units);
this.setUnitPrice(unitPrice);
this.setVat(vat);
public BillLine(Bill bill2, Product product, BigDecimal count) {
super(bill2.getEvent());
this.bill = bill2;
this.lineProduct = product;
this.name = product.getName();
this.setUnitName(product.getUnitName());
this.setQuantity(count);
this.setUnitPrice(product.getPrice());
this.setVat(product.getVat());
}
public BillLine(Bill bill2, Product product, Discount disc, BigDecimal count) {
super(bill2.getEvent());
this.bill = bill2;
BigDecimal unitPrice = product.getPrice().subtract(product.getPrice().multiply(disc.getPercentage())).negate().setScale(2, RoundingMode.HALF_UP);
BigDecimal vatPrice = product.getVat().subtract(product.getVat().multiply(disc.getPercentage())).negate().setScale(2, RoundingMode.HALF_UP);
this.name = disc.getShortdesc();
this.unitName = product.getUnitName();
this.quantity = count;
this.unitPrice = unitPrice;
this.vat = vatPrice;
}
public String getName() {
......
......@@ -11,9 +11,7 @@ import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
......@@ -95,10 +93,6 @@ public class Compo extends GenericEventChild {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "compo")
private List<CompoEntry> compoEntries;
@ManyToOne
@JoinColumn(name = "event_id", referencedColumnName = "id", insertable = false, updatable = false)
private LanEvent event;
public Compo(LanEvent event, String compoName, boolean holdVoting) {
this(event);
this.name = compoName;
......@@ -199,9 +193,4 @@ public class Compo extends GenericEventChild {
public void setMaxParticipantCount(int maxParticipantCount) {
this.maxParticipantCount = maxParticipantCount;
}
public LanEvent getEvent() {
return event;
}
}
......@@ -6,6 +6,7 @@
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
......@@ -81,6 +82,12 @@ public class Discount extends GenericEventChild {
super(ev);
}
public Discount(Product product) {
this(product.getEvent());
this.products = new ArrayList<Product>();
products.add(product);
}
public BigDecimal getAmountMin() {
return amountMin;
}
......
......@@ -10,9 +10,7 @@ import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
......@@ -44,9 +42,6 @@ public class EventMap extends GenericEventChild {
@OrderBy("name")
@OneToMany(cascade = CascadeType.ALL, mappedBy = "map")
private List<Place> places = new ArrayList<Place>();
@ManyToOne(optional = false)
@JoinColumn(name = "event_id", referencedColumnName = "id", insertable = false, updatable = false, nullable = false)
private LanEvent event;
@OneToMany(mappedBy = "eventMap")
private List<Reader> readers;
......@@ -97,10 +92,6 @@ public class EventMap extends GenericEventChild {
this.readers = readers;
}
public LanEvent getEvent() {
return event;
}
public void setMapData(byte[] mapData) {
this.mapData = mapData;
}
......
......@@ -34,6 +34,10 @@ public class EventPk implements Serializable {
this.setEventId(event.getId());
}
public EventPk(LanEvent event, Integer id) {
this(event.getId(), id);
}
public EventPk(Integer eventId) {
super();
this.setEventId(eventId);
......
......@@ -28,6 +28,7 @@ public abstract class GenericEventChild extends EntityEquals implements ModelInt
public GenericEventChild(LanEvent event) {
id = new EventPk(event);
this.event = event;
}
public GenericEventChild() {
......@@ -58,11 +59,11 @@ public abstract class GenericEventChild extends EntityEquals implements ModelInt
this.jpaVersionField = jpaVersionField;
}
public void setEvent(LanEvent event) {
public final void setEvent(LanEvent event) {
this.event = event;
}
public LanEvent getEvent() {
public final LanEvent getEvent() {
return event;
}
......
......@@ -12,8 +12,6 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
......@@ -25,12 +23,14 @@ import javax.persistence.TemporalType;
*/
@Entity
@Table(name = "events")
@NamedQueries({
@NamedQuery(name = "LanEvent.findAll", query = "SELECT e FROM LanEvent e"),
@NamedQuery(name = "LanEvent.findByStartTime", query = "SELECT e FROM LanEvent e WHERE e.startTime = :startTime"),
@NamedQuery(name = "LanEvent.findByEndTime", query = "SELECT e FROM LanEvent e WHERE e.endTime = :endTime"),
@NamedQuery(name = "LanEvent.findByName", query = "SELECT e FROM LanEvent e WHERE e.name = :name"),
@NamedQuery(name = "LanEvent.findByReferer", query = "SELECT e FROM LanEvent e WHERE e.referer = :referer") })
// @NamedQueries({
// @NamedQuery(name = "LanEvent.findAll", query = "SELECT e FROM LanEvent e"),
// @NamedQuery(name = "LanEvent.findByStartTime", query =
// "SELECT e FROM LanEvent e WHERE e.startTime = :startTime"),
// @NamedQuery(name = "LanEvent.findByEndTime", query =
// "SELECT e FROM LanEvent e WHERE e.endTime = :endTime"),
// @NamedQuery(name = "LanEvent.findByName", query =
// "SELECT e FROM LanEvent e WHERE e.name = :name") })
public class LanEvent extends GenericEntity {
/**
......@@ -52,6 +52,9 @@ public class LanEvent extends GenericEntity {
@Column(name = "referer", unique = true, nullable = true)
private String referer;
@Column(nullable = false, name = "event_enabled")
private boolean eventEnabled = false;
/**
* Bill's reference number will be formed by adding this number to the bill
* number and adding the checksum of that number as the last digit
......@@ -237,4 +240,13 @@ public class LanEvent extends GenericEntity {
public int getNextBillNumber() {
return nextBillNumber;
}
public boolean isEventEnabled() {
return eventEnabled;
}
public void setEventEnabled(boolean eventEnabled) {
this.eventEnabled = eventEnabled;
}
}
......@@ -70,7 +70,7 @@ public class Place extends GenericEventChild {
* Which group has bought the place
*/
@JoinColumns({
@JoinColumn(name = "group_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "group_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne
private PlaceGroup group;
......
......@@ -5,6 +5,7 @@
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
......@@ -39,7 +40,7 @@ public class Product extends GenericEventChild {
private String name;
@Column(name = "price", nullable = false, precision = 24, scale = 4)
private BigDecimal price;
private BigDecimal price = BigDecimal.ZERO;
@Column(name = "sort", nullable = false)
private int sort;
......@@ -88,10 +89,8 @@ public class Product extends GenericEventChild {
super();
}
public Product(LanEvent event, String name, BigDecimal price) {
public Product(LanEvent event) {
super(event);
this.price = price;
this.name = name;
}
......@@ -115,6 +114,19 @@ public class Product extends GenericEventChild {
return tot;
}
// TODO: alennukset lasketaan täällä. HUOMHUOM!!
public List<Discount> getActiveDiscounts(BigDecimal quantity) {
ArrayList<Discount> ret = new ArrayList<Discount>();
for (Discount d : getDiscounts()) {
if (d.isActive() &&
quantity.compareTo(d.getAmountMax()) <= 0 &&
quantity.compareTo(d.getAmountMin()) >= 0) {
ret.add(d);
}
}
return ret;
}
public String getName() {
return name;
}
......
......@@ -73,10 +73,6 @@ public class Reader extends GenericEventChild {
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
private EventMap eventMap;
@ManyToOne
@JoinColumn(name = "event_id", referencedColumnName = "id", updatable = false, insertable = false)
private LanEvent event;
@Column(name = "map_x")
private Integer mapX;
@Column(name = "map_y")
......@@ -154,10 +150,6 @@ public class Reader extends GenericEventChild {
this.eventMap = eventMap;
}
public LanEvent getEvent() {
return event;
}
public void setGamepoints(Integer gamepoints) {
this.gamepoints = gamepoints;
}
......
......@@ -13,28 +13,19 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.PrivateOwned;
/**
*
*/
@Entity
@Table(name = "roles", uniqueConstraints = { @UniqueConstraint(columnNames = { Role.EVENT_ID_COLUMN, Role.NAME_COLUMN }) })
@NamedQueries({
@NamedQuery(name = "Role.findForEvent", query = "SELECT r FROM Role r where r.event = :event"),
@NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name and r.event = :event"),
// @NamedQuery(name="Role.findParentsExcluding", query="select r from
// Role r, RoleRight rr where :user member of r.users ),
@NamedQuery(name = "Role.findForUser", query = "SELECT r FROM Role r WHERE :user MEMBER OF r.users and r.event = :event") })
public class Role extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = -4602863502464505404L;
protected static final String NAME_COLUMN = "role_name";
......@@ -60,7 +51,8 @@ public class Role extends GenericEntity {
private List<Role> parents = new ArrayList<Role>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "role")
private List<ApplicationPermission> permissions;
@PrivateOwned
private List<ApplicationPermission> permissions = new ArrayList<ApplicationPermission>();
@ManyToOne
private CardTemplate cardTemplate;
......
......@@ -19,8 +19,6 @@ import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.OrderBy;
......@@ -29,7 +27,6 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.eclipse.persistence.annotations.ConversionValue;
import org.eclipse.persistence.annotations.Convert;
......@@ -50,14 +47,8 @@ import fi.insomnia.bortal.utilities.PasswordFunctions;
@ConversionValue(objectValue = "FEMALE", dataValue = "F"),
@ConversionValue(objectValue = "UNDEFINED", dataValue = "U"),
})
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u order by u.created"),
@NamedQuery(name = "User.findByLogin", query = "SELECT u FROM User u WHERE u.login = :login") })
public class User extends GenericEntity {
/**
*
*/
public static final String ANONYMOUS_LOGINNAME = "anonymous";
private static final long serialVersionUID = -1632200627103418206L;
@Column(name = "created", nullable = false)
......@@ -65,6 +56,10 @@ public class User extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP)
private Calendar created = Calendar.getInstance();
@NotNull
@Column(name = "login", unique = true, nullable = false)
private String login = "";
@Column(name = "active", nullable = false, columnDefinition = "boolean default true")
private boolean active = true;
......@@ -81,8 +76,6 @@ public class User extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP)
private Calendar birthday;
@NotNull
@Size(min = 2, message = "{user.nickSizeMessage}")
@Column(name = "nick")
private String nick = "";
......@@ -112,9 +105,6 @@ public class User extends GenericEntity {
@Column(name = "gender", nullable = false)
private Gender gender = Gender.UNDEFINED;
@Column(name = "login", unique = true)
private String login;
@Column(name = "confirm_hash")
private String confirmHash;
......@@ -308,10 +298,13 @@ public class User extends GenericEntity {
}
public void setLogin(String login) {
if (login != null) {
this.login = login.trim();
} else {
login = null;
// Do not allow anonymous userchange
if (!isAnonymous()) {
if (login != null) {
this.login = login.trim().toLowerCase();
} else {
login = null;
}
}
}
......@@ -508,4 +501,14 @@ public class User extends GenericEntity {
public List<PollAnswer> getPollAnswers() {
return pollAnswers;
}
@Transient
private Boolean isAnon;
public boolean isAnonymous() {
if (isAnon == null) {
isAnon = ANONYMOUS_LOGINNAME.equals(login);
}
return isAnon;
}
}
package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.LoginPermission;
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.UserPermission;
public enum BortalApplication {
// NOTE. add conversion Value to RoleRight
// PERMISSION("Description"),
LOGIN("Login related permissions", LoginPermission.class),
// LOGIN("Login related permissions", LoginPermission.class),
USER("User management related", UserPermission.class),
USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
ACCOUNT_MANAGEMENT("Manage others account events. view(r), modify(w) and create (shop)(x)"),
BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)", BillPermission.class),
MAP("view maps(r), Modify(w), reserve places from maps(x)"),
ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
PRODUCT("View(r), modify(w), and shop(x) products"),
SHOP("View own shopped events(r), Modify own AccountEvents() and Shop(x)"),
GAME("View(r) own, modify(w), view all(X)"),
POLL("View answers(r), create polls (w), answer to polls(x)");
private String description;
private Class<? extends IAppPermission> permissions;
// s ROLE("Role management", RolePermission.class),
BILL("Creating, and managing bills", BillPermission.class),
POLL("Poll stuff", PollPermission.class),
MAP("Map management ", MapPermission.class),
SHOP("Product & shop management", ShopPermission.class);
// BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)",
// BillPermission.class)
// USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
// ACCOUNT_MANAGEMENT("Manage others account events. view(r), modify(w) and create (shop)(x)"),
// MAP("view maps(r), Modify(w), reserve places from maps(x)"),
// ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
// PRODUCT("View(r), modify(w), and shop(x) products"),
// SHOP("View own shopped events(r), Modify own AccountEvents() and Shop(x)"),
// GAME("View(r) own, modify(w), view all(X)"),
// POLL("View answers(r), create polls (w), answer to polls(x)");
private final String description;
private final Class<? extends IAppPermission> permissions;
private BortalApplication(String descr, Class<? extends IAppPermission> perms) {
this.permissions = perms;
this.setDescription(descr);
description = descr;
}
public IAppPermission[] getPermissions() {
return permissions.getEnumConstants();
}
private BortalApplication(String descr) {
this.permissions = FixPerm.class;
this.setDescription(descr);
}
return permissions.getEnumConstants();
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
......
......@@ -3,11 +3,18 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum BillPermission implements IAppPermission {
READ_ALL("Read all bills"), WRITE_ALL("Modify all bills"), CREATE_BILL("Create bills for self")
READ_ALL("Read all bills"),
WRITE_ALL("Modify all bills"),
CREATE_BILL("Create bills for self")
;
private String description;
private String fullName;
public static final String S_READ_ALL = "BILL/READ_ALL";
public static final String S_CREATE_BILL = "BILL/CREATE_BILL";
public static final String S_WRITE_ALL = "BILL/WRITE_ALL";
private final String description;
private final String fullName;
private BillPermission(String desc) {
description = desc;
......
......@@ -14,4 +14,7 @@ public interface IAppPermission extends Serializable {
public String getFullName();
@Override
public String toString();
}
......@@ -3,7 +3,16 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum MapPermission implements IAppPermission {
MANAGE_OTHERS("Manage other users reservations in map"), BUY_PLACES("Reserve and buy places from map"), VIEW("View maps");
MANAGE_OTHERS("Manage other users reservations in map"),
BUY_PLACES("Reserve and buy places from map"),
VIEW("View maps"),
MANAGE_MAPS("Create and modify maps");
public static final String S_MANAGE_OTHERS = "MAP/MANAGE_OTHERS";
public static final String S_BUY_PLACES = "MAP/BUY_PLACES";
public static final String S_VIEW = "MAP/VIEW";
public static final String S_MANAGE_MAPS = "MAP/MANAGE_MAPS";
private String description;
private String fullName;
......@@ -15,7 +24,7 @@ public enum MapPermission implements IAppPermission {
@Override
public BortalApplication getParent() {
return BortalApplication.USER;
return BortalApplication.MAP;
}
@Override
......
......@@ -2,21 +2,20 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum LoginPermission implements IAppPermission {
LOGIN("Can login"), LOGOUT("Can logout");
public enum NewsPermission implements IAppPermission {
MANAGE("Manage newsgroups");
private String description;
private String fullName;
private LoginPermission(String desc) {
private NewsPermission(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.LOGIN;
return BortalApplication.SHOP;
}
@Override
......
......@@ -2,20 +2,23 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum FixPerm implements IAppPermission {
FIX("FIX THIS");
public enum PollPermission implements IAppPermission {
ANSWER("Can answer and view availabe polls"),
VIEW_RESULTS("View anonymized poll results"),
CREATE("Create and manage polls")
private final String description;
private final String fullName;
;
private String description;
private String fullName;
private FixPerm(String desc) {
private PollPermission(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.LOGIN;
return BortalApplication.POLL;
}
@Override
......
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum ShopPermission implements IAppPermission {
LIST_USERPRODUCTS("List products for users in shop"),
LIST_ALL_PRODUCTS("List all products in shop"),
SHOP_TO_OTHERS("Shop to other users"),
SHOP_PRODUCTS("Shop products to self"),
MANAGE_PRODUCTS("Create and modify products");
public static final String S_LIST_USERPRODUCTS = "SHOP/LIST_USERPRODUCTS";
public static final String S_LIST_ALL_PRODUCTS = "SHOP/LIST_ALL_PRODUCTS";
public static final String S_SHOP_TO_OTHERS = "SHOP/SHOP_TO_OTHERS";
public static final String S_SHOP_PRODUCTS = "SHOP/SHOP_PRODUCTS";
public static final String S_MANAGE_PRODUCTS = "SHOP/MANAGE_PRODUCTS";
private String description;
private String fullName;
private ShopPermission(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.SHOP;
}
@Override
public String getDescription() {
return this.description;
}
@Override
public String getFullName() {
return fullName;
}
}
......@@ -3,7 +3,27 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum UserPermission implements IAppPermission {
VIEW("View all users"), MODIFY("Modify users");
VIEW_ALL("View all users"),
MODIFY("Modify users"),
CREATE_NEW("Create new user"),
VIEW_SELF("Can view self"),
LOGIN("Can login"),
LOGOUT("Can logout"),
READ_ROLES("View all roles."),
WRITE_ROLES("Modify roles"),
VIEW_ACCOUNTEVENTS("Show other users account events"),
MODIFY_ACCOUNTEVENTS("Modify Account events");
public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY";
public static final String S_CREATE_NEW = "USER/CREATE_NEW";
public static final String S_VIEW_SELF = "USER/VIEW_SELF";
public static final String S_LOGIN = "USER/LOGIN";
public static final String S_LOGOUT = "USER/LOGOUT";
public static final String S_READ_ROLES = "USER/READ_ROLES";
public static final String S_WRITE_ROLES = "USER/WRITE_ROLES";
public static final String S_VIEW_ACCOUNTEVENTS = "USER/VIEW_ACCOUNTEVENTS";
public static final String S_MODIFY_ACCOUNTEVENTS = "USER/MODIFY_ACCOUNTEVENTS";
private String description;
private String fullName;
......
......@@ -24,6 +24,7 @@ public class I18n {
}
public static String get(String key, Object... params) {
return MessageFormat.format(get(key), params);
}
......
<?xml version="1.0" encoding="UTF-8"?>
<pageflow:Pageflow xmlns:pageflow="http://www.sybase.com/suade/pageflow" id="pf13012981621060" configfile="/LanBortalWeb/WebContent/WEB-INF/faces-config.xml"/>
<pageflow:Pageflow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pageflow="http://www.sybase.com/suade/pageflow" id="pf13012981621060" configfile="/LanBortalWeb/WebContent/WEB-INF/faces-config.xml">
<nodes xsi:type="pageflow:PFPage" name="place/placemap" x="180" y="137" id="pf13156916815477" outlinks="pf13156916815478" inlinks="pf13156916815478" path="/place/placemap.xhtml"/>
<links id="pf13156916815478" target="pf13156916815477" source="pf13156916815477" outcome="placesReserved" redirect="true">
<bendPoints d1Height="-36" d2Height="-36"/>
<bendPoints d1Width="3" d1Height="-86" d2Width="3" d2Height="-86"/>
<bendPoints d1Width="-65" d1Height="-88" d2Width="-65" d2Height="-88"/>
<bendPoints d1Width="-64" d2Width="-64"/>
</links>
</pageflow:Pageflow>
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<resource-bundle>
<base-name>fi.insomnia.bortal.resources.i18n</base-name>
......@@ -22,93 +20,75 @@
</locale-config>
</application>
<navigation-rule>
<from-view-id>/role/create.xhtml</from-view-id>
<navigation-case>
<from-outcome>roleCreated</from-outcome>
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/user/list.xhtml</from-view-id>
<navigation-case>
<from-outcome>userEdit</from-outcome>
<to-view-id>/user/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/user/edit.xhtml</from-view-id>
<navigation-case>
<from-outcome>userSave</from-outcome>
<to-view-id>/user/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/role/list.xhtml</from-view-id>
<navigation-case>
<from-outcome>roleEdit</from-outcome>
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<!-- <navigation-rule> -->
<!-- <from-view-id>/user/list.xhtml</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>userEdit</from-outcome> -->
<!-- <to-view-id>/user/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> -->
<!-- <navigation-rule> -->
<!-- <from-view-id>/user/edit.xhtml</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>userSave</from-outcome> -->
<!-- <to-view-id>/user/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> -->
<!-- <navigation-rule> -->
<!-- <from-view-id>/role/list.xhtml</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>roleEdit</from-outcome> -->
<!-- <to-view-id>/role/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> -->
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>frontpage</from-outcome>
<to-view-id>/news/frontpage.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>userprefs</from-outcome>
<to-view-id>/news/edit.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>shopfrontpage</from-outcome>
<to-view-id>/product/createBill.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>adminfront</from-outcome>
<to-view-id>/admin/frontpage.xhtml</to-view-id>
</navigation-case>
<!-- <navigation-rule> -->
<!-- <from-view-id>*</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>frontpage</from-outcome> -->
<!-- <to-view-id>/news/frontpage.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- <navigation-case> -->
<!-- <from-outcome>userprefs</from-outcome> -->
<!-- <to-view-id>/news/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- <navigation-case> -->
<!-- <from-outcome>shopfrontpage</from-outcome> -->
<!-- <to-view-id>/product/createBill.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- <navigation-case> -->
<!-- <from-outcome>adminfront</from-outcome> -->
<!-- <to-view-id>/admin/frontpage.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<navigation-case>
<from-outcome>permissionDenied</from-outcome>
<to-view-id>/permissionDenied.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>viewExpired</from-outcome>
<to-view-id>/viewExpired.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/auth/logout.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>loginSuccess</from-outcome>
<to-view-id>/NotImplementedYet.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>loginFailed</from-outcome>
<to-view-id>/NotImplementedYet.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<!-- </navigation-rule> -->
<!-- <navigation-rule> -->
<!-- <from-view-id>/role/edit.xhtml</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>roleSaved</from-outcome> -->
<!-- <to-view-id>/role/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> -->
<!-- <navigation-rule> -->
<!-- <from-view-id>/product/createBill.xhtml</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>success</from-outcome> -->
<!-- <to-view-id>/bill/list.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> -->
<factory>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory>
<navigation-rule>
<from-view-id>/role/edit.xhtml</from-view-id>
<display-name>place/placemap</display-name>
<from-view-id>/place/placemap.xhtml</from-view-id>
<navigation-case>
<from-outcome>roleSaved</from-outcome>
<to-view-id>/role/edit.xhtml</to-view-id>
<from-outcome>placesReserved</from-outcome>
<to-view-id>/place/placemap.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/product/createBill.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/bill/list.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<factory>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory>
</faces-config>
......
......@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:login="http://java.sun.com/jsf/composite/tools/login" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:login="http://java.sun.com/jsf/composite/cditools/login" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:head>
<title></title>
......
......@@ -5,7 +5,7 @@
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:login="http://java.sun.com/jsf/composite/tools/login"
xmlns:login="http://java.sun.com/jsf/composite/cditools/login"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.logout" />
<f:metadata>
<f:event type="preRenderView" listener="#{authView.executeLogout}" />
</f:metadata>
<ui:define name="content">
<h:outputText value="#{i18n['login.logoutmessage']}" />
<h:outputScript>
window.location="#{request.contextPath}"
</h:outputScript>
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.logoutsuccess" />
<ui:define name="content">
<h:outputText value="#{i18n['login.logoutmessage']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -4,36 +4,34 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:login="http://java.sun.com/jsf/composite/tools/login" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/${sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.resetPassword" />
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="id" value="#{pwdResetView.id}" />
<f:viewParam name="hash" value="#{pwdResetView.hash}" />
</f:metadata>
</ui:define>
<f:metadata>
<f:viewParam name="id" value="#{pwdResetView.id}" />
<f:viewParam name="hash" value="#{pwdResetView.hash}" />
<f:event type="preRenderView" listener="#{pwdResetView.initView}" />
</f:metadata>
<ui:define name="content">
<h:form rendered="#{pwdResetView.hashMatch()}">
<h:inputHidden value="#{pwdResetView.user.id}" />
<h:form rendered="#{!empty pwdResetView.user}">
<h:panelGrid columns="3">
<h:outputLabel value="#{i18n['user.password']}:" for="password" />
<h:inputSecret id="password" value="#{pwdResetView.password}" />
<h:inputSecret validator="#{userValidator.password}" id="password" value="#{pwdResetView.password}" />
<h:message for="password" />
<h:outputLabel value="#{i18n['user.passwordcheck']}:" for="passwordcheck" />
<h:inputSecret id="passwordcheck" value="#{pwdResetView.confirm}" />
<h:inputSecret validator="#{userValidator.password}" id="passwordcheck" value="#{pwdResetView.confirm}" />
<h:message for="passwordcheck" />
</h:panelGrid>
<h:commandButton id="changePassword" value="#{i18n['user.changePassword']}" action="#{pwdResetView.change()}" />
</h:form>
<h:outputText rendered="#{!pwdResetView.hashMatch() }" value="#{i18n['passwordReset.hashNotFound']}" />
<h:outputText rendered="#{empty pwdResetView.user}" value="#{i18n['passwordReset.hashNotFound']}" />
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.edit" />
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.edit" />
<ui:define name="content">
<h:form id="orgform">
<h:inputHidden value="#{eventorgView.eventorg.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" /><h:inputText value="#{eventorgView.eventorg.organisation}" />
<h:outputLabel value="#{i18n['eventorg.bundleCountry']}:" /><h:inputText value="#{eventorgView.eventorg.bundleCountry}" />
<h:outputLabel value="#{i18n['eventorg.billAddress1']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress1}" />
<h:outputLabel value="#{i18n['eventorg.billAddress2']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress2}" />
<h:outputLabel value="#{i18n['eventorg.billAddress3']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress3}" />
<h:outputLabel value="#{i18n['eventorg.billAddress4']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress4}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber1']}:" /><h:inputText value="#{eventorgView.eventorg.bankNumber1}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber2']}:" /><h:inputText value="#{eventorgView.eventorg.bankNumber2}" />
<h:outputLabel value="#{i18n['eventorg.bankName1']}:" /><h:inputText value="#{eventorgView.eventorg.bankName1}" />
<h:outputLabel value="#{i18n['eventorg.bankName2']}:" /><h:inputText value="#{eventorgView.eventorg.bankName2}" />
<h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['eventorg.createevent']}</h2>
<h:form id="createevent" >
<h:form id="orgform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" />
<h:inputText value="#{eventorgView.eventorg.organisation}" />
<h:outputLabel value="#{i18n['eventorg.bundleCountry']}:" />
<h:inputText value="#{eventorgView.eventorg.bundleCountry}" />
<h:outputLabel value="#{i18n['eventorg.billAddress1']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress1}" />
<h:outputLabel value="#{i18n['eventorg.billAddress2']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress2}" />
<h:outputLabel value="#{i18n['eventorg.billAddress3']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress3}" />
<h:outputLabel value="#{i18n['eventorg.billAddress4']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress4}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber1']}:" />
<h:inputText value="#{eventorgView.eventorg.bankNumber1}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankNumber2}" />
<h:outputLabel value="#{i18n['eventorg.bankName1']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName1}" />
<h:outputLabel value="#{i18n['eventorg.bankName2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName2}" />
<h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['eventorg.createevent']}</h2>
<h:form id="createevent">
<h:outputLabel for="createEventName" value="#{i18n['event.name']}" />
<h:inputText id="createEventName" value="#{eventorgView.eventname}" />
<h:commandButton action="#{eventorgView.createEvent()}" value="#{i18n['eventorg.createEvent']}" />
</h:form>
<h2>#{i18n['eventorg.events']}</h2>
<h:form id="orgsEventlist">
<h:dataTable border="1" id="org" value="#{eventorgView.orgsEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['event.name']}" />
</f:facet>
<h:outputText value="#{event.name}" />
</h:column>
<h:column >
<h:commandButton action="#{eventorgView.editEvent()}" value="#{i18n['eventorg.editEvent']}" />
</h:column>
</h:dataTable>
<h:form id="orgsEventlist">
<h:dataTable border="1" id="org" value="#{eventorgView.orgsEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['event.name']}" />
</f:facet>
<h:outputText value="#{event.name}" />
</h:column>
<h:column>
<h:commandButton action="#{eventorgView.editEvent()}" value="#{i18n['eventorg.editEvent']}" />
</h:column>
</h:dataTable>
</h:form>
</h:form>
</ui:define>
</ui:composition>
......
......@@ -33,6 +33,8 @@
<br />
<h:commandButton value="Generate test poll data" action="#{TestDataView.generatePollData()}" />
<br />
<h:commandButton value="convert usernames" action="#{TestDataView.convertUsernames()}" />
<br />
</h:form>
</h:body>
</html>
......
......@@ -3,65 +3,62 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools">
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
>
<h:body>
<ui:composition rendered="#{sessionHandler.loggedIn}" template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:param name="rendered" value="true" />
<ui:define name="sidebarcontent">
<ul>
<tools:canRead target="ROLE_MANAGEMENT">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.roles']}" />
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.roles']}" />
<ul>
<li><h:link outcome="/role/create" value="#{i18n['sidebar.role.create']}" /></li>
<li><h:link outcome="/role/list" value="#{i18n['sidebar.role.list']}" /></li>
<li><h:link outcome="/user/createCardTemplate" value="#{i18n['sidebar.cardTemplate.create']}" /></li>
<li><h:link outcome="/user/listCardTemplates" value="#{i18n['sidebar.cardTemplate.list']}" /></li>
<li><h:link outcome="/role/create" value="#{i18n['sidebar.role.create']}" />
</li>
<li><h:link outcome="/role/list" value="#{i18n['sidebar.role.list']}" />
</li>
<li><h:link outcome="/user/createCardTemplate" value="#{i18n['sidebar.cardTemplate.create']}" />
</li>
<li><h:link outcome="/user/listCardTemplates" value="#{i18n['sidebar.cardTemplate.list']}" />
</li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="BILL">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.bills']}" />
</ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.bills']}" />
<ul>
<li><h:link outcome="/bill/list" value="#{i18n['sidebar.bill.listAll']}" /></li>
<li><h:link outcome="/bill/billSummary" value="#{i18n['sidebar.bill.summary']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="USER_MANAGEMENT">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.users']}" />
<li><h:link outcome="/bill/list" value="#{i18n['sidebar.bill.listAll']}" />
</li>
<li><h:link outcome="/bill/billSummary" value="#{i18n['sidebar.bill.summary']}" />
</li>
</ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.users']}" />
<ul>
<li><h:link outcome="/user/create" value="#{i18n['sidebar.user.create']}" /></li>
<li><h:link outcome="/user/list" value="#{i18n['sidebar.user.list']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="PRODUCT">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.products']}" />
<li><h:link outcome="/user/create" value="#{i18n['sidebar.user.create']}" />
</li>
<li><h:link outcome="/user/list" value="#{i18n['sidebar.user.list']}" />
</li>
</ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.products']}" />
<ul>
<li><h:link outcome="/product/create" value="#{i18n['sidebar.product.create']}" /></li>
<li><h:link outcome="/product/list" value="#{i18n['sidebar.product.list']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="MAP">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.maps']}" />
<li><h:link outcome="/product/create" value="#{i18n['sidebar.product.create']}" />
</li>
<li><h:link outcome="/product/list" value="#{i18n['sidebar.product.list']}" />
</li>
</ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.maps']}" />
<ul>
<li><h:link outcome="/map/list" value="#{i18n['sidebar.map.list']}" /></li>
</ul>
</li>
</tools:canRead>
<li><h:link outcome="/map/list" value="#{i18n['sidebar.map.list']}" />
</li>
</ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.other']}" />
<ul>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}" /></li>
<li><h:link outcome="/utils/flushCache" value="#{i18n['sidebar.utils.flushCache']}" /></li>
<li><h:link outcome="/generateTestData" value="#{i18n['sidebar.utils.testdata']}" /></li>
<ul>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}" />
</li>
<li><h:link outcome="/utils/flushCache" value="#{i18n['sidebar.utils.flushCache']}" />
</li>
<li><h:link outcome="/generateTestData" value="#{i18n['sidebar.utils.testdata']}" />
</li>
</ul>
</li>
</ul></li>
</ul>
</ui:define>
</ui:composition>
......
......@@ -13,6 +13,7 @@
<ui:define name="sidebarcontent">
<ul>
<li><h:link outcome="/user/create.xhtml" value="#{i18n['sidebar.createuser']}"/></li>
<li><h:link outcome="/auth/sendResetMail" value="#{i18n['loginerror.resetpassword']}" /></li>
</ul>
</ui:define>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:param name="rendered" value="#{sessionHandler.isLoggedIn()}" />
<ui:param name="rendered" value="#{sessionHandler.isLoggedIn()}" />
<ui:define name="sidebarcontent">
<ul>
<li><h:link outcome="/user/sendPicture" value="#{i18n['user.sendPicture']}"/></li>
<li><h:link outcome="/user/changePassword" value="#{i18n['user.changePassword']}"/></li>
<li><h:link outcome="/user/accountEvents" value="#{i18n['user.accountEvents']}"/></li>
<li><h:link outcome="/place/myGroups" value="#{i18n['user.myGroups']}"/></li>
<li><h:link outcome="/place/insertToken" value="#{i18n['user.insertToken']}"/></li>
<h1>
<h:link outcome="/user/edit" value="#{userView.selectedUser.wholeName}">
<f:param name="userid" value="#{userView.selectedUser.id}" />
</h:link>
</h1>
<ul>
<!-- <li><h:link outcome="/user/sendPicture" value="#{i18n['user.sendPicture']}">
<f:param name="userid" value="#{userView.selectedUser.id}" />
</h:link></li>
-->
<li><h:link outcome="/user/changePassword" value="#{i18n['user.changePassword']}">
<f:param name="userid" value="#{userView.selectedUser.id}" />
</h:link></li>
<li><h:link outcome="/user/accountEvents" value="#{i18n['user.accountEvents']}">
<f:param name="userid" value="#{userView.selectedUser.id}" />
</h:link></li>
<li><h:link outcome="/place/myGroups" value="#{i18n['user.myGroups']}">
<f:param name="userid" value="#{userView.selectedUser.id}" />
</h:link>
</li>
<li><h:link outcome="/place/insertToken" value="#{i18n['user.insertToken']}">
<f:param name="userid" value="#{userView.selectedUser.id}" />
</h:link>
</li>
</ul>
......
......@@ -7,12 +7,10 @@
<f:view locale="#{sessionHandler.locale}">
<ui:insert name="metadata" />
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{i18n['global.eventname']}" /> - <h:outputText
value="#{i18n[util.concat(thispage,'.header') ] }"
/></title>
<title><h:outputText value="#{layoutView.getHeader(thispage)}" />
</title>
<meta name="description" content="Insomnia lippukauppa" />
<meta name="author" content="Niko Juusela, csharp" />
<meta http-equiv="Content-Language" content="fi" />
......@@ -26,7 +24,10 @@
<img src="#{request.contextPath}/resources/style/insomnia2/img/logo.png" />
</div>
<div id="login">
<tools:isLoggedIn>#{sessionHandler.currentUser.nick}</tools:isLoggedIn>
<h:outputText rendered="#{sessionHandler.loggedIn}"
value="Olet kirjautunut käyttäjällä: #{sessionHandler.currentUser.nick}"
/>
<tools:loginLogout />
</div>
</div>
......@@ -37,25 +38,42 @@
<li><h:link outcome="/index" value="#{i18n['topmenu.frontpage']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'frontpage'?'active':''}"
/></li>
<li>
<h:link outcome="/user/edit" value="#{i18n['topmenu.usersPreferences']}" styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'active':''}" />
</li>
<li><h:link outcome="/poll/start" value="#{i18n['topmenu.poll']}" styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'poll'?'active': ''}" /></li>
<li><h:link outcome="/place/placemap" value="#{i18n['topmenu.placemap']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'placemap'?'active':''}"
/>
</li>
<li><h:link outcome="/product/list" value="#{i18n['topmenu.adminfront']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'active':''}"
/></li>
<li><h:link outcome="/shop/showReaderEvents" value="#{i18n['topmenu.rfidshop']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'rfidshop'?'active':''}"
/>
</li>
<li><h:link outcome="/game/start" value="#{i18n['topmenu.game']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'game'?'active':''}"
/>
</li>
<c:if test="#{sessionHandler.isLoggedIn()}">
<li><h:link outcome="/user/edit" value="#{i18n['topmenu.usersPreferences']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'active':''}"
/>
</li>
<!--
<li><h:link outcome="/poll/start" value="#{i18n['topmenu.poll']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'poll'?'active': ''}"
/></li>
-->
</c:if>
<c:if test="#{mapView.canView()}">
<li><h:link outcome="/place/placemap" value="#{i18n['topmenu.placemap']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'placemap'?'active':''}"
/>
</li>
</c:if>
<c:if test="#{sessionHandler.isLoggedIn()}">
<!--<li><h:link outcome="/product/list" value="#{i18n['topmenu.adminfront']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'active':''}"
/>
</li>-->
<li><h:link outcome="/shop/createBill" value="#{i18n['sidebar.product.createBill']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'active':''}"
/>
</li>
<!-- <li><h:link outcome="/shop/showReaderEvents" value="#{i18n['topmenu.rfidshop']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'rfidshop'?'active':''}"
/>
</li>
<li><h:link outcome="/game/start" value="#{i18n['topmenu.game']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'game'?'active':''}"
/>
</li>
-->
</c:if>
</ul>
</div>
<div id="container" class="top"></div>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/tools/map"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.role.edit" />
<ui:define name="content">
<map:create />
</ui:define>
</ui:composition>
<ui:define name="content">
<h:form>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['map.name']}" />
<h:inputText value="#{mapManageView.mapname}" />
<h:commandButton id="createrole" value="#{i18n['map.create']}" action="#{mapManageView.createMap}" />
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/tools/map"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="mapid" value="#{mapManageView.mapId}" />
<f:event type="preRenderView" listener="#{mapManageView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.role.edit" />
<ui:define name="content">
<map:edit commitaction="#{mapManageView.saveMap()}" commitvalue="#{i18n['mapEdit.save']}"/>
<map:edit commitaction="#{mapManageView.saveMap()}" commitvalue="#{i18n['mapEdit.save']}" />
<map:setBuyable />
<img width="600" src="#{request.contextPath}#{mapView.selectPlaceMapUrl}"
alt="placeimage" />
<img width="600" src="#{request.contextPath}/PlaceMap?mapid=#{mapView.activeMap.id.id}" alt="placeimage" />
<map:genplaces />
<map:submitBg />
<!-- <map:listPlaces />
<!-- <map:listPlaces />
-->
</ui:define>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/tools/map"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.role.list" />
<ui:define name="content">
<map:list />
</ui:define>
</ui:composition>
<ui:define name="content">
<map:list />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -47,7 +47,9 @@
<h:outputLabel value="#{i18n['place.product']}:" />
<h:outputText value="#{placeView.place.product.name}" />
<h:outputLabel value="#{i18n['place.buyable']}" />
<h:selectBooleanCheckbox value="#{plaveView.place.buyable}"/>
<h:outputLabel value="#{i18n['place.description']}:" />
<h:inputTextarea value="#{placeView.place.description}" />
......
......@@ -3,18 +3,24 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:f="http://java.sun.com/jsf/core">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.insertToken" />
<f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata>
<ui:define name="content">
<h1>#{i18n['placetoken.pageHeader']}</h1>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{placeGroupView.token}" />
<h:commandButton id="commitbtn" action="#{placeGroupView.saveToken()}" value="#{i18n['placetoken.commit']}" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
</ui:define>
......
......@@ -8,12 +8,11 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.mygroups" />
<ui:define name="content">
#{placeGroupView.editSelf()}
<h1>#{i18n['placegroupview.header']}</h1>
<p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{!(placeGroupView.groupMemberships.rowCount gt 0)}"
<h:outputText rendered="#{empty placeGroupView.groupMemberships}"
value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{placeGroupView.groupMemberships.rowCount gt 0}" id="placelistform">
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<p><a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a></p>
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
xmlns:map="http://java.sun.com/jsf/composite/tools/map" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{productView.initCreateView}" />
</f:metadata>
<ui:param name="thispage" value="page.product.create" />
<ui:define name="content">
<tools:fatalPermission target="PRODUCT" permission="WRITE" />
<products:create />
<products:edit commitaction="#{productView.createProduct()}" commitvalue="#{i18n['products.create']}" />
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
>
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.product.edit" />
<ui:define name="content">
<products:manageDiscount commitaction="#{productView.createDiscount()}" commitvalue="#{i18n['discount.create']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -5,17 +5,19 @@
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:products="http://java.sun.com/jsf/composite/tools/products">
xmlns:products="http://java.sun.com/jsf/composite/cditools/products">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="productid" value="#{productView.productId}" />
<f:event type="preRenderView" listener="#{productView.initEditView}" />
</f:metadata>
<ui:param name="thispage" value="page.product.edit" />
<ui:define name="content">
<tools:fatalPermission target="PRODUCT" permission="WRITE" />
<products:edit commitaction="#{productView.saveProduct()}"
commitvalue="#{i18n['products.save']}" />
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.product.edit" />
<ui:define name="content">
<tools:fatalPermission target="PRODUCT" permission="WRITE" />
<h:form id="discountform">
<h:inputHidden name="#{productView.discount.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['discount.shortdesc']}:" />
<h:inputText value="#{productView.discount.shortdesc}" />
<h:outputLabel value="#{i18n['discount.percentage']}:" />
<h:inputText value="#{productView.discount.percentage}" />
<h:outputLabel value="#{i18n['discount.code']}:" />
<h:inputText value="#{productView.discount.code}" />
<h:outputLabel value="#{i18n['discount.amountMin']}:" />
<h:inputText value="#{productView.discount.amountMin}" />
<h:outputLabel value="#{i18n['discount.amountMax']}:" />
<h:inputText value="#{productView.discount.amountMax}" />
<h:outputLabel value="#{i18n['discount.maxNum']}:" />
<h:inputText value="#{productView.discount.maxNum}" />
<h:outputLabel value="#{i18n['discount.active']}" />
<h:selectBooleanCheckbox value="#{productView.discount.active}" />
<h:outputLabel value="#{i18n['discount.role']}:" />
<products:manageDiscount commitaction="#{productView.save()}" commitvalue="#{i18n['discount.save']}" />
<h:commandButton id="commitbtn" action="#{productView.saveDiscount()}"
value="#{i18n['discount.save']}" />
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:f="http://java.sun.com/jsf/core">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{productListView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.product.list" />
<ui:define name="content">
<products:list />
<products:list />
</ui:define>
</ui:composition>
</h:body>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<composite:interface>
<composite:attribute name="accountevents" required="true" />
</composite:interface>
<composite:implementation>
<h:form id="accountEventForm">
<h:dataTable border="1" id="ac" value="#{cc.attrs.accountevents}" var="ac">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.productname']}" />
</f:facet>
<h:outputText value="#{ac.product.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.quantity']}" />
</f:facet>
<h:outputText value="#{ac.quantity}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.unitPrice']}" />
</f:facet>
<h:outputText value="#{ac.unitPrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.total']}" />
</f:facet>
<h:outputText value="#{ac.total}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.eventTime']}" />
</f:facet>
<h:outputText value="#{ac.eventTime.time}">
<f:convertDateTime type="both" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.delivered']}" />
</f:facet>
<h:outputText value="#{ac.delivered.time}">
<f:convertDateTime type="both" />
</h:outputText>
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="target" required="true" />
<composite:facet name="errormessage" />
</composite:interface>
<composite:implementation>
<c:choose>
<c:when test='#{sessionHandler.canExecute(cc.attrs.target) }'>
<composite:insertChildren />
</c:when>
<c:otherwise>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
</composite:implementation>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="target" required="true" />
<composite:facet name="errormessage" />
</composite:interface>
<composite:implementation>
<c:choose>
<c:when test='#{sessionHandler.canRead(cc.attrs.target) }'>
<composite:insertChildren />
</c:when>
<c:otherwise>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
</composite:implementation>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="target" required="true" />
<composite:facet name="errormessage" />
</composite:interface>
<composite:implementation>
<c:choose>
<c:when test='#{sessionHandler.canWrite(cc.attrs.target) }'>
<composite:insertChildren />
</c:when>
<c:otherwise>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
</composite:implementation>
</html>
\ No newline at end of file
......@@ -16,9 +16,9 @@
<c:choose>
<c:when test="#{not empty cc.attrs.isOneliner}">
<h:inputText id="linelogin" value="#{authView.login}" />
<h:inputSecret id="linepwd" value="#{authView.password}" />
<h:commandButton id="onelinesubmit" action="#{authView.executeLogin()}" value="#{i18n['login.submit']}" />
<h:inputText styleClass="form" id="linelogin" value="#{authView.login}" />
<h:inputSecret styleClass="form" id="linepwd" value="#{authView.password}" />
<h:commandButton styleClass="button" id="onelinesubmit" action="#{authView.executeLogin()}" value="#{i18n['login.submit']}" />
</c:when>
<c:otherwise>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!