Commit ac499fc7 by Tuomas Riihimäki

Äääää.. En osaa tehdä pieniä committeja.. :)

  - Lisätty EventUser oliolle creator ja createtime kentät HUOM! KANTAMUUTOS!
  - Rajoitettu käyttäjälistausta vain tapahtuman käyttäjiin. Haku toimii koko kannasta.
  - Checkoutjuttuja.
  - SearchPredicate facadejuttuja
1 parent e51e4d76
Showing with 454 additions and 247 deletions
...@@ -64,7 +64,7 @@ public class AccountEventBean implements AccountEventBeanLocal { ...@@ -64,7 +64,7 @@ public class AccountEventBean implements AccountEventBeanLocal {
public void delete(AccountEvent account) { public void delete(AccountEvent account) {
AccountEvent acco = accountfacade.find(account.getId()); AccountEvent acco = accountfacade.find(account.getId());
loggingbean.logMessage(SecurityLogType.accountEvent, permbean.getCurrentUser(), "Deleting AccountEvent '", acco.getProduct().getName(), "' count: '", acco.getQuantity().toString(), "' unitprice: '", acco.getUnitPrice().toString(), "' accouser: '", acco.getUser().getLogin(), "'"); loggingbean.logMessage(SecurityLogType.accountEvent, permbean.getCurrentUser(), "Deleting AccountEvent '", acco.getProduct().getName(), "' count: '", acco.getQuantity().toString(), "' unitprice: '", acco.getUnitPrice().toString(), "' accouser: '", acco.getUser().getUser().getLogin(), "'");
acco.getProduct().getAccountEvents().remove(acco); acco.getProduct().getAccountEvents().remove(acco);
if (acco.getBill() != null) { if (acco.getBill() != null) {
acco.getBill().setAccountEvent(null); acco.getBill().setAccountEvent(null);
......
...@@ -27,7 +27,6 @@ import fi.insomnia.bortal.model.AccountEvent; ...@@ -27,7 +27,6 @@ import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine; import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag; import fi.insomnia.bortal.model.ProductFlag;
...@@ -88,7 +87,7 @@ public class BillBean implements BillBeanLocal { ...@@ -88,7 +87,7 @@ public class BillBean implements BillBeanLocal {
return null; return null;
} }
Bill bill = billFacade.find(id); Bill bill = billFacade.find(id);
IUser currentuser = permbean.getCurrentUser(); EventUser currentuser = permbean.getCurrentUser();
logger.debug("bill {} user {}", bill, currentuser); logger.debug("bill {} user {}", bill, currentuser);
if (bill != null && !currentuser.equals(bill.getUser()) && !permbean.hasPermission(BillPermission.READ_ALL)) { if (bill != null && !currentuser.equals(bill.getUser()) && !permbean.hasPermission(BillPermission.READ_ALL)) {
...@@ -249,7 +248,7 @@ public class BillBean implements BillBeanLocal { ...@@ -249,7 +248,7 @@ public class BillBean implements BillBeanLocal {
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
msg.setSubject(I18n.get("bill.billMarkedPaidMail.subject")); msg.setSubject(I18n.get("bill.billMarkedPaidMail.subject"));
msg.setMessage(I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString())); msg.setMessage(I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString()));
msg.setTo(bill.getUser()); msg.setTo(bill.getUser().getUser());
utilbean.sendMail(msg); utilbean.sendMail(msg);
eventUserFacade.flush(); eventUserFacade.flush();
eventUserFacade.evict(bill.getUser()); eventUserFacade.evict(bill.getUser());
......
...@@ -154,7 +154,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -154,7 +154,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
// user.getPrintedCards().add(pc); // user.getPrintedCards().add(pc);
printedcardfacade.create(pc); printedcardfacade.create(pc);
biggestCard = pc; biggestCard = pc;
logger.info("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.info("User {} has too little power old role {} New role {}", new Object[] { user.getUser().getLogin(), existingPower, newPower });
} else if (existingPower > newPower) { } else if (existingPower > newPower) {
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
LanEventProperty value = eventPropertyFacade.find(eventBean.getCurrentEvent(), LanEventPropertyKey.ADMIN_MAIL); LanEventProperty value = eventPropertyFacade.find(eventBean.getCurrentEvent(), LanEventPropertyKey.ADMIN_MAIL);
...@@ -164,13 +164,13 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -164,13 +164,13 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
msg.setFromAddress(value.getTextvalue()); msg.setFromAddress(value.getTextvalue());
msg.setFromName("Lippukauppa"); msg.setFromName("Lippukauppa");
msg.setToAddress(value.getTextvalue()); msg.setToAddress(value.getTextvalue());
msg.setSubject("User " + user.getLogin() + " has too powerful card!"); msg.setSubject("User " + user.getUser().getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa"); msg.setMessage("User ", user.getUser().getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
mailbean.sendMail(msg); mailbean.sendMail(msg);
logger.info("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.info("User {} has too much power old role {} New role {}", new Object[] { user.getUser().getLogin(), existingPower, newPower });
} }
} else { } else {
logger.info("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.info("User {} has power {} and roles has power {}", new Object[] { user.getUser().getLogin(), existingPower, newPower });
} }
return biggestCard; return biggestCard;
......
...@@ -119,11 +119,15 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal { ...@@ -119,11 +119,15 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal {
String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString(); String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString();
Map<CheckoutFiParam, String> postParams = new HashMap<CheckoutFiParam, String>(); Map<CheckoutFiParam, String> postParams = new HashMap<CheckoutFiParam, String>();
String returnUrl = new StringBuilder("http://").append(BortalLocalContextHolder.getHostname()).append("/LanBortalWeb/checkout/").toString(); String returnUrl = new StringBuilder(BortalLocalContextHolder.isSsl() ? "https://" : "http://")
.append(BortalLocalContextHolder.getHostname())
.append("/LanBortalWeb/checkout/")
.toString();
StringBuilder stamp = new StringBuilder(); StringBuilder stamp = new StringBuilder();
stamp.append(bill.getId()); stamp.append(bill.getId());
stamp.append(STAMP_SPLITCHAR); stamp.append(STAMP_SPLITCHAR);
stamp.append(Calendar.getInstance().getTimeInMillis() / 1000); stamp.append(bill.getSentDate().getTimeInMillis() / 1000);
postParams.put(CheckoutFiParam.STAMP, stamp.toString()); postParams.put(CheckoutFiParam.STAMP, stamp.toString());
postParams.put(CheckoutFiParam.AMOUNT, priceInCents); postParams.put(CheckoutFiParam.AMOUNT, priceInCents);
......
...@@ -51,34 +51,51 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -51,34 +51,51 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
EventUser eventUser = eventUserFacade.findByLogin(username.trim()); EventUser eventUser = eventUserFacade.findByLogin(username.trim());
User user = null;
// Might not have EventUser // Might not have EventUser
if (eventUser == null) { if (eventUser == null) {
User user = userfacade.findByLogin(username.trim()); user = userfacade.findByLogin(username.trim());
} else {
if (user != null) { user = eventUser.getUser();
eventUser = new EventUser(user, eventbean.getCurrentEvent());
eventUserFacade.merge(eventUser);
}
} }
EventUser ret = null; if (user != null) {
if (eventUser != null) {
if (eventUser.isAnonymous()) { if (user.isAnonymous()) {
logger.info("logging in as anonymous!!!"); logger.info("logging in as anonymous!!!");
ret = eventUser; } else if (!user.checkPassword(password)) {
} else if (eventUser.checkPassword(password)) {
ret = eventUser;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, eventUser.getUser(), "Login failed: wrong password for username ", username); secubean.logMessage(SecurityLogType.permissionDenied, eventUser.getUser(), "Login failed: wrong password for username ", username);
eventUser = null;
user = null;
}
if (user != null && eventUser == null)
{
LanEvent event = eventbean.getCurrentEvent();
eventUser = new EventUser(user, event, null);
// eventUser.setCreator(eventUser);
eventUserFacade.create(eventUser);
eventUserFacade.flush();
eventUser.setCreator(eventUser);
} }
} else { } else {
secubean.logMessage(SecurityLogType.permissionDenied, (User) null, "Login failed: Username not found: ", username); secubean.logMessage(SecurityLogType.permissionDenied, (User) null, "Login failed: Username not found: ", username);
} }
return ret; return eventUser;
} }
// public static void foo()
// {
// if (user != null) {
// LanEvent event = eventbean.getCurrentEvent();
// eventUser = new EventUser(user, event, null);
// // eventUser.setCreator(eventUser);
// eventUserFacade.create(eventUser);
// eventUserFacade.flush();
// eventUser.setCreator(eventUser);
// }
// }
@Override @Override
public boolean authenticate(String username, String password) { public boolean authenticate(String username, String password) {
boolean ret = (tryLogin(username, password) != null); boolean ret = (tryLogin(username, password) != null);
...@@ -101,12 +118,12 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -101,12 +118,12 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
roleset.add(SpecialPermission.ANONYMOUS.name()); roleset.add(SpecialPermission.ANONYMOUS.name());
} }
if (!usr.isAnonymous()) { if (!usr.getUser().isAnonymous()) {
roleset.add(SpecialPermission.USER.name()); roleset.add(SpecialPermission.USER.name());
} }
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!! // TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr.isSuperadmin()) { if (usr.getUser().isSuperadmin()) {
for (BortalApplication app : BortalApplication.values()) { for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) { for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName()); roleset.add(perm.getFullName());
...@@ -123,7 +140,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -123,7 +140,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
} }
LanEvent event = eventbean.getCurrentEvent(); LanEvent event = eventbean.getCurrentEvent();
if (event != null && !usr.isAnonymous() && event.getDefaultRole() != null) { if (event != null && !usr.getUser().isAnonymous() && event.getDefaultRole() != null) {
for (ApplicationPermission apperm : event.getDefaultRole().getPermissions()) { for (ApplicationPermission apperm : event.getDefaultRole().getPermissions()) {
roleset.add(apperm.getPermission().getFullName()); roleset.add(apperm.getPermission().getFullName());
} }
......
...@@ -26,7 +26,6 @@ import fi.insomnia.bortal.enums.apps.UserPermission; ...@@ -26,7 +26,6 @@ import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.EventUserFacade; import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Stateless @Stateless
...@@ -157,14 +156,19 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -157,14 +156,19 @@ public class PermissionBean implements PermissionBeanLocal {
// } // }
@Override @Override
public boolean isCurrentUser(IUser user) { public boolean isCurrentUser(User user) {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getLogin()); return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getLogin());
} }
@Override @Override
public boolean isCurrentUser(EventUser user) {
return user != null && isCurrentUser(user.getUser());
}
@Override
public boolean isLoggedIn() { public boolean isLoggedIn() {
return !getAnonEventUser().equals(getCurrentUser()) || getCurrentUser().isSuperadmin(); return !getAnonEventUser().equals(getCurrentUser()) || getCurrentUser().getUser().isSuperadmin();
} }
@Override @Override
...@@ -189,12 +193,12 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -189,12 +193,12 @@ public class PermissionBean implements PermissionBeanLocal {
User user = userfacade.findByLogin(User.ANONYMOUS_LOGINNAME); User user = userfacade.findByLogin(User.ANONYMOUS_LOGINNAME);
if (user == null) if (user == null)
{ {
defaultUser = new EventUser(new User(), eventbean.getCurrentEvent()); defaultUser = new EventUser(new User(), eventbean.getCurrentEvent(), null);
defaultUser.setLogin(User.ANONYMOUS_LOGINNAME); defaultUser.getUser().setLogin(User.ANONYMOUS_LOGINNAME);
defaultUser.setNick(User.ANONYMOUS_LOGINNAME); defaultUser.getUser().setNick(User.ANONYMOUS_LOGINNAME);
} else { } else {
defaultUser = new EventUser(user, eventbean.getCurrentEvent()); defaultUser = new EventUser(user, eventbean.getCurrentEvent(), null);
} }
eventUserFacade.create(defaultUser); eventUserFacade.create(defaultUser);
eventUserFacade.flush(); eventUserFacade.flush();
......
...@@ -41,7 +41,6 @@ import fi.insomnia.bortal.facade.UserFacade; ...@@ -41,7 +41,6 @@ import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.GroupMembership; import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup; import fi.insomnia.bortal.model.PlaceGroup;
...@@ -275,8 +274,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -275,8 +274,8 @@ public class PlaceBean implements PlaceBeanLocal {
if (!p.isReservedFor(user)) { if (!p.isReservedFor(user)) {
throw new BortalCatchableException("Trying to buy place not reserved for that user"); throw new BortalCatchableException("Trying to buy place not reserved for that user");
} }
logger.info("Buying place {} for user {}", p.getName(), user.getLogin()); logger.info("Buying place {} for user {}", p.getName(), user.getUser().getLogin());
GroupMembership gm = buy(p, pg, user); GroupMembership gm = buy(p, pg);
if (!associatedToPlace) if (!associatedToPlace)
{ {
logger.info("Associating buyer {} to place {}", user, gm); logger.info("Associating buyer {} to place {}", user, gm);
...@@ -326,7 +325,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -326,7 +325,7 @@ public class PlaceBean implements PlaceBeanLocal {
if (freePlace == null) { if (freePlace == null) {
throw new EJBException("Could find a place to be reserved...."); throw new EJBException("Could find a place to be reserved....");
} }
GroupMembership gm = buy(freePlace, pg, user); GroupMembership gm = buy(freePlace, pg);
if (!associatedToPlace) if (!associatedToPlace)
{ {
logger.info("Associating buyer {} to place {}", user, gm); logger.info("Associating buyer {} to place {}", user, gm);
...@@ -349,7 +348,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -349,7 +348,7 @@ public class PlaceBean implements PlaceBeanLocal {
return ret; return ret;
} }
private GroupMembership buy(Place p, PlaceGroup pg, IUser user) { private GroupMembership buy(Place p, PlaceGroup pg) {
p.setGroup(pg); p.setGroup(pg);
p.setReleaseTime(null); p.setReleaseTime(null);
// Current user temporarily used at place reservation. When buying // Current user temporarily used at place reservation. When buying
...@@ -451,7 +450,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -451,7 +450,7 @@ public class PlaceBean implements PlaceBeanLocal {
@RolesAllowed(MapPermission.S_BUY_PLACES) @RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean releasePlace(Place place) { public boolean releasePlace(Place place) {
place = placeFacade.find(place.getId()); place = placeFacade.find(place.getId());
IUser user = permbean.getCurrentUser(); EventUser user = permbean.getCurrentUser();
if (place.getGroup() != null || place.getCurrentUser() == null || (!permbean.hasPermission(MapPermission.MANAGE_OTHERS) && !place.getCurrentUser().equals(user))) { if (place.getGroup() != null || place.getCurrentUser() == null || (!permbean.hasPermission(MapPermission.MANAGE_OTHERS) && !place.getCurrentUser().equals(user))) {
return false; return false;
} }
......
...@@ -28,6 +28,7 @@ import fi.insomnia.bortal.facade.PlaceGroupFacade; ...@@ -28,6 +28,7 @@ import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.GroupMembership; import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.PlaceGroup; import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
/** /**
* Session Bean implementation class PlaceGroupBean * Session Bean implementation class PlaceGroupBean
...@@ -164,7 +165,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -164,7 +165,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
reserverLabel.setPosition(300, y + 30); reserverLabel.setPosition(300, y + 30);
reserverLabel.drawOn(page); reserverLabel.drawOn(page);
TextLine reserver = new TextLine(font, new StringBuilder(membership.getPlaceGroup().getCreator().getWholeName()).append(" (").append(membership.getPlaceGroup().getCreator().getNick()).append(")").toString()); User creator = membership.getPlaceGroup().getCreator().getUser();
TextLine reserver = new TextLine(font, new StringBuilder(creator.getWholeName()).append(" (").append(creator.getNick()).append(")").toString());
reserver.setPosition(310, y + 45); reserver.setPosition(310, y + 45);
reserver.drawOn(page); reserver.drawOn(page);
...@@ -172,7 +174,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -172,7 +174,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
assoclabel.setPosition(300, y + 65); assoclabel.setPosition(300, y + 65);
assoclabel.drawOn(page); assoclabel.drawOn(page);
TextLine assoc = new TextLine(font, ((membership.getUser() == null) ? "-----" : new StringBuilder(membership.getUser().getWholeName()).append(" (").append(membership.getUser().getNick()).append(")").toString())); TextLine assoc = new TextLine(font, ((membership.getUser() == null) ? "-----" : new StringBuilder(membership.getUser().getUser().getWholeName()).append(" (").append(membership.getUser().getUser().getNick()).append(")").toString()));
assoc.setPosition(310, y + 80); assoc.setPosition(310, y + 80);
assoc.drawOn(page); assoc.drawOn(page);
......
...@@ -205,10 +205,10 @@ public class UserBean implements UserBeanLocal { ...@@ -205,10 +205,10 @@ public class UserBean implements UserBeanLocal {
userimage.setName(filename); userimage.setName(filename);
userimage.setDescription(description); userimage.setDescription(description);
user.getUserImageList().add(userimage); user.getUser().getUserImageList().add(userimage);
// setting uploaded image as the default. // setting uploaded image as the default.
user.setCurrentImage(userimage); user.getUser().setCurrentImage(userimage);
return userimage; return userimage;
} }
...@@ -224,7 +224,7 @@ public class UserBean implements UserBeanLocal { ...@@ -224,7 +224,7 @@ public class UserBean implements UserBeanLocal {
UserImage ret = null; UserImage ret = null;
if (id == 0 && permbean.isLoggedIn()) { if (id == 0 && permbean.isLoggedIn()) {
ret = permbean.getCurrentUser().getCurrentImage(); ret = permbean.getCurrentUser().getUser().getCurrentImage();
} else { } else {
ret = userimagefacade.find(id); ret = userimagefacade.find(id);
if (ret != null && !permbean.isCurrentUser(ret.getUser()) && permbean.hasPermission(UserPermission.MODIFY)) { if (ret != null && !permbean.isCurrentUser(ret.getUser()) && permbean.hasPermission(UserPermission.MODIFY)) {
...@@ -245,7 +245,7 @@ public class UserBean implements UserBeanLocal { ...@@ -245,7 +245,7 @@ public class UserBean implements UserBeanLocal {
@RolesAllowed(UserPermission.S_CREATE_NEW) @RolesAllowed(UserPermission.S_CREATE_NEW)
public void createNewUser(EventUser user, String password) { public void createNewUser(EventUser user, String password) {
user.resetPassword(password); user.getUser().resetPassword(password);
user.setEvent(eventBean.getCurrentEvent()); user.setEvent(eventBean.getCurrentEvent());
// Tallennetaan olio kantaan... // Tallennetaan olio kantaan...
eventUserFacade.create(user); eventUserFacade.create(user);
...@@ -310,7 +310,7 @@ public class UserBean implements UserBeanLocal { ...@@ -310,7 +310,7 @@ public class UserBean implements UserBeanLocal {
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
public SearchResult<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); return userFacade.searchAllUsers(page, pagesize, sort, search);
} }
// @Override // @Override
...@@ -337,7 +337,7 @@ public class UserBean implements UserBeanLocal { ...@@ -337,7 +337,7 @@ public class UserBean implements UserBeanLocal {
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT)); msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT));
msg.setMessage(MessageFormat.format(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_CONTENT), MessageFormat.format(url, token), creator.getWholeName())); msg.setMessage(MessageFormat.format(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_CONTENT), MessageFormat.format(url, token), creator.getUser().getWholeName()));
msg.setToAddress(invitemail); msg.setToAddress(invitemail);
utilbean.sendMail(msg); utilbean.sendMail(msg);
return true; return true;
...@@ -420,7 +420,7 @@ public class UserBean implements UserBeanLocal { ...@@ -420,7 +420,7 @@ public class UserBean implements UserBeanLocal {
@Override @Override
@RolesAllowed(UserPermission.S_CREATE_NEW) @RolesAllowed(UserPermission.S_CREATE_NEW)
public EventUser createNewUser(User usr) { public EventUser createNewUser(User usr) {
EventUser evu = new EventUser(usr, eventBean.getCurrentEvent()); EventUser evu = new EventUser(usr, eventBean.getCurrentEvent(), permbean.getCurrentUser());
eventUserFacade.create(evu); eventUserFacade.create(evu);
return evu; return evu;
} }
...@@ -458,7 +458,7 @@ public class UserBean implements UserBeanLocal { ...@@ -458,7 +458,7 @@ public class UserBean implements UserBeanLocal {
EventUser ret = eventUserFacade.find(user); EventUser ret = eventUserFacade.find(user);
if (ret == null) if (ret == null)
{ {
ret = new EventUser(user, eventBean.getCurrentEvent()); ret = new EventUser(user, eventBean.getCurrentEvent(), permbean.getCurrentUser());
eventUserFacade.create(ret); eventUserFacade.create(ret);
eventUserFacade.flush(); eventUserFacade.flush();
} }
...@@ -496,4 +496,15 @@ public class UserBean implements UserBeanLocal { ...@@ -496,4 +496,15 @@ public class UserBean implements UserBeanLocal {
return user; return user;
} }
@Override
public SearchResult<User> getEventUsers(int page, int pagesize, String sort, String search) {
if (search == null || search.isEmpty())
{
return userFacade.searchEventUsers(page, pagesize, sort, search);
} else {
return userFacade.searchAllUsers(page, pagesize, sort, search);
}
}
} }
\ No newline at end of file
...@@ -36,16 +36,16 @@ public class UserUtilBean implements UserUtilBeanLocal { ...@@ -36,16 +36,16 @@ public class UserUtilBean implements UserUtilBeanLocal {
@Override @Override
public void convertUsernames() { public void convertUsernames() {
for (EventUser u : userbean.getUsers()) { for (EventUser u : userbean.getUsers()) {
if (u.getLogin().trim().isEmpty()) { if (u.getUser().getLogin().trim().isEmpty()) {
logger.warn("User {} has empty login..."); logger.warn("User {} has empty login...");
continue; continue;
} }
User testU = userfacade.findByLogin(u.getLogin().toLowerCase()); User testU = userfacade.findByLogin(u.getUser().getLogin().toLowerCase());
if (testU == null || testU.equals(u)) { if (testU == null || testU.equals(u)) {
u.setLogin(u.getLogin().toLowerCase()); u.getUser().setLogin(u.getUser().getLogin().toLowerCase());
logger.info("Converted user {}", u.getLogin()); logger.info("Converted user {}", u.getUser().getLogin());
} else { } else {
logger.warn("Could not convert user {}", u.getLogin(), testU.getLogin()); logger.warn("Could not convert user {}", u.getUser().getLogin(), testU.getLogin());
} }
} }
......
...@@ -42,7 +42,7 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> { ...@@ -42,7 +42,7 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> {
return getSingleNullableResult(getEm().createQuery(cq)); return getSingleNullableResult(getEm().createQuery(cq));
} }
public EventUser find(User user) { public EventUser find(User user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<EventUser> cq = cb.createQuery(EventUser.class); CriteriaQuery<EventUser> cq = cb.createQuery(EventUser.class);
...@@ -64,7 +64,7 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> { ...@@ -64,7 +64,7 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> {
eventBean.getCurrentEvent())); eventBean.getCurrentEvent()));
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public EventUser findByBarcode(String barcode) { public EventUser findByBarcode(String barcode) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<EventUser> cq = cb.createQuery(EventUser.class); CriteriaQuery<EventUser> cq = cb.createQuery(EventUser.class);
...@@ -75,7 +75,43 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> { ...@@ -75,7 +75,43 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> {
cb.equal(root.get(PrintedCard_.event), eventBean.getCurrentEvent()) cb.equal(root.get(PrintedCard_.event), eventBean.getCurrentEvent())
); );
return getSingleNullableResult(getEm().createQuery(cq)); return getSingleNullableResult(getEm().createQuery(cq));
} }
// public SearchResult<EventUser> searchUser(int page, int pagesize, String
// sort, String search) {
//
// List<FacadeCallback<EventUser>> callbacks = new
// ArrayList<FacadeCallback<EventUser>>();
// if (sort == null || sort.isEmpty()) {
// callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
// } else {
// callbacks.add(new OrderCallback<EventUser>(false, sort));
// }
//
// if (search == null || search.isEmpty()) {
// callbacks.add(new EventUserEventlimiter(eventBean.getCurrentEvent()));
// }
// callbacks.add(new EventUserSearchCreator(search,
// UserFacade.getAttrlist()));
// return super.searcher(page, pagesize, callbacks);
//
// // return this.search(page, pagesize, query, NAMEFIELDS, sort);
// }
//
// public class EventUserEventlimiter implements FacadeCallback<EventUser> {
//
// private LanEvent ev;
//
// public EventUserEventlimiter(LanEvent currentEvent) {
// ev = currentEvent;
// }
//
// @Override
// public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<EventUser>
// root, List<Predicate> predicates) {
// predicates.add(cb.equal(root.get(EventUser), ev));
// }
// }
} }
...@@ -178,13 +178,19 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -178,13 +178,19 @@ public abstract class GenericFacade<C extends ModelInterface> {
return new SearchResult<C>(listQ.getResultList(), countQ.getSingleResult()); return new SearchResult<C>(listQ.getResultList(), countQ.getSingleResult());
} }
private Root<C> searchCallbacks(CriteriaQuery<?> cq, List<FacadeCallback<C>> list) { protected Root<C> searchCallbacks(CriteriaQuery<?> cq, List<FacadeCallback<C>> list) {
return searchCallbacks(cq, list, getEntityClass());
}
protected <T extends ModelInterface> Root<T> searchCallbacks(CriteriaQuery<?> cq, List<FacadeCallback<T>> list, Class<T> clazz) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
Root<C> root = cq.from(getEntityClass()); Root<T> root = cq.from(clazz);
ArrayList<Predicate> predicates = new ArrayList<Predicate>(); ArrayList<Predicate> predicates = new ArrayList<Predicate>();
for (FacadeCallback<C> fc : list) { for (FacadeCallback<T> fc : list) {
fc.exec(cb, cq, root, predicates); if (fc != null) {
fc.exec(cb, cq, root, predicates);
}
} }
if (!predicates.isEmpty()) { if (!predicates.isEmpty()) {
Predicate[] preds = predicates.toArray(new Predicate[predicates.size()]); Predicate[] preds = predicates.toArray(new Predicate[predicates.size()]);
......
...@@ -4,18 +4,27 @@ import java.util.ArrayList; ...@@ -4,18 +4,27 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.facade.callbacks.OrderCallback; import fi.insomnia.bortal.facade.callbacks.OrderCallback;
import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator; import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.User_; import fi.insomnia.bortal.model.User_;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
...@@ -28,7 +37,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -28,7 +37,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
private static List<SingularAttribute<User, String>> SEARCHATTRS; private static List<SingularAttribute<User, String>> SEARCHATTRS;
private List<SingularAttribute<User, String>> getAttrlist() { static List<SingularAttribute<User, String>> getAttrlist() {
if (SEARCHATTRS == null) if (SEARCHATTRS == null)
{ {
ArrayList<SingularAttribute<User, String>> buildAttrs = new ArrayList<SingularAttribute<User, String>>(); ArrayList<SingularAttribute<User, String>> buildAttrs = new ArrayList<SingularAttribute<User, String>>();
...@@ -46,6 +55,9 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -46,6 +55,9 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return SEARCHATTRS; return SEARCHATTRS;
} }
@EJB
private EventBeanLocal eventBean;
// final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", // final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname",
// "email" }; // "email" };
...@@ -92,23 +104,17 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -92,23 +104,17 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return super.merge(user); return super.merge(user);
} }
public SearchResult<User> searchUser(int page, int pagesize, String sort, String search) { public SearchResult<User> searchAllUsers(int page, int pagesize, String sort, String search) {
OrderCallback<User> orderCall = null; List<FacadeCallback<User>> callbacks = new ArrayList<FacadeCallback<User>>();
if (sort == null || sort.isEmpty()) { if (sort == null || sort.isEmpty()) {
orderCall = new OrderCallback<User>(false, User_.id); callbacks.add(new OrderCallback<User>(false, User_.id));
} } else {
else callbacks.add(new OrderCallback<User>(false, sort));
{
orderCall = new OrderCallback<User>(false, sort);
} }
callbacks.add(new StringSearchPredicateCreator<User>(search, getAttrlist()));
return super.searcher(page, pagesize, return super.searcher(page, pagesize, callbacks);
new StringSearchPredicateCreator<User>(search, getAttrlist()),
orderCall
);
// return this.search(page, pagesize, query, NAMEFIELDS, sort); // return this.search(page, pagesize, query, NAMEFIELDS, sort);
} }
...@@ -139,7 +145,47 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -139,7 +145,47 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class); CriteriaQuery<User> cq = cb.createQuery(User.class);
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
}
public SearchResult<User> searchEventUsers(int page, int pagesize, String sort, String search)
{
ArrayList<FacadeCallback<EventUser>> callbacks = new ArrayList<FacadeCallback<EventUser>>();
callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
callbacks.add(new Eventlimiter(eventBean.getCurrentEvent()));
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> listCQuery = cb.createQuery(User.class);
CriteriaQuery<Long> countCQuery = cb.createQuery(Long.class);
Root<EventUser> listRoot = searchCallbacks(listCQuery, callbacks, EventUser.class);
Root<EventUser> countRoot = searchCallbacks(countCQuery, callbacks, EventUser.class);
listCQuery.select(listRoot.join(EventUser_.user));
countCQuery.select(cb.count(countRoot.get(EventUser_.user)));
TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<User> listQ = getEm().createQuery(listCQuery);
if (pagesize > 0) {
listQ.setFirstResult(page * pagesize);
listQ.setMaxResults(pagesize);
}
return new SearchResult<User>(listQ.getResultList(), countQ.getSingleResult());
} }
public class Eventlimiter implements FacadeCallback<EventUser> {
private LanEvent ev;
public Eventlimiter(LanEvent currentEvent) {
ev = currentEvent;
}
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<EventUser> root, List<Predicate> predicates) {
predicates.add(cb.equal(root.get(EventUser_.event), ev));
}
}
} }
...@@ -5,8 +5,8 @@ import java.util.List; ...@@ -5,8 +5,8 @@ import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
...@@ -26,7 +26,7 @@ public class AndPredicateCreator<A, T extends ModelInterface> implements FacadeC ...@@ -26,7 +26,7 @@ public class AndPredicateCreator<A, T extends ModelInterface> implements FacadeC
} }
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<T> root, List<Predicate> predicates) {
if (searchval == null || attributes == null || attributes.isEmpty()) { if (searchval == null || attributes == null || attributes.isEmpty()) {
return; return;
} }
......
package fi.insomnia.bortal.facade.callbacks;
import java.util.List;
import javax.persistence.criteria.Path;
import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.User;
public class EventUserSearchCreator extends PathStringSearchPredicateCreator<EventUser, User> {
public EventUserSearchCreator(String search, List<SingularAttribute<User, String>> attrs) {
super(search, attrs);
}
public EventUserSearchCreator(String search, SingularAttribute<User, String> from) {
super(search, from);
}
@Override
protected Path<User> getPath(Path<EventUser> root) {
return root.get(EventUser_.user);
}
}
...@@ -4,12 +4,15 @@ import java.util.List; ...@@ -4,12 +4,15 @@ import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface FacadeCallback<C extends ModelInterface> { public interface FacadeCallback<C extends ModelInterface> {
void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<C> root, List<Predicate> predicates); // void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<C> root,
// List<Predicate> predicates);
void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<C> root, List<Predicate> predicates);
} }
...@@ -4,8 +4,8 @@ import java.util.List; ...@@ -4,8 +4,8 @@ import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -24,7 +24,7 @@ public class OrPredicateCreator<A, T extends ModelInterface> implements FacadeCa ...@@ -24,7 +24,7 @@ public class OrPredicateCreator<A, T extends ModelInterface> implements FacadeCa
} }
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<T> root, List<Predicate> predicates) {
if (searchstr == null || attributes == null || attributes.isEmpty()) { if (searchstr == null || attributes == null || attributes.isEmpty()) {
return; return;
} }
......
...@@ -6,7 +6,6 @@ import javax.persistence.criteria.CriteriaBuilder; ...@@ -6,7 +6,6 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path; import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
...@@ -30,7 +29,7 @@ public class OrderCallback<T extends ModelInterface> implements FacadeCallback<T ...@@ -30,7 +29,7 @@ public class OrderCallback<T extends ModelInterface> implements FacadeCallback<T
} }
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<T> root, List<Predicate> predicates) {
Class<?> rettype = cq.getResultType(); Class<?> rettype = cq.getResultType();
// Check if returntype is entity or are we for example counting results // Check if returntype is entity or are we for example counting results
......
package fi.insomnia.bortal.facade.callbacks;
import java.util.Collections;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class PathStringSearchPredicateCreator<T extends ModelInterface, D extends ModelInterface> implements FacadeCallback<T> {
private static final String WILDCARD = "%";
private String searchstr = null;
private List<SingularAttribute<D, String>> attributes = null;
public PathStringSearchPredicateCreator(String search, List<SingularAttribute<D, String>> attrs) {
if (addSearch(search)) {
attributes = attrs;
}
}
public PathStringSearchPredicateCreator(String search, SingularAttribute<D, String> from) {
if (addSearch(search)) {
attributes = Collections.singletonList(from);
}
}
private boolean addSearch(String search) {
if (search != null) {
search = search.trim().toLowerCase();
if (!search.isEmpty()) {
searchstr = new StringBuilder().append(WILDCARD).append(search).append(WILDCARD).toString();
return true;
}
}
searchstr = null;
return false;
}
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<T> path, List<Predicate> predicates) {
if (searchstr == null || attributes == null || attributes.isEmpty()) {
return;
}
Path<D> entityPath = getPath(path);
for (String splitSearch : searchstr.split(" "))
{
splitSearch = splitSearch.trim();
if (splitSearch.isEmpty())
continue;
splitSearch = new StringBuilder().append(WILDCARD).append(splitSearch).append(WILDCARD).toString();
Predicate[] preds = new Predicate[attributes.size()];
int i = 0;
for (SingularAttribute<D, String> attr : attributes) {
preds[i++] = cb.like(cb.lower(entityPath.get(attr)), splitSearch);
}
predicates.add(cb.or(preds));
}
}
protected abstract Path<D> getPath(Path<T> root);
}
package fi.insomnia.bortal.facade.callbacks; package fi.insomnia.bortal.facade.callbacks;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.Path;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class StringSearchPredicateCreator<T extends ModelInterface> implements FacadeCallback<T> { public class StringSearchPredicateCreator<T extends ModelInterface> extends PathStringSearchPredicateCreator<T, T> {
private static final String WILDCARD = "%";
private String searchstr = null;
private List<SingularAttribute<T, String>> attributes = null;
public StringSearchPredicateCreator(String search, List<SingularAttribute<T, String>> attrs) { public StringSearchPredicateCreator(String search, List<SingularAttribute<T, String>> attrs) {
if (addSearch(search)) { super(search, attrs);
attributes = attrs;
}
} }
public StringSearchPredicateCreator(String search, SingularAttribute<T, String> from) { public StringSearchPredicateCreator(String search, SingularAttribute<T, String> from) {
if (addSearch(search)) { super(search, from);
attributes = Collections.singletonList(from);
}
}
private boolean addSearch(String search) {
if (search != null) {
search = search.trim().toLowerCase();
if (!search.isEmpty()) {
searchstr = new StringBuilder().append(WILDCARD).append(search).append(WILDCARD).toString();
return true;
}
}
searchstr = null;
return false;
} }
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { protected Path<T> getPath(Path<T> root) {
if (searchstr == null || attributes == null || attributes.isEmpty()) { return root;
return;
}
for (String splitSearch : searchstr.split(" "))
{
splitSearch = new StringBuilder().append(WILDCARD).append(splitSearch.trim()).append(WILDCARD).toString();
Predicate[] preds = new Predicate[attributes.size()];
int i = 0;
for (SingularAttribute<T, String> attr : attributes) {
preds[i++] = cb.like(cb.lower(root.get(attr)), splitSearch);
}
predicates.add(cb.or(preds));
}
} }
} }
...@@ -5,7 +5,7 @@ import javax.resource.spi.IllegalStateException; ...@@ -5,7 +5,7 @@ import javax.resource.spi.IllegalStateException;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser; import fi.insomnia.bortal.model.User;
@Local @Local
public interface PermissionBeanLocal { public interface PermissionBeanLocal {
...@@ -16,8 +16,6 @@ public interface PermissionBeanLocal { ...@@ -16,8 +16,6 @@ public interface PermissionBeanLocal {
boolean isLoggedIn(); boolean isLoggedIn();
boolean isCurrentUser(IUser thisuser);
// boolean fatalPermission(IAppPermission perm, Object... failmessage); // boolean fatalPermission(IAppPermission perm, Object... failmessage);
// throws PermissionDeniedException; // throws PermissionDeniedException;
...@@ -37,6 +35,10 @@ public interface PermissionBeanLocal { ...@@ -37,6 +35,10 @@ public interface PermissionBeanLocal {
EventUser getAnonEventUser(); EventUser getAnonEventUser();
boolean isCurrentUser(User user);
boolean isCurrentUser(EventUser user);
// boolean hasPermission(String perm); // boolean hasPermission(String perm);
} }
...@@ -19,6 +19,8 @@ public interface UserBeanLocal { ...@@ -19,6 +19,8 @@ public interface UserBeanLocal {
SearchResult<User> getUsers(int page, int pagesize, String sort, String search); SearchResult<User> getUsers(int page, int pagesize, String sort, String search);
SearchResult<User> getEventUsers(int page, int pagesize, String sort, String search);
EventUser mergeChanges(EventUser user); EventUser mergeChanges(EventUser user);
UserImage uploadImage(EventUser user, String contentType, byte[] image, String filename, String description); UserImage uploadImage(EventUser user, String contentType, byte[] image, String filename, String description);
...@@ -65,7 +67,7 @@ public interface UserBeanLocal { ...@@ -65,7 +67,7 @@ public interface UserBeanLocal {
EventUser getEventUser(User user); EventUser getEventUser(User user);
EventUser validateUser(String username, String password); EventUser validateUser(String username, String password);
EventUser getUserByBarcode(String barcode); EventUser getUserByBarcode(String barcode);
} }
...@@ -10,6 +10,7 @@ public class BortalLocalContextHolder { ...@@ -10,6 +10,7 @@ public class BortalLocalContextHolder {
private static final ThreadLocal<BortalLocalContextHolder> THREAD_WITH_CONTEXT = new ThreadLocal<BortalLocalContextHolder>(); private static final ThreadLocal<BortalLocalContextHolder> THREAD_WITH_CONTEXT = new ThreadLocal<BortalLocalContextHolder>();
private String hostname; private String hostname;
private boolean ssl = false;
private Integer hostnameId; private Integer hostnameId;
private final Map<IAppPermission, Boolean> rightcache = new HashMap<IAppPermission, Boolean>(); private final Map<IAppPermission, Boolean> rightcache = new HashMap<IAppPermission, Boolean>();
...@@ -84,4 +85,12 @@ public class BortalLocalContextHolder { ...@@ -84,4 +85,12 @@ public class BortalLocalContextHolder {
getThread().hostnameId = id; getThread().hostnameId = id;
} }
public static boolean isSsl() {
return getThread().ssl;
}
public static void setSsl(boolean ssl) {
getThread().ssl = ssl;
}
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ import java.io.UnsupportedEncodingException; ...@@ -5,7 +5,7 @@ import java.io.UnsupportedEncodingException;
import javax.mail.internet.InternetAddress; import javax.mail.internet.InternetAddress;
import fi.insomnia.bortal.model.IUser; import fi.insomnia.bortal.model.User;
public class MailMessage implements Serializable { public class MailMessage implements Serializable {
/** /**
...@@ -99,7 +99,7 @@ public class MailMessage implements Serializable { ...@@ -99,7 +99,7 @@ public class MailMessage implements Serializable {
return charset; return charset;
} }
public void setTo(IUser user) { public void setTo(User user) {
setToName(user.getWholeName()); setToName(user.getWholeName());
setToAddress(user.getEmail()); setToAddress(user.getEmail());
......
...@@ -193,9 +193,9 @@ public class Bill extends GenericEntity { ...@@ -193,9 +193,9 @@ public class Bill extends GenericEntity {
public Bill(LanEvent event, EventUser user) { public Bill(LanEvent event, EventUser user) {
this(event); this(event);
this.setUser(user); this.setUser(user);
this.setAddr1(user.getFirstnames() + " " + user.getLastname()); this.setAddr1(user.getUser().getFirstnames() + " " + user.getUser().getLastname());
this.setAddr2(user.getAddress()); this.setAddr2(user.getUser().getAddress());
this.setAddr3(user.getZip() + " " + user.getTown()); this.setAddr3(user.getUser().getZip() + " " + user.getUser().getTown());
} }
public Bill(LanEvent event) { public Bill(LanEvent event) {
......
...@@ -13,6 +13,7 @@ import java.util.Date; ...@@ -13,6 +13,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
...@@ -21,6 +22,8 @@ import javax.persistence.ManyToOne; ...@@ -21,6 +22,8 @@ import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OrderBy; import javax.persistence.OrderBy;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking; import org.eclipse.persistence.annotations.OptimisticLocking;
...@@ -31,7 +34,7 @@ import fi.insomnia.bortal.enums.Gender; ...@@ -31,7 +34,7 @@ import fi.insomnia.bortal.enums.Gender;
@Entity @Entity
@Table(name = "event_users", uniqueConstraints = @UniqueConstraint(columnNames = { EventUser.USER_ID_COLUMN, EventUser.EVENT_ID_COLUMN })) @Table(name = "event_users", uniqueConstraints = @UniqueConstraint(columnNames = { EventUser.USER_ID_COLUMN, EventUser.EVENT_ID_COLUMN }))
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class EventUser extends GenericEntity implements IUser { public class EventUser extends GenericEntity {
protected static final String USER_ID_COLUMN = "user_id"; protected static final String USER_ID_COLUMN = "user_id";
protected static final String EVENT_ID_COLUMN = "event_id"; protected static final String EVENT_ID_COLUMN = "event_id";
...@@ -39,6 +42,7 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -39,6 +42,7 @@ public class EventUser extends GenericEntity implements IUser {
@ManyToOne(cascade = { PERSIST, MERGE, REFRESH, DETACH }) @ManyToOne(cascade = { PERSIST, MERGE, REFRESH, DETACH })
@JoinColumn(nullable = false, name = USER_ID_COLUMN) @JoinColumn(nullable = false, name = USER_ID_COLUMN)
private User user; private User user;
@ManyToOne @ManyToOne
@JoinColumn(nullable = false, name = EVENT_ID_COLUMN) @JoinColumn(nullable = false, name = EVENT_ID_COLUMN)
private LanEvent event; private LanEvent event;
...@@ -93,13 +97,39 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -93,13 +97,39 @@ public class EventUser extends GenericEntity implements IUser {
@OneToMany(mappedBy = "user") @OneToMany(mappedBy = "user")
private List<PollAnswer> pollAnswers; private List<PollAnswer> pollAnswers;
@ManyToOne()
@JoinColumn(name = "creator")
private EventUser creator;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createtime", nullable = false, updatable = false)
private Date eventuserCreated;
public EventUser getCreator() {
return creator;
}
public void setCreator(EventUser creator) {
this.creator = creator;
}
public Date getEventuserCreated() {
return eventuserCreated;
}
public void setEventuserCreated(Date eventuserCreated) {
this.eventuserCreated = eventuserCreated;
}
public EventUser() public EventUser()
{ {
super(); super();
} }
public EventUser(User usr, LanEvent evnt) { public EventUser(User usr, LanEvent evnt, EventUser usercreator) {
super(); super();
this.eventuserCreated = new Date();
this.creator = usercreator;
this.user = usr; this.user = usr;
this.event = evnt; this.event = evnt;
} }
...@@ -224,222 +254,178 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -224,222 +254,178 @@ public class EventUser extends GenericEntity implements IUser {
this.pollAnswers = pollAnswers; this.pollAnswers = pollAnswers;
} }
@Override
public void setCreated(Calendar created) { public void setCreated(Calendar created) {
user.setCreated(created); user.setCreated(created);
} }
@Override
public boolean getActive() { public boolean getActive() {
return user.getActive(); return user.getActive();
} }
@Override
public void setActive(boolean active) { public void setActive(boolean active) {
user.setActive(active); user.setActive(active);
} }
@Override
public String getPassword() { public String getPassword() {
return user.getPassword(); return user.getPassword();
} }
@Override
public void setPassword(String password) { public void setPassword(String password) {
user.setPassword(password); user.setPassword(password);
} }
@Override
public String getWholeName() { public String getWholeName() {
return user.getWholeName(); return user.getWholeName();
} }
@Override
public String getLastname() { public String getLastname() {
return user.getLastname(); return user.getLastname();
} }
@Override
public void setLastname(String lastname) { public void setLastname(String lastname) {
user.setLastname(lastname); user.setLastname(lastname);
} }
@Override
public String getFirstnames() { public String getFirstnames() {
return user.getFirstnames(); return user.getFirstnames();
} }
@Override
public void setFirstnames(String firstnames) { public void setFirstnames(String firstnames) {
user.setFirstnames(firstnames); user.setFirstnames(firstnames);
} }
@Override
public Date getBirthday() { public Date getBirthday() {
return user.getBirthday(); return user.getBirthday();
} }
@Override
public void setBirthday(Date birthday) { public void setBirthday(Date birthday) {
user.setBirthday(birthday); user.setBirthday(birthday);
} }
@Override
public String getNick() { public String getNick() {
return user.getNick(); return user.getNick();
} }
@Override
public void setNick(String nick) { public void setNick(String nick) {
user.setNick(nick); user.setNick(nick);
} }
@Override
public String getEmail() { public String getEmail() {
return user.getEmail(); return user.getEmail();
} }
@Override
public void setEmail(String email) { public void setEmail(String email) {
user.setEmail(email); user.setEmail(email);
} }
@Override
public String getAddress() { public String getAddress() {
return user.getAddress(); return user.getAddress();
} }
@Override
public void setAddress(String address) { public void setAddress(String address) {
user.setAddress(address); user.setAddress(address);
} }
@Override
public String getZip() { public String getZip() {
return user.getZip(); return user.getZip();
} }
@Override
public void setZip(String zip) { public void setZip(String zip) {
user.setZip(zip); user.setZip(zip);
} }
@Override
public String getTown() { public String getTown() {
return user.getTown(); return user.getTown();
} }
@Override
public void setTown(String town) { public void setTown(String town) {
user.setTown(town); user.setTown(town);
} }
@Override
public String getPhone() { public String getPhone() {
return user.getPhone(); return user.getPhone();
} }
@Override
public void setPhone(String phone) { public void setPhone(String phone) {
user.setPhone(phone); user.setPhone(phone);
} }
@Override
public String getLogin() { public String getLogin() {
return user.getLogin(); return user.getLogin();
} }
@Override
public void setLogin(String login) { public void setLogin(String login) {
user.setLogin(login); user.setLogin(login);
} }
@Override
public List<UserImage> getUserImageList() { public List<UserImage> getUserImageList() {
return user.getUserImageList(); return user.getUserImageList();
} }
@Override
public void setUserImageList(List<UserImage> userImageList) { public void setUserImageList(List<UserImage> userImageList) {
user.setUserImageList(userImageList); user.setUserImageList(userImageList);
} }
@Override
public String getConfirmHash() { public String getConfirmHash() {
return user.getConfirmHash(); return user.getConfirmHash();
} }
@Override
public void setConfirmHash(String confirmHash) { public void setConfirmHash(String confirmHash) {
user.setConfirmHash(confirmHash); user.setConfirmHash(confirmHash);
} }
@Override
public Calendar getConfirmTime() { public Calendar getConfirmTime() {
return user.getConfirmTime(); return user.getConfirmTime();
} }
@Override
public void setConfirmTime(Calendar confirmTime) { public void setConfirmTime(Calendar confirmTime) {
user.setConfirmTime(confirmTime); user.setConfirmTime(confirmTime);
} }
@Override
public void resetPassword(String password) { public void resetPassword(String password) {
user.resetPassword(password); user.resetPassword(password);
} }
@Override
public boolean checkPassword(String plainPassword) { public boolean checkPassword(String plainPassword) {
return user.checkPassword(plainPassword); return user.checkPassword(plainPassword);
} }
@Override
public void setSuperadmin(boolean superadmin) { public void setSuperadmin(boolean superadmin) {
user.setSuperadmin(superadmin); user.setSuperadmin(superadmin);
} }
@Override
public boolean isSuperadmin() { public boolean isSuperadmin() {
return user.isSuperadmin(); return user.isSuperadmin();
} }
@Override
public void setPostalTown(String postalTown) { public void setPostalTown(String postalTown) {
user.setPostalTown(postalTown); user.setPostalTown(postalTown);
} }
@Override
public String getPostalTown() { public String getPostalTown() {
return user.getPostalTown(); return user.getPostalTown();
} }
@Override
public void setGender(Gender gender) { public void setGender(Gender gender) {
user.setGender(gender); user.setGender(gender);
} }
@Override
public Gender getGender() { public Gender getGender() {
return user.getGender(); return user.getGender();
} }
@Override
public void setCurrentImage(UserImage currentImage) { public void setCurrentImage(UserImage currentImage) {
user.setCurrentImage(currentImage); user.setCurrentImage(currentImage);
} }
@Override
public UserImage getCurrentImage() { public UserImage getCurrentImage() {
return user.getCurrentImage(); return user.getCurrentImage();
} }
@Override
public boolean isAnonymous() { public boolean isAnonymous() {
return user.isAnonymous(); return user.isAnonymous();
} }
@Override
public Calendar getCreated() { public Calendar getCreated() {
return user.getCreated(); return user.getCreated();
} }
......
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import java.util.Date;
import javax.annotation.Generated; import javax.annotation.Generated;
import javax.persistence.metamodel.ListAttribute; import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-05-13T00:35:53.118+0300") @Generated(value="Dali", date="2012-09-09T05:12:41.679+0300")
@StaticMetamodel(EventUser.class) @StaticMetamodel(EventUser.class)
public class EventUser_ extends GenericEntity_ { public class EventUser_ extends GenericEntity_ {
public static volatile SingularAttribute<EventUser, User> user; public static volatile SingularAttribute<EventUser, User> user;
...@@ -23,4 +24,6 @@ public class EventUser_ extends GenericEntity_ { ...@@ -23,4 +24,6 @@ public class EventUser_ extends GenericEntity_ {
public static volatile ListAttribute<EventUser, Bill> bills; public static volatile ListAttribute<EventUser, Bill> bills;
public static volatile ListAttribute<EventUser, AccountEvent> soldItems; public static volatile ListAttribute<EventUser, AccountEvent> soldItems;
public static volatile ListAttribute<EventUser, PollAnswer> pollAnswers; public static volatile ListAttribute<EventUser, PollAnswer> pollAnswers;
public static volatile SingularAttribute<EventUser, EventUser> creator;
public static volatile SingularAttribute<EventUser, Date> eventuserCreated;
} }
...@@ -38,7 +38,7 @@ public class User extends GenericEntity implements IUser { ...@@ -38,7 +38,7 @@ public class User extends GenericEntity implements IUser {
public static final String ANONYMOUS_LOGINNAME = "anonymous"; public static final String ANONYMOUS_LOGINNAME = "anonymous";
private static final long serialVersionUID = -1632200627103418206L; private static final long serialVersionUID = -1632200627103418206L;
@Column(name = "created", nullable = false) @Column(name = "created", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar created = Calendar.getInstance(); private Calendar created = Calendar.getInstance();
......
...@@ -5,7 +5,6 @@ import java.util.TimeZone; ...@@ -5,7 +5,6 @@ import java.util.TimeZone;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -14,10 +13,9 @@ import org.slf4j.LoggerFactory; ...@@ -14,10 +13,9 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder; import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.IUser; import fi.insomnia.bortal.model.EventUser;
@Named() @Named()
@RequestScoped @RequestScoped
...@@ -26,11 +24,11 @@ public class SessionHandler { ...@@ -26,11 +24,11 @@ public class SessionHandler {
private static final Logger logger = LoggerFactory private static final Logger logger = LoggerFactory
.getLogger(SessionHandler.class); .getLogger(SessionHandler.class);
//@Inject // @Inject
//private HttpServletRequest httprequest; // private HttpServletRequest httprequest;
//@EJB // @EJB
//private RoleBeanLocal rolebean; // private RoleBeanLocal rolebean;
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
...@@ -45,14 +43,14 @@ public class SessionHandler { ...@@ -45,14 +43,14 @@ public class SessionHandler {
public String getLocale() { public String getLocale() {
// TODO: Locale selection code missing // TODO: Locale selection code missing
// return "en_ST_v7"; // return "en_ST_v7";
//return "fi_IN_XIII"; // return "fi_IN_XIII";
return "fi_FI"; return "fi_FI";
} }
public String getLayout() { public String getLayout() {
// TODO: layout selection code missing!! // TODO: layout selection code missing!!
// return "stream1"; // return "stream1";
//return "insomnia2"; // return "insomnia2";
return "default"; return "default";
} }
...@@ -81,11 +79,11 @@ public class SessionHandler { ...@@ -81,11 +79,11 @@ public class SessionHandler {
} }
public boolean isSuperadmin() { public boolean isSuperadmin() {
return permbean.getCurrentUser().isSuperadmin(); return permbean.getCurrentUser().getUser().isSuperadmin();
} }
public IUser getCurrentUser() { public EventUser getCurrentUser() {
return permbean.getCurrentUser(); return permbean.getCurrentUser();
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
<h:inputSecret id="gridPwd" value="#{authView.password}" /> <h:inputSecret id="gridPwd" value="#{authView.password}" />
</h:panelGrid> </h:panelGrid>
<h:commandButton id="gridsubmit" action="#{authView.executeLogin()}" value="#{i18n['login.submit']}" /> <h:commandButton id="gridsubmit" actionListener="#{authView.executeLogin()}" value="#{i18n['login.submit']}" />
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
<f:ajax render="@form" /> <f:ajax render="@form" />
</h:commandButton> </h:commandButton>
<h:inputText size="4" id="cartcount" value="#{cart.count}"> <h:inputText size="4" id="cartcount" value="#{cart.count}">
<f:convertNumber maxIntegerDigits="2" minFractionDigits="0"/>
<f:ajax render="@form" event="valueChange" listener="#{productShopView.updateCartLimits}"/> <f:ajax render="@form" event="valueChange" listener="#{productShopView.updateCartLimits}"/>
</h:inputText> </h:inputText>
<h:commandButton action="#{productShopView.add(1)}" value="#{i18n['productshop.plusOne']}"> <h:commandButton action="#{productShopView.add(1)}" value="#{i18n['productshop.plusOne']}">
......
...@@ -17,12 +17,14 @@ ...@@ -17,12 +17,14 @@
<h:outputText value="#{i18n['nasty.user']}" /> <h:outputText value="#{i18n['nasty.user']}" />
</f:facet> </f:facet>
<ui:include src="form.xhtml" /> <ui:include src="form.xhtml" />
<h:commandButton rendered="#{roleView.canWriteRoles()}" id="saverole" value="#{i18n['save']}" action="#{roleView.save}" /> <h:commandButton rendered="#{roleView.canWriteRoles()}" id="saverole" value="#{i18n['roleView.save']}" action="#{roleView.save}" />
</h:form> </h:form>
</p> </p>
<h2>#{i18n['role.permissionheader']}</h2>
<p> <p>
<h:form> <h:form id="permissionform">
<h:commandButton id="save" value="#{i18n['role.savePermissions']}" action="#{roleView.savePermissions}" />
<h:dataTable border="1" id="bortalApps" value="#{roleView.rolePermissions}" var="bapp"> <h:dataTable border="1" id="bortalApps" value="#{roleView.rolePermissions}" var="bapp">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
...@@ -37,7 +39,7 @@ ...@@ -37,7 +39,7 @@
<h:outputText value="#{i18n[bapp.key]}" /> <h:outputText value="#{i18n[bapp.key]}" />
</h:column> </h:column>
<h:column> <h:column>
<h:selectManyCheckbox layout="pageDirection" value="#{bapp.selected}"> <h:selectManyCheckbox id="permissions" layout="pageDirection" value="#{bapp.selected}">
<f:selectItems value="#{bapp.permissions}" var="per" itemLabel="#{i18n[per.i18nKey]}" /> <f:selectItems value="#{bapp.permissions}" var="per" itemLabel="#{i18n[per.i18nKey]}" />
</h:selectManyCheckbox> </h:selectManyCheckbox>
<!-- <ui:repeat id="permDescs" var="perm" value="#{bapp.permissions}"> --> <!-- <ui:repeat id="permDescs" var="perm" value="#{bapp.permissions}"> -->
......
...@@ -88,6 +88,9 @@ public class HostnameFilter implements Filter { ...@@ -88,6 +88,9 @@ public class HostnameFilter implements Filter {
// httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME, // httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME,
// hostname); // hostname);
String proto = url.substring(0, 5).toLowerCase();
boolean ssl = proto.equals("https");
BortalLocalContextHolder.setSsl(ssl);
BortalLocalContextHolder.setHostname(hostname); BortalLocalContextHolder.setHostname(hostname);
BortalLocalContextHolder.setInDevelopmentMode(developmentMode); BortalLocalContextHolder.setInDevelopmentMode(developmentMode);
......
...@@ -126,7 +126,7 @@ public class SessionHandler { ...@@ -126,7 +126,7 @@ public class SessionHandler {
} }
public boolean isSuperadmin() { public boolean isSuperadmin() {
return permbean.getCurrentUser().isSuperadmin(); return permbean.getCurrentUser().getUser().isSuperadmin();
} }
......
...@@ -432,16 +432,17 @@ resetMail.username = Username ...@@ -432,16 +432,17 @@ resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password. resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent resetmailSent.header = Email sent
role.cardtemplate = Cardtemplate role.cardtemplate = Cardtemplate
role.create = Create role role.create = Create role
role.description = Description role.description = Description
role.edit = Edit role.edit = Edit
role.edit.save = Save role.edit.save = Save
role.execute = (X) role.execute = (X)
role.name = Name role.name = Name
role.parents = Parents role.parents = Parents
role.read = (R) role.permissionheader = Role permissions
role.write = (W) role.read = (R)
role.write = (W)
sendPicture.header = S sendPicture.header = S
......
...@@ -421,14 +421,14 @@ resetMail.username = K\u00E4ytt\u00E4j\u00E4tunnus ...@@ -421,14 +421,14 @@ resetMail.username = K\u00E4ytt\u00E4j\u00E4tunnus
resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan. resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan.
resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty
role.cardtemplate = Korttipohja role.cardtemplate = Korttipohja
role.create = Luo rooli role.create = Luo rooli
role.description = Kuvaus role.description = Kuvaus
role.edit = Muokkaa role.edit = Muokkaa
role.edit.save = Tallenna role.edit.save = Tallenna
role.name = Nimi role.name = Nimi
role.parents = Periytyy role.parents = Periytyy
role.savePermissions = Tallenna oikeudet role.savePermissions = Tallenna oikeudet
sendPicture.header = L\u00E4het\u00E4 kuva sendPicture.header = L\u00E4het\u00E4 kuva
......
...@@ -88,7 +88,7 @@ public class UserCardServlet extends GenericImageServlet { ...@@ -88,7 +88,7 @@ public class UserCardServlet extends GenericImageServlet {
EventUser user = card.getUser(); EventUser user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getCurrentImage().getImageData())); BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getUser().getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage())); BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));
...@@ -107,12 +107,12 @@ public class UserCardServlet extends GenericImageServlet { ...@@ -107,12 +107,12 @@ public class UserCardServlet extends GenericImageServlet {
// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()), // g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
// 840); // 840);
g.drawString(user.getNick(), 50, 810); g.drawString(user.getUser().getNick(), 50, 810);
g.setFont(new Font("Century gothic", Font.BOLD, 35)); g.setFont(new Font("Century gothic", Font.BOLD, 35));
StringBuilder wholeName = new StringBuilder(); StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getFirstnames()).append(" ").append(user.getLastname()); wholeName.append(user.getUser().getFirstnames()).append(" ").append(user.getUser().getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35)); // g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 - // g.drawString(name, 595 -
......
...@@ -147,7 +147,7 @@ public class MapManageView extends GenericCDIView { ...@@ -147,7 +147,7 @@ public class MapManageView extends GenericCDIView {
return null; return null;
} }
public void generatePlaces() { public String generatePlaces() {
String[] tablenames = getNamebase().split(";"); String[] tablenames = getNamebase().split(";");
List<Place> mapplaces = map.getPlaces(); List<Place> mapplaces = map.getPlaces();
...@@ -185,7 +185,7 @@ public class MapManageView extends GenericCDIView { ...@@ -185,7 +185,7 @@ public class MapManageView extends GenericCDIView {
map = eventmapBean.saveMap(map); map = eventmapBean.saveMap(map);
logger.debug("places in map merge {}", map.getPlaces().size()); logger.debug("places in map merge {}", map.getPlaces().size());
return null;
} }
public void setMapname(String mapname) { public void setMapname(String mapname) {
......
...@@ -51,7 +51,7 @@ public class EventOrgView extends GenericCDIView { ...@@ -51,7 +51,7 @@ public class EventOrgView extends GenericCDIView {
public void initCreate() public void initCreate()
{ {
if (super.requirePermissions(user.isSuperadmin())) { if (super.requirePermissions(user.getUser().isSuperadmin())) {
super.beginConversation(); super.beginConversation();
} }
} }
...@@ -83,7 +83,7 @@ public class EventOrgView extends GenericCDIView { ...@@ -83,7 +83,7 @@ public class EventOrgView extends GenericCDIView {
public void initEdit() { public void initEdit() {
if ((super.requirePermissions(eventorgbean.hasOrgPermission(orgId) || user.isSuperadmin())) && eventorg == null) { if ((super.requirePermissions(eventorgbean.hasOrgPermission(orgId) || user.getUser().isSuperadmin())) && eventorg == null) {
eventorg = eventorgbean.find(orgId); eventorg = eventorgbean.find(orgId);
super.beginConversation(); super.beginConversation();
} }
...@@ -96,9 +96,9 @@ public class EventOrgView extends GenericCDIView { ...@@ -96,9 +96,9 @@ public class EventOrgView extends GenericCDIView {
} }
public void initListView() { public void initListView() {
if (super.requirePermissions(user.isSuperadmin() || eventorgbean.hasOrgPermission(orgId))) { if (super.requirePermissions(user.getUser().isSuperadmin() || eventorgbean.hasOrgPermission(orgId))) {
if (getUser().isSuperadmin()) { if (getUser().getUser().isSuperadmin()) {
setOrganisations(eventorgbean.getEventOrganisers()); setOrganisations(eventorgbean.getEventOrganisers());
} else { } else {
setOrganisations(eventorgbean.getOrganisations(getUser().getUser())); setOrganisations(eventorgbean.getOrganisations(getUser().getUser()));
...@@ -108,7 +108,7 @@ public class EventOrgView extends GenericCDIView { ...@@ -108,7 +108,7 @@ public class EventOrgView extends GenericCDIView {
public void initEditEvent() public void initEditEvent()
{ {
if (eventid != null && super.requirePermissions(user.isSuperadmin() || eventorgbean.hasEventPermission(eventid)) && getEvent() == null) if (eventid != null && super.requirePermissions(user.getUser().isSuperadmin() || eventorgbean.hasEventPermission(eventid)) && getEvent() == null)
{ {
setEvent(eventorgbean.findEvent(eventid)); setEvent(eventorgbean.findEvent(eventid));
super.beginConversation(); super.beginConversation();
......
...@@ -41,7 +41,7 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -41,7 +41,7 @@ public class InviteAcceptView extends GenericCDIView {
this.addFaceMessage("invite.notFound"); this.addFaceMessage("invite.notFound");
done = true; done = true;
} else if (user == null) { } else if (user == null) {
user = new EventUser(new User(), null); user = new EventUser(new User(), null, permbean.getCurrentUser());
userview.setUser(user); userview.setUser(user);
super.beginConversation(); super.beginConversation();
} }
...@@ -50,7 +50,7 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -50,7 +50,7 @@ public class InviteAcceptView extends GenericCDIView {
public String createUser() { public String createUser() {
user.resetPassword(userview.getPassword()); user.getUser().resetPassword(userview.getPassword());
userbean.createFromToken(user, token); userbean.createFromToken(user, token);
super.addFaceMessage("invite.userCreateSuccessfull"); super.addFaceMessage("invite.userCreateSuccessfull");
done = true; done = true;
......
...@@ -68,7 +68,7 @@ public class ProductShopView extends GenericCDIView { ...@@ -68,7 +68,7 @@ public class ProductShopView extends GenericCDIView {
shoppingcart = new ListDataModel<ProductShopItem>( shoppingcart = new ListDataModel<ProductShopItem>(
ProductShopItem.productList(productBean ProductShopItem.productList(productBean
.listUserShoppableProducts())); .listUserShoppableProducts()));
updateCartLimits(); updateCartLimits(null);
logger.debug("Initialized billing shoppingcart to {}", shoppingcart); logger.debug("Initialized billing shoppingcart to {}", shoppingcart);
this.beginConversation(); this.beginConversation();
} }
...@@ -82,7 +82,7 @@ public class ProductShopView extends GenericCDIView { ...@@ -82,7 +82,7 @@ public class ProductShopView extends GenericCDIView {
shoppingcart = new ListDataModel<ProductShopItem>( shoppingcart = new ListDataModel<ProductShopItem>(
ProductShopItem.productGTList(productBean ProductShopItem.productGTList(productBean
.findForStaffshop())); .findForStaffshop()));
updateCartLimits(); updateCartLimits(null);
logger.debug("Initialized shoppingcart to {}", shoppingcart); logger.debug("Initialized shoppingcart to {}", shoppingcart);
this.beginConversation(); this.beginConversation();
} }
...@@ -92,12 +92,12 @@ public class ProductShopView extends GenericCDIView { ...@@ -92,12 +92,12 @@ public class ProductShopView extends GenericCDIView {
ProductShopItem item = shoppingcart.getRowData(); ProductShopItem item = shoppingcart.getRowData();
item.setCount(item.getCount().add(BigDecimal.valueOf(count))); item.setCount(item.getCount().add(BigDecimal.valueOf(count)));
updateCartLimits(); updateCartLimits(item);
return null; return null;
} }
public void updateCartLimits() { public void updateCartLimits(ProductShopItem item) {
Map<Integer, BigDecimal> prodCounts = new HashMap<Integer, BigDecimal>(); Map<Integer, BigDecimal> prodCounts = new HashMap<Integer, BigDecimal>();
for (ProductShopItem sc : shoppingcart) { for (ProductShopItem sc : shoppingcart) {
...@@ -107,6 +107,17 @@ public class ProductShopView extends GenericCDIView { ...@@ -107,6 +107,17 @@ public class ProductShopView extends GenericCDIView {
HashMap<Integer, BigDecimal> limits = productBean.getProductLimit( HashMap<Integer, BigDecimal> limits = productBean.getProductLimit(
prodCounts, user); prodCounts, user);
// Update the updated cart first
if (item != null)
{
BigDecimal l = limits.get(item.getProduct().getId());
if (item.updateLimit(l))
{
updateCartLimits(null);
return;
}
}
for (ProductShopItem n : shoppingcart) { for (ProductShopItem n : shoppingcart) {
BigDecimal l = limits.get(n.getProduct().getId()); BigDecimal l = limits.get(n.getProduct().getId());
if (l != null) { if (l != null) {
......
...@@ -99,7 +99,7 @@ public class AuthView extends GenericCDIView { ...@@ -99,7 +99,7 @@ public class AuthView extends GenericCDIView {
} }
} }
return;
} }
public String getLogin() { public String getLogin() {
......
...@@ -33,7 +33,7 @@ public class PasswordView extends GenericCDIView { ...@@ -33,7 +33,7 @@ public class PasswordView extends GenericCDIView {
public String changePassword() { public String changePassword() {
if (permbean.isCurrentUser(user) || permbean.hasPermission(UserPermission.MODIFY)) { if (permbean.isCurrentUser(user) || permbean.hasPermission(UserPermission.MODIFY)) {
if (password != null && password.equals(passwordcheck)) { if (password != null && password.equals(passwordcheck)) {
user.resetPassword(password); user.getUser().resetPassword(password);
user = userbean.mergeChanges(user); user = userbean.mergeChanges(user);
} else { } else {
super.addFaceMessage("userview.passwordsDontMatch"); super.addFaceMessage("userview.passwordsDontMatch");
......
...@@ -23,7 +23,7 @@ public class UserSearchView extends PaginationView<User> { ...@@ -23,7 +23,7 @@ public class UserSearchView extends PaginationView<User> {
public void initView() { public void initView() {
if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) { if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) {
super.setResult(userbean.getUsers(page, pagesize, sort, search)); super.setResult(userbean.getEventUsers(page, pagesize, sort, search));
} }
} }
......
...@@ -129,7 +129,7 @@ public class UserView extends GenericCDIView { ...@@ -129,7 +129,7 @@ public class UserView extends GenericCDIView {
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename()); logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
try { try {
UserImage newImage = UserImage newImage =
userbean.saveCroppedImage(user.getCurrentImage(), userbean.saveCroppedImage(user.getUser().getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(), croppedImage.getLeft(), croppedImage.getTop(),
croppedImage.getWidth(), croppedImage.getHeight()); croppedImage.getWidth(), croppedImage.getHeight());
user = userbean.getEventUser(newImage.getUser()); user = userbean.getEventUser(newImage.getUser());
...@@ -166,7 +166,7 @@ public class UserView extends GenericCDIView { ...@@ -166,7 +166,7 @@ public class UserView extends GenericCDIView {
public void initCreateView() { public void initCreateView() {
if (super.requirePermissions(UserPermission.CREATE_NEW)) { if (super.requirePermissions(UserPermission.CREATE_NEW)) {
user = new EventUser(new User(), eventbean.getCurrentEvent()); user = new EventUser(new User(), eventbean.getCurrentEvent(), permbean.getCurrentUser());
super.beginConversation(); super.beginConversation();
} }
} }
......
...@@ -69,6 +69,7 @@ public class ProductShopItem { ...@@ -69,6 +69,7 @@ public class ProductShopItem {
count = BigDecimal.ZERO; count = BigDecimal.ZERO;
} }
this.count = count; this.count = count;
price = product.getPrice().abs().multiply(count); price = product.getPrice().abs().multiply(count);
discounts = product.getActiveDiscounts(count, Calendar.getInstance()); discounts = product.getActiveDiscounts(count, Calendar.getInstance());
discountValues = new HashMap<Integer, BigDecimal>(); discountValues = new HashMap<Integer, BigDecimal>();
...@@ -119,18 +120,20 @@ public class ProductShopItem { ...@@ -119,18 +120,20 @@ public class ProductShopItem {
return limit; return limit;
} }
public void updateLimit(BigDecimal limit) { public boolean updateLimit(BigDecimal limit) {
if (limit != null && limit.compareTo(BigDecimal.ZERO) < 0) if (limit != null && limit.compareTo(BigDecimal.ZERO) < 0)
{ {
logger.info("product limit {}, count {}", limit, count);
setCount(getCount().add(limit)); setCount(getCount().add(limit));
if (getCount().compareTo(BigDecimal.ZERO) < 0) if (count.compareTo(BigDecimal.ZERO) < 0)
{ {
setCount(BigDecimal.ZERO); setCount(BigDecimal.ZERO);
} }
limit = BigDecimal.ZERO;
return true;
} }
setLimit(limit); setLimit(limit);
return false;
} }
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!