Commit b99fa2c8 by Petri Järvisalo

Merge branch 'master' of codecrew.fi:bortal

Conflicts:
	code/LanBortalWeb/WebContent/resources/style/insomnia2/css/tyyli.css
2 parents f1f40b33 5aa5fbb8
Showing with 1205 additions and 461 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,13 +119,15 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal { ...@@ -119,13 +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);
logger.info("Created stamp {}", stamp.toString());
postParams.put(CheckoutFiParam.STAMP, stamp.toString()); postParams.put(CheckoutFiParam.STAMP, stamp.toString());
postParams.put(CheckoutFiParam.AMOUNT, priceInCents); postParams.put(CheckoutFiParam.AMOUNT, priceInCents);
...@@ -160,7 +162,8 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal { ...@@ -160,7 +162,8 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal {
try { try {
final String calculatedHash = PasswordFunctions.calculateMd5(mdString.toString()); final String calculatedHash = PasswordFunctions.calculateMd5(mdString.toString());
logger.info("Calculated checksum {} from {}", mdString.toString(), calculatedHash); // logger.info("Calculated checksum {} from {}",
// mdString.toString(), calculatedHash);
nameValuePairs.add(new BasicNameValuePair("MAC", calculatedHash)); nameValuePairs.add(new BasicNameValuePair("MAC", calculatedHash));
...@@ -172,7 +175,8 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal { ...@@ -172,7 +175,8 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal {
StringWriter writer = new StringWriter(); StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer, "UTF8"); IOUtils.copy(response.getEntity().getContent(), writer, "UTF8");
String xmlReturn = writer.toString(); String xmlReturn = writer.toString();
logger.info("Got response from checkout.fi msg {}, {} ", response.getStatusLine().getStatusCode(), xmlReturn); // logger.info("Got response from checkout.fi msg {}, {} ",
// response.getStatusLine().getStatusCode(), xmlReturn);
return parseTokenXml(xmlReturn); return parseTokenXml(xmlReturn);
......
...@@ -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)) { secubean.logMessage(SecurityLogType.permissionDenied, eventUser, "Login failed: wrong password for username ", username);
ret = eventUser; eventUser = null;
} else { user = null;
secubean.logMessage(SecurityLogType.permissionDenied, eventUser.getUser(), "Login failed: wrong password for username ", username); }
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, eventbean.getCurrentEvent(), 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());
} }
......
...@@ -14,6 +14,7 @@ import org.slf4j.Logger; ...@@ -14,6 +14,7 @@ import org.slf4j.Logger;
import fi.insomnia.bortal.facade.LogEntryFacade; import fi.insomnia.bortal.facade.LogEntryFacade;
import fi.insomnia.bortal.facade.LogEntryTypeFacade; import fi.insomnia.bortal.facade.LogEntryTypeFacade;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LogEntry; import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.LogEntryType; import fi.insomnia.bortal.model.LogEntryType;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -33,6 +34,8 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -33,6 +34,8 @@ public class LoggingBean implements LoggingBeanLocal {
private LogEntryTypeFacade typeFacade; private LogEntryTypeFacade typeFacade;
@EJB @EJB
private LogEntryFacade entryFacade; private LogEntryFacade entryFacade;
@EJB
private EventBeanLocal eventbean;
@Resource @Resource
UserTransaction utx; UserTransaction utx;
...@@ -86,14 +89,19 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -86,14 +89,19 @@ public class LoggingBean implements LoggingBeanLocal {
// } // }
@Override @Override
public LogEntry logMessage(SecurityLogType paramType, User user, public LogEntry logMessage(SecurityLogType paramType, LanEvent event, User user,
Object... description) { Object... description) {
LogEntry entry = null; LogEntry entry = null;
if (event == null)
{
event = eventbean.getCurrentEvent();
}
try { try {
String desc = toString(description); String desc = toString(description);
utx.begin(); utx.begin();
LogEntryType type = typeFacade.findOrCreate(paramType); LogEntryType type = typeFacade.findOrCreate(paramType);
entry = new LogEntry(Calendar.getInstance()); entry = new LogEntry(Calendar.getInstance());
entry.setParentEvent(event);
entry.setType(type); entry.setType(type);
entry.setDescription(desc); entry.setDescription(desc);
entry.setUser(user); entry.setUser(user);
...@@ -113,9 +121,15 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -113,9 +121,15 @@ public class LoggingBean implements LoggingBeanLocal {
} }
@Override @Override
public LogEntry logMessage(SecurityLogType paramType, EventUser user, public LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description) {
Object... description) { LanEvent event = null;
return logMessage(paramType, user.getUser(), description); User usr = null;
if (user != null)
{
event = user.getEvent();
usr = user.getUser();
}
return logMessage(paramType, event, usr, description);
} }
private static final String toString(Object... desc) { private static final String toString(Object... desc) {
......
...@@ -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);
......
...@@ -103,7 +103,7 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -103,7 +103,7 @@ public class TestDataBean implements TestDataBeanLocal {
u.setNick("kavija"); u.setNick("kavija");
Calendar bday = Calendar.getInstance(); Calendar bday = Calendar.getInstance();
bday.set(Calendar.YEAR, 1990); bday.set(Calendar.YEAR, 1990);
u.setBirthday(bday); u.setBirthday(bday.getTime());
u.setCreated(Calendar.getInstance()); u.setCreated(Calendar.getInstance());
u.setEmail("kalle.kavija@example.com"); u.setEmail("kalle.kavija@example.com");
u.setFirstnames("Kalle Kauko"); u.setFirstnames("Kalle Kauko");
...@@ -129,7 +129,7 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -129,7 +129,7 @@ public class TestDataBean implements TestDataBeanLocal {
u.setNick("admin"); u.setNick("admin");
Calendar bday = Calendar.getInstance(); Calendar bday = Calendar.getInstance();
bday.set(Calendar.YEAR, 1980); bday.set(Calendar.YEAR, 1980);
u.setBirthday(bday); u.setBirthday(bday.getTime());
u.setCreated(Calendar.getInstance()); u.setCreated(Calendar.getInstance());
u.setEmail("admin@inter.net"); u.setEmail("admin@inter.net");
u.setFirstnames("Asko Admin"); u.setFirstnames("Asko Admin");
......
...@@ -46,6 +46,7 @@ import fi.insomnia.bortal.model.UserImage; ...@@ -46,6 +46,7 @@ import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage; import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n; import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.utilities.PasswordFunctions; import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
/** /**
...@@ -205,10 +206,10 @@ public class UserBean implements UserBeanLocal { ...@@ -205,10 +206,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 +225,7 @@ public class UserBean implements UserBeanLocal { ...@@ -224,7 +225,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 +246,7 @@ public class UserBean implements UserBeanLocal { ...@@ -245,7 +246,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);
...@@ -309,8 +310,8 @@ public class UserBean implements UserBeanLocal { ...@@ -309,8 +310,8 @@ 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(SearchQuery search) {
return userFacade.searchUser(page, pagesize, sort, search); return userFacade.searchAllUsers(search);
} }
// @Override // @Override
...@@ -337,7 +338,7 @@ public class UserBean implements UserBeanLocal { ...@@ -337,7 +338,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 +421,7 @@ public class UserBean implements UserBeanLocal { ...@@ -420,7 +421,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 +459,7 @@ public class UserBean implements UserBeanLocal { ...@@ -458,7 +459,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 +497,15 @@ public class UserBean implements UserBeanLocal { ...@@ -496,4 +497,15 @@ public class UserBean implements UserBeanLocal {
return user; return user;
} }
@Override
public SearchResult<User> getEventUsers(SearchQuery search) {
if (search.getSearch() == null || search.getSearch().isEmpty())
{
return userFacade.searchEventUsers(search);
} else {
return userFacade.searchAllUsers(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));
// }
// }
} }
...@@ -9,21 +9,20 @@ import javax.persistence.NoResultException; ...@@ -9,21 +9,20 @@ import javax.persistence.NoResultException;
import javax.persistence.TypedQuery; 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.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback; import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericFacade<C extends ModelInterface> { public abstract class GenericFacade<C extends ModelInterface> {
private final Class<C> entClass; private final Class<C> entClass;
private static final Logger logger = LoggerFactory.getLogger(GenericFacade.class);
// private static final Logger logger =
// LoggerFactory.getLogger(GenericFacade.class);
public GenericFacade(Class<C> entityClass) { public GenericFacade(Class<C> entityClass) {
this.entClass = entityClass; this.entClass = entityClass;
...@@ -110,53 +109,55 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -110,53 +109,55 @@ public abstract class GenericFacade<C extends ModelInterface> {
return ret; return ret;
} }
@Deprecated // @Deprecated
protected List<C> search(String query, String[] fields, String orderfield) { // protected List<C> search(String query, String[] fields, String
return search(0, 0, query, fields, orderfield); // orderfield) {
} // return search(0, 0, query, fields, orderfield);
// }
@Deprecated //
protected SearchResult<C> searcher(int page, int pagesize, String query, String[] fields, String orderfield) { // @Deprecated
SearchResult<C> ret = new SearchResult<C>(); // protected SearchResult<C> searcher(int page, int pagesize, String query,
ret.setResults(search(page, pagesize, query, fields, orderfield)); // String[] fields, String orderfield) {
ret.setResultcount(searchCount(query, fields)); // SearchResult<C> ret = new SearchResult<C>();
return ret; // ret.setResults(search(page, pagesize, query, fields, orderfield));
} // ret.setResultcount(searchCount(query, fields));
// return ret;
// }
// Le fu... Tuota.. generics ei hanskaa ... operaattoria.. tehdään siis // Le fu... Tuota.. generics ei hanskaa ... operaattoria.. tehdään siis
// näin... :( // näin... :(
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> callback) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> callback) {
return searcher(page, pagesize, Collections.singletonList(callback)); return searcher(search, Collections.singletonList(callback));
} }
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> cb1, FacadeCallback<C> cb2) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> cb1, FacadeCallback<C> cb2) {
ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>(); ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>();
cbs.add(cb1); cbs.add(cb1);
cbs.add(cb2); cbs.add(cb2);
return searcher(page, pagesize, cbs); return searcher(search, cbs);
} }
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3) {
ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>(); ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>();
cbs.add(cb1); cbs.add(cb1);
cbs.add(cb2); cbs.add(cb2);
cbs.add(cb3); cbs.add(cb3);
return searcher(page, pagesize, cbs); return searcher(search, cbs);
} }
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3, FacadeCallback<C> cb4) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3, FacadeCallback<C> cb4) {
ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>(); ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>();
cbs.add(cb1); cbs.add(cb1);
cbs.add(cb2); cbs.add(cb2);
cbs.add(cb3); cbs.add(cb3);
cbs.add(cb4); cbs.add(cb4);
return searcher(page, pagesize, cbs); return searcher(search, cbs);
} }
protected SearchResult<C> searcher(int page, int pagesize, List<FacadeCallback<C>> list) { protected SearchResult<C> searcher(SearchQuery search, List<FacadeCallback<C>> list) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<C> listCQuery = cb.createQuery(getEntityClass()); CriteriaQuery<C> listCQuery = cb.createQuery(getEntityClass());
...@@ -169,22 +170,28 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -169,22 +170,28 @@ public abstract class GenericFacade<C extends ModelInterface> {
TypedQuery<Long> countQ = getEm().createQuery(countCQuery); TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<C> listQ = getEm().createQuery(listCQuery); TypedQuery<C> listQ = getEm().createQuery(listCQuery);
if (pagesize > 0) { if (search.getPagesize() > 0) {
listQ.setFirstResult(page * pagesize); listQ.setFirstResult(search.getPage() * search.getPagesize());
listQ.setMaxResults(pagesize); listQ.setMaxResults(search.getPagesize());
} }
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()]);
...@@ -195,52 +202,55 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -195,52 +202,55 @@ public abstract class GenericFacade<C extends ModelInterface> {
} }
@Deprecated // @Deprecated
protected List<C> search(int page, int pagesize, String query, String[] fields, String orderfield) { // protected List<C> search(int page, int pagesize, String query, String[]
// fields, String orderfield) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); //
CriteriaQuery<C> cq = cb.createQuery(getEntityClass()); // CriteriaBuilder cb = getEm().getCriteriaBuilder();
// CriteriaQuery<C> cq = cb.createQuery(getEntityClass());
Root<C> root = cq.from(getEntityClass()); //
// Root<C> root = cq.from(getEntityClass());
addPredicates(cq, root, query, fields); //
// addPredicates(cq, root, query, fields);
TypedQuery<C> q = getEm().createQuery(cq); //
if (pagesize > 0) { // TypedQuery<C> q = getEm().createQuery(cq);
q.setFirstResult(page * pagesize); // if (pagesize > 0) {
q.setMaxResults(pagesize); // q.setFirstResult(page * pagesize);
// q.setMaxResults(pagesize);
} //
List<C> ret = q.getResultList(); // }
return ret; // List<C> ret = q.getResultList();
} // return ret;
// }
@Deprecated //
protected void addPredicates(CriteriaQuery<?> cq, Root<C> root, String query, String[] fields) { // @Deprecated
CriteriaBuilder cb = getEm().getCriteriaBuilder(); // protected void addPredicates(CriteriaQuery<?> cq, Root<C> root, String
if (query != null && !query.isEmpty() && fields != null && fields.length > 0) { // query, String[] fields) {
List<Predicate> preds = new ArrayList<Predicate>(); // CriteriaBuilder cb = getEm().getCriteriaBuilder();
for (String field : fields) { // if (query != null && !query.isEmpty() && fields != null && fields.length
Path<String> rootfield = root.get(field); // > 0) {
preds.add(cb.like(cb.lower(rootfield), query)); // List<Predicate> preds = new ArrayList<Predicate>();
} // for (String field : fields) {
cq.where(cb.or(preds.toArray(new Predicate[preds.size()]))); // Path<String> rootfield = root.get(field);
} // preds.add(cb.like(cb.lower(rootfield), query));
// }
} // cq.where(cb.or(preds.toArray(new Predicate[preds.size()])));
// }
@Deprecated //
protected long searchCount(String query, String[] fields) { // }
CriteriaBuilder cb = getEm().getCriteriaBuilder(); //
CriteriaQuery<Long> cq = cb.createQuery(Long.class); // @Deprecated
Root<C> root = cq.from(getEntityClass()); // protected long searchCount(String query, String[] fields) {
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
addPredicates(cq, root, query, fields); // CriteriaQuery<Long> cq = cb.createQuery(Long.class);
cq.select(getEm().getCriteriaBuilder().count(root)); // Root<C> root = cq.from(getEntityClass());
//
TypedQuery<Long> q = getEm().createQuery(cq); // addPredicates(cq, root, query, fields);
return q.getSingleResult(); // cq.select(getEm().getCriteriaBuilder().count(root));
} //
// TypedQuery<Long> q = getEm().createQuery(cq);
// return q.getSingleResult();
// }
// @Deprecated // @Deprecated
// public List<C> findAll(int page, int pagesize, String sort) { // public List<C> findAll(int page, int pagesize, String sort) {
......
...@@ -4,20 +4,30 @@ import java.util.ArrayList; ...@@ -4,20 +4,30 @@ 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.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
@Stateless @Stateless
...@@ -28,7 +38,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -28,7 +38,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 +56,9 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -46,6 +56,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 +105,17 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -92,23 +105,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(SearchQuery search) {
OrderCallback<User> orderCall = null;
if (sort == null || sort.isEmpty()) {
orderCall = new OrderCallback<User>(false, User_.id);
}
else
{
orderCall = new OrderCallback<User>(false, sort);
List<FacadeCallback<User>> callbacks = new ArrayList<FacadeCallback<User>>();
if (search.getSort() == null || search.getSort().isEmpty()) {
callbacks.add(new OrderCallback<User>(false, User_.id));
} else {
callbacks.add(new OrderCallback<User>(false, search.getSort()));
} }
callbacks.add(new StringSearchPredicateCreator<User>(search.getSearch(), getAttrlist()));
return super.searcher(page, pagesize, return super.searcher(search, 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 +146,47 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -139,7 +146,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(SearchQuery query)
{
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 (query.getPagesize() > 0) {
listQ.setFirstResult(query.getPage() * query.getPagesize());
listQ.setMaxResults(query.getPagesize());
}
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));
}
} }
} }
...@@ -3,13 +3,14 @@ package fi.insomnia.bortal.beans; ...@@ -3,13 +3,14 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LogEntry; import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Local @Local
public interface LoggingBeanLocal { public interface LoggingBeanLocal {
LogEntry logMessage(SecurityLogType paramType, User user, Object... description); LogEntry logMessage(SecurityLogType paramType, LanEvent event, User user, Object... description);
LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description); LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description);
......
...@@ -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);
} }
...@@ -10,6 +10,7 @@ import fi.insomnia.bortal.model.GroupMembership; ...@@ -10,6 +10,7 @@ import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage; import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
@Local @Local
...@@ -17,7 +18,9 @@ public interface UserBeanLocal { ...@@ -17,7 +18,9 @@ public interface UserBeanLocal {
List<EventUser> getUsers(); List<EventUser> getUsers();
SearchResult<User> getUsers(int page, int pagesize, String sort, String search); SearchResult<User> getUsers(SearchQuery search);
SearchResult<User> getEventUsers(SearchQuery search);
EventUser mergeChanges(EventUser user); EventUser mergeChanges(EventUser user);
...@@ -65,7 +68,7 @@ public interface UserBeanLocal { ...@@ -65,7 +68,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);
} }
...@@ -3,6 +3,9 @@ package fi.insomnia.bortal.clientutils; ...@@ -3,6 +3,9 @@ package fi.insomnia.bortal.clientutils;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
public class BortalLocalContextHolder { public class BortalLocalContextHolder {
...@@ -10,18 +13,29 @@ public class BortalLocalContextHolder { ...@@ -10,18 +13,29 @@ 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>();
private static boolean inDevelopmentMode = false; private static boolean inDevelopmentMode = false;
public BortalLocalContextHolder() { private static final Logger logger = LoggerFactory.getLogger(BortalLocalContextHolder.class);
private BortalLocalContextHolder() {
super();
}
private BortalLocalContextHolder(BortalLocalContextHolder old) {
super();
this.hostname = old.hostname;
this.ssl = old.ssl;
} }
public static void setHostname(String hostname) { public static void setHostname(String hostname) {
getThread().hostname = hostname; getThread().hostname = hostname;
logger.info("Setting hostname to {}", hostname);
} }
...@@ -84,4 +98,19 @@ public class BortalLocalContextHolder { ...@@ -84,4 +98,19 @@ 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;
}
public static void copy(BortalLocalContextHolder contextHolder) {
logger.debug("Copying context holder to new. Hostname {} ", contextHolder.getHolderHostname());
if (THREAD_WITH_CONTEXT.get() != null) {
logger.warn("Context for thread is not empty. Received hostname {}", THREAD_WITH_CONTEXT.get().hostname);
}
THREAD_WITH_CONTEXT.set(new BortalLocalContextHolder(contextHolder));
}
} }
\ 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) {
......
...@@ -9,9 +9,11 @@ import java.math.BigDecimal; ...@@ -9,9 +9,11 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
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;
...@@ -20,6 +22,8 @@ import javax.persistence.ManyToOne; ...@@ -20,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;
...@@ -30,7 +34,7 @@ import fi.insomnia.bortal.enums.Gender; ...@@ -30,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";
...@@ -38,6 +42,7 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -38,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;
...@@ -92,13 +97,39 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -92,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;
} }
...@@ -223,222 +254,178 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -223,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 Calendar getBirthday() {
return user.getBirthday(); return user.getBirthday();
} }
@Override public void setBirthday(Date birthday) {
public void setBirthday(Calendar 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;
} }
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import fi.insomnia.bortal.enums.Gender; import fi.insomnia.bortal.enums.Gender;
...@@ -29,9 +30,9 @@ public interface IUser { ...@@ -29,9 +30,9 @@ public interface IUser {
public abstract void setFirstnames(String firstnames); public abstract void setFirstnames(String firstnames);
public abstract Calendar getBirthday(); public abstract Date getBirthday();
public abstract void setBirthday(Calendar birthday); public abstract void setBirthday(Date birthday);
public abstract String getNick(); public abstract String getNick();
......
...@@ -5,7 +5,7 @@ import javax.annotation.Generated; ...@@ -5,7 +5,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-05-12T19:23:44.258+0300") @Generated(value="Dali", date="2012-09-11T02:27:08.849+0300")
@StaticMetamodel(LogEntry.class) @StaticMetamodel(LogEntry.class)
public class LogEntry_ extends GenericEntity_ { public class LogEntry_ extends GenericEntity_ {
public static volatile SingularAttribute<LogEntry, LanEvent> parentEvent; public static volatile SingularAttribute<LogEntry, LanEvent> parentEvent;
......
...@@ -6,9 +6,10 @@ import javax.persistence.metamodel.ListAttribute; ...@@ -6,9 +6,10 @@ 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-09-09T02:58:31.995+0300") @Generated(value="Dali", date="2012-09-10T17:55:33.516+0300")
@StaticMetamodel(Reader.class) @StaticMetamodel(Reader.class)
public class Reader_ extends GenericEntity_ { public class Reader_ extends GenericEntity_ {
public static volatile SingularAttribute<Reader, ReaderType> type;
public static volatile SingularAttribute<Reader, LanEvent> event; public static volatile SingularAttribute<Reader, LanEvent> event;
public static volatile SingularAttribute<Reader, Integer> gamepoints; public static volatile SingularAttribute<Reader, Integer> gamepoints;
public static volatile SingularAttribute<Reader, Integer> maxEvents; public static volatile SingularAttribute<Reader, Integer> maxEvents;
...@@ -20,5 +21,4 @@ public class Reader_ extends GenericEntity_ { ...@@ -20,5 +21,4 @@ public class Reader_ extends GenericEntity_ {
public static volatile SingularAttribute<Reader, Integer> mapX; public static volatile SingularAttribute<Reader, Integer> mapX;
public static volatile SingularAttribute<Reader, Integer> mapY; public static volatile SingularAttribute<Reader, Integer> mapY;
public static volatile ListAttribute<Reader, ReaderEvent> events; public static volatile ListAttribute<Reader, ReaderEvent> events;
public static volatile SingularAttribute<Reader, ReaderType> type;
} }
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
...@@ -37,7 +38,7 @@ public class User extends GenericEntity implements IUser { ...@@ -37,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();
...@@ -59,7 +60,7 @@ public class User extends GenericEntity implements IUser { ...@@ -59,7 +60,7 @@ public class User extends GenericEntity implements IUser {
@Column(name = "birthday") @Column(name = "birthday")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar birthday; private Date birthday;
@Column(name = "nick") @Column(name = "nick")
private String nick = ""; private String nick = "";
...@@ -173,12 +174,12 @@ public class User extends GenericEntity implements IUser { ...@@ -173,12 +174,12 @@ public class User extends GenericEntity implements IUser {
} }
@Override @Override
public Calendar getBirthday() { public Date getBirthday() {
return birthday; return birthday;
} }
@Override @Override
public void setBirthday(Calendar birthday) { public void setBirthday(Date birthday) {
this.birthday = birthday; this.birthday = birthday;
} }
......
...@@ -2,12 +2,13 @@ package fi.insomnia.bortal.model; ...@@ -2,12 +2,13 @@ package fi.insomnia.bortal.model;
import fi.insomnia.bortal.enums.Gender; import fi.insomnia.bortal.enums.Gender;
import java.util.Calendar; import java.util.Calendar;
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-13T14:47:41.939+0300") @Generated(value="Dali", date="2012-09-09T04:13:51.037+0300")
@StaticMetamodel(User.class) @StaticMetamodel(User.class)
public class User_ extends GenericEntity_ { public class User_ extends GenericEntity_ {
public static volatile SingularAttribute<User, Calendar> created; public static volatile SingularAttribute<User, Calendar> created;
...@@ -16,7 +17,7 @@ public class User_ extends GenericEntity_ { ...@@ -16,7 +17,7 @@ public class User_ extends GenericEntity_ {
public static volatile SingularAttribute<User, String> password; public static volatile SingularAttribute<User, String> password;
public static volatile SingularAttribute<User, String> lastname; public static volatile SingularAttribute<User, String> lastname;
public static volatile SingularAttribute<User, String> firstnames; public static volatile SingularAttribute<User, String> firstnames;
public static volatile SingularAttribute<User, Calendar> birthday; public static volatile SingularAttribute<User, Date> birthday;
public static volatile SingularAttribute<User, String> nick; public static volatile SingularAttribute<User, String> nick;
public static volatile SingularAttribute<User, String> email; public static volatile SingularAttribute<User, String> email;
public static volatile SingularAttribute<User, String> address; public static volatile SingularAttribute<User, String> address;
......
...@@ -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();
} }
......
package fi.insomnia.bortal.utilities;
import java.io.Serializable;
public class SearchQuery implements Serializable {
private static final long serialVersionUID = -8777921789916093938L;
private int page = 0;
private int pagesize = 20;
private String sort = null;
private String search = null;
public SearchQuery()
{
super();
}
public SearchQuery(int page, int pagesize, String sort, String search) {
super();
this.page = page;
this.pagesize = pagesize;
this.sort = sort;
this.search = search;
}
public int getPage() {
return page;
}
public void setPage(int page) {
if (page < 0) {
this.page = 0;
} else
{
this.page = page;
}
}
public int getPagesize() {
if (pagesize < 1) {
pagesize = 20;
}
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public void addPage(Integer count) {
if (count != null) {
page += count;
}
}
}
...@@ -13,5 +13,6 @@ ...@@ -13,5 +13,6 @@
<attribute name="owner.project.facets" value="java"/> <attribute name="owner.project.facets" value="java"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/lib-AuthModule-depends"/>
<classpathentry kind="output" path="build/classes"/> <classpathentry kind="output" path="build/classes"/>
</classpath> </classpath>
...@@ -21,6 +21,16 @@ ...@@ -21,6 +21,16 @@
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand> <buildCommand>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.jboss.tools.cdi.core.cdibuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name> <name>org.eclipse.wst.validation.validationbuilder</name>
<arguments> <arguments>
</arguments> </arguments>
...@@ -32,5 +42,7 @@ ...@@ -32,5 +42,7 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature> <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
<nature>org.jboss.tools.cdi.core.cdinature</nature>
</natures> </natures>
</projectDescription> </projectDescription>
...@@ -38,24 +38,24 @@ ...@@ -38,24 +38,24 @@
}); });
</script> </script>
</ui:fragment> </ui:fragment>
<ui:fragment rendered="#{billEditView.checkoutFiAvailable}"> <ui:fragment rendered="#{billEditView.checkoutFiAvailable}">
<table border="0"> <table border="0">
<tr> <tr>
<ui:repeat varStatus="idx" value="#{billEditView.checkoutFiToken}" var="bank"> <ui:repeat varStatus="idx" value="#{billEditView.checkoutFiToken}" var="bank">
<td> <td>
<form action="#{bank.url}" method="post"> <form action="#{bank.url}" method="post">
<ui:repeat value="#{bank.postParams}" var="valp" > <ui:repeat value="#{bank.postParams}" var="valp">
<input type="hidden" name="#{valp.key}" value="#{valp.value}" /> <input type="hidden" name="#{valp.key}" value="#{valp.value}" />
</ui:repeat> </ui:repeat>
<input type='image' src='#{bank.icon}' /> <input type='image' src='#{bank.icon}' />
</form> </form>
</td> </td>
<h:outputText escape="false" value="&lt;/tr>&lt;tr>" rendered="#{idx.index % 4 == 3}"/> <h:outputText escape="false" value="&lt;/tr>&lt;tr>" rendered="#{idx.index % 4 == 3}" />
</ui:repeat> </ui:repeat>
</tr> </tr>
</table> </table>
</ui:fragment> </ui:fragment>
</ui:define> </ui:define>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/insomnia2/css/tyyli.css" /> <link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/insomnia2/css/tyyli.css" />
<ui:insert name="headerdata" /> <ui:insert name="headerdata" />
<h:outputScript name="prime_calendar.js" library="script" />
</h:head> </h:head>
<h:body> <h:body>
<div id="header"> <div id="header">
......
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
<h:panelGrid columns="2" columnClasses="topalign,topalign"> <h:panelGrid columns="2" columnClasses="topalign,topalign">
<h:outputLabel for="billnr" value="#{i18n['bill.billNumber']}:" /> <h:outputLabel for="billnr" value="#{i18n['bill.billNumber']}:" />
<h:outputText id="billnr" value="#{cc.attrs.bill.billNumber}" /> <h:outputText id="billnr" value="#{cc.attrs.bill.billNumber}" />
<h:outputLabel for="refnr" value="#{i18n['bill.referencenumber']}" /> <h:outputLabel for="refnr" value="#{i18n['bill.referencenumber']}" />
<h:outputText id="refnr" value="#{cc.attrs.bill.referenceNumber}" /> <h:outputText id="refnr" value="#{cc.attrs.bill.referenceNumber}" />
<h:outputLabel for="billAmount" value="#{i18n['bill.billAmount']}" /> <h:outputLabel for="billAmount" value="#{i18n['bill.billAmount']}" />
<h:outputText id="billAmount" value="#{cc.attrs.bill.totalPrice()}"> <h:outputText id="billAmount" value="#{cc.attrs.bill.totalPrice()}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" /> <f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
...@@ -71,6 +71,48 @@ ...@@ -71,6 +71,48 @@
</h:panelGrid> </h:panelGrid>
</h:panelGrid> </h:panelGrid>
<h2>#{i18n['bill.billLines']}</h2>
<h:dataTable styleClass="border" border="1" value="#{cc.attrs.bill.billLines}" var="line">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.name']}" />
</f:facet>
<h:outputText value="#{line.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.quantity']}" />
</f:facet>
<h:outputText value="#{line.quantity}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.unitName']}" />
</f:facet>
<h:outputText value="#{line.unitName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.unitPrice']}" />
</f:facet>
<h:outputText value="#{line.unitPrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.linePrice']}" />
</f:facet>
<h:outputText value="#{line.linePrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
</h:dataTable>
</composite:implementation> </composite:implementation>
</html> </html>
...@@ -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}"> -->
......
...@@ -28,6 +28,11 @@ ...@@ -28,6 +28,11 @@
<f:param value="#{rr.id}" name="readerId" /> <f:param value="#{rr.id}" name="readerId" />
</h:link> </h:link>
</h:column> </h:column>
<h:column>
<h:link outcome="/shop/editReader" value="#{i18n['reader.edit']}">
<f:param value="#{rr.id}" name="readerId" />
</h:link>
</h:column>
</h:dataTable> </h:dataTable>
</composite:implementation> </composite:implementation>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "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" <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: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" > xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:p="http://primefaces.org/ui">
<composite:interface> <composite:interface>
...@@ -70,12 +70,7 @@ ...@@ -70,12 +70,7 @@
<h:message for="town" /> <h:message for="town" />
<h:outputLabel rendered="#{sessionHandler.superadmin}" value="#{i18n['user.superadmin']}:" for="superadmin" />
<h:selectBooleanCheckbox disabled="#{!cc.attrs.creating and !userView.canSave()}"
rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{userView.selectedUser.superadmin}"
/>
<h:message rendered="#{sessionHandler.superadmin}" for="superadmin" />
<!-- <!--
<h:outputLabel value="#{i18n['user.defaultImage']}:" for="currentImage" /> <h:outputLabel value="#{i18n['user.defaultImage']}:" for="currentImage" />
<h:selectOneMenu rendered="#{sessionHandler.hasPermission('USER', 'READ')}" id="currentImage" value="#{userView.selectedUser.currentImage}" converter="#{userimageConverter}" > <h:selectOneMenu rendered="#{sessionHandler.hasPermission('USER', 'READ')}" id="currentImage" value="#{userView.selectedUser.currentImage}" converter="#{userimageConverter}" >
...@@ -91,6 +86,11 @@ ...@@ -91,6 +86,11 @@
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" /> <f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</h:selectOneRadio> </h:selectOneRadio>
<h:message for="sex" /> <h:message for="sex" />
<h:outputLabel for="birthday" value="#{i18n['user.birthday']}:"/>
<p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" locale="fi" value="#{userView.selectedUser.birthday}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
<h:message for="birthday" />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}:" for="password" /> <h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}:" for="password" />
...@@ -105,6 +105,14 @@ ...@@ -105,6 +105,14 @@
/> />
<h:message rendered="#{cc.attrs.creating}" for="passwordcheck" /> <h:message rendered="#{cc.attrs.creating}" for="passwordcheck" />
<h:outputLabel rendered="#{sessionHandler.superadmin}" value="#{i18n['user.superadmin']}:" for="superadmin" />
<h:selectBooleanCheckbox disabled="#{!cc.attrs.creating and !userView.canSave()}"
rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{userView.selectedUser.superadmin}"
/>
<h:message rendered="#{sessionHandler.superadmin}" for="superadmin" />
<h:commandButton rendered="#{cc.attrs.creating or userView.canSave()}" id="commitbtn" <h:commandButton rendered="#{cc.attrs.creating or userView.canSave()}" id="commitbtn"
action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}"
/> />
......
PrimeFaces.locales ['fi'] = {
closeText: 'Sulje',
prevText: 'Edellinen',
nextText: 'Seuraava',
monthNames: ['Tammikuu', 'Helmikuu', 'Maaliskuu', 'Huhtikuu', 'Toukokuu', 'Kesäkuu', 'Heinäkuu', 'Elokuu', 'Syyskuu', 'Lokakuu', 'Marraskuu', 'Joulukuu' ],
monthNamesShort: ['Tammi', 'Helmi', 'Maalis', 'Huhti', 'Touko', 'Kesä', 'Heinä', 'Elo', 'Syys', 'Loka', 'Marras', 'Joulu' ],
dayNames: ['Sunnuntai', 'Maanantai', 'Tiistai', 'Keskiviikko', 'Torstai', 'Perjantai', 'Lauantai'],
dayNamesShort: ['Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La'],
dayNamesMin: ['S', 'M', 'T', 'K ', 'T', 'P ', 'L'],
weekHeader: 'Viikko',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix:'',
timeOnlyTitle: 'Vain aika',
timeText: 'Aika',
hourText: 'Tunti',
minuteText: 'Minuutti',
secondText: 'Sekunti',
currentText: 'Tämä hetki',
ampm: false,
month: 'Kuukausi',
week: 'Viikko',
day: 'Päivä',
allDayText: 'Koko päivä'
};
\ No newline at end of file
...@@ -247,6 +247,12 @@ td ul { ...@@ -247,6 +247,12 @@ td ul {
#right ul li a:hover { #right ul li a:hover {
color: #7dac0c; color: #7dac0c;
text-decoration: none; text-decoration: none;
}l }
table {
border-collapse: collapse;
}
table.border td,table.border th {
padding: 1px 4px;
}
\ No newline at end of file
...@@ -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);
...@@ -104,8 +107,7 @@ public class HostnameFilter implements Filter { ...@@ -104,8 +107,7 @@ public class HostnameFilter implements Filter {
httpRequest.login(User.ANONYMOUS_LOGINNAME, null); httpRequest.login(User.ANONYMOUS_LOGINNAME, null);
} catch (Throwable t) { } catch (Throwable t) {
logger.warn("Error logging in as anonymous... ignoring.. ", logger.warn("Error logging in as anonymous... ignoring.. ", t);
t);
} }
} }
else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME)) else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME))
...@@ -115,7 +117,7 @@ public class HostnameFilter implements Filter { ...@@ -115,7 +117,7 @@ public class HostnameFilter implements Filter {
} }
// pass the request along the filter chain // pass the request along the filter chain
logger.warn("Hurrdurr...");
try { try {
chain.doFilter(request, response); chain.doFilter(request, response);
} finally { } finally {
......
...@@ -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();
} }
......
...@@ -38,6 +38,7 @@ bill.addr5 = Address 5 ...@@ -38,6 +38,7 @@ bill.addr5 = Address 5
bill.address = Payers address bill.address = Payers address
bill.billAmount = Bill amount bill.billAmount = Bill amount
bill.billIsPaid = Bill is paid bill.billIsPaid = Bill is paid
bill.billLines = Products
bill.billNumber = Bill number bill.billNumber = Bill number
bill.billPaidDate = Paid date bill.billPaidDate = Paid date
bill.deliveryTerms = Delivery terms bill.deliveryTerms = Delivery terms
...@@ -63,6 +64,7 @@ bill.totalPrice = Total ...@@ -63,6 +64,7 @@ bill.totalPrice = Total
billedit.billnotfound = Bill not found. Select again. billedit.billnotfound = Bill not found. Select again.
billine.linePrice = Total
billine.name = Product billine.name = Product
billine.quantity = Quantity billine.quantity = Quantity
billine.referencedProduct = Referenced product billine.referencedProduct = Referenced product
...@@ -236,8 +238,6 @@ mapView.errorWhenReservingPlace = Error when reserving place! ...@@ -236,8 +238,6 @@ mapView.errorWhenReservingPlace = Error when reserving place!
mapView.errorWhileBuyingPlaces = Error when buying places. Please try again. If error reoccurs please contact organizers. mapView.errorWhileBuyingPlaces = Error when buying places. Please try again. If error reoccurs please contact organizers.
mapView.notEnoughCreditsToReserve = You don't have enough credits to reserve this place. mapView.notEnoughCreditsToReserve = You don't have enough credits to reserve this place.
mapedit.save = Save
nasty.user = Go away! nasty.user = Go away!
org.hibernate.validator.constraints.Email.message = not a well-formed email address org.hibernate.validator.constraints.Email.message = not a well-formed email address
...@@ -390,28 +390,26 @@ poll.end = Close poll ...@@ -390,28 +390,26 @@ poll.end = Close poll
poll.name = Poll name poll.name = Poll name
poll.save = Send answers poll.save = Send answers
product.barcode = Barcode product.barcode = Barcode
product.billed = Billed product.billed = Billed
product.boughtTotal = Products billed product.boughtTotal = Products billed
product.cart.count = To shoppingcart product.cart.count = To shoppingcart
product.cashed = Cashpaid product.cashed = Cashpaid
product.color = Color in UI product.color = Color in UI
product.create = Create product product.create = Create product
product.createDiscount = Add volumediscount product.createDiscount = Add volumediscount
product.edit = edit product.edit = edit
product.name = Name of product product.name = Name of product
product.paid = Paid product.paid = Paid
product.prepaid = Prepaid product.prepaid = Prepaid
product.prepaidInstant = Created when prepaid is paid product.prepaidInstant = Created when prepaid is paid
product.price = Price of product product.price = Price of product
product.save = Save product.save = Save
product.shopInstant = Create automatic cashpayment product.shopInstant = Create automatic cashpayment
product.sort = Sort nr product.sort = Sort nr
product.totalPrice = Total product.totalPrice = Total
product.unitName = Unit name product.unitName = Unit name
product.vat = VAT product.vat = VAT
productShopView.readBarcode = Read
products.save = Save products.save = Save
...@@ -445,22 +443,22 @@ resetMail.username = Username ...@@ -445,22 +443,22 @@ 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
shop.accountBalance = Account balance shop.accountBalance = Account balance
shop.cash = Cash deposit shop.cash = Cash deposit
shop.readBarcode = Read viivakoodi
shop.totalPrice = Price of products shop.totalPrice = Price of products
shop.user = Selling to shop.user = Selling to
...@@ -576,6 +574,7 @@ user.accountevents = Account events ...@@ -576,6 +574,7 @@ user.accountevents = Account events
user.address = Address user.address = Address
user.bank = Bank user.bank = Bank
user.bankaccount = Bank number user.bankaccount = Bank number
user.birthday = Birthday
user.cardPower = Usertype user.cardPower = Usertype
user.changePassword = Change password user.changePassword = Change password
user.changepassword.forUser = For user user.changepassword.forUser = For user
......
...@@ -38,6 +38,7 @@ bill.addr5 = Osoite 5 ...@@ -38,6 +38,7 @@ bill.addr5 = Osoite 5
bill.address = Maksajan osoite bill.address = Maksajan osoite
bill.billAmount = Laskun summa bill.billAmount = Laskun summa
bill.billIsPaid = Lasku on maksettu bill.billIsPaid = Lasku on maksettu
bill.billLines = Tuotteet
bill.billNumber = Laskun numero bill.billNumber = Laskun numero
bill.billPaidDate = Maksup\u00E4iv\u00E4 bill.billPaidDate = Maksup\u00E4iv\u00E4
bill.deliveryTerms = Toimitusehdot bill.deliveryTerms = Toimitusehdot
...@@ -61,6 +62,7 @@ bill.show = N\u00E4yt\u00E4 ...@@ -61,6 +62,7 @@ bill.show = N\u00E4yt\u00E4
bill.theirReference = Asiakkaan viite bill.theirReference = Asiakkaan viite
bill.totalPrice = Laskun summa bill.totalPrice = Laskun summa
billine.linePrice = Yhteens\u00E4
billine.name = Tuote billine.name = Tuote
billine.quantity = Lukum\u00E4\u00E4r\u00E4 billine.quantity = Lukum\u00E4\u00E4r\u00E4
billine.referencedProduct = Tuoteviittaus billine.referencedProduct = Tuoteviittaus
...@@ -243,8 +245,6 @@ mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe. ...@@ -243,8 +245,6 @@ mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe.
mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin. mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin.
mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen. mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen.
mapedit.save = Tallenna
menu.index = Etusivu menu.index = Etusivu
menu.place.placemap = Paikkakartta menu.place.placemap = Paikkakartta
menu.poll.index = Kyselyt menu.poll.index = Kyselyt
...@@ -379,28 +379,26 @@ poll.end = Sulje kysely ...@@ -379,28 +379,26 @@ poll.end = Sulje kysely
poll.name = Kyselyn nimi poll.name = Kyselyn nimi
poll.save = L\u00E4het\u00E4 vastauksesi poll.save = L\u00E4het\u00E4 vastauksesi
product.barcode = Viivakoodi product.barcode = Viivakoodi
product.billed = Laskutettu product.billed = Laskutettu
product.boughtTotal = Tuotteita laskutettu product.boughtTotal = Tuotteita laskutettu
product.cart.count = Ostoskoriin product.cart.count = Ostoskoriin
product.cashed = Ostettu k\u00E4teisell\u00E4 product.cashed = Ostettu k\u00E4teisell\u00E4
product.color = V\u00E4ri k\u00E4ytt\u00F6liittym\u00E4ss\u00E4 product.color = V\u00E4ri k\u00E4ytt\u00F6liittym\u00E4ss\u00E4
product.create = Luo tuote product.create = Luo tuote
product.createDiscount = Lis\u00E4\u00E4 m\u00E4\u00E4r\u00E4alennus product.createDiscount = Lis\u00E4\u00E4 m\u00E4\u00E4r\u00E4alennus
product.edit = Muokkaa product.edit = Muokkaa
product.name = Tuotteen nimi product.name = Tuotteen nimi
product.paid = Maksettu product.paid = Maksettu
product.prepaid = Prepaid product.prepaid = Prepaid
product.prepaidInstant = Luodaan kun prepaid maksetaan product.prepaidInstant = Luodaan kun prepaid maksetaan
product.price = Tuotteen hinta product.price = Tuotteen hinta
product.save = Tallenna product.save = Tallenna
product.shopInstant = Luo k\u00E4teismaksu tuotteille product.shopInstant = Luo k\u00E4teismaksu tuotteille
product.sort = J\u00E4rjestys luku product.sort = J\u00E4rjestys luku
product.totalPrice = Summa product.totalPrice = Summa
product.unitName = Tuoteyksikk\u00F6 product.unitName = Tuoteyksikk\u00F6
product.vat = ALV product.vat = ALV
productShopView.readBarcode = Lue
products.save = Tallenna products.save = Tallenna
...@@ -447,7 +445,6 @@ sendPicture.header = L\u00E4het\u00E4 kuva ...@@ -447,7 +445,6 @@ sendPicture.header = L\u00E4het\u00E4 kuva
shop.accountBalance = Tilin saldo shop.accountBalance = Tilin saldo
shop.cash = K\u00E4teispano shop.cash = K\u00E4teispano
shop.readBarcode = Lue viivakoodi
shop.totalPrice = Tuotteiden hinta shop.totalPrice = Tuotteiden hinta
shop.user = Myyd\u00E4\u00E4n shop.user = Myyd\u00E4\u00E4n
...@@ -564,6 +561,7 @@ user.accountevents = Tilitapahtumat ...@@ -564,6 +561,7 @@ user.accountevents = Tilitapahtumat
user.address = Osoite user.address = Osoite
user.bank = Pankki user.bank = Pankki
user.bankaccount = Pankkitili user.bankaccount = Pankkitili
user.birthday = Syntym\u00E4p\u00E4iv\u00E4
user.cardPower = K\u00E4ytt\u00E4j\u00E4tyyppi user.cardPower = K\u00E4ytt\u00E4j\u00E4tyyppi
user.changePassword = Vaihda salasana user.changePassword = Vaihda salasana
user.changepassword.forUser = K\u00E4ytt\u00E4j\u00E4lle user.changepassword.forUser = K\u00E4ytt\u00E4j\u00E4lle
......
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.Environment;
import org.apache.sshd.server.ExitCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
public class BortalCommand implements Command, Runnable {
private static Logger logger = LoggerFactory.getLogger(BortalCommand.class);
private OutputStream errstream;
private ExitCallback exitCallback;
private InputStreamReader instream;
private OutputStreamWriter outstream;
private BortalLocalContextHolder contextHolder;
private Charset UTF8 = Charset.forName("UTF-8");
public BortalCommand(BortalLocalContextHolder context) {
contextHolder = context;
}
@Override
public void setInputStream(InputStream in) {
instream = new InputStreamReader(in, UTF8);
}
@Override
public void setOutputStream(OutputStream out) {
outstream = new OutputStreamWriter(out, UTF8);
}
@Override
public void setErrorStream(OutputStream err) {
errstream = err;
}
@Override
public void setExitCallback(ExitCallback callback) {
exitCallback = callback;
}
@Override
public void start(Environment env) throws IOException {
logger.info("Starting something...");
new Thread(this).start();
}
@Override
public void destroy() {
logger.info("destroying ssh command");
}
@Override
public void run() {
BortalLocalContextHolder.copy(contextHolder);
try {
logger.info("Created new bortalCommane");
outstream.write("Hello you...");
StringBuilder cmdBuilder = new StringBuilder();
while (true) {
if (!instream.ready()) {
Thread.sleep(100);
} else {
char inchar = (char) instream.read();
if (inchar == '\n' || inchar == '\r')
{
outstream.write("\r\n# ");
outstream.flush();
parseCommand(cmdBuilder.toString());
cmdBuilder = new StringBuilder();
}
else {
outstream.write(inchar);
outstream.flush();
cmdBuilder.append(inchar);
}
}
}
} catch (InterruptedException e) {
logger.warn("Running command interrupted", e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
exitCallback.onExit(3);
}
private void parseCommand(String string) {
if (string != null || !string.isEmpty())
{
logger.info("received command {}", string);
}
}
}
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.security.Principal;
import java.util.HashSet;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginContext;
import org.apache.sshd.server.PasswordAuthenticator;
import org.apache.sshd.server.session.ServerSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.enterprise.security.auth.login.common.PasswordCredential;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
public class BortalPasswordAuthenticator implements PasswordAuthenticator {
private static final Logger logger = LoggerFactory.getLogger(BortalPasswordAuthenticator.class);
private BortalLocalContextHolder context;
public BortalPasswordAuthenticator(BortalLocalContextHolder instance) {
super();
context = instance;
}
@Override
public boolean authenticate(String username, String password, ServerSession session) {
BortalLocalContextHolder.copy(context);
return authenticate(username, password);
}
public boolean authenticate(final String username, final String password) {
try {
PasswordCredential pwdcred = new PasswordCredential(username, password.toCharArray(), "bortalRealm");
HashSet<PasswordCredential> privcred = new HashSet<PasswordCredential>();
privcred.add(pwdcred);
Subject subject = new Subject(false, new HashSet<Principal>(), new HashSet<Object>(), privcred);
LoginContext loginContext = new LoginContext("bortalRealm", subject, new CallbackHandler() {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
Callback cb = callbacks[i];
logger.info("Handling callback. {}", cb);
if (cb instanceof NameCallback) {
logger.info("Handling name callback");
((NameCallback) callbacks[i]).setName(username);
} else if (cb instanceof PasswordCallback) {
logger.info("Handling password callback");
((PasswordCallback) cb).setPassword(password.toCharArray());
} else {
throw new UnsupportedCallbackException(cb);
}
}
}
});
loginContext.login();
// loginContext.logout();
return true;
} catch (Exception e) {
logger.error("Authentication failed with error", e);
return false;
}
}
}
...@@ -90,7 +90,7 @@ public class PlaceMap extends HttpServlet { ...@@ -90,7 +90,7 @@ public class PlaceMap extends HttpServlet {
ostream = response.getOutputStream(); ostream = response.getOutputStream();
if (map == null || map.getMapData() == null) { if (map == null || map.getMapData() == null) {
logger.info("Error handling map {}!", map); logger.warn("Error handling map {}!", map);
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_NOT_FOUND);
ostream.print("Map error!"); ostream.print("Map error!");
......
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.ejb.EJB;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.sshd.SshServer;
import org.apache.sshd.common.Factory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.model.LanEvent;
/**
* Servlet implementation class SshServlet
*/
@WebServlet(urlPatterns = "/ssh", loadOnStartup = 10)
public class SshServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(SshServlet.class);
private Map<Integer, SshServer> servers = new HashMap<Integer, SshServer>();
// Timeout 30 min
private static final String TIMEOUT = new Integer(1000 * 60 * 30).toString();
@EJB
private EventBeanLocal eventbean;
/**
* @see HttpServlet#HttpServlet()
*/
public SshServlet() {
super();
// TODO Auto-generated constructor stub
}
private class SshShellFactor implements Factory<Command> {
private BortalLocalContextHolder context;
public SshShellFactor(BortalLocalContextHolder instance) {
context = instance;
}
@Override
public Command create() {
logger.info("creating new bortal command");
return new BortalCommand(context);
}
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
}
private SshServer initSsh(Integer id) {
logger.info("Initializing ssh servlet");
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(8022);
sshd.getProperties().put(SshServer.IDLE_TIMEOUT, TIMEOUT);
sshd.setShellFactory(new SshShellFactor(BortalLocalContextHolder.getInstance()));
BortalPasswordAuthenticator pswdAuth = new BortalPasswordAuthenticator(BortalLocalContextHolder.getInstance());
sshd.setPasswordAuthenticator(pswdAuth);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));
try {
sshd.start();
return sshd;
} catch (IOException e) {
logger.warn("sshd start failed! ", e);
}
return null;
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
logger.info("Destroying ssh servlet");
for (Entry<Integer, SshServer> entry : servers.entrySet())
{
try {
entry.getValue().stop();
} catch (InterruptedException e) {
logger.warn("Error stopping ssh", e);
}
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LanEvent event = eventbean.getCurrentEvent();
if (!servers.containsKey(event.getId())) {
SshServer ssh = initSsh(event.getId());
if (ssh != null) {
servers.put(event.getId(), ssh);
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
...@@ -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 -
......
...@@ -7,18 +7,20 @@ import javax.faces.model.ListDataModel; ...@@ -7,18 +7,20 @@ import javax.faces.model.ListDataModel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView { public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView {
private static final long serialVersionUID = -1226554409762987631L; private static final long serialVersionUID = -1226554409762987631L;
protected Integer page = 0; // protected Integer page = 0;
protected Integer pagesize = 20; // protected Integer pagesize = 20;
private SearchQuery searchQuery = new SearchQuery();
protected Long resultcount = 0L; protected Long resultcount = 0L;
private Long pagecount = 0L; private Long pagecount = 0L;
protected String sort; // protected String sort;
protected String search; // protected String search;
private List<T> results; private List<T> results;
private ListDataModel<T> resultdatamodel; private ListDataModel<T> resultdatamodel;
private static Logger logger = LoggerFactory.getLogger(PaginationView.class); private static Logger logger = LoggerFactory.getLogger(PaginationView.class);
...@@ -32,11 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -32,11 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String addToPage(Integer count) { public String addToPage(Integer count) {
pagechangeCallback(); pagechangeCallback();
if (count != null) { searchQuery.addPage(count);
page += count;
} if (searchQuery.getPage() >= pagecount) {
if (page >= pagecount) { searchQuery.setPage(pagecount.intValue() - 1);
page = pagecount.intValue() - 1;
} }
return null; return null;
} }
...@@ -50,17 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -50,17 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String gotoFirstpage() { public String gotoFirstpage() {
// logger.info("Setting page to first page"); // logger.info("Setting page to first page");
pagechangeCallback(); pagechangeCallback();
page = 0; searchQuery.setPage(0);
return null; return null;
} }
public String gotoLastpage() { public String gotoLastpage() {
// logger.info("Setting page to last page"); // logger.info("Setting page to last page");
pagechangeCallback(); pagechangeCallback();
page = pagecount.intValue() - 1; searchQuery.setPage(pagecount.intValue() - 1);
if (page < 0) {
page = 0;
}
return null; return null;
} }
...@@ -74,23 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -74,23 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
@Override @Override
public Integer getPage() { public Integer getPage() {
return page; return searchQuery.getPage();
} }
public void setPage(Integer page) { public void setPage(Integer page) {
this.page = page; searchQuery.setPage(page);
} }
@Override @Override
public Integer getPagesize() { public Integer getPagesize() {
if (pagesize < 1) { return searchQuery.getPagesize();
pagesize = 20;
}
return pagesize;
} }
public void setPagesize(Integer pagesize) { public void setPagesize(Integer pagesize) {
this.pagesize = pagesize; searchQuery.setPagesize(pagesize);
} }
@Override @Override
...@@ -100,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -100,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public void setResultcount(Long resultcount) { public void setResultcount(Long resultcount) {
this.resultcount = resultcount; this.resultcount = resultcount;
pagecount = ((resultcount + pagesize - 1) / pagesize); pagecount = ((resultcount + searchQuery.getPagesize() - 1) / searchQuery.getPagesize());
} }
@Override @Override
...@@ -113,24 +108,24 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -113,24 +108,24 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
} }
public String getSort() { public String getSort() {
return sort; return searchQuery.getSort();
} }
public void setSort(String sort) { public void setSort(String sort) {
this.sort = sort; searchQuery.setSort(sort);
} }
public String getSearch() { public String getSearch() {
return search; return searchQuery.getSearch();
} }
public void setSearch(String search) { public void setSearch(String search) {
this.search = search; searchQuery.setSearch(search);
} }
public String newSearch() { public String newSearch() {
logger.info("Setting new Search for pagination.."); logger.info("Setting new Search for pagination..");
page = 0; setPage(0);
setResults(null); setResults(null);
resultdatamodel = null; resultdatamodel = null;
return null; return null;
...@@ -145,4 +140,12 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -145,4 +140,12 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
resultdatamodel = null; resultdatamodel = null;
} }
public SearchQuery getSearchQuery() {
return searchQuery;
}
public void setSearchQuery(SearchQuery searchQuery) {
this.searchQuery = searchQuery;
}
} }
...@@ -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) {
......
...@@ -78,7 +78,7 @@ public class MapView extends GenericCDIView { ...@@ -78,7 +78,7 @@ public class MapView extends GenericCDIView {
public Long getPlacesLeftToSelect() { public Long getPlacesLeftToSelect() {
Long ret = placeMapBean.selectablePlaceCount(getActiveMap()); Long ret = placeMapBean.selectablePlaceCount(getActiveMap());
logger.info("Got {} places left for map {}", ret, getActiveMap()); logger.debug("Got {} places left for map {}", ret, getActiveMap());
return ret; return ret;
} }
...@@ -88,7 +88,7 @@ public class MapView extends GenericCDIView { ...@@ -88,7 +88,7 @@ public class MapView extends GenericCDIView {
Long ret = placeMapBean.availablePlaceCount(getActiveMap()); Long ret = placeMapBean.availablePlaceCount(getActiveMap());
logger.info("Got {} availbale places for map {}", ret, getActiveMap()); logger.debug("Got {} availbale places for map {}", ret, getActiveMap());
return ret; return ret;
} }
......
...@@ -23,6 +23,7 @@ import fi.insomnia.bortal.model.EventMap; ...@@ -23,6 +23,7 @@ import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -41,7 +42,7 @@ public class PlaceView extends GenericCDIView { ...@@ -41,7 +42,7 @@ public class PlaceView extends GenericCDIView {
@EJB @EJB
private transient UserBeanLocal userbean; private transient UserBeanLocal userbean;
@EJB @EJB
private transient PlaceBeanLocal placebean; private transient PlaceBeanLocal placebean;
...@@ -153,7 +154,7 @@ public class PlaceView extends GenericCDIView { ...@@ -153,7 +154,7 @@ public class PlaceView extends GenericCDIView {
public String searchUser() { public String searchUser() {
super.beginConversation(); super.beginConversation();
userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, searchuser).getResults()); userlist = new ListDataModel<User>(userbean.getUsers(new SearchQuery(0, 0, null, searchuser)).getResults());
return null; return null;
} }
......
...@@ -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) {
......
...@@ -17,6 +17,7 @@ import fi.insomnia.bortal.enums.apps.ShopPermission; ...@@ -17,6 +17,7 @@ import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
...@@ -72,7 +73,7 @@ public class ReaderView extends GenericCDIView { ...@@ -72,7 +73,7 @@ public class ReaderView extends GenericCDIView {
if (usersearch == null || usersearch.length() < 2) { if (usersearch == null || usersearch.length() < 2) {
super.addFaceMessage("user.tooShortSearch"); super.addFaceMessage("user.tooShortSearch");
} else { } else {
userlist = UserCardWrapper.initWrapper(userbean.getUsers(0, 0, null, usersearch).getResults(), userbean); userlist = UserCardWrapper.initWrapper(userbean.getUsers(new SearchQuery(0, 0, null, usersearch)).getResults(), userbean);
} }
return null; return 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(getSearchQuery()));
} }
} }
......
...@@ -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();
} }
} }
...@@ -186,7 +186,7 @@ public class UserView extends GenericCDIView { ...@@ -186,7 +186,7 @@ public class UserView extends GenericCDIView {
canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY); canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY);
this.beginConversation(); this.beginConversation();
logger.info("Accountevents for user {}", user.getAccountEvents().size()); logger.debug("Accountevents for user {}", user.getAccountEvents().size());
} }
......
...@@ -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;
} }
} }
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry exported="true" kind="lib" path="security.jar"/> <classpathentry exported="true" kind="lib" path="security.jar" sourcepath="/Users/tuomari/Downloads/security-3.1-sources.jar"/>
<classpathentry exported="true" kind="lib" path="common-util.jar"/> <classpathentry exported="true" kind="lib" path="common-util.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!