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 4632 additions and 1125 deletions
......@@ -4,10 +4,6 @@
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/LanBortalAuthModuleClient"/>
<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.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>
......@@ -7,7 +7,7 @@
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</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>
<attribute name="owner.project.facets" value="java"/>
</attributes>
......
......@@ -16,6 +16,11 @@
</arguments>
</buildCommand>
<buildCommand>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
......@@ -26,5 +31,6 @@
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>LanBortalBeans</display-name>
<ejb-client-jar>LanBortalBeansClient.jar</ejb-client-jar>
<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">
<display-name>LanBortalBeans</display-name>
<ejb-client-jar>LanBortalBeansClient.jar</ejb-client-jar>
</ejb-jar>
\ No newline at end of file
......@@ -64,7 +64,7 @@ public class AccountEventBean implements AccountEventBeanLocal {
public void delete(AccountEvent account) {
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);
if (acco.getBill() != 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;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
......@@ -73,6 +72,8 @@ public class BillBean implements BillBeanLocal {
private LoggingBeanLocal loggingBean;
@EJB
private EventUserFacade eventUserFacade;
@EJB
private ProductPBean productPBean;
/**
* Default constructor.
......@@ -88,7 +89,7 @@ public class BillBean implements BillBeanLocal {
return null;
}
Bill bill = billFacade.find(id);
IUser currentuser = permbean.getCurrentUser();
EventUser currentuser = permbean.getCurrentUser();
logger.debug("bill {} user {}", bill, currentuser);
if (bill != null && !currentuser.equals(bill.getUser()) && !permbean.hasPermission(BillPermission.READ_ALL)) {
......@@ -239,7 +240,7 @@ public class BillBean implements BillBeanLocal {
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());
ac2.setSeller(permbean.getCurrentUser());
......@@ -249,7 +250,7 @@ public class BillBean implements BillBeanLocal {
MailMessage msg = new MailMessage();
msg.setSubject(I18n.get("bill.billMarkedPaidMail.subject"));
msg.setMessage(I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString()));
msg.setTo(bill.getUser());
msg.setTo(bill.getUser().getUser());
utilbean.sendMail(msg);
eventUserFacade.flush();
eventUserFacade.evict(bill.getUser());
......@@ -281,7 +282,4 @@ public class BillBean implements BillBeanLocal {
return billFacade.find(user);
}
public void findByOrdernumber() {
}
}
......@@ -154,7 +154,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
// user.getPrintedCards().add(pc);
printedcardfacade.create(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) {
MailMessage msg = new MailMessage();
LanEventProperty value = eventPropertyFacade.find(eventBean.getCurrentEvent(), LanEventPropertyKey.ADMIN_MAIL);
......@@ -164,13 +164,13 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
msg.setFromAddress(value.getTextvalue());
msg.setFromName("Lippukauppa");
msg.setToAddress(value.getTextvalue());
msg.setSubject("User " + user.getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
msg.setSubject("User " + user.getUser().getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getUser().getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
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 {
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;
......
package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.sun.org.apache.xerces.internal.parsers.DOMParser;
import fi.insomnia.bortal.checkoutfi.CheckoutFiParam;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventPrivatePropertyKey;
import fi.insomnia.bortal.util.CheckoutBank;
import fi.insomnia.bortal.util.CheckoutReturnType;
import fi.insomnia.bortal.utilities.PasswordFunctions;
/**
* Session Bean implementation class CheckoutFiBean
*/
@Stateless
@LocalBean
public class CheckoutFiBean implements CheckoutFiBeanLocal {
private static final String STAMP_SPLITCHAR = "a";
private static final String REMOTE_URL = "https://payment.checkout.fi";
/**
* Default constructor.
*/
public CheckoutFiBean() {
// TODO Auto-generated constructor stub
}
@EJB
private EventBean eventbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private LoggingBeanLocal logbean;
@EJB
private BillFacade billfacade;
@EJB
private VerkkomaksuRunner vmrunner;
private static final Logger logger = LoggerFactory.getLogger(CheckoutFiBean.class);
private static final BigDecimal TO_CENTS = BigDecimal.valueOf(100);
@Override
public boolean isPaymentEnabled()
{
final LanEventPrivateProperty expire = eventbean.getPrivateProperty(LanEventPrivatePropertyKey.CHECKOUT_FI_KEY_EXPIRE);
final String merchantid = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.CHECKOUT_FI_MERCHANT_ID);
final String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.CHECKOUT_FI_MERCHANT_PASSWORD);
return !((expire != null && new Date().after(expire.getDateValue()))
|| merchantid == null || merchantid.isEmpty()
|| merchantPassword == null || merchantPassword.isEmpty());
}
public static void main(String[] asd)
{
System.out.println(Calendar.getInstance().getTimeInMillis());
System.out.println(Calendar.getInstance().getTimeInMillis() / 1000);
}
private static final String DATEFORMAT = "yyyyMMdd";
private static final Set<String> DISCARD_BANKS = new HashSet<String>(Arrays.asList("ape", "tilisiirto", "neopay"));
@Override
@RolesAllowed(BillPermission.S_CREATE_VERKKOMAKSU)
public List<CheckoutBank> getToken(Bill bill)
{
final LanEventPrivateProperty expire = eventbean.getPrivateProperty(LanEventPrivatePropertyKey.CHECKOUT_FI_KEY_EXPIRE);
final String merchantid = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.CHECKOUT_FI_MERCHANT_ID);
final String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.CHECKOUT_FI_MERCHANT_PASSWORD);
if ((expire != null && new Date().after(expire.getDateValue()))
|| merchantid == null || merchantid.isEmpty()
|| merchantPassword == null || merchantPassword.isEmpty())
{
return null;
}
final String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString();
final Map<CheckoutFiParam, String> postParams = new HashMap<CheckoutFiParam, String>();
final String returnUrl = new StringBuilder(BortalLocalContextHolder.isSsl() ? "https://" : "http://")
.append(BortalLocalContextHolder.getHostname())
.append("/LanBortalWeb/checkout/")
.toString();
final StringBuilder stamp = new StringBuilder();
stamp.append(bill.getId());
stamp.append(STAMP_SPLITCHAR);
stamp.append(bill.getSentDate().getTimeInMillis() / 1000);
postParams.put(CheckoutFiParam.STAMP, stamp.toString());
postParams.put(CheckoutFiParam.AMOUNT, priceInCents);
postParams.put(CheckoutFiParam.REFERENCE, bill.getReferenceNumber().toString());
postParams.put(CheckoutFiParam.MERCHANT, merchantid);
postParams.put(CheckoutFiParam.RETURN, returnUrl + "return.jsf");
postParams.put(CheckoutFiParam.CANCEL, returnUrl + "cancel.jsf");
postParams.put(CheckoutFiParam.REJECT, returnUrl + "reject.jsf");
postParams.put(CheckoutFiParam.DELAYED, returnUrl + "delayed.jsf");
postParams.put(CheckoutFiParam.DELIVERY_DATE, new SimpleDateFormat(DATEFORMAT).format(new Date()));
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
StringBuilder mdString = new StringBuilder();
for (CheckoutFiParam v : CheckoutFiParam.values())
{
String value = null;
if (postParams.containsKey(v)) {
value = postParams.get(v);
} else {
value = v.getDefaultValue();
}
if (value != null) {
mdString.append(value);
nameValuePairs.add(new BasicNameValuePair(v.name(), value));
}
mdString.append("+");
}
mdString.append(merchantPassword);
try {
final String calculatedHash = PasswordFunctions.calculateMd5(mdString.toString());
// logger.info("Calculated checksum {} from {}",
// mdString.toString(), calculatedHash);
nameValuePairs.add(new BasicNameValuePair("MAC", calculatedHash));
final HttpPost postRequest = new HttpPost(REMOTE_URL);
postRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs));
final DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(postRequest);
final StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer, "UTF8");
final String xmlReturn = writer.toString();
// logger.info("Got response from checkout.fi msg {}, {} ",
// response.getStatusLine().getStatusCode(), xmlReturn);
return parseTokenXml(xmlReturn);
} catch (UnsupportedEncodingException e) {
logger.warn("Error sending checkout.fi request", e);
} catch (ClientProtocolException e) {
logger.warn("Error sending query to checkout.fi", e);
} catch (IOException e) {
logger.warn("Error sending query to checkout.fi", e);
}
return null;
}
// @Override
// public List<CheckoutBank> testXml()
// {
// List<CheckoutBank> ret = null;
// try {
// BufferedReader reader = new BufferedReader(new
// FileReader("/Users/tuomari/Documents/git/bortal/code/LanBortalBeans/ejbModule/fi/insomnia/bortal/beans/checkoutTestfile.xml"));
// StringBuilder sb = new StringBuilder();
//
// String line = null;
// while ((line = reader.readLine()) != null) {
// sb.append(line);
// sb.append("\n");
// }
//
// reader.close();
// String str = sb.toString();
// ret = parseTokenXml(str);
//
// } catch (Throwable t)
// {
// logger.warn("error testing", t);
// }
// // logger.warn("str: {}", str);
// return ret;
// }
private static List<CheckoutBank> parseTokenXml(String xmlReturn) {
try {
DOMParser parser = new DOMParser();
parser.parse(new InputSource(new StringReader(xmlReturn)));
Document doc = parser.getDocument();
Element root = doc.getDocumentElement();
root.normalize();
// NodeList rootChildren = root.getChildNodes();
// for (int i = 0; i < rootChildren.getLength(); ++i)
// {
// logger.info("Rootchild {}", rootChildren.item(i).getNodeName());
// }
Node payments = root.getElementsByTagName("banks").item(0);
NodeList paymentElements = payments.getChildNodes();
List<CheckoutBank> retbanks = new ArrayList<CheckoutBank>();
for (int i = 0; i < paymentElements.getLength(); ++i)
{
Node bank = paymentElements.item(i);
if (bank.getNodeType() == 1)
{
CheckoutBank newBank = new CheckoutBank(bank);
if (!DISCARD_BANKS.contains(newBank.getKey()))
{
retbanks.add(newBank);
}
}
}
return retbanks;
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
public boolean validateReturn(CheckoutReturnType returnType, String version, String stamp, String reference, String payment, String status, String algorithm, String mac) {
if (returnType == null || mac == null || mac.isEmpty() || stamp == null || stamp.isEmpty())
{
return false;
}
String merchantPass = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.CHECKOUT_FI_MERCHANT_PASSWORD);
boolean ret = false;
String[] splittedStamp = stamp.split(STAMP_SPLITCHAR);
if (splittedStamp.length != 2)
{
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to split stamp ", stamp, " with splitchar ", STAMP_SPLITCHAR);
return false;
}
// MD5(turva-avain&VERSION&STAMP&REFERENCE&PAYMENT&STATUS&ALGORITHM)
String calculatedMac = PasswordFunctions.calculateMd5("&", merchantPass, version, stamp, reference, payment, status, algorithm);
if (calculatedMac.equals(mac.toUpperCase())) {
Bill bill = billfacade.find(Integer.parseInt(splittedStamp[0]));
if (bill != null)
{
switch (returnType)
{
case CANCEL:
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "received cancel for stamp ", stamp);
// Return true when checksum was correct
ret = true;
break;
case DELAYED:
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "received delayed for stamp ", stamp);
// Return true when checksum was correct
ret = true;
break;
case REJECT:
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "received reject for stamp ", stamp);
// Return true when checksum was correct
ret = true;
break;
case RETURN:
int statusInt = Integer.parseInt(status);
// Verkkokauppaohjelmisto voi hyväksyä maksun suoritetuksi
// kun maksun tila on 2,5,6,7,8,9 tai 10.
switch (statusInt) {
case 2:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
if (bill.getAccountEvent() == null
&& bill.getPaidDate() == null)
{
vmrunner.markPaid(bill, Calendar.getInstance());
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Marking bill paid. Received bill status ", statusInt, " for bill ", bill, " stamp ", stamp, " payment: ", payment, " reference ", reference);
ret = true;
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Bill already marked paid: ", bill, " status ", status, " stamp ", stamp, " payment ", payment);
}
break;
default:
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Not marking bill paid: Return status ", status, " for bill ", bill, " stamp ", stamp, " payment ", payment);
break;
}
break;
default:
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Valid mac, but Invalid return type: ", returnType, " for stamp ", stamp, " payment ", payment, " status ", status);
throw new EJBException("Unknown return type!");
}
}
else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Validated mac, but bill not found for id: ", splittedStamp[0], " stamp ", stamp, " mac: ", mac);
}
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to validate order reference: ", reference, " calculated checksum: ", calculatedMac, " version ", version, " stamp ", stamp, " status ", status, " mac ", mac);
}
return ret;
}
}
......@@ -51,34 +51,51 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
EventUser eventUser = eventUserFacade.findByLogin(username.trim());
User user = null;
// Might not have EventUser
if (eventUser == null) {
User user = userfacade.findByLogin(username.trim());
if (user != null) {
eventUser = new EventUser(user, eventbean.getCurrentEvent());
eventUserFacade.merge(eventUser);
}
user = userfacade.findByLogin(username.trim());
} else {
user = eventUser.getUser();
}
EventUser ret = null;
if (eventUser != null) {
if (eventUser.isAnonymous()) {
if (user != null) {
if (user.isAnonymous()) {
logger.info("logging in as anonymous!!!");
ret = eventUser;
} else if (eventUser.checkPassword(password)) {
ret = eventUser;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, eventUser.getUser(), "Login failed: wrong password for username ", username);
} else if (!user.checkPassword(password)) {
secubean.logMessage(SecurityLogType.permissionDenied, eventUser, "Login failed: wrong password for username ", username);
eventUser = null;
user = null;
}
if (user != null && eventUser == null)
{
LanEvent event = eventbean.getCurrentEvent();
eventUser = new EventUser(user, event, null);
// eventUser.setCreator(eventUser);
eventUserFacade.create(eventUser);
eventUserFacade.flush();
eventUser.setCreator(eventUser);
}
} else {
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
public boolean authenticate(String username, String password) {
boolean ret = (tryLogin(username, password) != null);
......@@ -101,12 +118,12 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
roleset.add(SpecialPermission.ANONYMOUS.name());
}
if (!usr.isAnonymous()) {
if (!usr.getUser().isAnonymous()) {
roleset.add(SpecialPermission.USER.name());
}
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr.isSuperadmin()) {
if (usr.getUser().isSuperadmin()) {
for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName());
......@@ -123,7 +140,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
}
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()) {
roleset.add(apperm.getPermission().getFullName());
}
......
......@@ -14,6 +14,7 @@ import org.slf4j.Logger;
import fi.insomnia.bortal.facade.LogEntryFacade;
import fi.insomnia.bortal.facade.LogEntryTypeFacade;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.LogEntryType;
import fi.insomnia.bortal.model.User;
......@@ -33,6 +34,8 @@ public class LoggingBean implements LoggingBeanLocal {
private LogEntryTypeFacade typeFacade;
@EJB
private LogEntryFacade entryFacade;
@EJB
private EventBeanLocal eventbean;
@Resource
UserTransaction utx;
......@@ -86,14 +89,19 @@ public class LoggingBean implements LoggingBeanLocal {
// }
@Override
public LogEntry logMessage(SecurityLogType paramType, User user,
String... description) {
public LogEntry logMessage(SecurityLogType paramType, LanEvent event, User user,
Object... description) {
LogEntry entry = null;
if (event == null)
{
event = eventbean.getCurrentEvent();
}
try {
String desc = toString(description);
utx.begin();
LogEntryType type = typeFacade.findOrCreate(paramType);
entry = new LogEntry(Calendar.getInstance());
entry.setParentEvent(event);
entry.setType(type);
entry.setDescription(desc);
entry.setUser(user);
......@@ -113,14 +121,20 @@ public class LoggingBean implements LoggingBeanLocal {
}
@Override
public LogEntry logMessage(SecurityLogType paramType, EventUser user,
String... description) {
return logMessage(paramType, user.getUser(), description);
public LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description) {
LanEvent event = null;
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();
for (String msgpart : desc) {
for (Object msgpart : desc) {
msg.append(msgpart);
}
return msg.toString();
......
......@@ -77,7 +77,7 @@ public class Menubean implements MenubeanLocal {
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logout"), 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/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/notauthorized"), null).setVisible(false);
......@@ -104,6 +104,10 @@ public class Menubean implements MenubeanLocal {
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/notification"), 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("/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);
pollTopmenu.setKey("topnavi.poll");
......@@ -140,9 +144,9 @@ public class Menubean implements MenubeanLocal {
adminuser.addPage(menuitemfacade.findOrCreate("/place/adminInsertToken"), UserPermission.VIEW_ALL).setVisible(false);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/sendPicture"), UserPermission.VIEW_ALL).setVisible(false);
MenuNavigation initUser = adminnavi.addPage(null, null);
initUser.setKey("topnavi.userinit");
initUser.addPage(menuitemfacade.findOrCreate("/useradmin/validateUser"), UserPermission.VIEW_ALL);
// MenuNavigation initUser = adminnavi.addPage(null, null);
// initUser.setKey("topnavi.userinit");
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/validateUser"), UserPermission.VIEW_ALL);
MenuNavigation usershop = adminnavi.addPage(null, null);
usershop.setKey("topnavi.adminshop");
......
......@@ -26,7 +26,6 @@ import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.User;
@Stateless
......@@ -157,14 +156,19 @@ public class PermissionBean implements PermissionBeanLocal {
// }
@Override
public boolean isCurrentUser(IUser user) {
public boolean isCurrentUser(User user) {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getLogin());
}
@Override
public boolean isCurrentUser(EventUser user) {
return user != null && isCurrentUser(user.getUser());
}
@Override
public boolean isLoggedIn() {
return !getAnonEventUser().equals(getCurrentUser()) || getCurrentUser().isSuperadmin();
return !getAnonEventUser().equals(getCurrentUser()) || getCurrentUser().getUser().isSuperadmin();
}
@Override
......@@ -189,12 +193,12 @@ public class PermissionBean implements PermissionBeanLocal {
User user = userfacade.findByLogin(User.ANONYMOUS_LOGINNAME);
if (user == null)
{
defaultUser = new EventUser(new User(), eventbean.getCurrentEvent());
defaultUser.setLogin(User.ANONYMOUS_LOGINNAME);
defaultUser.setNick(User.ANONYMOUS_LOGINNAME);
defaultUser = new EventUser(new User(), eventbean.getCurrentEvent(), null);
defaultUser.getUser().setLogin(User.ANONYMOUS_LOGINNAME);
defaultUser.getUser().setNick(User.ANONYMOUS_LOGINNAME);
} else {
defaultUser = new EventUser(user, eventbean.getCurrentEvent());
defaultUser = new EventUser(user, eventbean.getCurrentEvent(), null);
}
eventUserFacade.create(defaultUser);
eventUserFacade.flush();
......
......@@ -5,6 +5,7 @@
package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
......@@ -41,7 +42,6 @@ import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
......@@ -54,9 +54,11 @@ import fi.insomnia.bortal.model.ProductFlag;
*/
@Stateless
@LocalBean
@DeclareRoles({ MapPermission.S_BUY_PLACES,
@DeclareRoles({
MapPermission.S_BUY_PLACES,
MapPermission.S_MANAGE_MAPS,
MapPermission.S_VIEW,
MapPermission.S_MANAGE_OTHERS,
})
public class PlaceBean implements PlaceBeanLocal {
private static final String PLACE_RESERVE_TIMEOUTER = "Map reserve timeouter";
......@@ -94,6 +96,8 @@ public class PlaceBean implements PlaceBeanLocal {
private AccountEventBeanLocal acbean;
@EJB
private PlaceGroupFacade pgfacade;
@EJB
private ProductPBean productPBean;
@Override
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
......@@ -232,12 +236,12 @@ public class PlaceBean implements PlaceBeanLocal {
// }
@Override
@RolesAllowed(MapPermission.S_BUY_PLACES)
@RolesAllowed({ MapPermission.S_BUY_PLACES, MapPermission.S_MANAGE_OTHERS })
public PlaceGroup buySelectedPlaces(EventUser user) throws BortalCatchableException {
if (user == null) {
user = permbean.getCurrentUser();
} 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);
throw new EJBAccessException("Not enough permissions to buy place");
}
......@@ -254,13 +258,13 @@ public class PlaceBean implements PlaceBeanLocal {
BigDecimal totalprice = addAndCalcPrice(user, null);
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 });
return null;
}
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);
......@@ -275,8 +279,8 @@ public class PlaceBean implements PlaceBeanLocal {
if (!p.isReservedFor(user)) {
throw new BortalCatchableException("Trying to buy place not reserved for that user");
}
logger.info("Buying place {} for user {}", p.getName(), user.getLogin());
GroupMembership gm = buy(p, pg, user);
logger.info("Buying place {} for user {}", p.getName(), user.getUser().getLogin());
GroupMembership gm = buy(p, pg);
if (!associatedToPlace)
{
logger.info("Associating buyer {} to place {}", user, gm);
......@@ -326,7 +330,7 @@ public class PlaceBean implements PlaceBeanLocal {
if (freePlace == null) {
throw new EJBException("Could find a place to be reserved....");
}
GroupMembership gm = buy(freePlace, pg, user);
GroupMembership gm = buy(freePlace, pg);
if (!associatedToPlace)
{
logger.info("Associating buyer {} to place {}", user, gm);
......@@ -349,7 +353,7 @@ public class PlaceBean implements PlaceBeanLocal {
return ret;
}
private GroupMembership buy(Place p, PlaceGroup pg, IUser user) {
private GroupMembership buy(Place p, PlaceGroup pg) {
p.setGroup(pg);
p.setReleaseTime(null);
// Current user temporarily used at place reservation. When buying
......@@ -358,6 +362,13 @@ public class PlaceBean implements PlaceBeanLocal {
GroupMembership membership = new GroupMembership(pg, p, gmemfacade.createInviteToken());
pg.getMembers().add(membership);
p.setPlaceReserver(membership);
if (pg.getPlaces() == null) {
pg.setPlaces(new ArrayList<Place>());
}
if (!pg.getPlaces().contains(p))
{
pg.getPlaces().add(p);
}
return membership;
}
......@@ -451,7 +462,7 @@ public class PlaceBean implements PlaceBeanLocal {
@RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean releasePlace(Place place) {
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))) {
return false;
}
......
......@@ -23,11 +23,14 @@ import com.pdfjet.TextLine;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.BarcodeUtils;
/**
* Session Bean implementation class PlaceGroupBean
......@@ -52,6 +55,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
private LoggingBeanLocal loggerbean;
@EJB
private PlaceGroupFacade pgfacade;
@EJB
private EventUserFacade eventuserfacade;
/**
* Default constructor.
......@@ -101,17 +106,18 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
@Override
@RolesAllowed(MapPermission.S_BUY_PLACES)
public boolean associateToToken(EventUser user, String token) {
user = eventuserfacade.reload(user);
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
throw new EJBAccessException();
}
token = token.trim();
GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false;
if (mem != null && mem.getUser() == null) {
mem.setUser(user);
gmemfacade.merge(mem);
// gmemfacade.merge(mem);
ret = true;
}
......@@ -143,7 +149,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
// PNGImage(BarcodeBean.getBarcode(membership.getInviteToken()));
// logger.debug("Jpeg: " + jpeg.getWidth() + " h. " +
// 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.setPosition(50, y);
image.drawOn(page);
......@@ -164,7 +170,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
reserverLabel.setPosition(300, y + 30);
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.drawOn(page);
......@@ -172,7 +179,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
assoclabel.setPosition(300, y + 65);
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.drawOn(page);
......
......@@ -2,9 +2,11 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
......@@ -12,19 +14,25 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean;
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.facade.AccountEventFacade;
import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.DiscountFacade;
import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.facade.ProductFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.DiscountInstance;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.ProductLimitation;
import fi.insomnia.bortal.model.Role;
/**
* Session Bean implementation class ProductBean
......@@ -59,6 +67,19 @@ public class ProductBean implements ProductBeanLocal {
private PermissionBeanLocal permbean;
@EJB
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.
......@@ -109,6 +130,139 @@ public class ProductBean implements ProductBeanLocal {
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
public BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date) {
if (product == null || quantity == null) {
......@@ -136,36 +290,6 @@ public class ProductBean implements ProductBeanLocal {
// 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
public Product findById(int id) {
Product ret = productFacade.find(id);
......@@ -200,6 +324,15 @@ public class ProductBean implements ProductBeanLocal {
@Override
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 {
SitePage page = sitepagefacade.find(name);
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 {
u.setNick("kavija");
Calendar bday = Calendar.getInstance();
bday.set(Calendar.YEAR, 1990);
u.setBirthday(bday);
u.setBirthday(bday.getTime());
u.setCreated(Calendar.getInstance());
u.setEmail("kalle.kavija@example.com");
u.setFirstnames("Kalle Kauko");
......@@ -129,7 +129,7 @@ public class TestDataBean implements TestDataBeanLocal {
u.setNick("admin");
Calendar bday = Calendar.getInstance();
bday.set(Calendar.YEAR, 1980);
u.setBirthday(bday);
u.setBirthday(bday.getTime());
u.setCreated(Calendar.getInstance());
u.setEmail("admin@inter.net");
u.setFirstnames("Asko Admin");
......
......@@ -46,6 +46,7 @@ import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
/**
......@@ -205,10 +206,10 @@ public class UserBean implements UserBeanLocal {
userimage.setName(filename);
userimage.setDescription(description);
user.getUserImageList().add(userimage);
user.getUser().getUserImageList().add(userimage);
// setting uploaded image as the default.
user.setCurrentImage(userimage);
user.getUser().setCurrentImage(userimage);
return userimage;
}
......@@ -224,7 +225,7 @@ public class UserBean implements UserBeanLocal {
UserImage ret = null;
if (id == 0 && permbean.isLoggedIn()) {
ret = permbean.getCurrentUser().getCurrentImage();
ret = permbean.getCurrentUser().getUser().getCurrentImage();
} else {
ret = userimagefacade.find(id);
if (ret != null && !permbean.isCurrentUser(ret.getUser()) && permbean.hasPermission(UserPermission.MODIFY)) {
......@@ -245,7 +246,8 @@ public class UserBean implements UserBeanLocal {
@RolesAllowed(UserPermission.S_CREATE_NEW)
public void createNewUser(EventUser user, String password) {
user.resetPassword(password);
user.getUser().resetPassword(password);
// todo add barcode
user.setEvent(eventBean.getCurrentEvent());
// Tallennetaan olio kantaan...
eventUserFacade.create(user);
......@@ -309,8 +311,8 @@ public class UserBean implements UserBeanLocal {
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
public SearchResult<User> getUsers(int page, int pagesize, String sort, String search) {
return userFacade.searchUser(page, pagesize, sort, search);
public SearchResult<User> getUsers(SearchQuery search) {
return userFacade.searchAllUsers(search);
}
// @Override
......@@ -337,7 +339,7 @@ public class UserBean implements UserBeanLocal {
MailMessage msg = new MailMessage();
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);
utilbean.sendMail(msg);
return true;
......@@ -420,7 +422,7 @@ public class UserBean implements UserBeanLocal {
@Override
@RolesAllowed(UserPermission.S_CREATE_NEW)
public EventUser createNewUser(User usr) {
EventUser evu = new EventUser(usr, eventBean.getCurrentEvent());
EventUser evu = new EventUser(usr, eventBean.getCurrentEvent(), permbean.getCurrentUser());
eventUserFacade.create(evu);
return evu;
}
......@@ -458,7 +460,7 @@ public class UserBean implements UserBeanLocal {
EventUser ret = eventUserFacade.find(user);
if (ret == null)
{
ret = new EventUser(user, eventBean.getCurrentEvent());
ret = new EventUser(user, eventBean.getCurrentEvent(), permbean.getCurrentUser());
eventUserFacade.create(ret);
eventUserFacade.flush();
}
......@@ -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 {
@Override
public void convertUsernames() {
for (EventUser u : userbean.getUsers()) {
if (u.getLogin().trim().isEmpty()) {
if (u.getUser().getLogin().trim().isEmpty()) {
logger.warn("User {} has empty login...");
continue;
}
User testU = userfacade.findByLogin(u.getLogin().toLowerCase());
User testU = userfacade.findByLogin(u.getUser().getLogin().toLowerCase());
if (testU == null || testU.equals(u)) {
u.setLogin(u.getLogin().toLowerCase());
logger.info("Converted user {}", u.getLogin());
u.getUser().setLogin(u.getUser().getLogin().toLowerCase());
logger.info("Converted user {}", u.getUser().getLogin());
} 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;
import java.io.InputStream;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
......@@ -22,14 +20,12 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.codec.binary.Hex;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.auth.params.AuthPNames;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.AuthPolicy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -47,6 +43,7 @@ import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventPrivatePropertyKey;
import fi.insomnia.bortal.util.SvmReturnType;
import fi.insomnia.bortal.util.VerkkomaksutReturnEntry;
import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry;
/**
......@@ -58,7 +55,7 @@ import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry;
public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(VerkkomaksutFiBean.class);
private static final char CHECKSUM_SEP = '|';
private static final String CHECKSUM_SEP = "|";
@EJB
private EventBean eventbean;
@EJB
......@@ -92,45 +89,40 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
}
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;
try {
MessageDigest algo = MessageDigest.getInstance("MD5");
final byte[] resultByte = algo.digest(sumSource.toString().getBytes());
final String calculatedHash = new String(Hex.encodeHex(resultByte));
logger.info("calculated checksum for svv message: {}, comparing to {}", calculatedHash, authcode);
if (authcode.toUpperCase().equals(calculatedHash.toUpperCase())) {
Bill bill = billFacade.find(Integer.parseInt(orderNumber));
if (bill != null)
{
// If bill is unpaid, mark it paid...
if (SvmReturnType.PENDING.equals(type) || paid.equals("0000000000")) {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Received pending message ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
} else if (bill.getAccountEvent() == null
&& bill.getPaidDate() == null
&& (SvmReturnType.NOTIFICATION.equals(type) || SvmReturnType.SUCCESS.equals(type))) {
vmrunner.markPaid(bill, Calendar.getInstance());
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Validated order number ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
ret = true;
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Bill already marked paid or other error. ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
ret = true;
}
String calculatedHash = PasswordFunctions.calculateMd5(CHECKSUM_SEP,
orderNumber,
timestamp,
paid,
method,
merchantPassword);
logger.info("calculated checksum for svv message: {}, comparing to {}", calculatedHash, authcode);
if (authcode.toUpperCase().equals(calculatedHash)) {
Bill bill = billFacade.find(Integer.parseInt(orderNumber));
if (bill != null)
{
// If bill is unpaid, mark it paid...
if (SvmReturnType.PENDING.equals(type) || paid.equals("0000000000")) {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Received pending message ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
} else if (bill.getAccountEvent() == null
&& bill.getPaidDate() == null
&& (SvmReturnType.NOTIFICATION.equals(type) || SvmReturnType.SUCCESS.equals(type))) {
vmrunner.markPaid(bill, Calendar.getInstance());
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Validated order number ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
ret = true;
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to find bill for order number ", orderNumber);
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Bill already marked paid or other error. ", orderNumber, " bill ", bill.toString(), " with authcode: ", authcode);
ret = true;
}
} 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(), "Mac validated, but unable to find bill for order number ", orderNumber);
}
} catch (NoSuchAlgorithmException e) {
logger.warn("THIS SHOULD NEVER HAPPEN! (md5 hashfunction should always exist)", e);
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Unable to validate order number: ", orderNumber, " calculated checksum: ", calculatedHash, " authcode ", authcode, " paid ", paid, " method ", method);
}
return ret;
}
......@@ -206,7 +198,8 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
postRequest.setHeader("Content-Type", "application/xml");
postRequest.setHeader("X-Verkkomaksut-Api-Version", "1");
postRequest.setEntity(new StringEntity(outputPayment(paymentMsg)));
// postRequest.setEntity(new
// StringEntity(outputPayment(paymentMsg)));
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;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
......@@ -14,6 +16,7 @@ import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.AccountEvent_;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Product_;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.Role_;
......@@ -59,4 +62,33 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> {
);
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> {
return getEm().createQuery(cq).getResultList();
}
}
......@@ -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.Bill_;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
@Stateless
@LocalBean
......@@ -53,4 +55,39 @@ public class BillLineFacade extends IntegerPkGenericFacade<BillLine> {
}
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;
import fi.insomnia.bortal.beans.EventBeanLocal;
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_;
......@@ -63,4 +65,53 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> {
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;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericFacade<C extends ModelInterface> {
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) {
this.entClass = entityClass;
......@@ -110,53 +109,55 @@ public abstract class GenericFacade<C extends ModelInterface> {
return ret;
}
@Deprecated
protected List<C> search(String query, String[] fields, String orderfield) {
return search(0, 0, query, fields, orderfield);
}
@Deprecated
protected SearchResult<C> searcher(int page, int pagesize, String query, String[] fields, String orderfield) {
SearchResult<C> ret = new SearchResult<C>();
ret.setResults(search(page, pagesize, query, fields, orderfield));
ret.setResultcount(searchCount(query, fields));
return ret;
}
// @Deprecated
// protected List<C> search(String query, String[] fields, String
// orderfield) {
// return search(0, 0, query, fields, orderfield);
// }
//
// @Deprecated
// protected SearchResult<C> searcher(int page, int pagesize, String query,
// String[] fields, String orderfield) {
// SearchResult<C> ret = new SearchResult<C>();
// 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
// näin... :(
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> callback) {
return searcher(page, pagesize, Collections.singletonList(callback));
protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> 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>>();
cbs.add(cb1);
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>>();
cbs.add(cb1);
cbs.add(cb2);
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>>();
cbs.add(cb1);
cbs.add(cb2);
cbs.add(cb3);
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();
CriteriaQuery<C> listCQuery = cb.createQuery(getEntityClass());
......@@ -169,22 +170,28 @@ public abstract class GenericFacade<C extends ModelInterface> {
TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<C> listQ = getEm().createQuery(listCQuery);
if (pagesize > 0) {
listQ.setFirstResult(page * pagesize);
listQ.setMaxResults(pagesize);
if (search.getPagesize() > 0) {
listQ.setFirstResult(search.getPage() * search.getPagesize());
listQ.setMaxResults(search.getPagesize());
}
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();
Root<C> root = cq.from(getEntityClass());
Root<T> root = cq.from(clazz);
ArrayList<Predicate> predicates = new ArrayList<Predicate>();
for (FacadeCallback<C> fc : list) {
fc.exec(cb, cq, root, predicates);
for (FacadeCallback<T> fc : list) {
if (fc != null) {
fc.exec(cb, cq, root, predicates);
}
}
if (!predicates.isEmpty()) {
Predicate[] preds = predicates.toArray(new Predicate[predicates.size()]);
......@@ -195,52 +202,55 @@ public abstract class GenericFacade<C extends ModelInterface> {
}
@Deprecated
protected List<C> search(int page, int pagesize, String query, String[] fields, String orderfield) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<C> cq = cb.createQuery(getEntityClass());
Root<C> root = cq.from(getEntityClass());
addPredicates(cq, root, query, fields);
TypedQuery<C> q = getEm().createQuery(cq);
if (pagesize > 0) {
q.setFirstResult(page * pagesize);
q.setMaxResults(pagesize);
}
List<C> ret = q.getResultList();
return ret;
}
@Deprecated
protected void addPredicates(CriteriaQuery<?> cq, Root<C> root, String query, String[] fields) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
if (query != null && !query.isEmpty() && fields != null && fields.length > 0) {
List<Predicate> preds = new ArrayList<Predicate>();
for (String field : fields) {
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);
Root<C> root = cq.from(getEntityClass());
addPredicates(cq, root, query, fields);
cq.select(getEm().getCriteriaBuilder().count(root));
TypedQuery<Long> q = getEm().createQuery(cq);
return q.getSingleResult();
}
// @Deprecated
// protected List<C> search(int page, int pagesize, String query, String[]
// fields, String orderfield) {
//
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
// CriteriaQuery<C> cq = cb.createQuery(getEntityClass());
//
// Root<C> root = cq.from(getEntityClass());
//
// addPredicates(cq, root, query, fields);
//
// TypedQuery<C> q = getEm().createQuery(cq);
// if (pagesize > 0) {
// q.setFirstResult(page * pagesize);
// q.setMaxResults(pagesize);
//
// }
// List<C> ret = q.getResultList();
// return ret;
// }
//
// @Deprecated
// protected void addPredicates(CriteriaQuery<?> cq, Root<C> root, String
// query, String[] fields) {
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
// if (query != null && !query.isEmpty() && fields != null && fields.length
// > 0) {
// List<Predicate> preds = new ArrayList<Predicate>();
// for (String field : fields) {
// 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);
// Root<C> root = cq.from(getEntityClass());
//
// addPredicates(cq, root, query, fields);
// cq.select(getEm().getCriteriaBuilder().count(root));
//
// TypedQuery<Long> q = getEm().createQuery(cq);
// return q.getSingleResult();
// }
// @Deprecated
// public List<C> findAll(int page, int pagesize, String sort) {
......
......@@ -65,5 +65,18 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> {
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> {
Path<SitePage> parentpath = root.get(SitePage_.parent);
Predicate rootpred = null;
if (parentpath == null)
if (siteroot == null)
{
rootpred = cb.isNull(parentpath);
}
else
{
rootpred = cb.equal(parentpath, parentpath);
rootpred = cb.equal(parentpath, siteroot);
}
cq.where(
......
......@@ -4,20 +4,30 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
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.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.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
@Stateless
......@@ -28,7 +38,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
private static List<SingularAttribute<User, String>> SEARCHATTRS;
private List<SingularAttribute<User, String>> getAttrlist() {
static List<SingularAttribute<User, String>> getAttrlist() {
if (SEARCHATTRS == null)
{
ArrayList<SingularAttribute<User, String>> buildAttrs = new ArrayList<SingularAttribute<User, String>>();
......@@ -46,6 +56,9 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return SEARCHATTRS;
}
@EJB
private EventBeanLocal eventBean;
// final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname",
// "email" };
......@@ -67,7 +80,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(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));
}
......@@ -92,23 +105,17 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return super.merge(user);
}
public SearchResult<User> searchUser(int page, int pagesize, String sort, String search) {
OrderCallback<User> orderCall = null;
if (sort == null || sort.isEmpty()) {
orderCall = new OrderCallback<User>(false, User_.id);
}
else
{
orderCall = new OrderCallback<User>(false, sort);
public SearchResult<User> searchAllUsers(SearchQuery search) {
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,
new StringSearchPredicateCreator<User>(search, getAttrlist()),
orderCall
);
return super.searcher(search, callbacks);
// return this.search(page, pagesize, query, NAMEFIELDS, sort);
}
......@@ -139,7 +146,47 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
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;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
......@@ -26,7 +26,7 @@ public class AndPredicateCreator<A, T extends ModelInterface> implements FacadeC
}
@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()) {
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;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.utilities.jpa.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;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
......@@ -24,7 +24,7 @@ public class OrPredicateCreator<A, T extends ModelInterface> implements FacadeCa
}
@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()) {
return;
}
......
......@@ -6,7 +6,6 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
......@@ -30,7 +29,7 @@ public class OrderCallback<T extends ModelInterface> implements FacadeCallback<T
}
@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();
// 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;
import java.util.Collections;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.Path;
import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class StringSearchPredicateCreator<T extends ModelInterface> implements FacadeCallback<T> {
private static final String WILDCARD = "%";
private String searchstr = null;
private List<SingularAttribute<T, String>> attributes = null;
public class StringSearchPredicateCreator<T extends ModelInterface> extends PathStringSearchPredicateCreator<T, T> {
public StringSearchPredicateCreator(String search, List<SingularAttribute<T, String>> attrs) {
if (addSearch(search)) {
attributes = attrs;
}
super(search, attrs);
}
public StringSearchPredicateCreator(String search, SingularAttribute<T, 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;
super(search, from);
}
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) {
if (searchstr == null || attributes == null || attributes.isEmpty()) {
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));
}
protected Path<T> getPath(Path<T> root) {
return root;
}
}
......@@ -10,10 +10,6 @@
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
......@@ -16,6 +16,11 @@
</arguments>
</buildCommand>
<buildCommand>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
......@@ -26,5 +31,6 @@
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures>
</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;
import javax.ejb.Local;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.User;
@Local
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;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.User;
@Local
public interface PermissionBeanLocal {
......@@ -16,8 +16,6 @@ public interface PermissionBeanLocal {
boolean isLoggedIn();
boolean isCurrentUser(IUser thisuser);
// boolean fatalPermission(IAppPermission perm, Object... failmessage);
// throws PermissionDeniedException;
......@@ -37,6 +35,10 @@ public interface PermissionBeanLocal {
EventUser getAnonEventUser();
boolean isCurrentUser(User user);
boolean isCurrentUser(EventUser user);
// boolean hasPermission(String perm);
}
......@@ -2,7 +2,9 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Local;
......@@ -11,14 +13,13 @@ import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.Role;
@Local
public interface ProductBeanLocal {
List<Product> listUserShoppableProducts();
List<Product> findProductsByFlag(ProductFlag ... productFlags);
List<Product> findProductsByFlag(ProductFlag... productFlags);
void create(Product prod);
......@@ -36,6 +37,8 @@ public interface ProductBeanLocal {
Product findById(int parseInt);
Product findByBarcode(String barcode);
List<Product> findForStaffshop();
Discount findDiscount(Integer discountid);
......@@ -43,5 +46,9 @@ public interface ProductBeanLocal {
Discount save(Discount discount);
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 {
List<PageContent> findContentsForUser(String name);
SitePage findSitename(String managedPage);
}
......@@ -10,6 +10,7 @@ import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
@Local
......@@ -17,7 +18,9 @@ public interface UserBeanLocal {
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);
......@@ -66,4 +69,6 @@ public interface UserBeanLocal {
EventUser validateUser(String username, String password);
EventUser getUserByBarcode(String barcode);
}
......@@ -3,6 +3,9 @@ package fi.insomnia.bortal.clientutils;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.IAppPermission;
public class BortalLocalContextHolder {
......@@ -10,13 +13,23 @@ public class BortalLocalContextHolder {
private static final ThreadLocal<BortalLocalContextHolder> THREAD_WITH_CONTEXT = new ThreadLocal<BortalLocalContextHolder>();
private String hostname;
private boolean ssl = false;
private Integer hostnameId;
private final Map<IAppPermission, Boolean> rightcache = new HashMap<IAppPermission, Boolean>();
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) {
......@@ -84,4 +97,18 @@ public class BortalLocalContextHolder {
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;
import javax.mail.internet.InternetAddress;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.User;
public class MailMessage implements Serializable {
/**
......@@ -99,7 +99,7 @@ public class MailMessage implements Serializable {
return charset;
}
public void setTo(IUser user) {
public void setTo(User user) {
setToName(user.getWholeName());
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 @@
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
......@@ -17,7 +17,7 @@
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
......@@ -36,6 +36,11 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
......@@ -43,5 +48,6 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.axdt.as3.imp.nature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures>
</projectDescription>
#Thu Oct 27 18:05:25 EEST 2011
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
......
......@@ -4,7 +4,7 @@
<fixed facet="jst.utility"/>
<fixed facet="jst.java"/>
<fixed facet="jpt.jpa"/>
<installed facet="jst.java" version="6.0"/>
<installed facet="jst.utility" version="1.0"/>
<installed facet="jpt.jpa" version="2.0"/>
<installed facet="jst.java" version="1.6"/>
</faceted-project>
Manifest-Version: 1.0
Class-Path: lib/LanBortalUtilities.jar
bcprov-jdk16-146.jar
bcmail-jdk16-146.jar
Class-Path: bcprov-jdk16-146.jar
bcmail-jdk16-146.jar
LanBortalUtilities.jar
......@@ -193,9 +193,9 @@ public class Bill extends GenericEntity {
public Bill(LanEvent event, EventUser user) {
this(event);
this.setUser(user);
this.setAddr1(user.getFirstnames() + " " + user.getLastname());
this.setAddr2(user.getAddress());
this.setAddr3(user.getZip() + " " + user.getTown());
this.setAddr1(user.getUser().getFirstnames() + " " + user.getUser().getLastname());
this.setAddr2(user.getUser().getAddress());
this.setAddr3(user.getUser().getZip() + " " + user.getUser().getTown());
}
public Bill(LanEvent event) {
......
......@@ -26,7 +26,9 @@ public abstract class EntityEquals {
@Override
public boolean equals(Object o) {
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;
if (getId() == null) {
ret = (getRndid().equals(oobj.rndid));
......
......@@ -9,9 +9,11 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
......@@ -20,6 +22,8 @@ import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking;
......@@ -30,7 +34,7 @@ import fi.insomnia.bortal.enums.Gender;
@Entity
@Table(name = "event_users", uniqueConstraints = @UniqueConstraint(columnNames = { EventUser.USER_ID_COLUMN, EventUser.EVENT_ID_COLUMN }))
@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 EVENT_ID_COLUMN = "event_id";
......@@ -38,6 +42,7 @@ public class EventUser extends GenericEntity implements IUser {
@ManyToOne(cascade = { PERSIST, MERGE, REFRESH, DETACH })
@JoinColumn(nullable = false, name = USER_ID_COLUMN)
private User user;
@ManyToOne
@JoinColumn(nullable = false, name = EVENT_ID_COLUMN)
private LanEvent event;
......@@ -92,13 +97,39 @@ public class EventUser extends GenericEntity implements IUser {
@OneToMany(mappedBy = "user")
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()
{
super();
}
public EventUser(User usr, LanEvent evnt) {
public EventUser(User usr, LanEvent evnt, EventUser usercreator) {
super();
this.eventuserCreated = new Date();
this.creator = usercreator;
this.user = usr;
this.event = evnt;
}
......@@ -223,222 +254,178 @@ public class EventUser extends GenericEntity implements IUser {
this.pollAnswers = pollAnswers;
}
@Override
public void setCreated(Calendar created) {
user.setCreated(created);
}
@Override
public boolean getActive() {
return user.getActive();
}
@Override
public void setActive(boolean active) {
user.setActive(active);
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public void setPassword(String password) {
user.setPassword(password);
}
@Override
public String getWholeName() {
return user.getWholeName();
}
@Override
public String getLastname() {
return user.getLastname();
}
@Override
public void setLastname(String lastname) {
user.setLastname(lastname);
}
@Override
public String getFirstnames() {
return user.getFirstnames();
}
@Override
public void setFirstnames(String firstnames) {
user.setFirstnames(firstnames);
}
@Override
public Calendar getBirthday() {
public Date getBirthday() {
return user.getBirthday();
}
@Override
public void setBirthday(Calendar birthday) {
public void setBirthday(Date birthday) {
user.setBirthday(birthday);
}
@Override
public String getNick() {
return user.getNick();
}
@Override
public void setNick(String nick) {
user.setNick(nick);
}
@Override
public String getEmail() {
return user.getEmail();
}
@Override
public void setEmail(String email) {
user.setEmail(email);
}
@Override
public String getAddress() {
return user.getAddress();
}
@Override
public void setAddress(String address) {
user.setAddress(address);
}
@Override
public String getZip() {
return user.getZip();
}
@Override
public void setZip(String zip) {
user.setZip(zip);
}
@Override
public String getTown() {
return user.getTown();
}
@Override
public void setTown(String town) {
user.setTown(town);
}
@Override
public String getPhone() {
return user.getPhone();
}
@Override
public void setPhone(String phone) {
user.setPhone(phone);
}
@Override
public String getLogin() {
return user.getLogin();
}
@Override
public void setLogin(String login) {
user.setLogin(login);
}
@Override
public List<UserImage> getUserImageList() {
return user.getUserImageList();
}
@Override
public void setUserImageList(List<UserImage> userImageList) {
user.setUserImageList(userImageList);
}
@Override
public String getConfirmHash() {
return user.getConfirmHash();
}
@Override
public void setConfirmHash(String confirmHash) {
user.setConfirmHash(confirmHash);
}
@Override
public Calendar getConfirmTime() {
return user.getConfirmTime();
}
@Override
public void setConfirmTime(Calendar confirmTime) {
user.setConfirmTime(confirmTime);
}
@Override
public void resetPassword(String password) {
user.resetPassword(password);
}
@Override
public boolean checkPassword(String plainPassword) {
return user.checkPassword(plainPassword);
}
@Override
public void setSuperadmin(boolean superadmin) {
user.setSuperadmin(superadmin);
}
@Override
public boolean isSuperadmin() {
return user.isSuperadmin();
}
@Override
public void setPostalTown(String postalTown) {
user.setPostalTown(postalTown);
}
@Override
public String getPostalTown() {
return user.getPostalTown();
}
@Override
public void setGender(Gender gender) {
user.setGender(gender);
}
@Override
public Gender getGender() {
return user.getGender();
}
@Override
public void setCurrentImage(UserImage currentImage) {
user.setCurrentImage(currentImage);
}
@Override
public UserImage getCurrentImage() {
return user.getCurrentImage();
}
@Override
public boolean isAnonymous() {
return user.isAnonymous();
}
@Override
public Calendar getCreated() {
return user.getCreated();
}
......
package fi.insomnia.bortal.model;
import java.util.Date;
import javax.annotation.Generated;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
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)
public class EventUser_ extends GenericEntity_ {
public static volatile SingularAttribute<EventUser, User> user;
......@@ -23,4 +24,6 @@ public class EventUser_ extends GenericEntity_ {
public static volatile ListAttribute<EventUser, Bill> bills;
public static volatile ListAttribute<EventUser, AccountEvent> soldItems;
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;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
......@@ -25,7 +24,9 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
*
*/
@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)
public class GroupMembership extends GenericEntity {
......
package fi.insomnia.bortal.model;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import fi.insomnia.bortal.enums.Gender;
......@@ -29,9 +30,9 @@ public interface IUser {
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();
......
......@@ -5,6 +5,9 @@ public enum LanEventPrivatePropertyKey {
VERKKOMAKSU_KEY_EXPIRE(Type.DATE, null),
VERKKOMAKSU_MERCHANT_ID(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 {
......
......@@ -6,7 +6,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
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)
public class LanEventPrivateProperty_ extends GenericEntity_ {
public static volatile SingularAttribute<LanEventPrivateProperty, EventOrganiser> eventorg;
......
......@@ -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"),
PORTAL_EMAIL_ADDRESS(Type.TEXT, "intra@streamparty.org"),
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 {
TEXT, DATE, DATA
};
......
......@@ -5,7 +5,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
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)
public class LogEntry_ extends GenericEntity_ {
public static volatile SingularAttribute<LogEntry, LanEvent> parentEvent;
......
......@@ -76,6 +76,9 @@ public class Product extends GenericEntity {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<Place> places;
@ManyToMany()
private List<ProductLimitation> productLimits;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<AccountEvent> accountEvents;
......@@ -262,4 +265,12 @@ public class Product extends GenericEntity {
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;
import javax.persistence.metamodel.SingularAttribute;
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)
public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, LanEvent> event;
......@@ -19,6 +19,7 @@ public class Product_ extends GenericEntity_ {
public static volatile SetAttribute<Product, ProductFlag> productFlags;
public static volatile SingularAttribute<Product, Role> provides;
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, Discount> discounts;
public static volatile SingularAttribute<Product, BigDecimal> vat;
......
......@@ -14,6 +14,8 @@ import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
......@@ -49,6 +51,10 @@ public class Reader extends GenericEntity {
this.setEvent(ev);
}
@Column(nullable = false, name = "type")
@Enumerated(EnumType.STRING)
private ReaderType type;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@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;
import javax.persistence.metamodel.SingularAttribute;
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)
public class Reader_ extends GenericEntity_ {
public static volatile SingularAttribute<Reader, ReaderType> type;
public static volatile SingularAttribute<Reader, LanEvent> event;
public static volatile SingularAttribute<Reader, Integer> gamepoints;
public static volatile SingularAttribute<Reader, Integer> maxEvents;
......
......@@ -17,7 +17,7 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.eclipse.persistence.annotations.PrivateOwned;
@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)
public class SitePage extends GenericEntity {
......
......@@ -5,7 +5,7 @@ import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
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)
public class SitePage_ extends GenericEntity_ {
public static volatile SingularAttribute<SitePage, LanEvent> event;
......
package fi.insomnia.bortal.model;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
......@@ -37,7 +38,7 @@ public class User extends GenericEntity implements IUser {
public static final String ANONYMOUS_LOGINNAME = "anonymous";
private static final long serialVersionUID = -1632200627103418206L;
@Column(name = "created", nullable = false)
@Column(name = "created", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Calendar created = Calendar.getInstance();
......@@ -59,7 +60,7 @@ public class User extends GenericEntity implements IUser {
@Column(name = "birthday")
@Temporal(TemporalType.TIMESTAMP)
private Calendar birthday;
private Date birthday;
@Column(name = "nick")
private String nick = "";
......@@ -173,12 +174,12 @@ public class User extends GenericEntity implements IUser {
}
@Override
public Calendar getBirthday() {
public Date getBirthday() {
return birthday;
}
@Override
public void setBirthday(Calendar birthday) {
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
......
......@@ -2,12 +2,13 @@ package fi.insomnia.bortal.model;
import fi.insomnia.bortal.enums.Gender;
import java.util.Calendar;
import java.util.Date;
import javax.annotation.Generated;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
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)
public class User_ extends GenericEntity_ {
public static volatile SingularAttribute<User, Calendar> created;
......@@ -16,7 +17,7 @@ public class User_ extends GenericEntity_ {
public static volatile SingularAttribute<User, String> password;
public static volatile SingularAttribute<User, String> lastname;
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> email;
public static volatile SingularAttribute<User, String> address;
......
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<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>
<attribute name="owner.project.facets" value="java"/>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</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>
<attribute name="owner.project.facets" value="jst.web"/>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</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"/>
</classpath>
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
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.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.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
......@@ -5,7 +5,6 @@ import java.util.TimeZone;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
......@@ -14,10 +13,9 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
@Named()
@RequestScoped
......@@ -26,11 +24,11 @@ public class SessionHandler {
private static final Logger logger = LoggerFactory
.getLogger(SessionHandler.class);
//@Inject
//private HttpServletRequest httprequest;
// @Inject
// private HttpServletRequest httprequest;
//@EJB
//private RoleBeanLocal rolebean;
// @EJB
// private RoleBeanLocal rolebean;
@EJB
private EventBeanLocal eventbean;
......@@ -45,14 +43,14 @@ public class SessionHandler {
public String getLocale() {
// TODO: Locale selection code missing
// return "en_ST_v7";
//return "fi_IN_XIII";
// return "fi_IN_XIII";
return "fi_FI";
}
public String getLayout() {
// TODO: layout selection code missing!!
// return "stream1";
//return "insomnia2";
// return "insomnia2";
return "default";
}
......@@ -81,11 +79,11 @@ public class SessionHandler {
}
public boolean isSuperadmin() {
return permbean.getCurrentUser().isSuperadmin();
return permbean.getCurrentUser().getUser().isSuperadmin();
}
public IUser getCurrentUser() {
public EventUser getCurrentUser() {
return permbean.getCurrentUser();
}
......
......@@ -7,7 +7,6 @@ import javax.inject.Named;
import javax.resource.spi.IllegalStateException;
import fi.insomnia.bortal.beans.SalesEntitySessionBeanLocal;
import fi.insomnia.bortal.beans.SalespointContainerBeanLocal;
import fi.insomnia.bortal.salespoint.CartItem;
import fi.insomnia.bortal.salespoint.SalespointSessionManager;
......@@ -15,24 +14,24 @@ import fi.insomnia.bortal.salespoint.SalespointSessionManager;
public class CartView extends AbstractView {
private static final long serialVersionUID = 9041477262092320847L;
@EJB
SalesEntitySessionBeanLocal sessionBean;
private transient SalesEntitySessionBeanLocal sessionBean;
public CartItem[] getItems() throws IllegalStateException {
SalespointSessionManager sessionManager = sessionBean.getSessionManager();
return new CartItem[] { new CartItem(), new CartItem() };
}
public BigDecimal getTotal() throws IllegalStateException {
CartItem[] cartItems = getItems();
BigDecimal result = new BigDecimal(0);
for (int i = 0; i < cartItems.length; i++) {
result = result.add(cartItems[i].getTotal());
}
return result;
}
}
......@@ -14,14 +14,14 @@ import fi.insomnia.bortal.beans.PermissionBeanLocal;
@Named
@RequestScoped
public class TestView implements Serializable {
private static final long serialVersionUID = -2872232867536069020L;
private static final Logger logger = LoggerFactory.getLogger(TestView.class);
@EJB
private PermissionBeanLocal permissionBean;
private transient PermissionBeanLocal permissionBean;
public String getPrincipal() {
logger.debug("PermissionBean: {}", permissionBean);
return permissionBean.getPrincipal();
......
......@@ -7,10 +7,6 @@
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
......@@ -16,7 +16,7 @@
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
......@@ -25,6 +25,11 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
......@@ -32,5 +37,6 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.axdt.as3.imp.nature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures>
</projectDescription>
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;
import java.util.Random;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -18,6 +19,47 @@ public class PasswordFunctions {
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) {
byte[] salt = new byte[SALT_LENGTH];
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 @@
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/lib-AuthModule-depends"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
......@@ -21,6 +21,16 @@
</arguments>
</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>
<arguments>
</arguments>
......@@ -32,5 +42,7 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</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>
</projectDescription>
#Sun Mar 27 01:20:35 EET 2011
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
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.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.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
default.configuration=
eclipse.preferences.version=1
hibernate3.enabled=false
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>LanBortalWeb</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<!-- <param-value>Production</param-value> -->
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<servlet-mapping>
<servlet-name>PlaceMap</servlet-name>
<url-pattern>/PlaceMap</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsf</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.wtf</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserImageServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UserImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserImageServlet</servlet-name>
<url-pattern>/Userimage</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserCardServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UserCardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserCardServlet</servlet-name>
<url-pattern>/UserCard</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CardTemplateServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.CardTemplateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CardTemplateServlet</servlet-name>
<url-pattern>/CardTemplate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PlaceMap</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.wtf</url-pattern>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<filter>
<display-name>PrimefacesFileupload</display-name>
<filter-name>PrimeFacesFileupload</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFacesFileupload</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter>
<display-name>HostnameFilter</display-name>
<filter-name>HostnameFilter</filter-name>
<filter-class>fi.insomnia.bortal.HostnameFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HostnameFilter</filter-name>
<servlet-name>*</servlet-name>
</filter-mapping>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>omniarealm</realm-name>
<form-login-config>
<form-login-page>/auth/login.jsf</form-login-page>
<form-error-page>/auth/loginError.jsf</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<display-name>Forbidden resource</display-name>
<web-resource-collection>
<web-resource-name>Forbidden</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
<url-pattern>/layout/*</url-pattern>
<url-pattern>/resources/tools/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Thou shall not read the sources or use utils directly</description>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<servlet>
<description></description>
<display-name>PrintBill</display-name>
<servlet-name>PrintBill</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PrintBill</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PrintBill</servlet-name>
<url-pattern>/PrintBill</url-pattern>
</servlet-mapping>
<persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref>
<servlet>
<description></description>
<display-name>PlaceGroupPdf</display-name>
<servlet-name>PlaceGroupPdf</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceGroupPdf</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PlaceGroupPdf</servlet-name>
<url-pattern>/PlaceGroupPdf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>bortal</param-value>
</context-param>
<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">
<display-name>LanBortalWeb</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<servlet-mapping>
<servlet-name>PlaceMap</servlet-name>
<url-pattern>/PlaceMap</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsf</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.wtf</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserImageServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UserImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserImageServlet</servlet-name>
<url-pattern>/Userimage</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserCardServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UserCardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserCardServlet</servlet-name>
<url-pattern>/UserCard</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CardTemplateServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.CardTemplateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CardTemplateServlet</servlet-name>
<url-pattern>/CardTemplate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PlaceMap</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.wtf</url-pattern>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<filter>
<display-name>PrimefacesFileupload</display-name>
<filter-name>PrimeFacesFileupload</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFacesFileupload</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter>
<display-name>HostnameFilter</display-name>
<filter-name>HostnameFilter</filter-name>
<filter-class>fi.insomnia.bortal.HostnameFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HostnameFilter</filter-name>
<servlet-name>*</servlet-name>
</filter-mapping>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>omniarealm</realm-name>
<form-login-config>
<form-login-page>/auth/login.jsf</form-login-page>
<form-error-page>/auth/loginError.jsf</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<display-name>Forbidden resource</display-name>
<web-resource-collection>
<web-resource-name>Forbidden</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
<url-pattern>/layout/*</url-pattern>
<url-pattern>/resources/tools/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Thou shall not read the sources or use utils directly</description>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<servlet>
<description></description>
<display-name>PrintBill</display-name>
<servlet-name>PrintBill</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PrintBill</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PrintBill</servlet-name>
<url-pattern>/PrintBill</url-pattern>
</servlet-mapping>
<persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref>
<servlet>
<description></description>
<display-name>PlaceGroupPdf</display-name>
<servlet-name>PlaceGroupPdf</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceGroupPdf</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PlaceGroupPdf</servlet-name>
<url-pattern>/PlaceGroupPdf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>bortal</param-value>
</context-param>
</web-app>
\ No newline at end of file
......@@ -26,9 +26,9 @@
<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">
<a href="#{billEditView.verkkomaksuToken.url}"> </a>
<a href="#{billEditView.verkkomaksuFiToken.url}"> </a>
</div>
<script type="text/javascript" src="//payment.verkkomaksut.fi/js/sv-widget.min.js"></script>
<script type="text/javascript">
......@@ -38,7 +38,25 @@
});
</script>
</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:composition>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="VERSION" value="#{checkoutView.version}" />
<f:viewParam name="STAMP" value="#{checkoutView.stamp}" />
<f:viewParam name="REFERENCE" value="#{checkoutView.reference}" />
<f:viewParam name="PAYMENT" value="#{checkoutView.payment}" />
<f:viewParam name="STATUS" value="#{checkoutView.status}" />
<f:viewParam name="ALGORITHM" value="#{checkoutView.algorithm}" />
<f:viewParam name="MAC" value="#{checkoutView.mac}" />
<f:event type="preRenderView" listener="#{checkoutView.validateCancel}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['page.checkout.cancel.header']}</h1>
</ui:define>
<ui:define name="content">
<p>
<h:outputText rendered="#{checkoutView.validationResult}" value="#{i18n['checkout.cancel.successMessage']}" />
<h:outputText rendered="#{!checkoutView.validationResult}" value="#{i18n['checkout.cancel.errorMessage']}" />
</p>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="VERSION" value="#{checkoutView.version}" />
<f:viewParam name="STAMP" value="#{checkoutView.stamp}" />
<f:viewParam name="PAYMENT" value="#{checkoutView.payment}" />
<f:viewParam name="STATUS" value="#{checkoutView.status}" />
<f:viewParam name="MAC" value="#{checkoutView.mac}" />
<f:event type="preRenderView" listener="#{checkoutView.validateDelayed}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['page.checkout.delayed.header']}</h1>
</ui:define>
<ui:define name="content">
<p>
<h:outputText rendered="#{checkoutView.validationResult}" value="#{i18n['checkout.return.successDelayed']}" />
<h:outputText rendered="#{!checkoutView.validationResult}" value="#{i18n['checkout.return.errorDelayed']}" />
</p>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="VERSION" value="#{checkoutView.version}" />
<f:viewParam name="STAMP" value="#{checkoutView.stamp}" />
<f:viewParam name="PAYMENT" value="#{checkoutView.payment}" />
<f:viewParam name="STATUS" value="#{checkoutView.status}" />
<f:viewParam name="MAC" value="#{checkoutView.mac}" />
<f:event type="preRenderView" listener="#{checkoutView.validateReject}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['page.checkout.reject.header']}</h1>
</ui:define>
<ui:define name="content">
<p>
<h:outputText rendered="#{checkoutView.validationResult}" value="#{i18n['checkout.reject.successMessage']}" />
<h:outputText rendered="#{!checkoutView.validationResult}" value="#{i18n['checkout.reject.errorMessage']}" />
</p>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="VERSION" value="#{checkoutView.version}" />
<f:viewParam name="STAMP" value="#{checkoutView.stamp}" />
<f:viewParam name="PAYMENT" value="#{checkoutView.payment}" />
<f:viewParam name="STATUS" value="#{checkoutView.status}" />
<f:viewParam name="REFERENCE" value="#{checkoutView.reference}" />
<f:viewParam name="ALGORITHM" value="#{checkoutView.algorithm}" />
<f:viewParam name="MAC" value="#{checkoutView.mac}" />
<f:event type="preRenderView" listener="#{checkoutView.validateReturn}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['page.checkout.return.header']}</h1>
</ui:define>
<ui:define name="content">
<p>
<h:outputText rendered="#{checkoutView.validationResult}" value="#{i18n['checkout.return.successMessage']}" />
<h:outputText rendered="#{!checkoutView.validationResult}" value="#{i18n['checkout.return.errorMessage']}" />
</p>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -101,7 +101,7 @@
<h:message for="propval" />
</h:form>
<h:form rendered="#{!empty eventPropertyView.property}">
<h:form rendered="#{!empty eventPropertyView.property}" enctype="multipart/form-data">
<h:panelGrid columns="3">
<h:outputLabel for="key" value="#{i18n['lanEventProperty.key']}" />
<h:outputText value="#{eventPropertyView.property.key}" id="key" />
......@@ -111,9 +111,14 @@
<h:outputText id="defaultval" value="#{eventPropertyView.property.key.defaultvalue}" />
<h:message for="defaultval" />
<h:outputLabel rendered="#{eventPropertyView.property.key.text}" for="textval" value="#{i18n['lanEventProperty.textValue']}" />
<h:inputText rendered="#{eventPropertyView.property.key.text}" id="textval" value="#{eventPropertyView.property.textvalue}" />
<h:message rendered="#{eventPropertyView.property.key.text}" for="textval" />
<h:outputLabel rendered="#{eventPropertyView.property.key.text or eventPropertyView.property.key.data }" for="textval" value="#{i18n['lanEventProperty.textValue']}" />
<h:inputText rendered="#{eventPropertyView.property.key.text or eventPropertyView.property.key.data}" id="textval" value="#{eventPropertyView.property.textvalue}" />
<h:message rendered="#{eventPropertyView.property.key.text or eventPropertyView.property.key.data}" for="textval" />
<h:outputLabel rendered="#{eventPropertyView.property.key.data}" for="dataval" value="#{i18n['lanEventProperty.textValue']}" />
<p:fileUpload rendered="#{ eventPropertyView.property.key.data}" mode="simple" value="#{eventPropertyView.file}" id="dataval" />
<h:message rendered="#{eventPropertyView.property.key.data}" for="dataval" />
<h:outputLabel rendered="#{eventPropertyView.property.key.date}" for="textval" value="#{i18n['lanEventProperty.textValue']}" />
<p:calendar rendered="#{eventPropertyView.property.key.date}" value="#{eventPropertyView.property.dateValue}" pattern="#{sessionHandler.datetimeFormat}" />
......
......@@ -13,6 +13,13 @@
Development-tilassa.
Vaihda web.xml-tiedostosta ohjelman tila (javax.faces.PROJECT_STAGE) Productioniksi ennen kuin julkaiset ohjelman tuotantoon.
</h:outputLabel>
<ui:fragment rendered="#{layoutView.manageContent}">
<h:link value="#{i18n['layout.editContent']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}" />
</h:link>
<br />
</ui:fragment>
<ui:repeat var="cont1" value="#{pageOutputView.contents}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html" locale="#{sessionHandler.locale}">
<h:head>
......@@ -13,10 +13,9 @@
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/insomnia2/css/tyyli.css" />
<ui:insert name="headerdata" />
<h:outputScript name="prime_calendar.js" library="script" />
</h:head>
<h:body>
<div id="header">
<div id="logo">
<h:link outcome="/index">
......@@ -25,8 +24,14 @@
<img src="#{request.contextPath}/resources/style/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<!-- <img src="#{request.contextPath}/resources/style/insomnia2/img/logo.png" /> -->
<h1>STREAM INTRA</h1>
<p:graphicImage rendered="#{!empty layoutView.headerimage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{empty layoutView.headerimage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<!-- <img src="#{request.contextPath}/resources/style/insomnia2/img/logo.png" />
<h1>STREAM INTRA</h1> -->
</c:otherwise>
</c:choose>
</h:link>
......@@ -55,8 +60,11 @@
styleClass="#{menuitem.selected?'active':''}" /></li>
</ul>
</div>
<div id="container" class="top" />
<div id="container" class="clearfix">
<h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="#{i18n['layout.editTop']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:top" />
</h:link>
<div class="container top" />
<div class="container clearfix">
<ui:fragment rendered="#{menuView.getMenu(2).size() > 1}">
<div id="right">
......@@ -81,7 +89,23 @@
</div>
</div>
<div id="container" class="bottom"></div>
<h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="#{i18n['layout.editBottom']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:bottom" />
</h:link>
<div class="container bottom">
<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://jolez.pingtimeout.net/piwik/" : "http://jolez.pingtimeout.net/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 5);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://jolez.pingtimeout.net/piwik/piwik.php?idsite=5" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->
</div>
</div>
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html" locale="#{sessionHandler.locale}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{layoutView.getHeader()}" /></title>
<meta name="description" content="Lippukauppa" />
<meta name="author" content="CodeCrew ry" />
<meta http-equiv="Content-Language" content="fi" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/template1/css/style.css" />
<ui:insert name="headerdata" />
</h:head>
<h:body>
<div id="page-container">
<div id="page-header">
<div id="logo">
<h:link outcome="/index">
<c:choose>
<c:when test="#{sessionHandler.isInDevelopmentMode()}">
<img src="#{request.contextPath}/resources/style/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<p:graphicImage rendered="#{!empty layoutView.headerimage}" value="#{layoutView.headerimage}" />
<ui:fragment rendered="#{empty layoutView.headerimage}">
<h1>
<h:outputText value="#{layoutView.headertext}" />
</h1>
</ui:fragment>
<!-- <img src="#{request.contextPath}/resources/style/insomnia2/img/logo.png" />
<h1>STREAM INTRA</h1> -->
</c:otherwise>
</c:choose>
</h:link>
</div>
<div id="login">
<h:outputText rendered="#{sessionHandler.loggedIn}" value="#{i18n['template.loggedInAs']} #{sessionHandler.currentUser.nick}" />
<div>
<tools:loginLogout />
</div>
</div>
<ui:fragment rendered="#{menuView.getMenu(0).size() > 1}">
<div id="top-menu">
<ul>
<li jsfc="ui:repeat" var="menuitem" value="#{menuView.getMenu(0)}">
<h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" />
</li>
</ul>
</div>
</ui:fragment>
</div>
<div id="main">
<div id="main-nav">
<ul>
<li jsfc="ui:repeat" var="menuitem" value="#{menuView.getMenu(1)}">
<h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" />
</li>
</ul>
</div>
<div class="container top">
<h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="#{i18n['layout.editTop']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:top" />
</h:link>
</div>
<div class="container clearfix">
<ui:fragment rendered="#{menuView.getMenu(2).size() > 1}">
<div id="right">
<ul>
<ui:repeat var="menuitem" value="#{menuView.getMenu(2)}">
<h:outputText rendered="#{!empty menuitem.header}" value="&lt;/ul>&lt;h1>#{i18n[menuitem.header]}&lt;/h1>&lt;ul>" escape="false" />
<li><h:link outcome="#{menuitem.outcome}" value="#{i18n[menuitem.navigation.key]}" styleClass="#{menuitem.selected?'active':''}" /></li>
</ui:repeat>
</ul>
</div>
</ui:fragment>
<div id="left">
<ui:insert name="title" />
<h:messages globalOnly="true" />
<ui:repeat var="cont1" value="#{menuView.getPagecontent('top')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
<ui:insert name="content" />
<ui:repeat var="cont1" value="#{menuView.getPagecontent('bottom')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
</div>
</div>
<div class="container bottom">
<h:link rendered="#{layoutView.manageContent}" styleClass="editorlink" value="#{i18n['layout.editBottom']}" outcome="/pages/manage">
<f:param name="pagename" value="#{layoutView.pagepath}:bottom" />
</h:link>
</div>
</div>
</div>
<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://jolez.pingtimeout.net/piwik/" : "http://jolez.pingtimeout.net/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 5);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
}
catch( err ) {}
</script>
<noscript><p><img src="http://jolez.pingtimeout.net/piwik/piwik.php?idsite=5" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->
</h:body>
</f:view>
</html>
\ No newline at end of file
......@@ -11,7 +11,7 @@
</f:metadata>
<ui:param name="thispage" value="page.role.edit" />
<ui:define name="content">
<map:edit commitaction="#{mapManageView.saveMap()}" commitvalue="#{i18n['mapEdit.save']}" />
<map:edit commitaction="#{mapManageView.saveMap()}" commitvalue="#{i18n['mapedit.save']}" />
<map:setBuyable />
......
......@@ -12,7 +12,7 @@
</f:metadata>
<ui:define name="content">
<pages:edit commitaction="#{sitePageView.createSite()}" commitvalue="#{i18n['sitepage.create']}" />
<pages:edit commitaction="#{sitePageView.saveSite()}" commitvalue="#{i18n['sitepage.create']}" />
</ui:define>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:pages="http://java.sun.com/jsf/composite/cditools/pages" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="pagename" value="#{sitePageView.managedPage}" />
<f:event type="preRenderView" listener="#{sitePageView.initManage}" />
</f:metadata>
<ui:define name="content">
<pages:edit commitaction="#{sitePageView.saveSite()}" commitvalue="#{i18n['sitepage.save']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title></title>
......
......@@ -12,31 +12,15 @@
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['placegroupview.header']}</h1>
<users:usertabs tabId="groups" />
</ui:define>
<ui:define name="content">
<h2>#{i18n['placetoken.pageHeader']}</h2>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['placetoken.placelist']}</h2>
<p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<p>
<a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a>
</p>
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
<h:column>
......@@ -73,6 +57,20 @@
</h:dataTable>
</h:form>
<p>
<input type="button" onclick="location.replace('#{request.contextPath}/PlaceGroupPdf');" value="#{i18n['placegroup.printPdf']}" />
</p>
<h2>#{i18n['placetoken.pageHeader']}</h2>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:form>
</ui:define>
</ui:composition>
......
......@@ -107,7 +107,7 @@
</h:dataTable>
</h:form>
<h:form rendered="#{!empty placeView.place.group and placeView.place.group.places.size() gt 0}">
<h:form rendered="#{!empty placeView.place.group and not placeView.place.group.places.empty">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placegroup.name']}:" />
<h:inputText value="#{placeView.place.group.name}" />
......@@ -126,7 +126,7 @@
<h:inputTextarea value="#{placeView.place.group.details}" />
<h:outputLabel value="#{i18n['placegroup.creator']}" />
<h:link outcome="/user/edit" value="#{placeView.place.group.creator.wholeName}" >
<h:link outcome="/useradmin/edit" value="#{placeView.place.group.creator.wholeName}" >
<f:param name="userid" value="#{placeView.place.group.creator.id}"/>
</h:link>
</h:panelGrid>
......@@ -147,7 +147,7 @@
<h:column>
<h:outputText rendered="#{empty place.placeReserver.user}" value="#{i18n['place.noReserver']}" />
<h:link rendered="#{!empty place.placeReserver.user}" outcome="/user/edit">
<h:link rendered="#{!empty place.placeReserver.user}" outcome="/useradmin/edit">
<h:outputText value="#{place.placeReserver.user.wholeName}" />
(<h:outputText value="#{place.placeReserver.user.nick}" />)
<f:param name="userid" value="#{place.placeReserver.user.user.id}" />
......
......@@ -15,24 +15,8 @@
</ui:define>
<ui:define name="content">
<h2>#{i18n['placetoken.pageHeader']}</h2>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['placetoken.placelist']}</h2>
<p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<p>
<a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a>
</p>
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
......@@ -71,6 +55,18 @@
</h:dataTable>
</h:form>
<p>
<input type="button" onclick="location.replace('#{request.contextPath}/PlaceGroupPdf');" value="#{i18n['placegroup.printPdf']}" />
</p>
<h2>#{i18n['placetoken.pageHeader']}</h2>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -14,10 +14,10 @@
<h:panelGrid columns="2" columnClasses="topalign,topalign">
<h:outputLabel for="billnr" value="#{i18n['bill.billNumber']}:" />
<h:outputText id="billnr" value="#{cc.attrs.bill.billNumber}" />
<h:outputLabel for="refnr" value="#{i18n['bill.referencenumber']}" />
<h:outputText id="refnr" value="#{cc.attrs.bill.referenceNumber}" />
<h:outputLabel for="billAmount" value="#{i18n['bill.billAmount']}" />
<h:outputText id="billAmount" value="#{cc.attrs.bill.totalPrice()}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
......@@ -71,6 +71,48 @@
</h:panelGrid>
</h:panelGrid>
<h2>#{i18n['bill.billLines']}</h2>
<h:dataTable styleClass="border" border="1" value="#{cc.attrs.bill.billLines}" var="line">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.name']}" />
</f:facet>
<h:outputText value="#{line.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.quantity']}" />
</f:facet>
<h:outputText value="#{line.quantity}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.unitName']}" />
</f:facet>
<h:outputText value="#{line.unitName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.unitPrice']}" />
</f:facet>
<h:outputText value="#{line.unitPrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.linePrice']}" />
</f:facet>
<h:outputText value="#{line.linePrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
</h:dataTable>
</composite:implementation>
</html>
......@@ -30,7 +30,7 @@
<h:inputSecret id="gridPwd" value="#{authView.password}" />
</h:panelGrid>
<h:commandButton id="gridsubmit" action="#{authView.executeLogin()}" value="#{i18n['login.submit']}" />
<h:commandButton id="gridsubmit" actionListener="#{authView.executeLogin()}" value="#{i18n['login.submit']}" />
</c:otherwise>
</c:choose>
......
......@@ -16,10 +16,10 @@
<p><input type="hidden" name="id" value="#{mapManageView.map.id}" /></p>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['setBuyable.like']}" />
<h:outputLabel value="#{i18n['eventmap.buyable.like']}" />
<h:inputText value="#{mapManageView.buyableLike}" />
<h:commandButton id="lockbtn" action="#{mapManageView.lockBuyable}" value="#{i18n['setBuyable.lock']}" />
<h:commandButton id="releasebtn" action="#{mapManageView.releaseBuyable}" value="#{i18n['setBuyable.release']}" />
<h:commandButton id="lockbtn" action="#{mapManageView.lockBuyable}" value="#{i18n['eventmap.buyable.lock']}" />
<h:commandButton id="releasebtn" action="#{mapManageView.releaseBuyable}" value="#{i18n['eventmap.buyable.release']}" />
</h:panelGrid>
</h:form>
......
......@@ -18,14 +18,15 @@
<div style="margin-top: 5px;">
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-top" value="#{cc.attrs.commitValue}" />
</div>
<h:dataTable styleClass="bordertable" id="billcart" value="#{cc.attrs.items}" var="cart">
<h:dataTable columnClasses="nowrap,numalign,numalign,nowrap,numalign" styleClass="bordertable" id="billcart" value="#{cc.attrs.items}" var="cart">
<h:column>
<f:facet name="header">
<h:outputText id="name" value="${i18n['product.name']}" />
</f:facet>
<h:outputText value="#{cart.product.name}" />
</h:column>
<h:column>
<h:column >
<f:facet name="header">
<h:outputText value="${i18n['product.price']}" />
</f:facet>
......@@ -52,7 +53,8 @@
<f:ajax render="@form" />
</h:commandButton>
<h:inputText size="4" id="cartcount" value="#{cart.count}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber maxIntegerDigits="2" minFractionDigits="0"/>
<f:ajax render="@form" event="valueChange" listener="#{productShopView.updateCartLimits}"/>
</h:inputText>
<h:commandButton action="#{productShopView.addOne}" value="#{i18n['productshop.plusOne']}">
<f:ajax render="@form" />
......@@ -61,6 +63,14 @@
<f:ajax render="@form" />
</h:commandButton>
</h:column>
<h:column rendered="#{productShopView.hasLimits}">
<f:facet name="header">
<h:outputText value="#{i18n['productshop.limits']}" />
</f:facet>
<h:outputText value="#{cart.limit}" >
<f:convertNumber maxIntegerDigits="2" minFractionDigits="0"/>
</h:outputText>
</h:column>
<h:column>
<h:dataTable border="0" var="disc" value="#{cart.discounts}">
<h:column>
......
......@@ -12,17 +12,18 @@
<p>
<h:form id="roleform">
<f:facet name="errorMessage">
<h:outputText value="#{i18n['nasty.user']}" />
</f:facet>
<ui:include src="form.xhtml" />
<h:commandButton rendered="#{roleView.canWriteRoles()}" id="saverole" value="#{i18n['save']}" action="#{roleView.save}" />
<h:commandButton rendered="#{roleView.canWriteRoles()}" id="saverole" value="#{i18n['roleView.save']}" action="#{roleView.save}" />
</h:form>
</p>
<h2>#{i18n['role.permissionheader']}</h2>
<p>
<h:form>
<h:form id="permissionform">
<h:commandButton id="save1" value="#{i18n['role.savePermissions']}" action="#{roleView.savePermissions}" />
<h:dataTable border="1" id="bortalApps" value="#{roleView.rolePermissions}" var="bapp">
<h:column>
<f:facet name="header">
......@@ -37,7 +38,7 @@
<h:outputText value="#{i18n[bapp.key]}" />
</h:column>
<h:column>
<h:selectManyCheckbox layout="pageDirection" value="#{bapp.selected}">
<h:selectManyCheckbox id="permissions" layout="pageDirection" value="#{bapp.selected}">
<f:selectItems value="#{bapp.permissions}" var="per" itemLabel="#{i18n[per.i18nKey]}" />
</h:selectManyCheckbox>
<!-- <ui:repeat id="permDescs" var="perm" value="#{bapp.permissions}"> -->
......@@ -52,7 +53,7 @@
<!-- </ui:repeat> -->
<!-- </h:column> -->
</h:dataTable>
<h:commandButton id="save" value="#{i18n['role.savePermissions']}" action="#{roleView.savePermissions}" />
<h:commandButton id="save2" value="#{i18n['role.savePermissions']}" action="#{roleView.savePermissions}" />
</h:form>
</p>
......
......@@ -9,7 +9,7 @@
</composite:interface>
<composite:implementation>
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:dataTable id="reader" value="#{readerListDataView.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
......@@ -28,6 +28,11 @@
<f:param value="#{rr.id}" name="readerId" />
</h:link>
</h:column>
<h:column>
<h:link outcome="/shop/editReader" value="#{i18n['reader.edit']}">
<f:param value="#{rr.id}" name="readerId" />
</h:link>
</h:column>
</h:dataTable>
</composite:implementation>
......
......@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" >
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:p="http://primefaces.org/ui">
<composite:interface>
......@@ -21,61 +21,56 @@
<h:panelGrid columns="3">
<h:outputLabel rendered="#{!cc.attrs.creating}" value="#{i18n['user.login']}:" for="viewlogin" />
<h:outputText rendered="#{!cc.attrs.creating}" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:outputText rendered="#{!cc.attrs.creating}" disabled="#{!cc.attrs.creating and !userView.canSave}"
id="viewlogin" value="#{userView.selectedUser.login}"
/>
<h:message rendered="#{!cc.attrs.creating}" for="viewlogin" />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.login']}:" for="login" />
<h:inputText size="45" rendered="#{cc.attrs.creating}" validator="#{userValidator.login}"
disabled="#{!cc.attrs.creating and !userView.canSave()}" id="login" value="#{userView.selectedUser.login}"
disabled="#{!cc.attrs.creating and !userView.canSave}" id="login" value="#{userView.selectedUser.login}"
/>
<h:message rendered="#{cc.attrs.creating}" for="login" />
<h:outputLabel value="#{i18n['user.nick']}:" for="nick" />
<h:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.nick}" />
<h:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.nick}" />
<h:message for="nick" />
<h:outputLabel value="#{i18n['user.email']}:" for="email" />
<h:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}"
value="#{userView.selectedUser.email}"
/>
<h:message for="email" />
<h:outputLabel value="#{i18n['user.firstNames']}:" for="firstnames" />
<h:inputText size="45" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText size="45" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}"
value="#{userView.selectedUser.firstnames}"
/>
<h:message for="firstnames" />
<h:outputLabel value="#{i18n['user.lastName']}:" for="lastname" />
<h:inputText size="45" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText size="45" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}"
value="#{userView.selectedUser.lastname}"
/>
<h:message for="lastname" />
<h:outputLabel value="#{i18n['user.address']}:" for="address" />
<h:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}"
value="#{userView.selectedUser.address}"
/>
<h:message for="address" />
<h:outputLabel value="#{i18n['user.zipCode']}:" for="zip" />
<h:inputText size="45" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.zip}" />
<h:inputText size="45" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" />
<h:message for="zip" />
<h:outputLabel value="#{i18n['user.town']}:" for="town" />
<h:inputText size="45" id="town" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.town}" />
<h:inputText size="45" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.town}" />
<h:message for="town" />
<h:outputLabel rendered="#{sessionHandler.superadmin}" value="#{i18n['user.superadmin']}:" for="superadmin" />
<h:selectBooleanCheckbox disabled="#{!cc.attrs.creating and !userView.canSave()}"
rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{userView.selectedUser.superadmin}"
/>
<h:message rendered="#{sessionHandler.superadmin}" for="superadmin" />
<!--
<h:outputLabel value="#{i18n['user.defaultImage']}:" for="currentImage" />
<h:selectOneMenu rendered="#{sessionHandler.hasPermission('USER', 'READ')}" id="currentImage" value="#{userView.selectedUser.currentImage}" converter="#{userimageConverter}" >
......@@ -83,7 +78,7 @@
</h:selectOneMenu>
-->
<h:outputLabel value="#{i18n['user.sex']}:" for="sex" />
<h:selectOneRadio disabled="#{!cc.attrs.creating and !userView.canSave()}" id="sex"
<h:selectOneRadio disabled="#{!cc.attrs.creating and !userView.canSave}" id="sex"
value="#{userView.selectedUser.gender}"
>
<f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" />
......@@ -91,6 +86,11 @@
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</h:selectOneRadio>
<h:message for="sex" />
<h:outputLabel for="birthday" value="#{i18n['user.birthday']}:"/>
<p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" locale="fi" value="#{userView.selectedUser.birthday}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
<h:message for="birthday" />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}:" for="password" />
......@@ -105,7 +105,15 @@
/>
<h:message rendered="#{cc.attrs.creating}" for="passwordcheck" />
<h:commandButton rendered="#{cc.attrs.creating or userView.canSave()}" id="commitbtn"
<h:outputLabel rendered="#{sessionHandler.superadmin}" value="#{i18n['user.superadmin']}:" for="superadmin" />
<h:selectBooleanCheckbox disabled="#{!cc.attrs.creating and !userView.canSave}"
rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{userView.selectedUser.superadmin}"
/>
<h:message rendered="#{sessionHandler.superadmin}" for="superadmin" />
<h:commandButton rendered="#{cc.attrs.creating or userView.canSave}" id="commitbtn"
action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}"
/>
</h:panelGrid>
......
......@@ -8,7 +8,8 @@
</composite:interface>
<composite:implementation>
<h:outputStylesheet library="style" name="tabnav.css" />
<h:outputStylesheet library="style/#{sessionHandler.getLayout()}/css" name="tabnav.css" />
<div class="userstatus" style="float: right; margin-right: 10px; color: #7DAC0C; font-size: 16px;">
<h:outputText value="#{i18n['user.cardPower']}: #{userView.usersCardtemplate.name}" />
</div>
......@@ -17,9 +18,7 @@
<h:outputText value="#{i18n['usertitle.managingUser']}: #{userView.user.nick} / #{userView.user.wholeName} " />
</h2>
</ui:fragment>
<div id="#{cc.attrs.tabId}">
<ul id="usertabnav">
<li class="edit"><h:link outcome="/useradmin/edit" value="#{i18n['user.edit']}">
......
PrimeFaces.locales ['fi'] = {
closeText: 'Sulje',
prevText: 'Edellinen',
nextText: 'Seuraava',
monthNames: ['Tammikuu', 'Helmikuu', 'Maaliskuu', 'Huhtikuu', 'Toukokuu', 'Kesäkuu', 'Heinäkuu', 'Elokuu', 'Syyskuu', 'Lokakuu', 'Marraskuu', 'Joulukuu' ],
monthNamesShort: ['Tammi', 'Helmi', 'Maalis', 'Huhti', 'Touko', 'Kesä', 'Heinä', 'Elo', 'Syys', 'Loka', 'Marras', 'Joulu' ],
dayNames: ['Sunnuntai', 'Maanantai', 'Tiistai', 'Keskiviikko', 'Torstai', 'Perjantai', 'Lauantai'],
dayNamesShort: ['Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La'],
dayNamesMin: ['S', 'M', 'T', 'K ', 'T', 'P ', 'L'],
weekHeader: 'Viikko',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix:'',
timeOnlyTitle: 'Vain aika',
timeText: 'Aika',
hourText: 'Tunti',
minuteText: 'Minuutti',
secondText: 'Sekunti',
currentText: 'Tämä hetki',
ampm: false,
month: 'Kuukausi',
week: 'Viikko',
day: 'Päivä',
allDayText: 'Koko päivä'
};
\ No newline at end of file
/* begin css tabs */
ul#usertabnav { /* general settings */
text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #7DAC0C; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 4px 10px; /* THIRD number must change with respect to padding-top (X) below */
}
ul#usertabnav li { /* do not change */
display: inline;
}
div#edit li.edit,
div#chpass li.chpass,
div#accountevents li.accountevents,
div#groups li.groups,
div#token li.token,
div#picture li.picture
{ /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
}
div#edit li.edit a,
div#chpass li.chpass a,
div#accountevents li.accountevents a,
div#groups li.groups a,
div#token li.token a,
div#picture li.picture a{ /* settings for selected tab link */
background-color: #FFF; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul#usertabnav li a { /* settings for all tab links */
padding: 4px 5px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #7DAC0C; /* set border COLOR as desired; usually matches border color specified in #usertabnav */
background-color: #37bce6; /* set unselected tab background color as desired */
color: #0f3541; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
}
ul#usertabnav a:hover { /* settings for hover effect */
background: #b8f7ff; /* set desired hover color */
}
/* end css tabs */
\ No newline at end of file
/* begin css tabs */
ul#usertabnav { /* general settings */
text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #7DAC0C; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 4px 10px; /* THIRD number must change with respect to padding-top (X) below */
}
ul#usertabnav li { /* do not change */
display: inline;
}
div#edit li.edit,
div#chpass li.chpass,
div#accountevents li.accountevents,
div#groups li.groups,
div#token li.token,
div#picture li.picture
{ /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
}
div#edit li.edit a,
div#chpass li.chpass a,
div#accountevents li.accountevents a,
div#groups li.groups a,
div#token li.token a,
div#picture li.picture a{ /* settings for selected tab link */
background-color: #FFF; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul#usertabnav li a { /* settings for all tab links */
padding: 4px 5px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #7DAC0C; /* set border COLOR as desired; usually matches border color specified in #usertabnav */
background-color: #37bce6; /* set unselected tab background color as desired */
color: #0f3541; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
}
ul#usertabnav a:hover { /* settings for hover effect */
background: #b8f7ff; /* set desired hover color */
}
/* end css tabs */
\ No newline at end of file
......@@ -122,16 +122,20 @@ a:hover {
color: #7dac0c;
}
#container {
.container {
width: 100%;
background: url(../img/container.png) repeat-y;
font-size: 13px;
}
#container #left {
.container #left {
padding: 10px 20px;
}
#left {
width: 700px;
}
#left h1 {
color: #7dac0c;
font-size: 24px;
......@@ -164,13 +168,14 @@ a:hover {
text-decoration: none;
}
#container.top {
.container.top {
width: 100%;
background: url(../img/container-top.png) no-repeat;
height: 15px;
padding-left: 1em;
}
#container.bottom {
.container.bottom {
width: 100%;
background: url(../img/container-bottom.png) no-repeat;
height: 16px;
......@@ -211,4 +216,46 @@ td ul {
.topalign {
vertical-align: top;
}
.numalign {
text-align: right;
}
.editorlink {
font-size: 9px;
float: left;
margin: 4px;
}
#right ul {
color: #7dac0c;
list-style-type: square;
list-style-position: inside;
}
#right ul li {
border-bottom: 1px solid white;
}
#right ul li a {
color: #0073bc;
text-decoration: none;
}
#right ul li a:hover {
color: #7dac0c;
text-decoration: none;
}
table {
border-collapse: collapse;
}
table.border td,table.border th {
padding: 1px 4px;
}
.nowrap {
white-space: nowrap;
}
\ No newline at end of file
/* begin css tabs */
ul#usertabnav { /* general settings */
text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #7DAC0C; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 4px 10px; /* THIRD number must change with respect to padding-top (X) below */
}
ul#usertabnav li { /* do not change */
display: inline;
}
div#edit li.edit,
div#chpass li.chpass,
div#accountevents li.accountevents,
div#groups li.groups,
div#token li.token,
div#picture li.picture
{ /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
}
div#edit li.edit a,
div#chpass li.chpass a,
div#accountevents li.accountevents a,
div#groups li.groups a,
div#token li.token a,
div#picture li.picture a{ /* settings for selected tab link */
background-color: #FFF; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul#usertabnav li a { /* settings for all tab links */
padding: 4px 5px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #7DAC0C; /* set border COLOR as desired; usually matches border color specified in #usertabnav */
background-color: #37bce6; /* set unselected tab background color as desired */
color: #0f3541; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
}
ul#usertabnav a:hover { /* settings for hover effect */
background: #b8f7ff; /* set desired hover color */
}
/* end css tabs */
\ No newline at end of file
* {padding:0; margin:0;}
body {font-size:62.5%; background-color: #fff; font-family:verdana,arial,sans-serif;} /*Font-size: 1.0em = 10px when browser default size is 16px*/
#page-container {
width: 900px;
margin: 0 auto;
border: 1px solid #bbb;
margin-top: 10px;
background: white;
border-radius: 12px;
background:rgb(255,255,255) url("../img/bg_main_nav.jpg");
}
#page-header {height:80px; background:rgb(240,240,240) url("../img/bg_head_top.jpg"); overflow:visible !important /*Firefox*/; overflow:hidden /*IE6*/; border-radius: 12px 12px 0 0; }
#login {
margin-top: 10px;
margin-right: 10px;
float: right;
text-align: right;
}
#login a, #login a:visited {
text-decoration: none;
color: black;
font-weight: bold;
}
#login a:hover {
color: red;
}
#top-menu {position:relative; z-index:0; top: 2em;}
#top-menu ul { float:left; width: 100%; padding-left: 25px; border:1px solid rgba(200,200,200,0); background:rgba(200,200,200,0); border-radius: 16px 16px 0 0; }
#top-menu li {display:inline; list-style:none; }
#top-menu li a {display:block; line-height: 1.7em; float:left; padding:2px 5px 2px 5px; color:rgb(125,125,125); text-decoration:none; font-size:120%; background-color:rgba(100,100,100,0.1); color: rgba(0,0,0,0.3); border-radius: 12px 12px 0 0; border: 1px solid rgba(0,0,0,0.1); border-bottom: none;}
#top-menu a:hover {text-decoration:none; color:rgb(50,50,50);}
#top-menu li .active {font-weight: bold; background-color:rgba(250,250,250,0.4); color: rgba(0,0,0,1); border-radius: 12px 12px 0 0; border: 1px solid black; border-bottom: none }
#pageheader {
background: red;
}
#main {
clear: both;
}
#main-nav {float:left; width: 100%; border-top:1px solid #bbb; border-bottom:1px solid #bbb; background:rgb(220,220,220) url("../img/bg_head_bottom_nav.jpg") repeat-x; color:rgb(75,75,75); font-size:130%;}
#main-nav ul {list-style-type:none;}
#main-nav ul li {float:left; position:relative; z-index:auto !important /*Non-IE6*/; z-index:1000 /*IE6*/; }
#main-nav ul li a {float:none !important /*Non-IE6*/; float:left /*IE-6*/; display:block; height:3.1em; line-height:3.1em; padding:0 16px 0 16px; text-decoration:none; font-weight:bold; color: rgb(100,100,100);}
#main-nav ul li ul {display:none; border:none;}
#main-nav ul li .active { font-weight: bold; background-color:rgba(0,150,250,0.35); color: rgba(255,255,250,0.8); }
#main-nav ul li:hover a { background-color:rgba(0,150,250,0.1); text-decoration:none; } /*Color main cells hovering mode*/
#main-nav ul li:hover ul {display:block; width:10.0em; position:absolute; z-index:999; top:3.0em; margin-top:0.1em; left:0;}
#main-nav ul li:hover ul li a {display:block; width:10.0em; height:auto; line-height:1.3em; margin-left:-1px; padding:4px 16px 4px 16px; border-left:solid 1px rgb(175,175,175); border-bottom: solid 1px rgb(175,175,175); background-color:rgb(237,237,237); font-weight:normal; color:rgb(50,50,50);} /*Color subcells normal mode*/
#main-nav ul li:hover ul li a:hover {background-color:rgb(210,210,210); text-decoration:none;} /*Color subcells hovering mode*/
.container.top, .container.bottom {
clear: both;
text-align: center;
}
.container.top a, .container.bottom a {
font-size: 90%;
color: #aaa;
text-decoration: none;
}
#right {display:inline /*Fix IE floating margin bug*/; float:right; width:200px; overflow:visible !important /*Firefox*/; overflow:hidden /*IE6*/;}
#right {width: 200px;}
#right ul {list-style:none; margin:0em 0 0em 0px;}
#right ul li {margin:0px 0 0.2em 0px; padding:0px 0px 0 0px; line-height:1.2em; font-size:110%;}
#right a { color: black}
#right li a, #right li a:visited {display:block; min-height:1.7em /*Non-IE6*/; height:auto !important; height:1.7em /*IE6*/; line-height:1.7em; padding-left: 5px; border:none; font-weight:normal; text-decoration:none; color:rgb(70,122,167); font-size:120%; }
#right li a:hover {background-color:rgba(0,130,250,0.1); text-decoration:none; }
#right h1 {clear:both; padding:4px 20px 3px 10px; background:rgba(0,130,250,0.5); font-family:"trebuchet ms",arial,sans-serif; color:rgb(255,255,255); font-weight:bold; font-size:160%;}
#right h2 {clear:both; margin:20px 10px 10px 20px; font-family:"trebuchet ms",arial,sans-serif; color:rgb(100,100,100); font-weight:bold; font-size:150%;}
#right h3 {clear:both; margin:10px 10px 5px 20px; color:rgb(80,80,80); font-weight:bold; font-size:110%;}
#right li .active { background:rgba(0,130,250,0.1); padding-left: 20px; }
#right li a.active { font-weight: bold; }
#left {display:inline; /*Fix IE floating margin bug*/; float:left; width:660px; margin: 0 20px; overflow:visible !important /*Firefox*/; overflow:hidden /*IE6*/;}
#left h1 {
margin-bottom: 1em;
}
#left a {
text-decoration: none;
color: blue;
}
#left:a visited {
color: blue;
}
#left h1, #left h2, #left p {
margin-bottom: 1.5em;
}
.container.bottom {
clear: both;
}
table {
border: none;
border-spacing: 0;
width: 100%;
text-align: left;
margin-bottom: 1.5em;
}
table thead th {
border: none;
font-size: 120%;
}
table thead th {
border-bottom: 1px solid black;
padding: 5px;
padding-left: 1em;
}
table tbody td {
border: none;
padding: 5px;
padding-left: 1em;
}
label {
}
input {
border: 1px solid #ccc;
padding: 3px 6px;
border-radius: 6px;
background:rgba(0,130,250,0.1);
margin-right: 1em;
}
input:focus{
border: 1px solid black;
background:rgba(0,130,250,0.2);
}
input[type=submit] {
padding: 4px 16px;
border-radius: 8px;
border: 1px solid black;
background: skyblue;
}
input[type=submit]:hover {
padding: 4px 16px;
border-radius: 8px;
border: 1px solid black;
background: lightblue;
}
#edit { float: left; width:100%; border-bottom: 1px solid black; }
ul#usertabnav { float:left; width: 100%; border:1px solid rgba(200,200,200,0); background:rgba(200,200,200,0); border-radius: 16px 16px 0 0; }
ul#usertabnav li {display:inline; list-style:none; }
ul#usertabnav li a {display:block; line-height: 1.7em; float:left; padding:2px 5px 2px 5px; color:rgb(125,125,125); text-decoration:none; font-size:120%; background-color:rgba(100,100,100,0.3); color: rgba(0,0,0,1); border-radius: 12px 12px 0 0; border: 1px solid rgba(0,0,0,0.1); border-bottom: none;}
ul#usertabnava:hover {text-decoration:none; color:rgb(50,50,50);}
ul#usertabnav li .active {font-weight: bold; background-color:rgba(250,250,250,0.4); color: rgba(0,0,0,1); border-radius: 12px 12px 0 0; border: 1px solid black; border-bottom: none }
#edit {
clear: both;
}
\ No newline at end of file
/* begin css tabs */
ul#usertabnav { /* general settings */
text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #7DAC0C; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 4px 10px; /* THIRD number must change with respect to padding-top (X) below */
}
ul#usertabnav li { /* do not change */
display: inline;
}
div#edit li.edit,
div#chpass li.chpass,
div#accountevents li.accountevents,
div#groups li.groups,
div#token li.token,
div#picture li.picture
{ /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
}
div#edit li.edit a,
div#chpass li.chpass a,
div#accountevents li.accountevents a,
div#groups li.groups a,
div#token li.token a,
div#picture li.picture a{ /* settings for selected tab link */
background-color: #FFF; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul#usertabnav li a { /* settings for all tab links */
padding: 4px 5px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #7DAC0C; /* set border COLOR as desired; usually matches border color specified in #usertabnav */
background-color: #37bce6; /* set unselected tab background color as desired */
color: #0f3541; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
}
ul#usertabnav a:hover { /* settings for hover effect */
background: #b8f7ff; /* set desired hover color */
}
/* end css tabs */
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{barcodeView.initView}" />
</f:metadata>
<ui:define name="content">
<h:form>
<h:inputText name="barcode" value="#{barcodeView.barcode}" />
<h:commandButton action="#{barcodeView.readBarcode}" value="#{i18n['barcodeReader.readBarcode']}"/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
xmlns:p="http://primefaces.org/ui"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:composition
template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
<f:event type="preRenderView" listener="#{productShopView.initShopView}" />
<f:event type="preRenderView"
listener="#{productShopView.initShopView}" />
</f:metadata>
<ui:define name="title">
......@@ -17,41 +25,71 @@
</ui:define>
<ui:define name="content">
<h:form id="shoppingcartform">
<h:panelGrid columns="2">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.totalPrice']}" />
<h:outputText value="#{productShopView.totalPrice}">
<f:convertNumber />
</h:outputText>
<h:form id="shoppingcartform">
<h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{productShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGrid>
<h:panelGroup>
<h:outputLabel value="#{i18n['shop.readBarcode']}" />
<h:inputText id="barcode" value="#{productShopView.barcode}" />
<h:commandButton action="#{productShopView.readBarcode}"
onclick="blip(); return true;"
value="#{i18n['productShopView.readBarcode']}">
<f:ajax render="@form" onevent="barcodeReadEvent" execute="@form" />
</h:commandButton>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.totalPrice']}" />
<h:outputText value="#{productShopView.totalPrice}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{productShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGroup>
</h:panelGrid>
</h:panelGrid>
<h:outputText value="#{i18n['product.shopInstant']}" />
<h:selectBooleanCheckbox value="#{productShopView.payInstant}">
<f:ajax render="@form" execute="@form" />
</h:selectBooleanCheckbox>
<products:shop commitaction="#{productShopView.commitShoppingCart()}" items="#{productShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" />
<products:shop
commitaction="#{productShopView.commitShoppingCart()}"
items="#{productShopView.shoppingcart}"
commitValue="#{i18n['productshop.commit']}" />
</h:form>
<script>
var blipSnd = new Audio(
"#{request.contextPath}/resources/media/blip.mp3")
$(function() {
$("#shoppingcartform\\:barcode").focus();
})
function blip() {
blipSnd.play();
}
function barcodeReadEvent(data) {
if (data.status == "success") {
$("#shoppingcartform\\:barcode").focus();
}
}
</script>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -2,7 +2,8 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:bill="http://java.sun.com/jsf/composite/cditools/bills" xmlns:f="http://java.sun.com/jsf/core">
xmlns:bill="http://java.sun.com/jsf/composite/cditools/bills" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
......@@ -13,15 +14,34 @@
<ui:define name="content">
<bill:showBill bill="#{billEditView.bill}" />
<ui:fragment rendered="#{billEditView.verkkomaksuAvailable}">
<ui:fragment rendered="#{billEditView.verkkomaksuFiAvailable}">
<div id="svm-payment">
<a href="#{billEditView.verkkomaksuToken.url}"> </a>
<a href="#{billEditView.verkkomaksuFiToken.url}"> </a>
</div>
<script type="text/javascript" src="//payment.verkkomaksut.fi/js/sv-widget.min.js"></script>
<script type="text/javascript">
SV.widget.initWithToken('svm-payment', '#{billEditView.verkkomaksuToken.token}', {width: '800'});
</script>
</ui:fragment>
<ui:fragment rendered="#{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>
......
......@@ -13,7 +13,7 @@
<ui:define name="content">
<shop:readerevents rendered="#{!empty readerNameContainer.readerId}" />
<shop:readerlist rendered="#{empty readerNameContainer.readerId}" />
<shop:readerlist rendered="#{empty readerNameContainer.readerId}" />
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
......@@ -43,20 +42,6 @@
<h:message for="uploadfile" />
<h:commandButton action="#{userView.sendImage}" value="#{i18n['user.imagesubmit']}" />
</h:form>
<h2>asdasd</h2>
<h:dataTable value="#{userView.user.userImageList}" var="img">
<h:column>
<h:outputText value="#{img.name}" />
</h:column>
<h:column>
<h:outputText value="#{img.uploaded.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</h:column>
<h:column>
<h:outputText value="#{(empty img.defaultImage) ? i18n['user.isNotDefaultImage'] : i18n['user.isDefaultImage']}" />
</h:column>
</h:dataTable>
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
......@@ -72,73 +57,26 @@
</div>
</ui:fragment>
<ui:fragment rendered="#{userView.canManage()}">
<h2>Ylläpito</h2>
<h:form>
<h:commandButton action="#{userView.makeCard()}" value="#{i18n['user.makeCard']}" />
<h:dataTable var="card" value="#{userCardView.printedCards}">
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}">View Card</a>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}&amp;download=1">Print Card</a>
</h:column>
</h:dataTable>
</h:form>
<h3>RFID</h3>
<h:form rendered="#{empty readerNameContainer.readerId}">
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{rr}" />
</h:column>
<h:column>
<h:commandButton action="#{readerListDataView.selectReader}" />
</h:column>
</h:dataTable>
</h:form>
<shop:readerevents rendered="#{!empty readerNameContainer.readerId}" />
</ui:fragment>
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.name}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.description}" /> -->
<!-- </h:column> -->
<!-- </h:dataTable> -->
<!--
<h2>asdasd</h2>
<h:dataTable value="#{userView.user.userImageList}" var="img">
<h:column>
<h:outputText value="#{img.name}" />
</h:column>
<h:column>
<h:outputText value="#{img.uploaded.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</h:column>
<h:column>
<h:outputText value="#{(empty img.defaultImage) ? i18n['user.isNotDefaultImage'] : i18n['user.isDefaultImage']}" />
</h:column>
<h:column>
</h:column>
</h:dataTable>
-->
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -23,8 +23,12 @@
<h:inputText value="#{userSearchView.search}" />
<h:commandButton value="#{i18n['userlist.search']}" action="#{userSearchView.newSearch()}" />
</h:form>
<tools:paginationHeader view="#{userSearchView}" />
<p>
<users:list />
</p>
<p>
<tools:paginationHeader view="#{userSearchView}" />
</p>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -88,6 +88,9 @@ public class HostnameFilter implements Filter {
// httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME,
// hostname);
String proto = url.substring(0, 5).toLowerCase();
boolean ssl = proto.equals("https");
BortalLocalContextHolder.setSsl(ssl);
BortalLocalContextHolder.setHostname(hostname);
BortalLocalContextHolder.setInDevelopmentMode(developmentMode);
......@@ -104,8 +107,7 @@ public class HostnameFilter implements Filter {
httpRequest.login(User.ANONYMOUS_LOGINNAME, null);
} catch (Throwable t) {
logger.warn("Error logging in as anonymous... ignoring.. ",
t);
logger.warn("Error logging in as anonymous... ignoring.. ", t);
}
}
else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME))
......@@ -115,7 +117,6 @@ public class HostnameFilter implements Filter {
}
// pass the request along the filter chain
try {
chain.doFilter(request, response);
} finally {
......
......@@ -23,6 +23,7 @@ import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEventPropertyKey;
/**
*
......@@ -44,6 +45,8 @@ public class SessionHandler {
@EJB
private PermissionBeanLocal permbean;
private String template;
public TimeZone getTimezone() {
return TimeZone.getTimeZone("Europe/Helsinki");
}
......@@ -62,7 +65,13 @@ public class SessionHandler {
public String getLayout() {
// TODO: layout selection code missing!!
// return "stream1";
return "insomnia2";
if (template == null) {
template = eventbean.getPropertyString(LanEventPropertyKey.EVENT_LAYOUT);
}
if (template == null) {
template = "template1";
}
return template;
}
// public boolean hasPermission(String target, String permission) {
......@@ -126,7 +135,7 @@ public class SessionHandler {
}
public boolean isSuperadmin() {
return permbean.getCurrentUser().isSuperadmin();
return permbean.getCurrentUser().getUser().isSuperadmin();
}
......
......@@ -71,7 +71,7 @@ navi.auth.logout = frontpage
pagegroup.auth.login = frontpage
placegroupview.toptext = \
placegroupview.toptext = \
poll.edit = edit
......
......@@ -38,6 +38,7 @@ bill.addr5 = Address 5
bill.address = Payers address
bill.billAmount = Bill amount
bill.billIsPaid = Bill is paid
bill.billLines = Products
bill.billNumber = Bill number
bill.billPaidDate = Paid date
bill.deliveryTerms = Delivery terms
......@@ -63,6 +64,7 @@ bill.totalPrice = Total
billedit.billnotfound = Bill not found. Select again.
billine.linePrice = Total
billine.name = Product
billine.quantity = Quantity
billine.referencedProduct = Referenced product
......@@ -73,10 +75,24 @@ billine.vat = VAT
bills.noBills = No bills
cardTemplate.edit = Edit
cardTemplate.name = Card template
cardTemplate.power = Card power
cardTemplate.roles = Associated roles
cardTemplate.create = Create
cardTemplate.edit = Edit
cardTemplate.id = Id
cardTemplate.imageheader = Current Template
cardTemplate.name = Card template
cardTemplate.power = Card power
cardTemplate.roles = Associated roles
cardTemplate.save = Save
cardTemplate.sendImage = Upload Image
checkout.cancel.errorMessage = Error confirming the cancel\u2026 Please report this to code@codecrew.fi
checkout.cancel.successMessage = You can retry payment at your own bills.
checkout.reject.errorMessage = Error while processing rejected payment. Please report this error to code@codecrew.fi
checkout.reject.successMessage = Payment rejected. You can retry payment from your own bills.
checkout.return.errorDelayed = Error confirming delayed payment. Please contact code@codecrew.fi
checkout.return.errorMessage = Error confirming the successfull return message. Please report this error to code@codecrew.fi
checkout.return.successDelayed = Delayed payment successfull. Payment will be confirmed at a later time, usually within a hour.
checkout.return.successMessage = Payment confirmed. Your products have been paid. You can now move to possible reservation of places.
compo.edit = Edit compo
compo.saveVotes = Save votes
......@@ -121,6 +137,14 @@ event.startTime = Start time
eventdomain.domainname = Domain
eventdomain.remove = Remove
eventmap.active = Active
eventmap.buyable.like = Place name match
eventmap.buyable.lock = Lock places
eventmap.buyable.release = Release places
eventmap.name = Map name
eventmap.notes = Notes
eventmap.save = Save
eventorg.bankName1 = Bank name 2
eventorg.bankName2 = Bank name 2
eventorg.bankNumber1 = Bank account nr. 1
......@@ -171,6 +195,10 @@ javax.validation.constraints.Past.message = must be in the past
javax.validation.constraints.Pattern.message = must match "{regexp}"
javax.validation.constraints.Size.message = size must be between {min} and {max}
layout.editBottom = Edit bottom content
layout.editContent = Edit center
layout.editTop = Edit topcontent
login.login = Login
login.logout = Logout
login.logoutmessage = You have logged out of the system
......@@ -183,7 +211,23 @@ loginerror.message = Username of password incorrect.
loginerror.resetpassword = Reset password
map.edit = Edit
map.generate = Generate places
map.height = Place height (px)
map.name = Name
map.namebase = Semicolon separated table prefixes
map.oneRowTable = One row tables
map.placesInRow = Places in row
map.product = Place product
map.startX = Place start X-coordinate
map.startY = Place start Y-coordinate\n
map.submitMap = Send map image
map.tableCount = Place count
map.tableXdiff = Table X difference
map.tableYdiff = Table Y difference
map.tablesHorizontal = Generate horizontal tables
map.width = Place width (px)
mapEdit.removePlaces = Remove ALL places
mapManage.lockedPlaces = Locked {0} places.
mapManage.releasedPlaces = Released {0} places
......@@ -201,6 +245,10 @@ org.hibernate.validator.constraints.Length.message = length must be between {m
org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
orgrole.create = Create
orgrole.name = Name
orgrole.parents = Parent
page.account.edit.header = Edit account events
page.account.list.header = Account events
page.admin.sendimage.header = Send image
......@@ -221,6 +269,10 @@ page.bill.edit.header = Edit bill
page.bill.listAll.header = Bills
page.bill.placemap.header = Place map
page.bill.show.header = Bill info
page.checkout.cancel.header = Payment cancelled!
page.checkout.delayed.header = Delayed payment
page.checkout.reject.header = Payment rejected!
page.checkout.return.header = Payment confirmed
page.game.list.header = Insomnia Game
page.game.start.header = Insomnia Game
page.index.header = Frontpage
......@@ -363,6 +415,7 @@ products.save = Save
productshop.billCreated = Bill created
productshop.commit = Buy
productshop.limits = Available
productshop.noItemsInCart = There are no products in shopping cart
productshop.total = Total
......@@ -390,16 +443,17 @@ resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
role.cardtemplate = Cardtemplate
role.create = Create role
role.description = Description
role.edit = Edit
role.edit.save = Save
role.execute = (X)
role.name = Name
role.parents = Parents
role.read = (R)
role.write = (W)
role.cardtemplate = Cardtemplate
role.create = Create role
role.description = Description
role.edit = Edit
role.edit.save = Save
role.execute = (X)
role.name = Name
role.parents = Parents
role.permissionheader = Role permissions
role.read = (R)
role.write = (W)
sendPicture.header = S
......@@ -460,6 +514,7 @@ submenu.pages.create = Create content
submenu.pages.list = List pages
submenu.place.insertToken = Insert placecode
submenu.place.myGroups = Place reservations
submenu.place.placemap = Placemap
submenu.poll.index = Polls
submenu.product.create = Create product
submenu.product.list = List products
......@@ -482,6 +537,7 @@ submenu.useradmin.create = Create user
submenu.useradmin.createCardTemplate = Create cardtemplate
submenu.useradmin.list = List users
submenu.useradmin.listCardTemplates = Card templates
submenu.useradmin.validateUser = Validate user
submenu.voting.compolist = Compos
submenu.voting.create = Create new compo
submenu.voting.myEntries = My entries
......@@ -518,6 +574,7 @@ user.accountevents = Account events
user.address = Address
user.bank = Bank
user.bankaccount = Bank number
user.birthday = Birthday
user.cardPower = Usertype
user.changePassword = Change password
user.changepassword.forUser = For user
......
......@@ -38,6 +38,7 @@ bill.addr5 = Osoite 5
bill.address = Maksajan osoite
bill.billAmount = Laskun summa
bill.billIsPaid = Lasku on maksettu
bill.billLines = Tuotteet
bill.billNumber = Laskun numero
bill.billPaidDate = Maksup\u00E4iv\u00E4
bill.deliveryTerms = Toimitusehdot
......@@ -61,6 +62,7 @@ bill.show = N\u00E4yt\u00E4
bill.theirReference = Asiakkaan viite
bill.totalPrice = Laskun summa
billine.linePrice = Yhteens\u00E4
billine.name = Tuote
billine.quantity = Lukum\u00E4\u00E4r\u00E4
billine.referencedProduct = Tuoteviittaus
......@@ -71,10 +73,24 @@ billine.vat = ALV
bills.noBills = Ei laskuja
cardTemplate.edit = Muokkaa
cardTemplate.name = Korttipohja
cardTemplate.power = Teho
cardTemplate.roles = Yhdistetyt roolit
cardTemplate.create = Luo
cardTemplate.edit = Muokkaa
cardTemplate.id = Id
cardTemplate.imageheader = Nykyinen pohja
cardTemplate.name = Korttipohja
cardTemplate.power = Teho
cardTemplate.roles = Yhdistetyt roolit
cardTemplate.save = Tallenna
cardTemplate.sendImage = Lataa kuva
checkout.cancel.errorMessage = Virhe peruutuksen vahvistuksessa\u2026 Ilmoita t\u00E4st\u00E4 osoitteeseen code@codecrew.fi
checkout.cancel.successMessage = Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi.
checkout.reject.errorMessage = Virhe hyl\u00E4tyn maksun k\u00E4sittelyss\u00E4. Raportoi t\u00E4m\u00E4 virhe osoitteeseen: code@codecrew.fi
checkout.reject.successMessage = Maksu hyl\u00E4tty. Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi.
checkout.return.errorDelayed = Virhe viiv\u00E4stetyn maksun vahvistuksessa. Ota yhteytt\u00E4 code@codecrew.fi
checkout.return.errorMessage = Virhe maksun onnistuneen maksun vahvistuksessa. Raportoi t\u00E4m\u00E4 virhe yll\u00E4pidolle: code@codecrew.fi
checkout.return.successDelayed = Viiv\u00E4stetty maksu onnistunut. Maksu vahvistet\u00E4\u00E4n my\u00F6hemp\u00E4n\u00E4 ajankohtana, yleens\u00E4 noin tunnin sis\u00E4ll\u00E4.
checkout.return.successMessage = Maksu vahvistettu. Tuotteet on maksettu ja voit siirty\u00E4 varmaan haluamiasi paikkoja.
compo.edit = Muokkaa compoa
compo.saveVotes = Tallenna \u00E4\u00E4net
......@@ -119,6 +135,14 @@ event.startTime = Aloitusp\u00E4iv\u00E4
eventdomain.domainname = Domain
eventdomain.remove = Poista
eventmap.active = Aktiivinen\u0009
eventmap.buyable.like = Paikat
eventmap.buyable.lock = Lukitse paikat
eventmap.buyable.release = Vapauta paikat
eventmap.name = Kartan nimi
eventmap.notes = Lis\u00E4tiedot
eventmap.save = Tallenna
eventorg.bankName1 = Pankin nimi 1
eventorg.bankName2 = Pankin nimi 2
eventorg.bankNumber1 = Tilinumero 1
......@@ -178,6 +202,10 @@ javax.validation.constraints.Past.message = must be in the past
javax.validation.constraints.Pattern.message = must match "{regexp}"
javax.validation.constraints.Size.message = size must be between {min} and {max}
layout.editBottom = Muokkaa alasis\u00E4lt\u00F6\u00E4
layout.editContent = Muokkaa sis\u00E4lt\u00F6\u00E4
layout.editTop = Muokkaa yl\u00E4sis\u00E4lt\u00F6\u00E4
login.login = Kirjaudu sis\u00E4\u00E4n
login.logout = Kirjaudu ulos
login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
......@@ -190,7 +218,23 @@ loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut o
loginerror.resetpassword = Salasana unohtunut?
map.edit = Muokkaa
map.generate = Generoi paikat
map.height = Paikan korkeus (px)
map.name = Nimi
map.namebase = Puolipisteell\u00E4 erotetut p\u00F6yt\u00E4-etuliitteet
map.oneRowTable = Yhden rivin p\u00F6yd\u00E4t
map.placesInRow = Paikkoja riviss\u00E4
map.product = Paikkatuote
map.startX = P\u00F6yd\u00E4n X-aloituskoord.
map.startY = P\u00F6yd\u00E4n Y-aloituskoord.
map.submitMap = L\u00E4het\u00E4 karttapohja
map.tableCount = P\u00F6ytien lukum\u00E4\u00E4r\u00E4
map.tableXdiff = P\u00F6ytien v\u00E4li ( X )
map.tableYdiff = P\u00F6ytien v\u00E4li ( Y )
map.tablesHorizontal = P\u00F6yd\u00E4t vaakatasossa
map.width = Leveys (px)
mapEdit.removePlaces = Poista kaikki paikat
mapManage.lockedPlaces = Lukittu kartasta {0} paikkaa.
mapManage.releasedPlaces = Vapautettu kartasta {0} paikkaa
......@@ -226,6 +270,10 @@ org.hibernate.validator.constraints.Length.message = length must be between {m
org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
orgrole.create = Luo
orgrole.name = Nimi
orgrole.parents = Periytyy
page.account.list.header = Tilitapahtumat
page.auth.loginerror.header = kirjautuminen ep\u00E4onnistui
page.auth.logout.header = Uloskirjautuminen
......@@ -234,6 +282,10 @@ page.auth.resetPassword.header = Nollaa salasana
page.bill.billSummary.header = Laskujen yhteenveto
page.bill.list.header = Laskut
page.bill.show.header = Laskun tiedot
page.checkout.cancel.header = Maksu peruutettu.
page.checkout.delayed.header = Viiv\u00E4stetty maksu
page.checkout.reject.header = Maksu hyl\u00E4tty!
page.checkout.return.header = Maksu vahvistettu
page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi
page.place.mygroups.header = Paikkaryhm\u00E4t
page.place.placemap.header = Paikkakartta
......@@ -352,6 +404,7 @@ products.save = Tallenna
productshop.billCreated = Lasku luotu
productshop.commit = Osta
productshop.limits = Vapaana
productshop.noItemsInCart = Ostoskorissa ei ole tuotteita
productshop.total = Yhteens\u00E4
......@@ -445,6 +498,7 @@ submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.place.myGroups = Omat paikkavaraukset
submenu.place.placemap = Paikkakartta
submenu.poll.index = Kyselyt
submenu.product.create = Uusi tuote
submenu.product.list = Listaa tuotteet
......@@ -470,6 +524,7 @@ submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4
submenu.useradmin.createCardTemplate = Luo uusi korttipohja
submenu.useradmin.list = Listaa k\u00E4ytt\u00E4j\u00E4t
submenu.useradmin.listCardTemplates = Listaa korttipohjat
submenu.useradmin.validateUser = Validoi k\u00E4ytt\u00E4j\u00E4
submenu.voting.compolist = Kilpailut
submenu.voting.create = Uusi kilpailu
submenu.voting.myEntries = Omat entryt
......@@ -506,6 +561,7 @@ user.accountevents = Tilitapahtumat
user.address = Osoite
user.bank = Pankki
user.bankaccount = Pankkitili
user.birthday = Syntym\u00E4p\u00E4iv\u00E4
user.cardPower = K\u00E4ytt\u00E4j\u00E4tyyppi
user.changePassword = Vaihda salasana
user.changepassword.forUser = K\u00E4ytt\u00E4j\u00E4lle
......
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.Environment;
import org.apache.sshd.server.ExitCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
public class BortalCommand implements Command, Runnable {
private static Logger logger = LoggerFactory.getLogger(BortalCommand.class);
private OutputStream errstream;
private ExitCallback exitCallback;
private InputStreamReader instream;
private OutputStreamWriter outstream;
private BortalLocalContextHolder contextHolder;
private Charset UTF8 = Charset.forName("UTF-8");
public BortalCommand(BortalLocalContextHolder context) {
contextHolder = context;
}
@Override
public void setInputStream(InputStream in) {
instream = new InputStreamReader(in, UTF8);
}
@Override
public void setOutputStream(OutputStream out) {
outstream = new OutputStreamWriter(out, UTF8);
}
@Override
public void setErrorStream(OutputStream err) {
errstream = err;
}
@Override
public void setExitCallback(ExitCallback callback) {
exitCallback = callback;
}
@Override
public void start(Environment env) throws IOException {
logger.info("Starting something...");
new Thread(this).start();
}
@Override
public void destroy() {
logger.info("destroying ssh command");
}
@Override
public void run() {
BortalLocalContextHolder.copy(contextHolder);
try {
logger.info("Created new bortalCommane");
outstream.write("Hello you...");
StringBuilder cmdBuilder = new StringBuilder();
while (true) {
if (!instream.ready()) {
Thread.sleep(100);
} else {
char inchar = (char) instream.read();
if (inchar == '\n' || inchar == '\r')
{
outstream.write("\r\n# ");
outstream.flush();
parseCommand(cmdBuilder.toString());
cmdBuilder = new StringBuilder();
}
else {
outstream.write(inchar);
outstream.flush();
cmdBuilder.append(inchar);
}
}
}
} catch (InterruptedException e) {
logger.warn("Running command interrupted", e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
exitCallback.onExit(3);
}
private void parseCommand(String string) {
if (string != null || !string.isEmpty())
{
logger.info("received command {}", string);
}
}
}
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.security.Principal;
import java.util.HashSet;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginContext;
import org.apache.sshd.server.PasswordAuthenticator;
import org.apache.sshd.server.session.ServerSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.enterprise.security.auth.login.common.PasswordCredential;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
public class BortalPasswordAuthenticator implements PasswordAuthenticator {
private static final Logger logger = LoggerFactory.getLogger(BortalPasswordAuthenticator.class);
private BortalLocalContextHolder context;
public BortalPasswordAuthenticator(BortalLocalContextHolder instance) {
super();
context = instance;
}
@Override
public boolean authenticate(String username, String password, ServerSession session) {
BortalLocalContextHolder.copy(context);
return authenticate(username, password);
}
public boolean authenticate(final String username, final String password) {
try {
PasswordCredential pwdcred = new PasswordCredential(username, password.toCharArray(), "bortalRealm");
HashSet<PasswordCredential> privcred = new HashSet<PasswordCredential>();
privcred.add(pwdcred);
Subject subject = new Subject(false, new HashSet<Principal>(), new HashSet<Object>(), privcred);
LoginContext loginContext = new LoginContext("bortalRealm", subject, new CallbackHandler() {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
Callback cb = callbacks[i];
logger.info("Handling callback. {}", cb);
if (cb instanceof NameCallback) {
logger.info("Handling name callback");
((NameCallback) callbacks[i]).setName(username);
} else if (cb instanceof PasswordCallback) {
logger.info("Handling password callback");
((PasswordCallback) cb).setPassword(password.toCharArray());
} else {
throw new UnsupportedCallbackException(cb);
}
}
}
});
loginContext.login();
// loginContext.logout();
return true;
} catch (Exception e) {
logger.error("Authentication failed with error", e);
return false;
}
}
}
......@@ -46,7 +46,7 @@ public class FileDownloadServlet extends GenericImageServlet {
private transient PermissionBeanLocal permbean;
@EJB
private EventBeanLocal orgbean;
private transient EventBeanLocal orgbean;
private static final Logger logger = LoggerFactory.getLogger(FileDownloadServlet.class);
......
......@@ -53,7 +53,7 @@ public class PlaceMap extends HttpServlet {
private transient PermissionBeanLocal permbean;
@EJB
private LoggingBeanLocal loggerbean;
private transient LoggingBeanLocal loggerbean;
private static final String PARAMETER_EVENT_MAP_ID = "mapid";
......@@ -90,7 +90,7 @@ public class PlaceMap extends HttpServlet {
ostream = response.getOutputStream();
if (map == null || map.getMapData() == null) {
logger.info("Error handling map {}!", map);
logger.warn("Error handling map {}!", map);
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
ostream.print("Map error!");
......
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.ejb.EJB;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.sshd.SshServer;
import org.apache.sshd.common.Factory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.model.LanEvent;
/**
* Servlet implementation class SshServlet
*/
@WebServlet(urlPatterns = "/ssh", loadOnStartup = 10)
public class SshServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(SshServlet.class);
private Map<Integer, SshServer> servers = new HashMap<Integer, SshServer>();
// Timeout 30 min
private static final String TIMEOUT = new Integer(1000 * 60 * 30).toString();
@EJB
private EventBeanLocal eventbean;
/**
* @see HttpServlet#HttpServlet()
*/
public SshServlet() {
super();
// TODO Auto-generated constructor stub
}
private class SshShellFactor implements Factory<Command> {
private BortalLocalContextHolder context;
public SshShellFactor(BortalLocalContextHolder instance) {
context = instance;
}
@Override
public Command create() {
logger.info("creating new bortal command");
return new BortalCommand(context);
}
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
}
private SshServer initSsh(Integer id) {
logger.info("Initializing ssh servlet");
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(8022);
sshd.getProperties().put(SshServer.IDLE_TIMEOUT, TIMEOUT);
sshd.setShellFactory(new SshShellFactor(BortalLocalContextHolder.getInstance()));
BortalPasswordAuthenticator pswdAuth = new BortalPasswordAuthenticator(BortalLocalContextHolder.getInstance());
sshd.setPasswordAuthenticator(pswdAuth);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));
try {
sshd.start();
return sshd;
} catch (IOException e) {
logger.warn("sshd start failed! ", e);
}
return null;
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
logger.info("Destroying ssh servlet");
for (Entry<Integer, SshServer> entry : servers.entrySet())
{
try {
entry.getValue().stop();
} catch (InterruptedException e) {
logger.warn("Error stopping ssh", e);
}
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LanEvent event = eventbean.getCurrentEvent();
if (!servers.containsKey(event.getId())) {
SshServer ssh = initSsh(event.getId());
if (ssh != null) {
servers.put(event.getId(), ssh);
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
......@@ -23,6 +23,7 @@ import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.utilities.BarcodeUtils;
/**
* Servlet implementation class UploadServlet
......@@ -48,7 +49,7 @@ public class UserCardServlet extends GenericImageServlet {
private final Pattern lhMatcher = Pattern.compile("^127.[0-9.]*|(0:)*1%0");
@EJB
private CardTemplateBeanLocal cardbean;
private transient CardTemplateBeanLocal cardbean;
private static final Logger logger = LoggerFactory.getLogger(UserCardServlet.class);
......@@ -88,7 +89,7 @@ public class UserCardServlet extends GenericImageServlet {
EventUser user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getCurrentImage().getImageData()));
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getUser().getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));
......@@ -100,19 +101,19 @@ public class UserCardServlet extends GenericImageServlet {
// g.drawImage(face, AffineTransform.getScaleInstance(0.31, 0.31),
// null);
g.drawImage(face, 50, 320, 320, 400, null);
g.drawImage(face, 60, 300, 320, 400, null);
g.setFont(new Font("Century gothic", Font.PLAIN, 70));
// g.drawString(nick, 595 -
// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
// 840);
g.drawString(user.getNick(), 50, 810);
g.drawString(user.getUser().getNick(), 50, 810);
g.setFont(new Font("Century gothic", Font.BOLD, 35));
g.setFont(new Font("Century gothic", Font.BOLD, 45));
StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getFirstnames()).append(" ").append(user.getLastname());
wholeName.append(user.getUser().getFirstnames()).append(" ").append(user.getUser().getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 -
......@@ -124,6 +125,11 @@ public class UserCardServlet extends GenericImageServlet {
g.drawString(wholeName.toString(), 60, 865);
g.drawString(card.getTemplate().getName(), 60, 915);
String barcodeString = String.valueOf(user.getUser().getCreated().getTime().getTime());
barcodeString = barcodeString.substring(barcodeString.length() - 12);
BufferedImage image = ImageIO.read(BarcodeUtils.getBarcodeEAN(barcodeString));
g.drawImage(image, 0, base.getHeight() - 120, base.getWidth(), 120, null);
g.dispose();
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
......
......@@ -7,18 +7,20 @@ import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView {
private static final long serialVersionUID = -1226554409762987631L;
protected Integer page = 0;
protected Integer pagesize = 20;
// protected Integer page = 0;
// protected Integer pagesize = 20;
private SearchQuery searchQuery = new SearchQuery();
protected Long resultcount = 0L;
private Long pagecount = 0L;
protected String sort;
protected String search;
// protected String sort;
// protected String search;
private List<T> results;
private ListDataModel<T> resultdatamodel;
private static Logger logger = LoggerFactory.getLogger(PaginationView.class);
......@@ -32,11 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String addToPage(Integer count) {
pagechangeCallback();
if (count != null) {
page += count;
}
if (page >= pagecount) {
page = pagecount.intValue() - 1;
searchQuery.addPage(count);
if (searchQuery.getPage() >= pagecount) {
searchQuery.setPage(pagecount.intValue() - 1);
}
return null;
}
......@@ -50,17 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String gotoFirstpage() {
// logger.info("Setting page to first page");
pagechangeCallback();
page = 0;
searchQuery.setPage(0);
return null;
}
public String gotoLastpage() {
// logger.info("Setting page to last page");
pagechangeCallback();
page = pagecount.intValue() - 1;
if (page < 0) {
page = 0;
}
searchQuery.setPage(pagecount.intValue() - 1);
return null;
}
......@@ -74,23 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
@Override
public Integer getPage() {
return page;
return searchQuery.getPage();
}
public void setPage(Integer page) {
this.page = page;
searchQuery.setPage(page);
}
@Override
public Integer getPagesize() {
if (pagesize < 1) {
pagesize = 20;
}
return pagesize;
return searchQuery.getPagesize();
}
public void setPagesize(Integer pagesize) {
this.pagesize = pagesize;
searchQuery.setPagesize(pagesize);
}
@Override
......@@ -100,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public void setResultcount(Long resultcount) {
this.resultcount = resultcount;
pagecount = ((resultcount + pagesize - 1) / pagesize);
pagecount = ((resultcount + searchQuery.getPagesize() - 1) / searchQuery.getPagesize());
}
@Override
......@@ -113,24 +108,24 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
}
public String getSort() {
return sort;
return searchQuery.getSort();
}
public void setSort(String sort) {
this.sort = sort;
searchQuery.setSort(sort);
}
public String getSearch() {
return search;
return searchQuery.getSearch();
}
public void setSearch(String search) {
this.search = search;
searchQuery.setSearch(search);
}
public String newSearch() {
logger.info("Setting new Search for pagination..");
page = 0;
setPage(0);
setResults(null);
resultdatamodel = null;
return null;
......@@ -145,4 +140,12 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
resultdatamodel = null;
}
public SearchQuery getSearchQuery() {
return searchQuery;
}
public void setSearchQuery(SearchQuery searchQuery) {
this.searchQuery = searchQuery;
}
}
......@@ -14,20 +14,20 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@RequestScoped
public class ActionLogMessageView extends GenericCDIView {
private static final long serialVersionUID = 1L;
private boolean updateEnabled = true;
@EJB
private ActionLogBeanLocal actionLogBean;
private transient ActionLogBeanLocal actionLogBean;
public boolean getUpdateEnabled() {
return updateEnabled;
}
public void setUpdateEnabled(boolean updateEnabled) {
this.updateEnabled = updateEnabled;
}
public List<ActionLogMessage> getMessages() {
return actionLogBean.getAllActionLogEvents();
}
......
......@@ -27,7 +27,7 @@ public class TaskModificationView extends GenericCDIView {
private ActionLogMessageState responseStateChange;
@EJB
private ActionLogBeanLocal logbean;
private transient ActionLogBeanLocal logbean;
public void initView() {
if (super.requirePermissions(ContentPermission.MANAGE_ACTIONLOG) && message == null) {
......
......@@ -17,7 +17,7 @@ public class PageOutputView extends GenericCDIView {
private static final long serialVersionUID = 1384298744925823293L;
@EJB
private SitePageBeanLocal pagebean;
private transient SitePageBeanLocal pagebean;
private Integer id;
private String name;
......@@ -26,7 +26,7 @@ public class PageOutputView extends GenericCDIView {
public void initIndexView()
{
name = "index";
name = "/index";
initView();
}
......
package fi.insomnia.bortal.web.cdiview.content;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.SitePage;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -17,10 +22,12 @@ public class SitePageView extends GenericCDIView {
private static final long serialVersionUID = -513285802858190970L;
@EJB
private SitePageBeanLocal sitepagebean;
private transient SitePageBeanLocal sitepagebean;
private Integer id;
private SitePage sitepage;
private List<SitePage> pages;
private String managedPage;
private static final Logger logger = LoggerFactory.getLogger(SitePageView.class);
public void initEdit()
{
......@@ -31,6 +38,23 @@ public class SitePageView extends GenericCDIView {
}
}
public void initManage()
{
if (super.requirePermissions(ContentPermission.MANAGE_PAGES) && sitepage == null)
{
sitepage = sitepagebean.findSitename(managedPage);
if (sitepage == null)
{
sitepage = new SitePage();
sitepage.setName(managedPage);
sitepage.setContents(new ArrayList<PageContent>());
sitepage.getContents().add(new PageContent(sitepage));
}
super.beginConversation();
logger.info("Initializing managed page {}", managedPage);
}
}
public void initCreate()
{
if (super.requirePermissions(ContentPermission.MANAGE_PAGES))
......@@ -63,8 +87,14 @@ public class SitePageView extends GenericCDIView {
public String saveSite()
{
sitepage = sitepagebean.save(sitepage);
return null;
String ret = null;
if (sitepage.getId() == null) {
sitepagebean.create(sitepage);
ret = "/pages/edit";
} else {
sitepage = sitepagebean.save(sitepage);
}
return ret;
}
public SitePage getSitepage() {
......@@ -91,4 +121,12 @@ public class SitePageView extends GenericCDIView {
this.pages = pages;
}
public String getManagedPage() {
return managedPage;
}
public void setManagedPage(String managedPage) {
this.managedPage = managedPage;
}
}
......@@ -47,7 +47,7 @@ public class MapManageView extends GenericCDIView {
@EJB
private transient ProductBeanLocal productbean;
private UploadedFile bgFile;
private transient UploadedFile bgFile;
private List<EventMap> eventmaps;
private EventMap map;
......
......@@ -41,7 +41,7 @@ public class MapView extends GenericCDIView {
private transient EventBeanLocal eventBean;
private BigDecimal balance;
@EJB
private AccountEventBeanLocal acbean;
private transient AccountEventBeanLocal acbean;
private static final Logger logger = LoggerFactory.getLogger(MapView.class);
......@@ -78,7 +78,7 @@ public class MapView extends GenericCDIView {
public Long getPlacesLeftToSelect() {
Long ret = placeMapBean.selectablePlaceCount(getActiveMap());
logger.info("Got {} places left for map {}", ret, getActiveMap());
logger.debug("Got {} places left for map {}", ret, getActiveMap());
return ret;
}
......@@ -88,7 +88,7 @@ public class MapView extends GenericCDIView {
Long ret = placeMapBean.availablePlaceCount(getActiveMap());
logger.info("Got {} availbale places for map {}", ret, getActiveMap());
logger.debug("Got {} availbale places for map {}", ret, getActiveMap());
return ret;
}
......
......@@ -22,7 +22,9 @@ import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -41,6 +43,7 @@ public class PlaceView extends GenericCDIView {
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient PlaceBeanLocal placebean;
......@@ -54,7 +57,7 @@ public class PlaceView extends GenericCDIView {
private String searchuser;
private transient ListDataModel<User> userlist;
@EJB
private AccountEventBeanLocal acbean;
private transient AccountEventBeanLocal acbean;
public boolean canEdit() {
return permbean.hasPermission(MapPermission.MANAGE_MAPS);
......@@ -103,20 +106,18 @@ public class PlaceView extends GenericCDIView {
price = placebean.getTotalReservationPrice(place);
} else {
price = placebean.getTotalReservationPrice(user, place);
}
logger.debug("Balance {}, price {}", balance, price);
if (price.compareTo(balance) <= 0) {
logger.debug("Place was free. Marking for user.");
if (!placebean.reservePlace(place, user)) {
this.addFaceMessage("mapView.errorWhenReservingPlace");
}
} else {
if (balance.compareTo(BigDecimal.ZERO) > 0) {
addFaceMessage("mapView.notEnoughCreditsToReserve");
}
logger.debug("Did not have enought money to reserve place! required {} , got {}", price, balance);
logger.debug("Did not have enought credits to reserve place! required {} , got {}", price, balance);
}
}
}
......@@ -138,7 +139,12 @@ public class PlaceView extends GenericCDIView {
try {
EventUser user = userbean.getEventUser(userlist.getRowData());
if (placebean.reservePlace(place, user)) {
placebean.buySelectedPlaces(user);
PlaceGroup newgroup = placebean.buySelectedPlaces(user);
for (Place p : newgroup.getPlaces()) {
if (p.equals(place)) {
place = p;
}
}
}
} catch (BortalCatchableException e) {
......@@ -152,7 +158,7 @@ public class PlaceView extends GenericCDIView {
public String searchUser() {
super.beginConversation();
userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, searchuser).getResults());
userlist = new ListDataModel<User>(userbean.getUsers(new SearchQuery(0, 0, null, searchuser)).getResults());
return null;
}
......
......@@ -33,13 +33,12 @@ public class TokenView extends GenericCDIView {
return null;
}
String ret = "myGroups";
// String ret = "myGroups";
if (!placegroupbean.associateToToken(user, getToken())) {
this.addFaceMessage("placetoken.tokenNotFound");
ret = null;
}
return ret;
return null;
}
public void setToken(String token) {
......
......@@ -24,7 +24,7 @@ public class MenuListView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(MenuListView.class);
@EJB
private MenubeanLocal menubean;
private transient MenubeanLocal menubean;
private TreeNode selectedNode;
private TreeNode root;
......
......@@ -12,6 +12,9 @@ import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.MenubeanLocal;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.model.MenuNavigation;
......@@ -28,13 +31,13 @@ public class MenuView extends GenericCDIView {
private String pagename;
@Inject
private LayoutView layoutview;
private transient LayoutView layoutview;
@Inject
private FacesContext context;
private transient FacesContext context;
@EJB
private MenubeanLocal menubean;
private transient MenubeanLocal menubean;
private LinkedList<List<JsfMenuitem>> menus;
......@@ -43,11 +46,15 @@ public class MenuView extends GenericCDIView {
private Map<String, List<PageContent>> contents = new HashMap<String, List<PageContent>>();
@EJB
private SitePageBeanLocal pagebean;
private transient SitePageBeanLocal pagebean;
private static final Logger logger = LoggerFactory.getLogger(MenuView.class);
public List<PageContent> getPagecontent(String pagekey)
{
String key = new StringBuilder(layoutview.getPagepath()).append(":").append(pagekey).toString();
// logger.debug("Getting pagecontent for key {}", key);
if (!contents.containsKey(key)) {
contents.put(key, pagebean.findContentsForUser(key));
}
......
......@@ -11,6 +11,7 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.EventOrganiserBeanLocal;
import fi.insomnia.bortal.enums.apps.EventPermission;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
......@@ -46,11 +47,11 @@ public class EventOrgView extends GenericCDIView {
private String newdomain;
private ListDataModel<LanEventDomain> eventdomains;
private transient ListDataModel<LanEventDomain> eventdomains;
public void initCreate()
{
if (super.requirePermissions(user.isSuperadmin())) {
if (super.requirePermissions(user.getUser().isSuperadmin())) {
super.beginConversation();
}
}
......@@ -82,20 +83,22 @@ public class EventOrgView extends GenericCDIView {
public void initEdit() {
if (super.requirePermissions(eventorgbean.hasOrgPermission(orgId) || user.isSuperadmin()) && eventorg == null) {
if (orgId != null) {
eventorg = eventorgbean.find(orgId);
} else {
eventorg = eventbean.getCurrentEvent().getOrganiser();
}
if ((super.requirePermissions(eventorgbean.hasOrgPermission(orgId) || user.getUser().isSuperadmin())) && eventorg == null) {
eventorg = eventorgbean.find(orgId);
super.beginConversation();
}
// else if (super.requirePermissions(EventPermission.MANAGE_PROPERTIES)
// && eventorg == null) {
// eventorg = eventbean.getCurrentEvent().getOrganiser();
// super.beginConversation();
// }
}
public void initListView() {
if (super.requirePermissions(user.isSuperadmin() || eventorgbean.hasOrgPermission(orgId))) {
if (super.requirePermissions(user.getUser().isSuperadmin() || eventorgbean.hasOrgPermission(orgId))) {
if (getUser().isSuperadmin()) {
if (getUser().getUser().isSuperadmin()) {
setOrganisations(eventorgbean.getEventOrganisers());
} else {
setOrganisations(eventorgbean.getOrganisations(getUser().getUser()));
......@@ -105,10 +108,14 @@ public class EventOrgView extends GenericCDIView {
public void initEditEvent()
{
if (super.requirePermissions(user.isSuperadmin() || eventorgbean.hasEventPermission(eventid)) && getEvent() == null)
if (eventid != null && super.requirePermissions(user.getUser().isSuperadmin() || eventorgbean.hasEventPermission(eventid)) && getEvent() == null)
{
setEvent(eventorgbean.findEvent(eventid));
super.beginConversation();
} else if (super.requirePermissions(EventPermission.MANAGE_PROPERTIES) && getEvent() == null)
{
setEvent(eventbean.getCurrentEvent());
super.beginConversation();
}
}
......
......@@ -10,6 +10,7 @@ import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -32,13 +33,15 @@ public class EventPropertyView extends GenericCDIView {
private LanEventProperty property;
@Inject
private EventOrgView eventorgview;
private transient EventOrgView eventorgview;
@EJB
private EventBeanLocal eventbean;
private transient EventBeanLocal eventbean;
private UploadedFile file;
private static final Logger logger = LoggerFactory.getLogger(EventPropertyView.class);
private ListDataModel<LanEventProperty> properties;
private ListDataModel<LanEventPrivateProperty> privateProperties;
private transient ListDataModel<LanEventProperty> properties;
private transient ListDataModel<LanEventPrivateProperty> privateProperties;
private LanEventPrivateProperty privateProperty;
......@@ -106,6 +109,11 @@ public class EventPropertyView extends GenericCDIView {
public String savePrivateProperty()
{
logger.info("Saving property {}, eventorg {}, key {}", new Object[] { privateProperty.getEvent(), privateProperty.getEventorg(), privateProperty.getKey() });
if (privateProperty.getKey().isData() && file != null)
{
privateProperty.setByteValue(file.getContents());
privateProperty.setByteMime(file.getContentType());
}
privateProperty = eventbean.saveOrCreatePrivateProperty(privateProperty);
privateProperty.setEvent(privateProperty.getEvent());
privateProperties = null;
......@@ -125,8 +133,16 @@ public class EventPropertyView extends GenericCDIView {
public String saveProperty()
{
logger.info("Saving property {}, eventorg {}, key {}", new Object[] { property.getEvent(), property.getEventorg(), property.getKey() });
logger.info("Saving property {}, eventorg {}, key {}, ", new Object[] { property.getEvent(), property.getEventorg(), property.getKey() });
logger.debug("Is data: {} File {}", property.getKey().isData(), file);
if (property.getKey().isData() && file != null)
{
logger.info("saving data values type: {}, length {}", file.getContentType(), file.getSize());
property.setByteValue(file.getContents());
property.setByteMime(file.getContentType());
}
property = eventbean.saveOrCreateProperty(property);
eventorgview.setEvent(property.getEvent());
properties = null;
property = null;
......@@ -197,4 +213,12 @@ public class EventPropertyView extends GenericCDIView {
this.privateProperties = privateProperties;
}
public UploadedFile getFile() {
return file;
}
public void setFile(UploadedFile file) {
this.file = file;
}
}
package fi.insomnia.bortal.web.cdiview.shop;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.cdiview.user.UserView;
@Named
@ConversationScoped
public class BarcodeView extends GenericCDIView {
private String barcode;
private static final Logger logger = LoggerFactory
.getLogger(BarcodeView.class);
@Inject
private UserView userView;
@Inject
private ProductShopView productShopView;
@EJB
private UserBeanLocal userBean;
public String getBarcode() {
return barcode;
}
public void initView() {
super.requirePermissions(UserPermission.VIEW_ALL);
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String readBarcode() {
EventUser user = userBean.getUserByBarcode(barcode);
userView.setUser(user);
if (user == null) {
super.addFaceMessage("barcodeView.userNotFound", barcode);
logger.info("User not found by barcode: {}", barcode);
return null;
}
productShopView.initShopView();
super.beginConversation();
logger.info("Recieved Barcode: {}", barcode);
return "/shop/shopToUser";
}
public UserView getUserView() {
return userView;
}
public void setUserView(UserView userView) {
this.userView = userView;
}
public ProductShopView getProductShopView() {
return productShopView;
}
public void setProductShopView(ProductShopView productShopView) {
this.productShopView = productShopView;
}
}
package fi.insomnia.bortal.web.cdiview.shop;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
......@@ -8,8 +10,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.CheckoutFiBeanLocal;
import fi.insomnia.bortal.beans.VerkkomaksutFiBeanLocal;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.util.CheckoutBank;
import fi.insomnia.bortal.util.VerkkomaksutReturnEntry;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -29,8 +33,12 @@ public class BillEditView extends GenericCDIView {
@EJB
private transient VerkkomaksutFiBeanLocal vmbean;
@EJB
private transient CheckoutFiBeanLocal checkoutbean;
@EJB
private transient BillBeanLocal billbean;
private List<CheckoutBank> checkoutFiToken;
private static final Logger logger = LoggerFactory.getLogger(BillEditView.class);
public void initView() {
......@@ -48,12 +56,28 @@ public class BillEditView extends GenericCDIView {
}
}
public boolean isVerkkomaksuAvailable()
public boolean isCheckoutFiAvailable()
{
return checkoutbean.isPaymentEnabled();
}
public boolean isVerkkomaksuFiAvailable()
{
return vmbean.isSvmEnabled();
}
public VerkkomaksutReturnEntry getVerkkomaksuToken()
public List<CheckoutBank> getCheckoutFiToken()
{
if (bill != null && checkoutFiToken == null)
{
// checkoutFiToken = checkoutbean.testXml();
checkoutFiToken = checkoutbean.getToken(bill);
}
return checkoutFiToken;
}
public VerkkomaksutReturnEntry getVerkkomaksuFiToken()
{
if (bill != null && vmreturn == null)
{
......
......@@ -28,12 +28,12 @@ public class BillListView extends GenericCDIView {
@Inject
@SelectedUser
private EventUser user;
private transient EventUser user;
@EJB
private transient BillBeanLocal billbean;
private ListDataModel<Bill> bills;
private transient ListDataModel<Bill> bills;
private boolean writeBill;
......
......@@ -22,7 +22,7 @@ public class BillReviewView extends GenericCDIView {
*/
private static final long serialVersionUID = -4665348757236295800L;
@EJB
private VerkkomaksutFiBeanLocal vmbean;
private transient VerkkomaksutFiBeanLocal vmbean;
@EJB
private transient BillBeanLocal billbean;
......
package fi.insomnia.bortal.web.cdiview.shop;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.insomnia.bortal.beans.CheckoutFiBeanLocal;
import fi.insomnia.bortal.util.CheckoutReturnType;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@RequestScoped
public class CheckoutView extends GenericCDIView {
private static final long serialVersionUID = 2131137241062741415L;
private String version;
private String stamp;
private String reference;
private String payment;
private String status;
private String algorithm;
private String mac;
@EJB
private transient CheckoutFiBeanLocal checkoutbean;
private boolean validationResult;
public boolean isAvailable()
{
return checkoutbean.isPaymentEnabled();
}
public void validateReturn()
{
validationResult = checkoutbean.validateReturn(CheckoutReturnType.RETURN,
version, stamp, reference, payment, status, algorithm, mac);
}
public void validateCancel()
{
validationResult = checkoutbean.validateReturn(CheckoutReturnType.CANCEL,
version, stamp, reference, payment, status, algorithm, mac);
}
public void validateDelayed()
{
validationResult = checkoutbean.validateReturn(CheckoutReturnType.DELAYED,
version, stamp, reference, payment, status, algorithm, mac);
}
public void validateReject()
{
validationResult = checkoutbean.validateReturn(CheckoutReturnType.REJECT,
version, stamp, reference, payment, status, algorithm, mac);
}
public CheckoutFiBeanLocal getCheckoutbean() {
return checkoutbean;
}
public void setCheckoutbean(CheckoutFiBeanLocal checkoutbean) {
this.checkoutbean = checkoutbean;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getStamp() {
return stamp;
}
public void setStamp(String stamp) {
this.stamp = stamp;
}
public String getPayment() {
return payment;
}
public void setPayment(String payment) {
this.payment = payment;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMac() {
return mac;
}
public void setMac(String mac) {
this.mac = mac;
}
public boolean isValidationResult() {
return validationResult;
}
public void setValidationResult(boolean validationResult) {
this.validationResult = validationResult;
}
public String getAlgorithm() {
return algorithm;
}
public void setAlgorithm(String algorithm) {
this.algorithm = algorithm;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
}
......@@ -41,7 +41,7 @@ public class InviteAcceptView extends GenericCDIView {
this.addFaceMessage("invite.notFound");
done = true;
} else if (user == null) {
user = new EventUser(new User(), null);
user = new EventUser(new User(), null, permbean.getCurrentUser());
userview.setUser(user);
super.beginConversation();
}
......@@ -50,7 +50,7 @@ public class InviteAcceptView extends GenericCDIView {
public String createUser() {
user.resetPassword(userview.getPassword());
user.getUser().resetPassword(userview.getPassword());
userbean.createFromToken(user, token);
super.addFaceMessage("invite.userCreateSuccessfull");
done = true;
......
package fi.insomnia.bortal.web.cdiview.shop;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
......@@ -27,7 +29,8 @@ import fi.insomnia.bortal.web.helpers.ProductShopItem;
@ConversationScoped
public class ProductShopView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(ProductShopView.class);
private static final Logger logger = LoggerFactory
.getLogger(ProductShopView.class);
/**
*
*/
......@@ -48,6 +51,7 @@ public class ProductShopView extends GenericCDIView {
private boolean payInstant;
private BigDecimal cash = BigDecimal.ZERO;
private String barcode;
private transient ListDataModel<ProductShopItem> shoppingcart;
@Inject
......@@ -55,11 +59,16 @@ public class ProductShopView extends GenericCDIView {
@Inject
private BillEditView billEditView;
public void initBillView()
{
if (requirePermissions(ShopPermission.LIST_USERPRODUCTS) && shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
private boolean hasLimits = false;
private boolean blip = false;
public void initBillView() {
if (requirePermissions(ShopPermission.LIST_USERPRODUCTS)
&& shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(
ProductShopItem.productList(productBean
.listUserShoppableProducts()));
updateCartLimits(null);
logger.debug("Initialized billing shoppingcart to {}", shoppingcart);
this.beginConversation();
}
......@@ -68,18 +77,23 @@ public class ProductShopView extends GenericCDIView {
public void initShopView() {
if (requirePermissions(ShopPermission.SHOP_TO_OTHERS) && shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productGTList(productBean.findForStaffshop()));
if (requirePermissions(ShopPermission.SHOP_TO_OTHERS)
&& shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(
ProductShopItem.productGTList(productBean
.findForStaffshop()));
updateCartLimits(null);
logger.debug("Initialized shoppingcart to {}", shoppingcart);
this.beginConversation();
}
}
public String add(Integer count)
{
public String add(Integer count) {
ProductShopItem item = shoppingcart.getRowData();
item.setCount(item.getCount().add(BigDecimal.valueOf(count)));
updateCartLimits(item);
return null;
}
......@@ -103,22 +117,49 @@ public class ProductShopView extends GenericCDIView {
return add(-10);
}
public BigDecimal getAccountBalance()
{
public void updateCartLimits(ProductShopItem item) {
Map<Integer, BigDecimal> prodCounts = new HashMap<Integer, BigDecimal>();
for (ProductShopItem sc : shoppingcart) {
prodCounts.put(sc.getProduct().getId(), sc.getCount());
}
HashMap<Integer, BigDecimal> limits = productBean.getProductLimit(
prodCounts, user);
// Update the updated cart first
if (item != null)
{
BigDecimal l = limits.get(item.getProduct().getId());
if (item.updateLimit(l))
{
updateCartLimits(null);
return;
}
}
for (ProductShopItem n : shoppingcart) {
BigDecimal l = limits.get(n.getProduct().getId());
if (l != null) {
hasLimits = true;
}
n.updateLimit(l);
}
}
public BigDecimal getAccountBalance() {
BigDecimal ret = user.getAccountBalance();
ret = ret.add(getCash());
ret = ret.subtract(getTotalPrice());
logger.info("User accountbalance {}, cash{}, total {}. retBalance {}", new Object[] {
user.getAccountBalance(), getCash(), getTotalPrice(), ret
});
logger.info("User accountbalance {}, cash{}, total {}. retBalance {}",
new Object[] { user.getAccountBalance(), getCash(),
getTotalPrice(), ret });
return ret;
}
public BigDecimal getTotalPrice()
{
public BigDecimal getTotalPrice() {
BigDecimal ret = BigDecimal.ZERO;
for (ProductShopItem cart : shoppingcart)
{
for (ProductShopItem cart : shoppingcart) {
ret = ret.add(cart.getPrice());
}
return ret;
......@@ -151,8 +192,7 @@ public class ProductShopView extends GenericCDIView {
}
public String commitShoppingCart()
{
public String commitShoppingCart() {
EventUser retuser = null;
for (ProductShopItem shopitem : shoppingcart) {
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
......@@ -160,13 +200,11 @@ public class ProductShopView extends GenericCDIView {
}
}
if (cash != null && cash.compareTo(BigDecimal.ZERO) != 0)
{
if (cash != null && cash.compareTo(BigDecimal.ZERO) != 0) {
Product credProd = productBean.findCreditProduct();
retuser = productBean.createAccountEvent(credProd, cash, user).getUser();
}
if (user != null)
{
if (user != null) {
user = retuser;
}
shoppingcart = null;
......@@ -201,8 +239,7 @@ public class ProductShopView extends GenericCDIView {
}
public void setPayInstant(boolean payInstant) {
if (payInstant)
{
if (payInstant) {
getCash();
}
this.payInstant = payInstant;
......@@ -234,4 +271,43 @@ public class ProductShopView extends GenericCDIView {
public void setCash(BigDecimal cash) {
this.cash = cash;
}
public boolean isHasLimits() {
return hasLimits;
}
public void setHasLimits(boolean hasLimits) {
this.hasLimits = hasLimits;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public void readBarcode() {
Product product = productBean.findByBarcode(this.barcode);
this.blip = false;
for (ProductShopItem a : shoppingcart) {
if (a.getProduct().equals(product)) {
a.setCount(a.getCount().add(BigDecimal.ONE));
setBlip(true);
break;
}
}
this.barcode = null;
logger.debug("barcode read");
}
public boolean isBlip() {
return blip;
}
public void setBlip(boolean blip) {
this.blip = blip;
}
}
package fi.insomnia.bortal.web.cdiview.shop;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -35,10 +35,10 @@ public class ProductView extends GenericCDIView {
private Discount discount;
private Integer productId;
private Set<ProductFlag> productFlags;
private ListDataModel<Discount> productDiscounts;
private transient ListDataModel<Discount> productDiscounts;
private static final Logger logger = LoggerFactory.getLogger(ProductView.class);
......@@ -118,7 +118,7 @@ public class ProductView extends GenericCDIView {
productDiscounts = new ListDataModel<Discount>(product.getDiscounts());
return productDiscounts;
}
public List<ProductFlag> getProductFlags()
{
return Arrays.asList(ProductFlag.values());
......
......@@ -23,9 +23,9 @@ public class ReaderListDataView extends GenericCDIView {
private static final long serialVersionUID = -601822388844764143L;
@EJB
private ReaderBeanLocal readerbean;
private transient ReaderBeanLocal readerbean;
private ListDataModel<Reader> readers;
private transient ListDataModel<Reader> readers;
private static final Logger logger = LoggerFactory.getLogger(ReaderListDataView.class);
......
......@@ -17,6 +17,7 @@ import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
......@@ -30,18 +31,18 @@ public class ReaderView extends GenericCDIView {
private String placecode;
private String usersearch;
private ListDataModel<UserCardWrapper> userlist;
private transient ListDataModel<UserCardWrapper> userlist;
@Inject
private ReaderNameContainer namecontainer;
@EJB
private ReaderBeanLocal readerbean;
private transient ReaderBeanLocal readerbean;
private ReaderEvent event;
@EJB
private UserBeanLocal userbean;
private transient UserBeanLocal userbean;
private UserCardWrapper neighborUser;
......@@ -72,7 +73,7 @@ public class ReaderView extends GenericCDIView {
if (usersearch == null || usersearch.length() < 2) {
super.addFaceMessage("user.tooShortSearch");
} else {
userlist = UserCardWrapper.initWrapper(userbean.getUsers(0, 0, null, usersearch).getResults(), userbean);
userlist = UserCardWrapper.initWrapper(userbean.getUsers(new SearchQuery(0, 0, null, usersearch)).getResults(), userbean);
}
return null;
......
......@@ -21,7 +21,7 @@ public class SalespointListView extends GenericCDIView {
private SalespointBeanLocal salespointBean;
private static final long serialVersionUID = -8990414681240360892L;
private ListDataModel<Salespoint> salespoints;
private transient ListDataModel<Salespoint> salespoints;
private boolean modifySalespoint;
public SalespointListView() {
......
......@@ -22,7 +22,7 @@ public class SvmView extends GenericCDIView {
private boolean validationResult;
@EJB
private VerkkomaksutFiBeanLocal vmbean;
private transient VerkkomaksutFiBeanLocal vmbean;
public void validateSuccess()
{
......
......@@ -16,7 +16,7 @@ public class UserCardWrapper implements Serializable {
private static final long serialVersionUID = -2755200540851855878L;
private final EventUser user;
private final ListDataModel<PrintedCard> printedCards;
private transient final ListDataModel<PrintedCard> printedCards;
public UserCardWrapper(User u, UserBeanLocal userbean) {
user = userbean.getEventUser(u);
......
......@@ -34,7 +34,7 @@ public class AuthView extends GenericCDIView {
private NavigationHandler navihandler;
@EJB
private BootstrapBeanLocal bootStrapBean;
private transient BootstrapBeanLocal bootStrapBean;
private HttpServletRequest getRequest() {
FacesContext facesContext = FacesContext.getCurrentInstance();
......
......@@ -31,19 +31,19 @@ public class CardView extends GenericCDIView {
private Integer templateId;
private CardTemplate cardTemplate;
@EJB
private CardTemplateBeanLocal cfbean;
private transient CardTemplateBeanLocal cfbean;
@EJB
private EventBeanLocal eventBean;
private transient EventBeanLocal eventBean;
@Inject
@SelectedUser
private EventUser user;
private transient EventUser user;
private Integer cardid;
private List<CardTemplate> cardTemplates;
private UploadedFile templateImage;
private transient UploadedFile templateImage;
private static final Logger logger = LoggerFactory.getLogger(CardView.class);
......
......@@ -16,9 +16,9 @@ public class OrgRoleDataView extends GenericCDIView {
private static final long serialVersionUID = -607046631885684171L;
private transient ListDataModel<OrgRole> orgRoles;
@EJB
OrgRoleBeanLocal orgRolesBean;
private transient OrgRoleBeanLocal orgRolesBean;
public ListDataModel<OrgRole> getOrgRoles() {
......@@ -28,7 +28,7 @@ public class OrgRoleDataView extends GenericCDIView {
return orgRoles;
}
public boolean permissionList() {
return true;
}
......
......@@ -21,10 +21,10 @@ public class OrgRoleView extends GenericCDIView {
private OrgRole orgRole;
@EJB
private OrgRoleBeanLocal orgRoleBean;
private transient OrgRoleBeanLocal orgRoleBean;
@EJB
private EventBeanLocal eventBean;
private transient EventBeanLocal eventBean;
public void permissionList() {
requirePermissions(permbean.hasPermission(UserPermission.READ_ORGROLES));
......
......@@ -33,7 +33,7 @@ public class PasswordView extends GenericCDIView {
public String changePassword() {
if (permbean.isCurrentUser(user) || permbean.hasPermission(UserPermission.MODIFY)) {
if (password != null && password.equals(passwordcheck)) {
user.resetPassword(password);
user.getUser().resetPassword(password);
user = userbean.mergeChanges(user);
} else {
super.addFaceMessage("userview.passwordsDontMatch");
......
......@@ -18,13 +18,13 @@ public class UserCardView extends GenericCDIView {
private static final long serialVersionUID = -7316229268164228981L;
@EJB
private CardTemplateBeanLocal cardBean;
private transient CardTemplateBeanLocal cardBean;
@Inject
@SelectedUser
private EventUser user;
private transient EventUser user;
private ListDataModel<PrintedCard> printedCards;
private transient ListDataModel<PrintedCard> printedCards;
public EventUser getUser() {
return user;
......
......@@ -23,7 +23,7 @@ public class UserSearchView extends PaginationView<User> {
public void initView() {
if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) {
super.setResult(userbean.getUsers(page, pagesize, sort, search));
super.setResult(userbean.getEventUsers(getSearchQuery()));
}
}
......
......@@ -21,10 +21,10 @@ public class UserSessionView extends GenericCDIView {
private static final long serialVersionUID = -5305969666679378884L;
@EJB
private SessionMgmtBeanLocal sessionMgmt;
private ListDataModel<HttpSession> sessions;
private transient SessionMgmtBeanLocal sessionMgmt;
private transient ListDataModel<HttpSession> sessions;
private HttpSession session;
private transient HttpSession session;
private static final Logger logger = LoggerFactory.getLogger(UserSessionView.class);
public void initView()
......
......@@ -43,9 +43,9 @@ public class UserView extends GenericCDIView {
@EJB
private transient UserBeanLocal userbean;
private Integer userid;
private UploadedFile image;
private transient UploadedFile image;
@EJB
private CardTemplateBeanLocal ctbean;
private transient CardTemplateBeanLocal ctbean;
private CroppedImage croppedImage;
......@@ -68,12 +68,12 @@ public class UserView extends GenericCDIView {
private String passwordcheck;
@EJB
private CardTemplateBeanLocal cardBean;
private transient CardTemplateBeanLocal cardBean;
private List<Role> usersRoles;
@EJB
private RoleBeanLocal rolebean;
private transient RoleBeanLocal rolebean;
@EJB
private EventBeanLocal eventbean;
private transient EventBeanLocal eventbean;
@Produces
@LoggedIn
......@@ -129,7 +129,7 @@ public class UserView extends GenericCDIView {
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
try {
UserImage newImage =
userbean.saveCroppedImage(user.getCurrentImage(),
userbean.saveCroppedImage(user.getUser().getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(),
croppedImage.getWidth(), croppedImage.getHeight());
user = userbean.getEventUser(newImage.getUser());
......@@ -166,7 +166,7 @@ public class UserView extends GenericCDIView {
public void initCreateView() {
if (super.requirePermissions(UserPermission.CREATE_NEW)) {
user = new EventUser(new User(), eventbean.getCurrentEvent());
user = new EventUser(new User(), eventbean.getCurrentEvent(), permbean.getCurrentUser());
super.beginConversation();
}
}
......@@ -186,7 +186,7 @@ public class UserView extends GenericCDIView {
canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY);
this.beginConversation();
logger.info("Accountevents for user {}", user.getAccountEvents().size());
logger.debug("Accountevents for user {}", user.getAccountEvents().size());
}
......@@ -260,7 +260,7 @@ public class UserView extends GenericCDIView {
return user;
}
public boolean canSave() {
public boolean isCanSave() {
return canSave;
}
......
......@@ -23,11 +23,11 @@ public class CompoFileDownloadView extends GenericCDIView {
private static final long serialVersionUID = -262883747402530562L;
@EJB
private VotingBeanLocal votebean;
private transient VotingBeanLocal votebean;
@Inject
private CompoEntry entry;
private ListDataModel<CompoEntryFile> files;
private transient ListDataModel<CompoEntryFile> files;
private CompoEntryFile file;
private DefaultStreamedContent dlfile;
......
......@@ -31,24 +31,24 @@ public class CompoView extends GenericCDIView {
private VotingBeanLocal votbean;
@EJB
private PermissionBeanLocal permbean;
private transient PermissionBeanLocal permbean;
private boolean manage;
private ListDataModel<CompoWrapper> compolist;
private transient ListDataModel<CompoWrapper> compolist;
@Produces
private CompoEntry entry;
private static final Logger logger = LoggerFactory.getLogger(CompoView.class);
private UploadedFile uploadedFile;
private transient UploadedFile uploadedFile;
private Compo compo;
private Integer entryId;
private ListDataModel<EntryWrapper> voteEntries;
private transient ListDataModel<EntryWrapper> voteEntries;
public ListDataModel<CompoWrapper> getCompos() {
return compolist;
......
......@@ -23,7 +23,7 @@ public class VotingCreateView extends GenericCDIView {
private static final long serialVersionUID = 4677679766671547462L;
@EJB
private VotingBeanLocal votbean;
private transient VotingBeanLocal votbean;
@Size(min = 4, message = "{voting.create.nameError}")
private String name;
......
......@@ -23,14 +23,14 @@ public class VotingDetailsView extends GenericCDIView {
private static final long serialVersionUID = -8373473936336396427L;
@EJB
private VotingBeanLocal votingBean;
private transient VotingBeanLocal votingBean;
private Integer compoId;
private String compoName;
private Compo compo;
private ListDataModel<EntryWrapper> entries;
private transient ListDataModel<EntryWrapper> entries;
private static final Logger logger = LoggerFactory.getLogger(VotingDetailsView.class);
......
package fi.insomnia.bortal.web.helper;
import java.io.ByteArrayInputStream;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
......@@ -10,10 +11,16 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
@Named
@RequestScoped
......@@ -25,12 +32,22 @@ public class LayoutView {
private String pagename;
@EJB
private EventBeanLocal eventbean;
@EJB
private PermissionBeanLocal permbean;
private StreamedContent headerimage;
private String headertext;
private static final Logger logger = LoggerFactory.getLogger(LayoutView.class);
public void init() {
logger.info("Initialized layoutView");
}
public boolean isManageContent()
{
return permbean.hasPermission(ContentPermission.MANAGE_PAGES);
}
public String getPagepath() {
if (pagename == null) {
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
......@@ -73,6 +90,7 @@ public class LayoutView {
.append(localize(new StringBuilder("submenu").append(getPagepath().replace('/', '.')).toString())).toString();
}
// public String header() {
// logger.info("Context {}", context);
// UIViewRoot root = context.getViewRoot();
......@@ -90,4 +108,33 @@ public class LayoutView {
// }
// return "";
// }
public StreamedContent getHeaderimage() {
if (headertext == null && headerimage == null)
{
LanEventProperty logo = eventbean.getProperty(LanEventPropertyKey.EVENT_LOGO);
if (logo != null)
{
if (logo.getByteMime() == null)
{
headertext = logo.getTextvalue();
} else {
headerimage = new DefaultStreamedContent(new ByteArrayInputStream(logo.getByteValue()), logo.getByteMime());
}
}
}
return headerimage;
}
public void setHeaderimage(StreamedContent headerimage) {
this.headerimage = headerimage;
}
public String getHeadertext() {
return headertext;
}
public void setHeadertext(String headertext) {
this.headertext = headertext;
}
}
......@@ -22,11 +22,14 @@ public class ProductShopItem {
private List<Discount> discounts;
private Map<Integer, BigDecimal> discountValues;
private BigDecimal price;
private BigDecimal limit;
public ProductShopItem(Product prod) {
super();
this.product = prod;
id = this.product.getId();
setCount(BigDecimal.ZERO);
}
/**
......@@ -66,6 +69,7 @@ public class ProductShopItem {
count = BigDecimal.ZERO;
}
this.count = count;
price = product.getPrice().abs().multiply(count);
discounts = product.getActiveDiscounts(count, Calendar.getInstance());
discountValues = new HashMap<Integer, BigDecimal>();
......@@ -108,4 +112,28 @@ public class ProductShopItem {
return id;
}
public void setLimit(BigDecimal l) {
limit = l;
}
public BigDecimal getLimit() {
return limit;
}
public boolean updateLimit(BigDecimal limit) {
if (limit != null && limit.compareTo(BigDecimal.ZERO) < 0)
{
logger.info("product limit {}, count {}", limit, count);
setCount(getCount().add(limit));
if (count.compareTo(BigDecimal.ZERO) < 0)
{
setCount(BigDecimal.ZERO);
}
limit = BigDecimal.ZERO;
return true;
}
setLimit(limit);
return false;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry exported="true" kind="lib" path="security.jar"/>
<classpathentry exported="true" kind="lib" path="security.jar" sourcepath="/Users/tuomari/Downloads/security-3.1-sources.jar"/>
<classpathentry exported="true" kind="lib" path="common-util.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
......@@ -10,8 +10,19 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.jboss.tools.jst.web.kb.kbnature</nature>
</natures>
</projectDescription>
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!