Commit 22cfdbac by Juho Juopperi

Merge branch 'master' of codecrew.fi:bortal

Conflicts:
	code/LanBortalWeb/src/fi/insomnia/bortal/web/cdiview/map/MapManageView.java
	code/LanBortalWeb/src/fi/insomnia/bortal/web/cdiview/user/AuthView.java
2 parents 5d752d89 42a59ade
Showing with 1907 additions and 557 deletions
...@@ -4,10 +4,6 @@ ...@@ -4,10 +4,6 @@
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/LanBortalAuthModuleClient"/> <classpathentry combineaccessrules="false" exported="true" kind="src" path="/LanBortalAuthModuleClient"/>
<classpathentry combineaccessrules="false" kind="src" path="/lib-AuthModule-depends"/> <classpathentry combineaccessrules="false" kind="src" path="/lib-AuthModule-depends"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1.2"/> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1.2"/>
<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"/>
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<attribute name="owner.project.facets" value="jst.utility"/> <attribute name="owner.project.facets" value="jst.utility"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<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/jdk1.7.0_05">
<attributes> <attributes>
<attribute name="owner.project.facets" value="java"/> <attribute name="owner.project.facets" value="java"/>
</attributes> </attributes>
......
...@@ -16,6 +16,11 @@ ...@@ -16,6 +16,11 @@
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand> <buildCommand>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name> <name>org.eclipse.wst.validation.validationbuilder</name>
<arguments> <arguments>
</arguments> </arguments>
...@@ -26,5 +31,6 @@ ...@@ -26,5 +31,6 @@
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<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.jboss.tools.jst.web.kb.kbnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1">
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<display-name>LanBortalBeans</display-name> <display-name>LanBortalBeans</display-name>
<ejb-client-jar>LanBortalBeansClient.jar</ejb-client-jar> <ejb-client-jar>LanBortalBeansClient.jar</ejb-client-jar>
</ejb-jar> </ejb-jar>
\ No newline at end of file
...@@ -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);
......
package fi.insomnia.bortal.beans;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import javax.imageio.ImageIO;
import org.jbarcode.JBarcode;
import org.jbarcode.JBarcodeFactory;
import org.krysalis.barcode4j.BarcodeDimension;
import org.krysalis.barcode4j.BarcodeGenerator;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.impl.datamatrix.DataMatrixBean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import com.pdfjet.A4;
import com.pdfjet.Image;
import com.pdfjet.ImageType;
import com.pdfjet.PDF;
import com.pdfjet.Page;
public class BarcodeBean {
public static InputStream getBarcode(String message) throws IOException {
// BarcodeGenerator bean = new DataMatrixBean();
BarcodeGenerator bean = new Code128Bean();
ByteArrayOutputStream out = new ByteArrayOutputStream();
// System.out.println("created: " + (new Date().getTime() - start));
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
out, "image/png", 150, BufferedImage.TYPE_BYTE_BINARY, false, 0);
canvas.establishDimensions(new BarcodeDimension(200, 15));
bean.generateBarcode(canvas, message);
canvas.finish();
ByteArrayInputStream istream = new ByteArrayInputStream(out.toByteArray());
return istream;
}
public void barcode4j() throws FileNotFoundException, Exception {
long start = new Date().getTime();
File outFile = new File("/tmp/rairai2.pdf");
PDF pdf = new PDF(new FileOutputStream(outFile));
System.out.println("pre CreateCode: " + (new Date().getTime() - start));
BarcodeGenerator bean = new DataMatrixBean();
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.out.println("created: " + (new Date().getTime() - start));
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
out, "image/png", 150, BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, "Foobar Rairai");
canvas.finish();
ByteArrayInputStream istream = new ByteArrayInputStream(out.toByteArray());
Image img = new Image(pdf, istream, ImageType.PNG);
Page page = new Page(pdf, A4.PORTRAIT);
img.drawOn(page);
System.out.println("post draw: " + (new Date().getTime() - start));
pdf.flush();
System.out.println("post flush: " + (new Date().getTime() - start));
}
public String asdasd() throws FileNotFoundException, Exception {
long start = new Date().getTime();
JBarcode code = JBarcodeFactory.getInstance().createCode128();
System.out.println("pre CreateCode: " + (new Date().getTime() - start));
BufferedImage barcode = code.createBarcode("Foobar Rairai");
System.out.println("created: " + (new Date().getTime() - start));
ImageIO.write(barcode, "JPEG", new File("/tmp/rairai.jpeg"));
System.out.println("To File: " + (new Date().getTime() - start));
File out = new File("/tmp/rairai2.pdf");
PDF pdf = new PDF(new FileOutputStream(out));
System.out.println("Pre stream: " + (new Date().getTime() - start));
ByteArrayOutputStream jpegstream = new ByteArrayOutputStream();
ImageIO.write(barcode, "JPEG", jpegstream);
System.out.println("post stream: " + (new Date().getTime() - start));
ByteArrayInputStream istream = new ByteArrayInputStream(jpegstream.toByteArray());
System.out.println("post istream: " + (new Date().getTime() - start));
Page page = new Page(pdf, A4.PORTRAIT);
Image img = new Image(pdf, istream, ImageType.JPEG);
img.drawOn(page);
System.out.println("post draw: " + (new Date().getTime() - start));
pdf.flush();
System.out.println("post flush: " + (new Date().getTime() - start));
return "";
}
public static void main(String[] args) {
BarcodeBean bb = new BarcodeBean();
try {
bb.barcode4j();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
...@@ -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;
...@@ -73,6 +72,8 @@ public class BillBean implements BillBeanLocal { ...@@ -73,6 +72,8 @@ public class BillBean implements BillBeanLocal {
private LoggingBeanLocal loggingBean; private LoggingBeanLocal loggingBean;
@EJB @EJB
private EventUserFacade eventUserFacade; private EventUserFacade eventUserFacade;
@EJB
private ProductPBean productPBean;
/** /**
* Default constructor. * Default constructor.
...@@ -88,7 +89,7 @@ public class BillBean implements BillBeanLocal { ...@@ -88,7 +89,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)) {
...@@ -239,7 +240,7 @@ public class BillBean implements BillBeanLocal { ...@@ -239,7 +240,7 @@ public class BillBean implements BillBeanLocal {
placebean.lockPlaceProduct(bill.getUser(), prod, bl.getQuantity()); placebean.lockPlaceProduct(bill.getUser(), prod, bl.getQuantity());
} }
AccountEvent ac2 = productBean.createAccountEvent(prod, bl.getQuantity(), user, bill.getSentDate()); AccountEvent ac2 = productPBean.createAccountEvent(prod, bl.getQuantity(), user, bill.getSentDate());
logger.info("Created ac from product. {}, userproducts {}", ac2, user.getAccountEvents().size()); logger.info("Created ac from product. {}, userproducts {}", ac2, user.getAccountEvents().size());
ac2.setSeller(permbean.getCurrentUser()); ac2.setSeller(permbean.getCurrentUser());
...@@ -249,7 +250,7 @@ public class BillBean implements BillBeanLocal { ...@@ -249,7 +250,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());
...@@ -281,7 +282,4 @@ public class BillBean implements BillBeanLocal { ...@@ -281,7 +282,4 @@ public class BillBean implements BillBeanLocal {
return billFacade.find(user); return billFacade.find(user);
} }
public void findByOrdernumber() {
}
} }
...@@ -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;
......
...@@ -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 {
user = eventUser.getUser();
}
if (user != null) { if (user != null) {
eventUser = new EventUser(user, eventbean.getCurrentEvent());
eventUserFacade.merge(eventUser);
}
}
EventUser ret = null; if (user.isAnonymous()) {
if (eventUser != null) {
if (eventUser.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,
String... 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,14 +121,20 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -113,14 +121,20 @@ public class LoggingBean implements LoggingBeanLocal {
} }
@Override @Override
public LogEntry logMessage(SecurityLogType paramType, EventUser user, public LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description) {
String... 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(String... desc) { private static final String toString(Object... desc) {
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
for (String msgpart : desc) { for (Object msgpart : desc) {
msg.append(msgpart); msg.append(msgpart);
} }
return msg.toString(); return msg.toString();
......
...@@ -77,7 +77,7 @@ public class Menubean implements MenubeanLocal { ...@@ -77,7 +77,7 @@ public class Menubean implements MenubeanLocal {
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logout"), null).setVisible(false); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logout"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logoutResponse"), null).setVisible(false); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logoutResponse"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetPassword"), null).setVisible(false); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetPassword"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetMailSent"), null).setVisible(false); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetmailSent"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false); frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false);
...@@ -104,6 +104,10 @@ public class Menubean implements MenubeanLocal { ...@@ -104,6 +104,10 @@ public class Menubean implements MenubeanLocal {
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/notification"), null).setVisible(false); shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/notification"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/pending"), null).setVisible(false); shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/pending"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/success"), null).setVisible(false); shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/success"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/cancel"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/delayed"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/reject"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/checkout/return"), null).setVisible(false);
MenuNavigation pollTopmenu = usernavi.addPage(null, null); MenuNavigation pollTopmenu = usernavi.addPage(null, null);
pollTopmenu.setKey("topnavi.poll"); pollTopmenu.setKey("topnavi.poll");
...@@ -140,9 +144,9 @@ public class Menubean implements MenubeanLocal { ...@@ -140,9 +144,9 @@ public class Menubean implements MenubeanLocal {
adminuser.addPage(menuitemfacade.findOrCreate("/place/adminInsertToken"), UserPermission.VIEW_ALL).setVisible(false); adminuser.addPage(menuitemfacade.findOrCreate("/place/adminInsertToken"), UserPermission.VIEW_ALL).setVisible(false);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/sendPicture"), UserPermission.VIEW_ALL).setVisible(false); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/sendPicture"), UserPermission.VIEW_ALL).setVisible(false);
MenuNavigation initUser = adminnavi.addPage(null, null); // MenuNavigation initUser = adminnavi.addPage(null, null);
initUser.setKey("topnavi.userinit"); // initUser.setKey("topnavi.userinit");
initUser.addPage(menuitemfacade.findOrCreate("/useradmin/validateUser"), UserPermission.VIEW_ALL); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/validateUser"), UserPermission.VIEW_ALL);
MenuNavigation usershop = adminnavi.addPage(null, null); MenuNavigation usershop = adminnavi.addPage(null, null);
usershop.setKey("topnavi.adminshop"); usershop.setKey("topnavi.adminshop");
......
...@@ -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();
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
...@@ -41,7 +42,6 @@ import fi.insomnia.bortal.facade.UserFacade; ...@@ -41,7 +42,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;
...@@ -54,9 +54,11 @@ import fi.insomnia.bortal.model.ProductFlag; ...@@ -54,9 +54,11 @@ import fi.insomnia.bortal.model.ProductFlag;
*/ */
@Stateless @Stateless
@LocalBean @LocalBean
@DeclareRoles({ MapPermission.S_BUY_PLACES, @DeclareRoles({
MapPermission.S_BUY_PLACES,
MapPermission.S_MANAGE_MAPS, MapPermission.S_MANAGE_MAPS,
MapPermission.S_VIEW, MapPermission.S_VIEW,
MapPermission.S_MANAGE_OTHERS,
}) })
public class PlaceBean implements PlaceBeanLocal { public class PlaceBean implements PlaceBeanLocal {
private static final String PLACE_RESERVE_TIMEOUTER = "Map reserve timeouter"; private static final String PLACE_RESERVE_TIMEOUTER = "Map reserve timeouter";
...@@ -94,6 +96,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -94,6 +96,8 @@ public class PlaceBean implements PlaceBeanLocal {
private AccountEventBeanLocal acbean; private AccountEventBeanLocal acbean;
@EJB @EJB
private PlaceGroupFacade pgfacade; private PlaceGroupFacade pgfacade;
@EJB
private ProductPBean productPBean;
@Override @Override
@RolesAllowed(MapPermission.S_MANAGE_MAPS) @RolesAllowed(MapPermission.S_MANAGE_MAPS)
...@@ -232,12 +236,12 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -232,12 +236,12 @@ public class PlaceBean implements PlaceBeanLocal {
// } // }
@Override @Override
@RolesAllowed(MapPermission.S_BUY_PLACES) @RolesAllowed({ MapPermission.S_BUY_PLACES, MapPermission.S_MANAGE_OTHERS })
public PlaceGroup buySelectedPlaces(EventUser user) throws BortalCatchableException { public PlaceGroup buySelectedPlaces(EventUser user) throws BortalCatchableException {
if (user == null) { if (user == null) {
user = permbean.getCurrentUser(); user = permbean.getCurrentUser();
} else { } else {
if (!user.equals(permbean.getCurrentUser())) { if (!user.equals(permbean.getCurrentUser()) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
loggerbean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "Can not buy places for user " + user); loggerbean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "Can not buy places for user " + user);
throw new EJBAccessException("Not enough permissions to buy place"); throw new EJBAccessException("Not enough permissions to buy place");
} }
...@@ -254,13 +258,13 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -254,13 +258,13 @@ public class PlaceBean implements PlaceBeanLocal {
BigDecimal totalprice = addAndCalcPrice(user, null); BigDecimal totalprice = addAndCalcPrice(user, null);
BigDecimal balance = user.getAccountBalance(); BigDecimal balance = user.getAccountBalance();
if (balance.compareTo(totalprice) < 0) { if (balance.compareTo(totalprice) < 0 && !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
logger.info("User {} Could not buy things because account balance {} is too low for purchase {}", new Object[] { user, balance, totalprice }); logger.info("User {} Could not buy things because account balance {} is too low for purchase {}", new Object[] { user, balance, totalprice });
return null;
} }
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) { for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
productBean.createAccountEvent(line.getKey(), new BigDecimal(line.getValue()), user); productPBean.createAccountEvent(line.getKey(), new BigDecimal(line.getValue()), user, Calendar.getInstance());
} }
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true); PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
...@@ -275,8 +279,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -275,8 +279,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 +330,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -326,7 +330,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 +353,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -349,7 +353,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
...@@ -358,6 +362,13 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -358,6 +362,13 @@ public class PlaceBean implements PlaceBeanLocal {
GroupMembership membership = new GroupMembership(pg, p, gmemfacade.createInviteToken()); GroupMembership membership = new GroupMembership(pg, p, gmemfacade.createInviteToken());
pg.getMembers().add(membership); pg.getMembers().add(membership);
p.setPlaceReserver(membership); p.setPlaceReserver(membership);
if (pg.getPlaces() == null) {
pg.setPlaces(new ArrayList<Place>());
}
if (!pg.getPlaces().contains(p))
{
pg.getPlaces().add(p);
}
return membership; return membership;
} }
...@@ -451,7 +462,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -451,7 +462,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;
} }
......
...@@ -23,11 +23,14 @@ import com.pdfjet.TextLine; ...@@ -23,11 +23,14 @@ import com.pdfjet.TextLine;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission; import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.facade.GroupMembershipFacade; import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade; 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;
import fi.insomnia.bortal.utilities.BarcodeUtils;
/** /**
* Session Bean implementation class PlaceGroupBean * Session Bean implementation class PlaceGroupBean
...@@ -52,6 +55,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -52,6 +55,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
private LoggingBeanLocal loggerbean; private LoggingBeanLocal loggerbean;
@EJB @EJB
private PlaceGroupFacade pgfacade; private PlaceGroupFacade pgfacade;
@EJB
private EventUserFacade eventuserfacade;
/** /**
* Default constructor. * Default constructor.
...@@ -101,17 +106,18 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -101,17 +106,18 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
@Override @Override
@RolesAllowed(MapPermission.S_BUY_PLACES) @RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean associateToToken(EventUser user, String token) { public boolean associateToToken(EventUser user, String token) {
user = eventuserfacade.reload(user);
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) { if (!permbean.isCurrentUser(user) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
throw new EJBAccessException(); throw new EJBAccessException();
} }
token = token.trim(); token = token.trim();
GroupMembership mem = gmemfacade.findByToken(token); GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false; boolean ret = false;
if (mem != null && mem.getUser() == null) { if (mem != null && mem.getUser() == null) {
mem.setUser(user); mem.setUser(user);
gmemfacade.merge(mem); // gmemfacade.merge(mem);
ret = true; ret = true;
} }
...@@ -143,7 +149,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -143,7 +149,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
// PNGImage(BarcodeBean.getBarcode(membership.getInviteToken())); // PNGImage(BarcodeBean.getBarcode(membership.getInviteToken()));
// logger.debug("Jpeg: " + jpeg.getWidth() + " h. " + // logger.debug("Jpeg: " + jpeg.getWidth() + " h. " +
// jpeg.getHeight()); // jpeg.getHeight());
Image image = new Image(pdf, BarcodeBean.getBarcode(membership.getInviteToken()), ImageType.PNG); Image image = new Image(pdf, BarcodeUtils.getBarcode(membership.getInviteToken()), ImageType.PNG);
image.scaleBy(0.8); image.scaleBy(0.8);
image.setPosition(50, y); image.setPosition(50, y);
image.drawOn(page); image.drawOn(page);
...@@ -164,7 +170,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -164,7 +170,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 +179,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -172,7 +179,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);
......
...@@ -2,9 +2,11 @@ package fi.insomnia.bortal.beans; ...@@ -2,9 +2,11 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
...@@ -12,19 +14,25 @@ import javax.ejb.EJB; ...@@ -12,19 +14,25 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.facade.AccountEventFacade; import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.DiscountFacade; import fi.insomnia.bortal.facade.DiscountFacade;
import fi.insomnia.bortal.facade.EventUserFacade; import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.facade.ProductFacade; import fi.insomnia.bortal.facade.ProductFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccountEvent; import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Discount; import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.DiscountInstance;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
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;
import fi.insomnia.bortal.model.ProductLimitation;
import fi.insomnia.bortal.model.Role;
/** /**
* Session Bean implementation class ProductBean * Session Bean implementation class ProductBean
...@@ -59,6 +67,19 @@ public class ProductBean implements ProductBeanLocal { ...@@ -59,6 +67,19 @@ public class ProductBean implements ProductBeanLocal {
private PermissionBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB @EJB
private EventUserFacade eventUserFacade; private EventUserFacade eventUserFacade;
@EJB
private UserBeanLocal userbean;
@EJB
private BillBeanLocal billbean;
@EJB
private EventBeanLocal eventbean;
@EJB
private BillLineFacade billLineFacade;
@EJB
private ProductPBean productPBean;
private static final Logger logger = LoggerFactory.getLogger(ProductBean.class);
/** /**
* Default constructor. * Default constructor.
...@@ -109,6 +130,139 @@ public class ProductBean implements ProductBeanLocal { ...@@ -109,6 +130,139 @@ public class ProductBean implements ProductBeanLocal {
return retProd; return retProd;
} }
/**
* TODO: This is not enforced!!!
*
* @param product
* Product to find limits for
* @return How many products can still be bought. NULL if no limit.
*/
@Override
public HashMap<Integer, BigDecimal> getProductLimit(Map<Integer, BigDecimal> prodCounts, EventUser user)
{
HashMap<Integer, BigDecimal> ret = new HashMap<Integer, BigDecimal>();
for (Entry<Integer, BigDecimal> pc : prodCounts.entrySet())
{
Product prod = productFacade.find(pc.getKey());
BigDecimal lim = getProductLimit(prod, user, prodCounts);
ret.put(prod.getId(), lim);
// logger.info("Added product limit {} to {}", lim, prod);
}
System.out.println(ret);
return ret;
}
@Override
public BigDecimal getProductLimit(Product product, EventUser user, Map<Integer, BigDecimal> prodCounts)
{
product = productFacade.reload(product);
List<Role> userroles = userbean.findUsersRoles(user);
BigDecimal ret = null;
if (product != null && product.getProductLimits() != null)
{
for (ProductLimitation limit : product.getProductLimits())
{
BigDecimal currentCount = BigDecimal.ZERO;
for (Product p : limit.getProducts())
{
currentCount = currentCount.add(prodCounts.get(p.getId()));
}
// logger.info("Got limit {} for product {}", limit, product);
if (limit.getMatchingRoles() != null && !limit.getMatchingRoles().isEmpty())
{
boolean roleMatched = false;
for (Role mr : limit.getMatchingRoles()) {
if (userroles.contains(mr)) {
roleMatched = true;
break;
}
}
if (!roleMatched) {
continue;
}
}
BigDecimal count = currentCount;
switch (limit.getType())
{
case GLOBAL_BILLED:
BigDecimal globBillTot = BigDecimal.ZERO;
for (Product p : limit.getProducts())
{
BillSummary globBilledSummary = billLineFacade.getLineSummary(p, eventbean.getCurrentEvent());
globBillTot = globBillTot.add(globBilledSummary.getTotal());
}
count = count.add(globBillTot);
ret = limit.getUpperLimit().subtract(count);
break;
case GLOBAL_BILL_PAID:
BigDecimal globBillPaid = BigDecimal.ZERO;
for (Product p : limit.getProducts())
{
BillSummary billPaidSummary = billLineFacade.getLineSummary(p, eventbean.getCurrentEvent());
globBillPaid = globBillPaid.add(billPaidSummary.getPaid());
}
count = count.add(globBillPaid);
ret = limit.getUpperLimit().subtract(count);
break;
case GLOBAL_ACCOUNTEVENTS:
BigDecimal globalProductCount = accounteventfacade.getProductCount(limit.getProducts());
if (globalProductCount != null) {
count = count.add(globalProductCount);
}
ret = limit.getUpperLimit().subtract(count);
break;
case USER_ACCOUNTEVENTS:
BigDecimal userProductCount = accounteventfacade.getProductCount(limit.getProducts(), user);
if (userProductCount != null)
{
count = count.add(userProductCount);
}
ret = limit.getUpperLimit().subtract(count);
break;
case USER_BILLED:
BigDecimal userBillTot = BigDecimal.ZERO;
for (Product p : limit.getProducts())
{
BillSummary userBilledSummary = billLineFacade.getLineSummary(p, eventbean.getCurrentEvent(), user);
userBillTot = userBillTot.add(userBilledSummary.getTotal());
}
count = count.add(userBillTot);
ret = limit.getUpperLimit().subtract(count);
break;
case USER_BILL_PAID:
BigDecimal userBillPaid = BigDecimal.ZERO;
for (Product p : limit.getProducts())
{
BillSummary userPaidSummary = billLineFacade.getLineSummary(p, eventbean.getCurrentEvent(), user);
userBillPaid = userBillPaid.add(userPaidSummary.getPaid());
}
count = count.add(userBillPaid);
ret = limit.getUpperLimit().subtract(count);
break;
default:
break;
}
if (ret != null)
{
// logger.warn("breaking for value {}, product {}", ret,
// product);
break;
}
}
}
return ret;
}
@Override @Override
public BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date) { public BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date) {
if (product == null || quantity == null) { if (product == null || quantity == null) {
...@@ -136,36 +290,6 @@ public class ProductBean implements ProductBeanLocal { ...@@ -136,36 +290,6 @@ public class ProductBean implements ProductBeanLocal {
// return ret; // return ret;
// } // }
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user, Calendar date) {
BigDecimal unitPrice = product.getPrice().negate();
List<Discount> discounts = product.getActiveDiscounts(quantity, date);
for (Discount d : discounts) {
unitPrice = unitPrice.multiply(d.getPercentage());
}
AccountEvent ret = new AccountEvent(user, product, unitPrice, quantity, Calendar.getInstance());
ret.setDelivered(Calendar.getInstance());
ret.setSeller(permbean.getCurrentUser());
List<DiscountInstance> accEventdiscounts = ret.getDiscountInstances();
for (Discount d : discounts) {
// discountsArray.add(discInst);
// discountinstancefacade.create(discInst);
accEventdiscounts.add(new DiscountInstance(ret, d));
}
if (user.getAccountEvents() == null) {
user.setAccountEvents(new ArrayList<AccountEvent>());
}
user.getAccountEvents().add(ret);
accounteventfacade.create(ret);
// flush changes to db.
// userFacade.flush();
return ret;
}
@Override @Override
public Product findById(int id) { public Product findById(int id) {
Product ret = productFacade.find(id); Product ret = productFacade.find(id);
...@@ -200,6 +324,15 @@ public class ProductBean implements ProductBeanLocal { ...@@ -200,6 +324,15 @@ public class ProductBean implements ProductBeanLocal {
@Override @Override
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user) { public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user) {
return createAccountEvent(product, quantity, user, Calendar.getInstance()); user = eventUserFacade.reload(user);
AccountEvent ret = productPBean.createAccountEvent(product, quantity, user, Calendar.getInstance());
return ret;
} }
@Override
// @RolesAllowed(ShopPermission.S_LIST_ALL_PRODUCTS)
public Product findByBarcode(String barcode) {
return productFacade.findProductByBarcode(barcode);
}
} }
package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.DiscountInstance;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product;
/**
* Session Bean implementation class ProductPBean
*/
@Stateless
@LocalBean
public class ProductPBean {
@EJB
private PermissionBean permbean;
private AccountEventFacade accounteventfacade;
/**
* Default constructor.
*/
public ProductPBean() {
// TODO Auto-generated constructor stub
}
/**
* Creates new AccountEvent from provided product to provided user <br>
* <strong>Notice</strong>, that this function expects the user parameter to
* be attached entity!
*
* @param product
* Product to create the account event from
* @param quantity
* How many products have been bought
* @param user
* user to whom the product should be created. MUST BE ATTACHED
* ENTITY!
* @param date
* AccountEvent creation time
* @return The created AccountEvent entity
*/
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user, Calendar date) {
BigDecimal unitPrice = product.getPrice().negate();
List<Discount> discounts = product.getActiveDiscounts(quantity, date);
for (Discount d : discounts) {
unitPrice = unitPrice.multiply(d.getPercentage());
}
AccountEvent ret = new AccountEvent(user, product, unitPrice, quantity, Calendar.getInstance());
ret.setDelivered(Calendar.getInstance());
ret.setSeller(permbean.getCurrentUser());
List<DiscountInstance> accEventdiscounts = ret.getDiscountInstances();
for (Discount d : discounts) {
// discountsArray.add(discInst);
// discountinstancefacade.create(discInst);
accEventdiscounts.add(new DiscountInstance(ret, d));
}
if (user.getAccountEvents() == null) {
user.setAccountEvents(new ArrayList<AccountEvent>());
}
user.getAccountEvents().add(ret);
accounteventfacade.create(ret);
// flush changes to db.
// userFacade.flush();
return ret;
}
}
...@@ -131,4 +131,11 @@ public class SitePageBean implements SitePageBeanLocal { ...@@ -131,4 +131,11 @@ public class SitePageBean implements SitePageBeanLocal {
SitePage page = sitepagefacade.find(name); SitePage page = sitepagefacade.find(name);
return getContentsForPage(page); return getContentsForPage(page);
} }
@Override
@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
public SitePage findSitename(String managedPage) {
return sitepagefacade.find(managedPage);
}
} }
...@@ -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,8 @@ public class UserBean implements UserBeanLocal { ...@@ -245,7 +246,8 @@ 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);
// todo add barcode
user.setEvent(eventBean.getCurrentEvent()); user.setEvent(eventBean.getCurrentEvent());
// Tallennetaan olio kantaan... // Tallennetaan olio kantaan...
eventUserFacade.create(user); eventUserFacade.create(user);
...@@ -309,8 +311,8 @@ public class UserBean implements UserBeanLocal { ...@@ -309,8 +311,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 +339,7 @@ public class UserBean implements UserBeanLocal { ...@@ -337,7 +339,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 +422,7 @@ public class UserBean implements UserBeanLocal { ...@@ -420,7 +422,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 +460,7 @@ public class UserBean implements UserBeanLocal { ...@@ -458,7 +460,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();
} }
...@@ -489,4 +491,22 @@ public class UserBean implements UserBeanLocal { ...@@ -489,4 +491,22 @@ public class UserBean implements UserBeanLocal {
} }
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
public EventUser getUserByBarcode(String barcode) {
EventUser user = eventUserFacade.findByBarcode(barcode);
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());
} }
} }
......
...@@ -4,8 +4,6 @@ import java.io.IOException; ...@@ -4,8 +4,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.StringWriter; import java.io.StringWriter;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
...@@ -22,14 +20,12 @@ import javax.xml.parsers.DocumentBuilder; ...@@ -22,14 +20,12 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.codec.binary.Hex;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope; import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.auth.params.AuthPNames; import org.apache.http.auth.params.AuthPNames;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.AuthPolicy; import org.apache.http.client.params.AuthPolicy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.DefaultHttpClient;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -47,6 +43,7 @@ import fi.insomnia.bortal.model.LanEventPrivateProperty; ...@@ -47,6 +43,7 @@ import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventPrivatePropertyKey; import fi.insomnia.bortal.model.LanEventPrivatePropertyKey;
import fi.insomnia.bortal.util.SvmReturnType; import fi.insomnia.bortal.util.SvmReturnType;
import fi.insomnia.bortal.util.VerkkomaksutReturnEntry; import fi.insomnia.bortal.util.VerkkomaksutReturnEntry;
import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry; import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry;
/** /**
...@@ -58,7 +55,7 @@ import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry; ...@@ -58,7 +55,7 @@ import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry;
public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal { public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(VerkkomaksutFiBean.class); private static final Logger logger = LoggerFactory.getLogger(VerkkomaksutFiBean.class);
private static final char CHECKSUM_SEP = '|'; private static final String CHECKSUM_SEP = "|";
@EJB @EJB
private EventBean eventbean; private EventBean eventbean;
@EJB @EJB
...@@ -92,19 +89,16 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal { ...@@ -92,19 +89,16 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
} }
String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD); String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
StringBuilder sumSource = new StringBuilder().append(orderNumber).append(CHECKSUM_SEP)
.append(timestamp).append(CHECKSUM_SEP)
.append(paid).append(CHECKSUM_SEP)
.append(method).append(CHECKSUM_SEP)
.append(merchantPassword);
boolean ret = false; boolean ret = false;
try {
MessageDigest algo = MessageDigest.getInstance("MD5");
final byte[] resultByte = algo.digest(sumSource.toString().getBytes()); String calculatedHash = PasswordFunctions.calculateMd5(CHECKSUM_SEP,
final String calculatedHash = new String(Hex.encodeHex(resultByte)); orderNumber,
timestamp,
paid,
method,
merchantPassword);
logger.info("calculated checksum for svv message: {}, comparing to {}", calculatedHash, authcode); logger.info("calculated checksum for svv message: {}, comparing to {}", calculatedHash, authcode);
if (authcode.toUpperCase().equals(calculatedHash.toUpperCase())) { if (authcode.toUpperCase().equals(calculatedHash)) {
Bill bill = billFacade.find(Integer.parseInt(orderNumber)); Bill bill = billFacade.find(Integer.parseInt(orderNumber));
if (bill != null) if (bill != null)
{ {
...@@ -118,19 +112,17 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal { ...@@ -118,19 +112,17 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Validated order number ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode); logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Validated order number ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
ret = true; ret = true;
} else { } else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Bill already marked paid or other error. ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode); logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Bill already marked paid or other error. ", orderNumber, " bill ", bill.toString(), " with authcode: ", authcode);
ret = true; ret = true;
} }
} else { } else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to find bill for order number ", orderNumber); logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Mac validated, but unable to find bill for order number ", orderNumber);
} }
} else { } else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to validate order number: ", orderNumber, " calculated checksum: ", calculatedHash, " authcode ", authcode, " paid ", paid, " method ", method); logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to validate order number: ", orderNumber, " calculated checksum: ", calculatedHash, " authcode ", authcode, " paid ", paid, " method ", method);
} }
} catch (NoSuchAlgorithmException e) {
logger.warn("THIS SHOULD NEVER HAPPEN! (md5 hashfunction should always exist)", e);
}
return ret; return ret;
} }
...@@ -206,7 +198,8 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal { ...@@ -206,7 +198,8 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
postRequest.setHeader("Content-Type", "application/xml"); postRequest.setHeader("Content-Type", "application/xml");
postRequest.setHeader("X-Verkkomaksut-Api-Version", "1"); postRequest.setHeader("X-Verkkomaksut-Api-Version", "1");
postRequest.setEntity(new StringEntity(outputPayment(paymentMsg))); // postRequest.setEntity(new
// StringEntity(outputPayment(paymentMsg)));
HttpResponse response = client.execute(postRequest); HttpResponse response = client.execute(postRequest);
......
<?xml version="1.0" encoding="utf-8"?>
<trade>
<id>3821058</id>
<description/>
<status>1</status>
<returnURL>http://localhost/LanBortalWeb/checkout/return.jsf</returnURL>
<returnMAC/>
<cancelURL>http://localhost/LanBortalWeb/checkout/cancel.jsf</cancelURL>
<cancelMAC>8B97471C27317150BEC42B6948334584</cancelMAC>
<rejectURL>http://localhost/LanBortalWeb/checkout/reject.jsf</rejectURL>
<delayedURL>http://localhost/LanBortalWeb/checkout/delayed.jsf</delayedURL>
<delayedMAC>00CF8456F8DF896B3FD6B4B42B45F8B3</delayedMAC>
<stamp>512</stamp>
<version>0001</version>
<reference>543761</reference>
<language>FI</language>
<content>1</content>
<deliveryDate>20120825</deliveryDate>
<firstname/>
<familyname/>
<address/>
<postcode/>
<postoffice/>
<country>FIN</country>
<device>10</device>
<algorithm>2</algorithm>
<paymentURL>https://payment.checkout.fi/p/3821058/DD086BF4-242DEF54-E0D72CE6-5D86580C</paymentURL>
<merchant>
<id>375917</id>
<company>Testi Oy</company>
<name>Testi Henkilö</name>
<email>testi@checkout.fi</email>
<address>Testikuja 1&#13;
12345 Testilä</address>
<vatId>123456-7</vatId>
<helpdeskNumber>012-345 678</helpdeskNumber>
</merchant>
<payments>
<payment>
<id>4358863</id>
<amount>6500</amount>
<stamp>512</stamp>
<banks>
<nordea url="https://solo3.nordea.fi/cgi-bin/SOLOPM01" icon="https://payment.checkout.fi/static/img/nordea.png" name="Nordea">
<SOLOPMT_VERSION>0003</SOLOPMT_VERSION>
<SOLOPMT_RCV_ID>12345678</SOLOPMT_RCV_ID>
<SOLOPMT_CUR>EUR</SOLOPMT_CUR>
<SOLOPMT_LANGUAGE>1</SOLOPMT_LANGUAGE>
<SOLOPMT_RCV_ACCOUNT/>
<SOLOPMT_REJECT>https://payment.checkout.fi/3xCDj1snWL/fi/reject</SOLOPMT_REJECT>
<SOLOPMT_CONFIRM>YES</SOLOPMT_CONFIRM>
<SOLOPMT_CANCEL>https://payment.checkout.fi/3xCDj1snWL/fi/back</SOLOPMT_CANCEL>
<SOLOPMT_RCV_NAME>Checkout Oy</SOLOPMT_RCV_NAME>
<SOLOPMT_DATE>EXPRESS</SOLOPMT_DATE>
<SOLOPMT_AMOUNT>65.00</SOLOPMT_AMOUNT>
<SOLOPMT_REF>43588631</SOLOPMT_REF>
<SOLOPMT_MSG>Testi Henkilö</SOLOPMT_MSG>
<SOLOPMT_MAC>9EE2A23AF88918BFCAA50DE88880280C</SOLOPMT_MAC>
<SOLOPMT_STAMP>3821058</SOLOPMT_STAMP>
<SOLOPMT_RETURN>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</SOLOPMT_RETURN>
<SOLOPMT_KEYVERS>0001</SOLOPMT_KEYVERS>
</nordea>
<osuuspankki url="https://kultaraha.op.fi/cgi-bin/krcgi" icon="https://payment.checkout.fi/static/img/osuuspankki.png" name="Osuuspankki">
<VALUUTTALAJI>EUR</VALUUTTALAJI>
<VIITE>43588631</VIITE>
<MAKSUTUNNUS>3821058</MAKSUTUNNUS>
<action_id>701</action_id>
<MYYJA>Esittelymyyja</MYYJA>
<SUMMA>65.00</SUMMA>
<VIESTI>Testi Henkilö</VIESTI>
<TARKISTE>B6951EC4B7CC3F31C693351E08868545</TARKISTE>
<PALUU-LINKKI>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</PALUU-LINKKI>
<VERSIO>1</VERSIO>
<TARKISTE-VERSIO>1</TARKISTE-VERSIO>
<VAHVISTUS>K</VAHVISTUS>
<PERUUTUS-LINKKI>https://payment.checkout.fi/3xCDj1snWL/fi/back</PERUUTUS-LINKKI>
</osuuspankki>
<samlink url="https://verkkomaksu.inetpankki.samlink.fi/vm/login.html" icon="https://payment.checkout.fi/static/img/sppopmaksu.gif" name="SP, Nooa, POP, Aktia">
<NET_VERSION>002</NET_VERSION>
<NET_SELLER_ID>0000000000</NET_SELLER_ID>
<NET_CUR>EUR</NET_CUR>
<NET_REJECT>https://payment.checkout.fi/3xCDj1snWL/fi/reject</NET_REJECT>
<NET_CONFIRM>YES</NET_CONFIRM>
<NET_CANCEL>https://payment.checkout.fi/3xCDj1snWL/fi/back</NET_CANCEL>
<NET_DATE>EXPRESS</NET_DATE>
<NET_AMOUNT>65,00</NET_AMOUNT>
<NET_REF>43588631</NET_REF>
<NET_MSG>Testi Henkilö</NET_MSG>
<NET_MAC>293305EFADD49443F9D3DF688237AF93</NET_MAC>
<NET_STAMP>3821058</NET_STAMP>
<NET_RETURN>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</NET_RETURN>
</samlink>
<sampo url="https://verkkopankki.sampopankki.fi/SP/vemaha/VemahaApp" icon="https://payment.checkout.fi/static/img/sammon_verkkomaksu.gif" name="Sampo Pankki">
<SUMMA>65.00</SUMMA>
<VIITE>43588631</VIITE>
<KNRO>000000000000</KNRO>
<VALUUTTA>EUR</VALUUTTA>
<VERSIO>3</VERSIO>
<OKURL>https://payment.checkout.fi/3xCDj1snWL/fi/confirm?ORDER=3821058&amp;ORDERMAC=2662642DF9C2981C19106D1C3302BFAD</OKURL>
<VIRHEURL>https://payment.checkout.fi/3xCDj1snWL/fi/back</VIRHEURL>
<TARKISTE>efc9f89cccfd53506b8f317bb8e1ae79</TARKISTE>
<lng>1</lng>
</sampo>
<handelsbanken url="https://verkkomaksu.inetpankki.samlink.fi/vm/SHBlogin.html" icon="https://payment.checkout.fi/static/img/handelsbanken.gif" name="Handelsbanken">
<NET_VERSION>002</NET_VERSION>
<NET_SELLER_ID>0000000000</NET_SELLER_ID>
<NET_CUR>EUR</NET_CUR>
<NET_REJECT>https://payment.checkout.fi/3xCDj1snWL/fi/reject</NET_REJECT>
<NET_CONFIRM>YES</NET_CONFIRM>
<NET_CANCEL>https://payment.checkout.fi/3xCDj1snWL/fi/back</NET_CANCEL>
<NET_DATE>EXPRESS</NET_DATE>
<NET_AMOUNT>65,00</NET_AMOUNT>
<NET_REF>43588631</NET_REF>
<NET_MSG>Testi Henkilö</NET_MSG>
<NET_MAC>293305EFADD49443F9D3DF688237AF93</NET_MAC>
<NET_STAMP>3821058</NET_STAMP>
<NET_RETURN>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</NET_RETURN>
</handelsbanken>
<spankki url="https://online.s-pankki.fi/service/paybutton" icon="https://payment.checkout.fi/static/img/S_Pankki_Green_78.gif" name="S-Pankki">
<AAB_VERSION>0002</AAB_VERSION>
<AAB_STAMP>3821058</AAB_STAMP>
<AAB_RCV_ID>SPANKKIESHOPID</AAB_RCV_ID>
<AAB_RCV_ACCOUNT>393900-01002369</AAB_RCV_ACCOUNT>
<AAB_RCV_NAME>CHECKOUT FINLAND OY</AAB_RCV_NAME>
<AAB_LANGUAGE>1</AAB_LANGUAGE>
<AAB_AMOUNT>65,00</AAB_AMOUNT>
<AAB_REF>43588631</AAB_REF>
<AAB_DATE>EXPRESS</AAB_DATE>
<AAB_MSG>Testi Henkilö</AAB_MSG>
<AAB_RETURN>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</AAB_RETURN>
<AAB_CANCEL>https://payment.checkout.fi/3xCDj1snWL/fi/back</AAB_CANCEL>
<AAB_REJECT>https://payment.checkout.fi/3xCDj1snWL/fi/reject</AAB_REJECT>
<AAB_MAC>1CC537271ACF6FBBCAAECF871696F1C4</AAB_MAC>
<AAB_CONFIRM>YES</AAB_CONFIRM>
<AAB_KEYVERS>0001</AAB_KEYVERS>
<AAB_CUR>EUR</AAB_CUR>
</spankki>
<alandsbanken url="https://online.alandsbanken.fi/aab/ebank/auth/initLogin.do?BV_UseBVCookie=no" icon="https://payment.checkout.fi/static/img/alandsbanken.gif" name="Ålandsbanken">
<AAB_VERSION>0002</AAB_VERSION>
<AAB_STAMP>3821058</AAB_STAMP>
<AAB_RCV_ID>AABESHOPID</AAB_RCV_ID>
<AAB_RCV_ACCOUNT>660100-1130855</AAB_RCV_ACCOUNT>
<AAB_RCV_NAME>Checkout</AAB_RCV_NAME>
<AAB_LANGUAGE>1</AAB_LANGUAGE>
<AAB_AMOUNT>65,00</AAB_AMOUNT>
<AAB_REF>43588631</AAB_REF>
<AAB_DATE>EXPRESS</AAB_DATE>
<AAB_MSG>Testi Henkilö</AAB_MSG>
<AAB_RETURN>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</AAB_RETURN>
<AAB_CANCEL>https://payment.checkout.fi/3xCDj1snWL/fi/back</AAB_CANCEL>
<AAB_REJECT>https://payment.checkout.fi/3xCDj1snWL/fi/reject</AAB_REJECT>
<AAB_MAC>61DE453D9346503E3298295A4E8717F0</AAB_MAC>
<AAB_CONFIRM>YES</AAB_CONFIRM>
<AAB_KEYVERS>0001</AAB_KEYVERS>
<AAB_CUR>EUR</AAB_CUR>
<BV_UseBVCookie>no</BV_UseBVCookie>
</alandsbanken>
<tapiola url="https://pankki.tapiola.fi/tap_bv/ebank/auth/initLogin.do" icon="https://payment.checkout.fi/static/img/tapiolan_verkkomaksu.gif" name="Tapiola Pankki">
<AAB_VERSION>0002</AAB_VERSION>
<AAB_STAMP>3821058</AAB_STAMP>
<AAB_RCV_ID>TAPESHOPID</AAB_RCV_ID>
<AAB_RCV_ACCOUNT>363630-01652643</AAB_RCV_ACCOUNT>
<AAB_RCV_NAME>Checkout</AAB_RCV_NAME>
<AAB_LANGUAGE>1</AAB_LANGUAGE>
<AAB_AMOUNT>65,00</AAB_AMOUNT>
<AAB_REF>43588631</AAB_REF>
<AAB_DATE>EXPRESS</AAB_DATE>
<AAB_MSG>Testi Henkilö</AAB_MSG>
<AAB_RETURN>https://payment.checkout.fi/3xCDj1snWL/fi/confirm</AAB_RETURN>
<AAB_CANCEL>https://payment.checkout.fi/3xCDj1snWL/fi/back</AAB_CANCEL>
<AAB_REJECT>https://payment.checkout.fi/3xCDj1snWL/fi/reject</AAB_REJECT>
<AAB_MAC>9EF87EB6D0DC0328519B7AA9B29DADC4</AAB_MAC>
<AAB_CONFIRM>YES</AAB_CONFIRM>
<AAB_KEYVERS>0001</AAB_KEYVERS>
<AAB_CUR>EUR</AAB_CUR>
<BV_UseBVCookie>NO</BV_UseBVCookie>
</tapiola>
<neopay url="https://www.neocard.fi/neopay11/" icon="https://payment.checkout.fi/static/img/logo_neo_maksuominaisuus.gif" name="Neocard">
<terminal_identifier>999</terminal_identifier>
<business_code>1234567-4</business_code>
<timestamp>20120825040836</timestamp>
<amount_to_debit>6500</amount_to_debit>
<order_info>Testi Henkilö</order_info>
<success_url>https://payment.checkout.fi/3xCDj1snWL/fi/confirm?p=4358863&amp;t=3821058&amp;amount=6500</success_url>
<failure_url>https://payment.checkout.fi/3xCDj1snWL/fi/back</failure_url>
<cancel_url>https://payment.checkout.fi/3xCDj1snWL/fi/reject</cancel_url>
<checksum>cef67d792662f5a95a766a6b259f181f</checksum>
</neopay>
<tilisiirto url="https://payment.checkout.fi/3xCDj1snWL/fi/tilisiirto" icon="https://payment.checkout.fi/static/img/tilisiirto.gif" name="Tilisiirto">
<bank>Nordea</bank>
<iban>FI06 1146 3001 1145 34</iban>
<bic>NDEAFIHH</bic>
<reference>43588631</reference>
<amount>6500</amount>
<receiver>Checkout Finland Oy</receiver>
</tilisiirto>
<ape url="https://payment.checkout.fi/3xCDj1snWL/fi/wallet" icon="https://payment.checkout.fi/static/img/ape_logo_64x64.png" name="APE Kukkaro">
<merchant>checkout</merchant>
<item>43588631</item>
<price>65.00</price>
<mac>2043fd7d763519a0badd05dad4b0a639</mac>
</ape>
</banks>
</payment>
</payments>
</trade>
\ No newline at end of file
package fi.insomnia.bortal.checkoutfi;
public enum CheckoutFiParam {
// DO NOT CHANGE THE ORDER OF THESE!
// The md5 checksum is calculated from
// these values...
VERSION("0001"),
STAMP(null),
AMOUNT(null),
REFERENCE(null),
MESSAGE(null),
LANGUAGE("FI"),
MERCHANT(null),
RETURN(null),
CANCEL(null),
REJECT(null),
DELAYED(null),
COUNTRY("FIN"),
CURRENCY("EUR"),
DEVICE("10"),
CONTENT("1"),
TYPE("0"),
ALGORITHM("2"),
DELIVERY_DATE(null),
FIRSTNAME(null),
FAMILYNAME(null),
ADDRESS(null),
POSTCODE(null),
POSTOFFICE(null), ;
private final String defaultValue;
private CheckoutFiParam(String def) {
defaultValue = def;
}
public String getDefaultValue() {
return defaultValue;
}
}
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -14,6 +16,7 @@ import fi.insomnia.bortal.model.AccountEvent; ...@@ -14,6 +16,7 @@ import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.AccountEvent_; import fi.insomnia.bortal.model.AccountEvent_;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
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.Product_;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.Role_; import fi.insomnia.bortal.model.Role_;
...@@ -59,4 +62,33 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> { ...@@ -59,4 +62,33 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> {
); );
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public BigDecimal getProductCount(List<Product> list) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<BigDecimal> cq = cb.createQuery(BigDecimal.class);
Root<AccountEvent> root = cq.from(AccountEvent.class);
List<Integer> ids = new ArrayList<Integer>();
for (Product l : list) {
ids.add(l.getId());
}
cq.where(root.get(AccountEvent_.product).get(Product_.id).in(ids));
cq.select(cb.sum(root.get(AccountEvent_.quantity)));
return super.getSingleNullableResult(getEm().createQuery(cq));
}
public BigDecimal getProductCount(List<Product> list, EventUser eventuser) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<BigDecimal> cq = cb.createQuery(BigDecimal.class);
Root<AccountEvent> root = cq.from(AccountEvent.class);
List<Integer> ids = new ArrayList<Integer>();
for (Product l : list) {
ids.add(l.getId());
}
cq.where(root.get(AccountEvent_.product).get(Product_.id).in(ids),
cb.equal(root.get(AccountEvent_.user), eventuser));
cq.select(cb.sum(root.get(AccountEvent_.quantity)));
return super.getSingleNullableResult(getEm().createQuery(cq));
}
} }
...@@ -64,4 +64,5 @@ public class BillFacade extends IntegerPkGenericFacade<Bill> { ...@@ -64,4 +64,5 @@ public class BillFacade extends IntegerPkGenericFacade<Bill> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
} }
...@@ -18,7 +18,9 @@ import fi.insomnia.bortal.bortal.views.BillSummary; ...@@ -18,7 +18,9 @@ import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.model.BillLine; import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.BillLine_; import fi.insomnia.bortal.model.BillLine_;
import fi.insomnia.bortal.model.Bill_; import fi.insomnia.bortal.model.Bill_;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
@Stateless @Stateless
@LocalBean @LocalBean
...@@ -53,4 +55,39 @@ public class BillLineFacade extends IntegerPkGenericFacade<BillLine> { ...@@ -53,4 +55,39 @@ public class BillLineFacade extends IntegerPkGenericFacade<BillLine> {
} }
return retmap.values(); return retmap.values();
} }
public BillSummary getLineSummary(Product list, LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<BillLine> cq = cb.createQuery(BillLine.class);
Root<BillLine> root = cq.from(BillLine.class);
cq.where(cb.equal(root.get(BillLine_.bill).get(Bill_.event), event),
cb.equal(root.get(BillLine_.lineProduct), list));
List<BillLine> lines = getEm().createQuery(cq).getResultList();
BillSummary ret = new BillSummary(list.getName());
for (BillLine bl : lines) {
ret.addLine(bl);
}
return ret;
}
public BillSummary getLineSummary(Product list, LanEvent event, EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<BillLine> cq = cb.createQuery(BillLine.class);
Root<BillLine> root = cq.from(BillLine.class);
cq.where(cb.equal(root.get(BillLine_.bill).get(Bill_.event), event),
cb.equal(root.get(BillLine_.lineProduct), list),
cb.equal(root.get(BillLine_.bill).get(Bill_.user), user)
);
List<BillLine> lines = getEm().createQuery(cq).getResultList();
BillSummary ret = new BillSummary(list.getName());
for (BillLine bl : lines) {
ret.addLine(bl);
}
return ret;
}
} }
...@@ -12,6 +12,8 @@ import javax.persistence.criteria.Root; ...@@ -12,6 +12,8 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.EventUser_; import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.PrintedCard_;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.User_; import fi.insomnia.bortal.model.User_;
...@@ -63,4 +65,53 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> { ...@@ -63,4 +65,53 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public EventUser findByBarcode(String barcode) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<EventUser> cq = cb.createQuery(EventUser.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.select(root.get(PrintedCard_.user));
cq.where(
cb.equal(root.get(PrintedCard_.barcode), barcode),
cb.equal(root.get(PrintedCard_.event), eventBean.getCurrentEvent())
);
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,23 +170,29 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -169,23 +170,29 @@ 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) {
if (fc != null) {
fc.exec(cb, cq, root, predicates); 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()]);
cq.where(preds); cq.where(preds);
...@@ -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) {
......
...@@ -66,4 +66,17 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> { ...@@ -66,4 +66,17 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public Product findProductByBarcode(String barcode) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
cq.where(
cb.equal(root.get(Product_.barcode), barcode)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
} }
...@@ -54,13 +54,13 @@ public class SitePageFacade extends IntegerPkGenericFacade<SitePage> { ...@@ -54,13 +54,13 @@ public class SitePageFacade extends IntegerPkGenericFacade<SitePage> {
Path<SitePage> parentpath = root.get(SitePage_.parent); Path<SitePage> parentpath = root.get(SitePage_.parent);
Predicate rootpred = null; Predicate rootpred = null;
if (parentpath == null) if (siteroot == null)
{ {
rootpred = cb.isNull(parentpath); rootpred = cb.isNull(parentpath);
} }
else else
{ {
rootpred = cb.equal(parentpath, parentpath); rootpred = cb.equal(parentpath, siteroot);
} }
cq.where( cq.where(
......
...@@ -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" };
...@@ -67,7 +80,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -67,7 +80,7 @@ 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);
Root<User> root = cq.from(User.class); Root<User> root = cq.from(User.class);
cq.where(cb.equal(root.get(User_.login), login)); cq.where(cb.equal(root.get(User_.login), login.toLowerCase().trim()));
return getSingleNullableResult(getEm().createQuery(cq)); return getSingleNullableResult(getEm().createQuery(cq));
} }
...@@ -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));
}
}
} }
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
<attribute name="owner.project.facets" value="jst.utility"/> <attribute name="owner.project.facets" value="jst.utility"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<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"/>
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="build/classes"/> <classpathentry kind="output" path="build/classes"/>
</classpath> </classpath>
...@@ -16,6 +16,11 @@ ...@@ -16,6 +16,11 @@
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand> <buildCommand>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name> <name>org.eclipse.wst.validation.validationbuilder</name>
<arguments> <arguments>
</arguments> </arguments>
...@@ -26,5 +31,6 @@ ...@@ -26,5 +31,6 @@
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<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.jboss.tools.jst.web.kb.kbnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.util.CheckoutBank;
import fi.insomnia.bortal.util.CheckoutReturnType;
@Local
public interface CheckoutFiBeanLocal {
boolean isPaymentEnabled();
List<CheckoutBank> getToken(Bill bill);
// List<CheckoutBank> testXml();
boolean validateReturn(CheckoutReturnType returnType, String version, String stamp, String reference, String payment, String status, String algorithm, String mac);
}
...@@ -3,14 +3,15 @@ package fi.insomnia.bortal.beans; ...@@ -3,14 +3,15 @@ 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, String... description); LogEntry logMessage(SecurityLogType paramType, LanEvent event, User user, Object... description);
LogEntry logMessage(SecurityLogType paramType, EventUser user, String... 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);
} }
...@@ -2,7 +2,9 @@ package fi.insomnia.bortal.beans; ...@@ -2,7 +2,9 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.ejb.Local; import javax.ejb.Local;
...@@ -11,14 +13,13 @@ import fi.insomnia.bortal.model.Discount; ...@@ -11,14 +13,13 @@ import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag; import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.Role;
@Local @Local
public interface ProductBeanLocal { public interface ProductBeanLocal {
List<Product> listUserShoppableProducts(); List<Product> listUserShoppableProducts();
List<Product> findProductsByFlag(ProductFlag ... productFlags); List<Product> findProductsByFlag(ProductFlag... productFlags);
void create(Product prod); void create(Product prod);
...@@ -36,6 +37,8 @@ public interface ProductBeanLocal { ...@@ -36,6 +37,8 @@ public interface ProductBeanLocal {
Product findById(int parseInt); Product findById(int parseInt);
Product findByBarcode(String barcode);
List<Product> findForStaffshop(); List<Product> findForStaffshop();
Discount findDiscount(Integer discountid); Discount findDiscount(Integer discountid);
...@@ -44,4 +47,8 @@ public interface ProductBeanLocal { ...@@ -44,4 +47,8 @@ public interface ProductBeanLocal {
BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date); BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date);
HashMap<Integer, BigDecimal> getProductLimit(Map<Integer, BigDecimal> prodCounts, EventUser user);
BigDecimal getProductLimit(Product product, EventUser user, Map<Integer, BigDecimal> prodCounts);
} }
...@@ -28,4 +28,6 @@ public interface SitePageBeanLocal { ...@@ -28,4 +28,6 @@ public interface SitePageBeanLocal {
List<PageContent> findContentsForUser(String name); List<PageContent> findContentsForUser(String name);
SitePage findSitename(String managedPage);
} }
...@@ -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);
...@@ -66,4 +69,6 @@ public interface UserBeanLocal { ...@@ -66,4 +69,6 @@ public interface UserBeanLocal {
EventUser validateUser(String username, String password); EventUser validateUser(String username, String password);
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,13 +13,23 @@ public class BortalLocalContextHolder { ...@@ -10,13 +13,23 @@ 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) {
...@@ -84,4 +97,18 @@ public class BortalLocalContextHolder { ...@@ -84,4 +97,18 @@ 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) {
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
package fi.insomnia.bortal.util;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class CheckoutBank {
private final String key;
private final String url;
private final String icon;
private final String name;
private final List<Valuepair> postParams = new ArrayList<Valuepair>();
private static final Logger logger = LoggerFactory.getLogger(CheckoutBank.class);
public CheckoutBank(Node bank) {
if (bank.getNodeType() != 1)
{
throw new RuntimeException("Wrong type of node " + bank + " type " + bank.getNodeType());
}
key = bank.getNodeName();
logger.info("Bank type {}", bank);
NamedNodeMap attrs = bank.getAttributes();
String iconval = null;
String nameval = null;
String urlval = null;
for (int j = 0; j < attrs.getLength(); ++j)
{
Node attr = attrs.item(j);
if (attr.getNodeName().equals("icon")) {
iconval = attr.getNodeValue();
} else if (attr.getNodeName().equals("name")) {
nameval = attr.getNodeValue();
} else if (attr.getNodeName().equals("url")) {
urlval = attr.getNodeValue();
}
}
icon = iconval;
name = nameval;
url = urlval;
NodeList children = bank.getChildNodes();
for (int i = 0; i < children.getLength(); ++i)
{
Node childnode = children.item(i);
if (childnode.getNodeType() == 1)
{
String paramName = childnode.getNodeName();
String paramValue = childnode.getTextContent();
getPostParams().add(new Valuepair(paramName, paramValue));
logger.info("Added param for {} name {} value {}", new Object[] { key, paramName, paramValue });
}
}
System.out.println();
}
public String getKey() {
return key;
}
public String getUrl() {
return url;
}
public String getIcon() {
return icon;
}
public String getName() {
return name;
}
public List<Valuepair> getPostParams() {
return postParams;
}
}
package fi.insomnia.bortal.util;
public enum CheckoutReturnType {
RETURN, DELAYED, REJECT, CANCEL
}
...@@ -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());
......
package fi.insomnia.bortal.util;
public class Valuepair {
private String key;
private String value;
public String toString()
{
return new StringBuilder("Valuepair ").append(key).append(" ").append(value).toString();
}
public Valuepair(String paramName, String paramValue) {
key = paramName;
value = paramValue;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
...@@ -8,10 +8,6 @@ ...@@ -8,10 +8,6 @@
<attribute name="owner.project.facets" value="jst.utility"/> <attribute name="owner.project.facets" value="jst.utility"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<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"/>
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="build/classes"/> <classpathentry kind="output" path="build/classes"/>
</classpath> </classpath>
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand> <buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name> <name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
...@@ -36,6 +36,11 @@ ...@@ -36,6 +36,11 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature> <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
...@@ -43,5 +48,6 @@ ...@@ -43,5 +48,6 @@
<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.axdt.as3.imp.nature</nature> <nature>org.axdt.as3.imp.nature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>
#Thu Oct 27 18:05:25 EEST 2011
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<fixed facet="jst.utility"/> <fixed facet="jst.utility"/>
<fixed facet="jst.java"/> <fixed facet="jst.java"/>
<fixed facet="jpt.jpa"/> <fixed facet="jpt.jpa"/>
<installed facet="jst.java" version="6.0"/>
<installed facet="jst.utility" version="1.0"/> <installed facet="jst.utility" version="1.0"/>
<installed facet="jpt.jpa" version="2.0"/> <installed facet="jpt.jpa" version="2.0"/>
<installed facet="jst.java" version="1.6"/>
</faceted-project> </faceted-project>
Manifest-Version: 1.0 Manifest-Version: 1.0
Class-Path: lib/LanBortalUtilities.jar Class-Path: bcprov-jdk16-146.jar
bcprov-jdk16-146.jar
bcmail-jdk16-146.jar bcmail-jdk16-146.jar
LanBortalUtilities.jar
...@@ -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) {
......
...@@ -26,7 +26,9 @@ public abstract class EntityEquals { ...@@ -26,7 +26,9 @@ public abstract class EntityEquals {
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
boolean ret = false; boolean ret = false;
if (o != null && o instanceof EntityEquals && this.getClass().getCanonicalName().equals(o.getClass().getCanonicalName())) { if (this == o) {
ret = true;
} else if (o != null && o instanceof EntityEquals && this.getClass().getCanonicalName().equals(o.getClass().getCanonicalName())) {
EntityEquals oobj = (EntityEquals) o; EntityEquals oobj = (EntityEquals) o;
if (getId() == null) { if (getId() == null) {
ret = (getRndid().equals(oobj.rndid)); ret = (getRndid().equals(oobj.rndid));
......
...@@ -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-27T09:58:55.015+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;
} }
...@@ -16,7 +16,6 @@ import javax.persistence.OneToOne; ...@@ -16,7 +16,6 @@ import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking; import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType; import org.eclipse.persistence.annotations.OptimisticLockingType;
...@@ -25,7 +24,9 @@ import org.eclipse.persistence.annotations.OptimisticLockingType; ...@@ -25,7 +24,9 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
* *
*/ */
@Entity @Entity
@Table(name = "group_memberships", uniqueConstraints = { @UniqueConstraint(columnNames = { GroupMembership.EVENTUSER_ID, GroupMembership.GROUP_ID }) }) @Table(name = "group_memberships")
// , uniqueConstraints = { @UniqueConstraint(columnNames = {
// GroupMembership.EVENTUSER_ID, GroupMembership.GROUP_ID }) })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class GroupMembership extends GenericEntity { public class GroupMembership extends GenericEntity {
......
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,6 +5,9 @@ public enum LanEventPrivatePropertyKey { ...@@ -5,6 +5,9 @@ public enum LanEventPrivatePropertyKey {
VERKKOMAKSU_KEY_EXPIRE(Type.DATE, null), VERKKOMAKSU_KEY_EXPIRE(Type.DATE, null),
VERKKOMAKSU_MERCHANT_ID(Type.TEXT, null), VERKKOMAKSU_MERCHANT_ID(Type.TEXT, null),
VERKKOMAKSU_MERCHANT_PASSWORD(Type.TEXT, null), VERKKOMAKSU_MERCHANT_PASSWORD(Type.TEXT, null),
CHECKOUT_FI_MERCHANT_PASSWORD(Type.TEXT, null),
CHECKOUT_FI_MERCHANT_ID(Type.TEXT, null),
CHECKOUT_FI_KEY_EXPIRE(Type.DATE, null),
; ;
private enum Type { private enum Type {
......
...@@ -6,7 +6,7 @@ import javax.annotation.Generated; ...@@ -6,7 +6,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-08-23T03:32:15.378+0300") @Generated(value="Dali", date="2012-08-25T03:50:15.426+0300")
@StaticMetamodel(LanEventPrivateProperty.class) @StaticMetamodel(LanEventPrivateProperty.class)
public class LanEventPrivateProperty_ extends GenericEntity_ { public class LanEventPrivateProperty_ extends GenericEntity_ {
public static volatile SingularAttribute<LanEventPrivateProperty, EventOrganiser> eventorg; public static volatile SingularAttribute<LanEventPrivateProperty, EventOrganiser> eventorg;
......
...@@ -6,7 +6,8 @@ public enum LanEventPropertyKey { ...@@ -6,7 +6,8 @@ public enum LanEventPropertyKey {
INVITEMAIL_CONTENT(Type.TEXT, "You have been invited to Stream demoparty by {1}.\n\nYou can register to stream demparty intranet at: {0}\n\nAfter registering to the intranet you can buy a ticket to Stream demoparty reduced price and invite your friends to join the party with you. More information can be found in the intranet. Remember also to visit our website at http://www.streamparty.org and join us at #streamparty in IRCNet. If you have any questions about this mail, registering to intranet, or anything else regarding Stream demoparty, please send us email to info@streamparty.org\n\n-- \nStream organizing\ninfo@streamparty.org"), INVITEMAIL_CONTENT(Type.TEXT, "You have been invited to Stream demoparty by {1}.\n\nYou can register to stream demparty intranet at: {0}\n\nAfter registering to the intranet you can buy a ticket to Stream demoparty reduced price and invite your friends to join the party with you. More information can be found in the intranet. Remember also to visit our website at http://www.streamparty.org and join us at #streamparty in IRCNet. If you have any questions about this mail, registering to intranet, or anything else regarding Stream demoparty, please send us email to info@streamparty.org\n\n-- \nStream organizing\ninfo@streamparty.org"),
PORTAL_EMAIL_ADDRESS(Type.TEXT, "intra@streamparty.org"), PORTAL_EMAIL_ADDRESS(Type.TEXT, "intra@streamparty.org"),
PORTAL_EMAIL_NAME(Type.TEXT, "Streamparty intranet"), PORTAL_EMAIL_NAME(Type.TEXT, "Streamparty intranet"),
ADMIN_MAIL(Type.TEXT, "intra@streamparty.org"), ; ADMIN_MAIL(Type.TEXT, "intra@streamparty.org"),
EVENT_LAYOUT(Type.TEXT, "template1"), ;
private enum Type { private enum Type {
TEXT, DATE, DATA TEXT, DATE, DATA
}; };
......
...@@ -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;
......
...@@ -76,6 +76,9 @@ public class Product extends GenericEntity { ...@@ -76,6 +76,9 @@ public class Product extends GenericEntity {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product") @OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<Place> places; private List<Place> places;
@ManyToMany()
private List<ProductLimitation> productLimits;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product") @OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<AccountEvent> accountEvents; private List<AccountEvent> accountEvents;
...@@ -262,4 +265,12 @@ public class Product extends GenericEntity { ...@@ -262,4 +265,12 @@ public class Product extends GenericEntity {
this.productFlags = productFlags; this.productFlags = productFlags;
} }
public List<ProductLimitation> getProductLimits() {
return productLimits;
}
public void setProductLimits(List<ProductLimitation> productLimits) {
this.productLimits = productLimits;
}
} }
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
@Entity
@Table(name = "product_limitations")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class ProductLimitation extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 1373535658851118597L;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private ProductLimitationType type;
@Column(nullable = false)
private boolean last = false;
private String name;
@Lob
private String description;
@Column(nullable = false)
private Integer sort = 100;
@ManyToMany(mappedBy = "productLimits")
private List<Product> products;
@Column(nullable = true, precision = 24, scale = 4)
private BigDecimal upperLimit;
@Column(nullable = true, precision = 24, scale = 4)
private BigDecimal lowerLimit;
@ManyToMany()
private List<Role> matchingRoles;
public ProductLimitationType getType() {
return type;
}
public void setType(ProductLimitationType type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public BigDecimal getUpperLimit() {
return upperLimit;
}
public void setUpperLimit(BigDecimal upperLimit) {
this.upperLimit = upperLimit;
}
public BigDecimal getLowerLimit() {
return lowerLimit;
}
public void setLowerLimit(BigDecimal lowerLimit) {
this.lowerLimit = lowerLimit;
}
public List<Role> getMatchingRoles() {
return matchingRoles;
}
public void setMatchingRoles(List<Role> matchingRoles) {
this.matchingRoles = matchingRoles;
}
}
package fi.insomnia.bortal.model;
public enum ProductLimitationType {
GLOBAL_BILLED, GLOBAL_BILL_PAID, GLOBAL_ACCOUNTEVENTS, USER_BILLED, USER_BILL_PAID, USER_ACCOUNTEVENTS,
}
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import javax.annotation.Generated;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-09-05T23:16:12.829+0300")
@StaticMetamodel(ProductLimitation.class)
public class ProductLimitation_ extends GenericEntity_ {
public static volatile SingularAttribute<ProductLimitation, ProductLimitationType> type;
public static volatile SingularAttribute<ProductLimitation, Boolean> last;
public static volatile SingularAttribute<ProductLimitation, String> name;
public static volatile SingularAttribute<ProductLimitation, String> description;
public static volatile SingularAttribute<ProductLimitation, Integer> sort;
public static volatile ListAttribute<ProductLimitation, Product> products;
public static volatile SingularAttribute<ProductLimitation, BigDecimal> upperLimit;
public static volatile SingularAttribute<ProductLimitation, BigDecimal> lowerLimit;
public static volatile ListAttribute<ProductLimitation, Role> matchingRoles;
}
...@@ -7,7 +7,7 @@ import javax.persistence.metamodel.SetAttribute; ...@@ -7,7 +7,7 @@ import javax.persistence.metamodel.SetAttribute;
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-08-24T01:13:32.136+0300") @Generated(value="Dali", date="2012-09-05T21:51:25.846+0300")
@StaticMetamodel(Product.class) @StaticMetamodel(Product.class)
public class Product_ extends GenericEntity_ { public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, LanEvent> event; public static volatile SingularAttribute<Product, LanEvent> event;
...@@ -19,6 +19,7 @@ public class Product_ extends GenericEntity_ { ...@@ -19,6 +19,7 @@ public class Product_ extends GenericEntity_ {
public static volatile SetAttribute<Product, ProductFlag> productFlags; public static volatile SetAttribute<Product, ProductFlag> productFlags;
public static volatile SingularAttribute<Product, Role> provides; public static volatile SingularAttribute<Product, Role> provides;
public static volatile ListAttribute<Product, Place> places; public static volatile ListAttribute<Product, Place> places;
public static volatile ListAttribute<Product, ProductLimitation> productLimits;
public static volatile ListAttribute<Product, AccountEvent> accountEvents; public static volatile ListAttribute<Product, AccountEvent> accountEvents;
public static volatile ListAttribute<Product, Discount> discounts; public static volatile ListAttribute<Product, Discount> discounts;
public static volatile SingularAttribute<Product, BigDecimal> vat; public static volatile SingularAttribute<Product, BigDecimal> vat;
......
...@@ -14,6 +14,8 @@ import java.util.List; ...@@ -14,6 +14,8 @@ import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
...@@ -49,6 +51,10 @@ public class Reader extends GenericEntity { ...@@ -49,6 +51,10 @@ public class Reader extends GenericEntity {
this.setEvent(ev); this.setEvent(ev);
} }
@Column(nullable = false, name = "type")
@Enumerated(EnumType.STRING)
private ReaderType type;
public static final String EVENT_ID_COLUMN = "event_id"; public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne() @ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false) @JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
......
package fi.insomnia.bortal.model;
public enum ReaderType {
RFID, BARCODE, IRIS, FINGERPRINT, BLOODTYPE
}
...@@ -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-05-12T14:43:39.114+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;
......
...@@ -17,7 +17,7 @@ import org.eclipse.persistence.annotations.OptimisticLockingType; ...@@ -17,7 +17,7 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.eclipse.persistence.annotations.PrivateOwned; import org.eclipse.persistence.annotations.PrivateOwned;
@Entity @Entity
@Table(name = "site_pages", uniqueConstraints = @UniqueConstraint(columnNames = { "event_id", "name" })) @Table(name = "site_pages", uniqueConstraints = @UniqueConstraint(columnNames = { SitePage.EVENT_ID_COLUMN, "name" }))
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class SitePage extends GenericEntity { public class SitePage extends GenericEntity {
......
...@@ -5,7 +5,7 @@ import javax.persistence.metamodel.ListAttribute; ...@@ -5,7 +5,7 @@ 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-12T14:43:39.125+0300") @Generated(value="Dali", date="2012-10-04T21:02:39.749+0300")
@StaticMetamodel(SitePage.class) @StaticMetamodel(SitePage.class)
public class SitePage_ extends GenericEntity_ { public class SitePage_ extends GenericEntity_ {
public static volatile SingularAttribute<SitePage, LanEvent> event; public static volatile SingularAttribute<SitePage, LanEvent> event;
......
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;
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1.2">
<attributes> <attributes>
<attribute name="owner.project.facets" value="java"/> <attribute name="owner.project.facets" value="jst.web"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1.2"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_05">
<attributes> <attributes>
<attribute name="owner.project.facets" value="jst.web"/> <attribute name="owner.project.facets" value="java"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="output" path="build/classes"/> <classpathentry kind="output" path="build/classes"/>
</classpath> </classpath>
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.source=1.6
...@@ -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();
} }
......
...@@ -7,7 +7,6 @@ import javax.inject.Named; ...@@ -7,7 +7,6 @@ import javax.inject.Named;
import javax.resource.spi.IllegalStateException; import javax.resource.spi.IllegalStateException;
import fi.insomnia.bortal.beans.SalesEntitySessionBeanLocal; import fi.insomnia.bortal.beans.SalesEntitySessionBeanLocal;
import fi.insomnia.bortal.beans.SalespointContainerBeanLocal;
import fi.insomnia.bortal.salespoint.CartItem; import fi.insomnia.bortal.salespoint.CartItem;
import fi.insomnia.bortal.salespoint.SalespointSessionManager; import fi.insomnia.bortal.salespoint.SalespointSessionManager;
...@@ -17,7 +16,7 @@ public class CartView extends AbstractView { ...@@ -17,7 +16,7 @@ public class CartView extends AbstractView {
private static final long serialVersionUID = 9041477262092320847L; private static final long serialVersionUID = 9041477262092320847L;
@EJB @EJB
SalesEntitySessionBeanLocal sessionBean; private transient SalesEntitySessionBeanLocal sessionBean;
public CartItem[] getItems() throws IllegalStateException { public CartItem[] getItems() throws IllegalStateException {
......
...@@ -20,7 +20,7 @@ public class TestView implements Serializable { ...@@ -20,7 +20,7 @@ public class TestView implements Serializable {
private static final Logger logger = LoggerFactory.getLogger(TestView.class); private static final Logger logger = LoggerFactory.getLogger(TestView.class);
@EJB @EJB
private PermissionBeanLocal permissionBean; private transient PermissionBeanLocal permissionBean;
public String getPrincipal() { public String getPrincipal() {
logger.debug("PermissionBean: {}", permissionBean); logger.debug("PermissionBean: {}", permissionBean);
......
...@@ -7,10 +7,6 @@ ...@@ -7,10 +7,6 @@
<attribute name="owner.project.facets" value="jst.utility"/> <attribute name="owner.project.facets" value="jst.utility"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<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"/>
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="build/classes"/> <classpathentry kind="output" path="build/classes"/>
</classpath> </classpath>
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand> <buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name> <name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
...@@ -25,6 +25,11 @@ ...@@ -25,6 +25,11 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature> <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
...@@ -32,5 +37,6 @@ ...@@ -32,5 +37,6 @@
<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.axdt.as3.imp.nature</nature> <nature>org.axdt.as3.imp.nature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>
Manifest-Version: 1.0 Manifest-Version: 1.0
Class-Path: commons-codec-1.6.jar Class-Path: commons-codec-1.6.jar
barcode4j.jar
PDFjet.jar
package fi.insomnia.bortal.utilities;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.krysalis.barcode4j.BarcodeDimension;
import org.krysalis.barcode4j.BarcodeGenerator;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.impl.upcean.EAN13Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
public class BarcodeUtils {
public static InputStream getBarcode(String message) throws IOException {
// BarcodeGenerator bean = new DataMatrixBean();
BarcodeGenerator bean = new Code128Bean();
ByteArrayOutputStream out = new ByteArrayOutputStream();
// System.out.println("created: " + (new Date().getTime() - start));
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
out, "image/png", 150, BufferedImage.TYPE_BYTE_BINARY, false, 0);
canvas.establishDimensions(new BarcodeDimension(200, 15));
bean.generateBarcode(canvas, message);
canvas.finish();
ByteArrayInputStream istream = new ByteArrayInputStream(out.toByteArray());
return istream;
}
public static InputStream getBarcodeEAN(String message) throws IOException {
// BarcodeGenerator bean = new DataMatrixBean();
BarcodeGenerator bean = new EAN13Bean();
ByteArrayOutputStream out = new ByteArrayOutputStream();
// System.out.println("created: " + (new Date().getTime() - start));
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
out, "image/png", 150, BufferedImage.TYPE_BYTE_BINARY, false, 0);
canvas.establishDimensions(new BarcodeDimension(200, 15));
bean.generateBarcode(canvas, message);
canvas.finish();
ByteArrayInputStream istream = new ByteArrayInputStream(out.toByteArray());
return istream;
}
// public void barcode4j() throws FileNotFoundException, Exception {
// long start = new Date().getTime();
//
// File outFile = new File("/tmp/rairai2.pdf");
// PDF pdf = new PDF(new FileOutputStream(outFile));
// System.out.println("pre CreateCode: " + (new Date().getTime() - start));
//
// BarcodeGenerator bean = new DataMatrixBean();
//
// ByteArrayOutputStream out = new ByteArrayOutputStream();
// System.out.println("created: " + (new Date().getTime() - start));
//
// BitmapCanvasProvider canvas = new BitmapCanvasProvider(
// out, "image/png", 150, BufferedImage.TYPE_BYTE_BINARY, false, 0);
//
// bean.generateBarcode(canvas, "Foobar Rairai");
// canvas.finish();
//
// ByteArrayInputStream istream = new
// ByteArrayInputStream(out.toByteArray());
//
// Image img = new Image(pdf, istream, ImageType.PNG);
// Page page = new Page(pdf, A4.PORTRAIT);
// img.drawOn(page);
// System.out.println("post draw: " + (new Date().getTime() - start));
//
// pdf.flush();
// System.out.println("post flush: " + (new Date().getTime() - start));
//
// }
// public String asdasd() throws FileNotFoundException, Exception {
// long start = new Date().getTime();
// JBarcode code = JBarcodeFactory.getInstance().createCode128();
// System.out.println("pre CreateCode: " + (new Date().getTime() - start));
//
// BufferedImage barcode = code.createBarcode("Foobar Rairai");
// System.out.println("created: " + (new Date().getTime() - start));
// ImageIO.write(barcode, "JPEG", new File("/tmp/rairai.jpeg"));
// System.out.println("To File: " + (new Date().getTime() - start));
//
// File out = new File("/tmp/rairai2.pdf");
// PDF pdf = new PDF(new FileOutputStream(out));
//
// System.out.println("Pre stream: " + (new Date().getTime() - start));
//
// ByteArrayOutputStream jpegstream = new ByteArrayOutputStream();
// ImageIO.write(barcode, "JPEG", jpegstream);
// System.out.println("post stream: " + (new Date().getTime() - start));
//
// ByteArrayInputStream istream = new
// ByteArrayInputStream(jpegstream.toByteArray());
// System.out.println("post istream: " + (new Date().getTime() - start));
//
// Page page = new Page(pdf, A4.PORTRAIT);
//
// Image img = new Image(pdf, istream, ImageType.JPEG);
// img.drawOn(page);
// System.out.println("post draw: " + (new Date().getTime() - start));
//
// pdf.flush();
// System.out.println("post flush: " + (new Date().getTime() - start));
//
// return "";
// }
//
// public static void main(String[] args) {
// BarcodeUtils bb = new BarcodeUtils();
// try {
// bb.barcode4j();
// } catch (FileNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
...@@ -6,6 +6,7 @@ import java.security.NoSuchAlgorithmException; ...@@ -6,6 +6,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.Random; import java.util.Random;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -18,6 +19,47 @@ public class PasswordFunctions { ...@@ -18,6 +19,47 @@ public class PasswordFunctions {
private static final boolean UGLY_FIX = true; private static final boolean UGLY_FIX = true;
/**
* Returns the MD5 sum of the @param fields separated by @param separator e
* eg separator = "+" fields {"ONE", "TWO", "THREE"} return value
* ONE+TWO+THREE
*
* @param separator
* @param fields
* @return
*/
public static String calculateMd5(String separator, String... fields)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String field : fields)
{
if (first) {
first = false;
} else {
sb.append(separator);
}
sb.append(field);
}
logger.info("Calculating md5 from {}", sb.toString());
return calculateMd5(sb.toString());
}
public static String calculateMd5(String str)
{
String ret = null;
try {
final MessageDigest algo = MessageDigest.getInstance("MD5");
final byte[] resultByte = algo.digest(str.getBytes());
ret = new String(Hex.encodeHex(resultByte)).toUpperCase();
} catch (NoSuchAlgorithmException e) {
logger.warn("THIS SHOULD NEVER HAPPEN! (md5 hashfunction should always exist)", e);
}
return ret;
}
public static String getEncryptedPassword(String password) { public static String getEncryptedPassword(String password) {
byte[] salt = new byte[SALT_LENGTH]; byte[] salt = new byte[SALT_LENGTH];
Random random = new Random(); Random random = new Random();
......
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;
}
}
}
...@@ -8,10 +8,7 @@ ...@@ -8,10 +8,7 @@
<attribute name="owner.project.facets" value="jst.web"/> <attribute name="owner.project.facets" value="jst.web"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<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"/>
<attributes> <classpathentry combineaccessrules="false" kind="src" path="/lib-AuthModule-depends"/>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<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>
#Sun Mar 27 01:20:35 EET 2011
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.source=1.6
default.configuration=
eclipse.preferences.version=1
hibernate3.enabled=false
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>LanBortalWeb</display-name> <display-name>LanBortalWeb</display-name>
<session-config> <session-config>
<session-timeout>30</session-timeout> <session-timeout>30</session-timeout>
</session-config> </session-config>
<context-param> <context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name> <param-name>javax.faces.PROJECT_STAGE</param-name>
<!-- <param-value>Production</param-value> --> <param-value>Production</param-value>
<param-value>Development</param-value>
</context-param> </context-param>
<context-param> <context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
......
...@@ -26,9 +26,9 @@ ...@@ -26,9 +26,9 @@
<bill:showBill bill="#{billEditView.bill}" /> <bill:showBill bill="#{billEditView.bill}" />
<ui:fragment rendered="#{!billEditView.bill.paid and billEditView.verkkomaksuAvailable}"> <ui:fragment rendered="#{!billEditView.bill.paid and billEditView.verkkomaksuFiAvailable}">
<div id="svm-payment"> <div id="svm-payment">
<a href="#{billEditView.verkkomaksuToken.url}"> </a> <a href="#{billEditView.verkkomaksuFiToken.url}"> </a>
</div> </div>
<script type="text/javascript" src="//payment.verkkomaksut.fi/js/sv-widget.min.js"></script> <script type="text/javascript" src="//payment.verkkomaksut.fi/js/sv-widget.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
...@@ -38,7 +38,25 @@ ...@@ -38,7 +38,25 @@
}); });
</script> </script>
</ui:fragment> </ui:fragment>
<ui:fragment rendered="#{!billEditView.bill.paid and billEditView.checkoutFiAvailable}">
<table border="0">
<tr>
<ui:repeat varStatus="idx" value="#{billEditView.checkoutFiToken}" var="bank">
<td>
<form action="#{bank.url}" method="post">
<ui:repeat value="#{bank.postParams}" var="valp">
<input type="hidden" name="#{valp.key}" value="#{valp.value}" />
</ui:repeat>
<input type='image' src='#{bank.icon}' />
</form>
</td>
<h:outputText escape="false" value="&lt;/tr>&lt;tr>" rendered="#{idx.index % 4 == 3}" />
</ui:repeat>
</tr>
</table>
</ui:fragment>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
No preview for this file type
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!