Commit bc1828ec by Tuomas Riihimäki

Hups.. vois välillä commitoida

1 parent 0f3efc5f
Showing with 2273 additions and 1073 deletions
No preview for this file type
......@@ -68,7 +68,8 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
protected void authenticateUser() throws LoginException {
log((new StringBuilder()).append("CustomRealm Auth Info:_username:")
.append(_username).append(";_password:").append(_passwd)
.append(_username)
//.append(";_password:").append(_passwd)
.append(";_currentrealm:").append(_currentRealm).toString());
// Check if the given realm is SampleRealm
......
......@@ -74,7 +74,7 @@ public class BortalRealm extends AppservRealm {
public void init(Properties properties)
throws BadRealmException, NoSuchRealmException {
super.init(properties);
log("Init SampleRealm");
log("Init BortalRealm");
String propJaasContext = properties.getProperty(JAAS_CONTEXT_PARAM);
if (propJaasContext != null) {
......
......@@ -2,7 +2,12 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<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.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
......
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="java"/>
<fixed facet="jst.utility"/>
<installed facet="jst.utility" version="1.0"/>
......
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class AccountEventBean
*/
@Stateless
public class AccountEventBean implements AccountEventBeanLocal {
@EJB
private AccountEventFacade accountfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private SecurityBeanLocal sessionbean;
@EJB
private EventBeanLocal eventBean;
public AccountEventBean() {
super();
}
@Override
public AccountEvent merge(AccountEvent account) {
userbean.fatalPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.WRITE, "Error mergin account event", account);
return accountfacade.merge(account);
}
@Override
public void delete(AccountEvent account) {
userbean.fatalPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.WRITE, "Error deleting account event: ", account);
AccountEvent acco = accountfacade.find(account.getId());
sessionbean.logMessage(SecurityLogType.accountEvent, userbean.getCurrentUser(), "Deleting AccountEvent '", acco.getProduct().getName(), "' count: '", acco.getQuantity().toString(), "' unitprice: '", acco.getUnitPrice().toString(), "' accouser: '", acco.getUser().getLogin(), "'");
acco.getProduct().getAccountEvents().remove(acco);
if (acco.getBill() != null) {
acco.getBill().setAccountEvent(null);
}
acco.getUser().getAccountEvents().remove(acco);
accountfacade.remove(acco);
}
@Override
public AccountEvent find(EventPk id) {
return accountfacade.find(id);
}
@Override
public List<Role> getRolesFromAccountEvents(User u) {
return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u);
}
}
......@@ -6,12 +6,15 @@ 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;
......@@ -26,6 +29,24 @@ 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();
......@@ -40,10 +61,10 @@ public class BarcodeBean {
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);
......@@ -57,7 +78,7 @@ public class BarcodeBean {
}
public String asdasd() throws FileNotFoundException, Exception {
long start = new Date().getTime();
long start = new Date().getTime();
JBarcode code = JBarcodeFactory.getInstance().createCode128();
System.out.println("pre CreateCode: " + (new Date().getTime() - start));
......@@ -80,7 +101,6 @@ public class BarcodeBean {
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));
......
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.CardTemplateFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.util.MailMessage;
/**
* Session Bean implementation class CardTemplateBean
*/
@Stateless
public class CardTemplateBean implements CardTemplateBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(CardTemplateBean.class);
/**
* Default constructor.
*/
public CardTemplateBean() {
// TODO Auto-generated constructor stub
}
@EJB
private CardTemplateFacade cdFacade;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserBeanLocal userbean;
@EJB
private PrintedCardFacade printedcardfacade;
@EJB
private UtilBeanLocal mailbean;
@EJB
private PlaceGroupBeanLocal pgbean;
public List<CardTemplate> findAll() {
userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
return cdFacade.findAll(eventBean.getCurrentEvent());
}
@Override
public void create(CardTemplate card) {
userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
cdFacade.create(card);
}
@Override
public CardTemplate findById(Integer id) {
userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
LanEvent ev = eventBean.getCurrentEvent();
return cdFacade.find(ev.getId(), id);
}
public void checkAllUsersCardRights() {
for (User u : userbean.getUsers()) {
checkPrintedCard(u);
}
}
public void checkPrintedCard(User user) {
LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
PrintedCard biggestCard = null;
PrintedCard smallestCard = null;
for (PrintedCard card : myCards) {
if (card.getEnabled()) {
if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) {
biggestCard = card;
}
if (smallestCard == null || smallestCard.getTemplate().getPower() > card.getTemplate().getPower()) {
smallestCard = card;
}
}
}
CardTemplate roleCard = getUsersCardtype(user);
int existingPower = -999;
int newPower = -999;
if (roleCard != null) {
newPower = roleCard.getPower();
}
if (biggestCard != null) {
existingPower = biggestCard.getTemplate().getPower();
}
if (existingPower < newPower) {
if (biggestCard != null) {
biggestCard.setEnabled(false);
printedcardfacade.merge(biggestCard);
}
PrintedCard pc = new PrintedCard(currEvent);
pc.setTemplate(roleCard);
pc.setUser(user);
// user.getPrintedCards().add(pc);
printedcardfacade.create(pc);
logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else if (existingPower > newPower) {
MailMessage msg = new MailMessage();
User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin();
String adminmail = admin.getEmail();
msg.setFromAddress(adminmail);
msg.setFromName("Lippukauppa");
msg.setTo(admin);
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");
mailbean.sendMail(msg);
logger.debug("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else {
logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
}
}
public CardTemplate getUsersCardtype(User user) {
List<Role> roles = userbean.findUsersRoles(user);
CardTemplate greatestTemplate = null;
for (Role listrole : roles) {
if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) {
greatestTemplate = listrole.getCardTemplate();
}
}
return greatestTemplate;
}
}
......@@ -82,6 +82,7 @@ public class EventBean implements EventBeanLocal {
}
public LanEvent getCurrentEvent() {
LanEvent ret = getEventByHostname(BortalLocalContextHolder.getHostname());
return ret;
......@@ -89,9 +90,8 @@ public class EventBean implements EventBeanLocal {
@Override
public LanEvent mergeChanges(LanEvent event) {
//TODO: Hmm..
if(!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin())
{
// TODO: Hmm..
if (!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to merge event: " + event + " without being admin of that group");
}
return eventFacade.merge(event);
......@@ -99,7 +99,7 @@ public class EventBean implements EventBeanLocal {
@Override
public void create(LanEvent event) {
//TODO: Hmm..
// TODO: Hmm..
if (!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to create a new event for organiser " + event.getOrganiser() + " without being admin of that group");
......@@ -108,9 +108,8 @@ public class EventBean implements EventBeanLocal {
}
public String flushCache()
{
return eventFacade.flushCache();
public String flushCache() {
return eventFacade.flushCache();
}
}
......@@ -46,10 +46,10 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
if (user.checkPassword(password)) {
ret = user;
} else {
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password! ");
secubean.logMessage(SecurityLogType.permissionDenied, user, "Login failed: wrong password for username ", username);
}
} else {
secubean.logMessage(SecurityLogType.permissionDenied, "Login failed: Username not found: " + username);
secubean.logMessage(SecurityLogType.permissionDenied, null, "Login failed: Username not found: ", username);
}
......
package fi.insomnia.bortal.beans;
import java.io.UnsupportedEncodingException;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.util.MailMessage;
/**
* Message-Driven Bean implementation class for: MailMessageBean
*
*/
@MessageDriven(
activationConfig = { @ActivationConfigProperty(
propertyName = "destinationType", propertyValue = "javax.jms.Queue"
) },
mappedName = "jms/mailque")
public class MailMessageBean implements MessageListener {
@Resource(name = "mail/lanbortal")
private Session mailSession;
private static final Logger logger = LoggerFactory.getLogger(MailMessageBean.class);
/**
* Default constructor.
*/
public MailMessageBean() {
// TODO Auto-generated constructor stub
}
/**
* @see MessageListener#onMessage(Message)
*/
public void onMessage(Message message) {
MailMessage mailmsg = null;
try {
mailmsg = (MailMessage) ((ObjectMessage) message).getObject();
logger.debug("Got message {}", mailmsg.getToName());
MimeMessage msg = new MimeMessage(mailSession);
msg.setSubject(mailmsg.getSubject());
msg.setFrom(mailmsg.getFrom());
msg.setRecipient(RecipientType.TO, mailmsg.getTo());
msg.setText(mailmsg.getMessage(), mailmsg.getCharset());
Transport.send(msg);
} catch (JMSException e) {
logger.debug("Error receiving jms for {}", mailmsg, e);
} catch (MessagingException e) {
logger.debug("Unsupported encoding exception while sending mail to {}", mailmsg, e);
} catch (UnsupportedEncodingException e) {
logger.debug("Unsupported encoding exception while sending mail to {}", mailmsg, e);
}
}
}
......@@ -23,6 +23,7 @@ import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
......@@ -239,4 +240,27 @@ public class PlaceBean implements PlaceBeanLocal {
}
@Override
public Place find(EventPk id) {
userbean.fatalPermission(Permission.MAP, RolePermission.READ, "error reading place ", id);
return placeFacade.find(id);
}
@Override
public void checkMemberships() {
List<Place> all = placeFacade.findAll(eventBean.getCurrentEvent());
for (Place p : all) {
if (p.getGroup() != null && p.getPlaceReserver() == null) {
LanEvent event = eventBean.getCurrentEvent();
String token = gmemfacade.createInviteToken(event);
GroupMembership gm = new GroupMembership(event, p.getGroup(), p, token);
p.getGroup().getMembers().add(gm);
p.setPlaceReserver(gm);
}
}
}
}
package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
......@@ -10,6 +12,18 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pdfjet.A4;
import com.pdfjet.Box;
import com.pdfjet.CoreFont;
import com.pdfjet.Font;
import com.pdfjet.Image;
import com.pdfjet.ImageType;
import com.pdfjet.JPEGImage;
import com.pdfjet.PDF;
import com.pdfjet.PNGImage;
import com.pdfjet.Page;
import com.pdfjet.TextLine;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
......@@ -27,6 +41,7 @@ import fi.insomnia.bortal.model.User;
public class PlaceGroupBean implements PlaceGroupBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupBean.class);
private static final int YSTART = 30;
@EJB
private EventBeanLocal eventbean;
......@@ -61,14 +76,23 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
// }
@Override
public List<GroupMembership> getMemberships(User user) {
public List<GroupMembership> getMembershipsAndCreations(User user) {
userbean.fatalNotLoggedIn();
List<GroupMembership> ret = gmemfacade.find(eventbean.getCurrentEvent(), user);
List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
public List<GroupMembership> getMemberships(User user)
{
userbean.fatalNotLoggedIn();
List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user);
return ret;
}
@Override
public boolean associateToToken(User user, String token) {
token = token.trim();
userbean.fatalNotLoggedIn();
GroupMembership mem = gmemfacade.findByToken(token);
boolean ret = false;
......@@ -84,6 +108,62 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
}
@Override
public void getGroupMembershipPdf(List<GroupMembership> memberships, OutputStream ostream) {
try {
PDF pdf = new PDF(ostream);
Font font = new Font(pdf, CoreFont.TIMES_ROMAN);
Font bigfont = new Font(pdf, CoreFont.TIMES_ROMAN);
bigfont.setSize(15);
Page page = new Page(pdf, A4.PORTRAIT);
int y = YSTART;
for (GroupMembership membership : memberships) {
if (y > 750) {
page = new Page(pdf, A4.PORTRAIT);
y = YSTART;
}
//
// PNGImage jpeg = new
// 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.scaleBy(0.8);
image.setPosition(50, y);
image.drawOn(page);
TextLine name = new TextLine(bigfont, membership.getPlaceReservation().getName());
name.setPosition(300, y + 10);
name.drawOn(page);
TextLine reserverLabel = new TextLine(font, "Varaaja: ");
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());
reserver.setPosition(310, y + 45);
reserver.drawOn(page);
TextLine assoclabel = new TextLine(font, "Yhdistetty käyttäjään: ");
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()));
assoc.setPosition(310, y + 80);
assoc.drawOn(page);
y += 130;
}
pdf.flush();
} catch (Exception e) {
logger.info("Error getting printing group memberships", e);
}
}
@Override
public void releaseAndGenerateToken(GroupMembership gmem) {
if (!userbean.getCurrentUser().equals(gmem.getPlaceGroup().getCreator()) ||
!userbean.hasCurrentUserPermission(Permission.MAP, RolePermission.WRITE)) {
......
......@@ -126,17 +126,17 @@ public class ProductBean implements ProductBeanLocal {
AccountEvent ret = new AccountEvent(eventBean.getCurrentEvent(), user, product, unitPrice, quantity, Calendar.getInstance());
ret.setDelivered(Calendar.getInstance());
ret.setSeller(userbean.getCurrentUser());
// user.getAccountEvents().add(ret);
accounteventfacade.create(ret);
// user.getAccountEvents().add(ret);
accounteventfacade.create(ret);
LanEvent event = eventBean.getCurrentEvent();
// List<DiscountInstance> discountsArray = ret.getDiscountInstances();
// List<DiscountInstance> discountsArray = ret.getDiscountInstances();
for (Discount d : discounts) {
DiscountInstance discInst = new DiscountInstance(event, ret, d);
// discountsArray.add(discInst);
discountinstancefacade.create(discInst);
// discountsArray.add(discInst);
discountinstancefacade.create(discInst);
}
// userbean.mergeChanges(user);
// userbean.mergeChanges(user);
accounteventfacade.evict(ret);
userFacade.evict(user);
......@@ -150,4 +150,6 @@ public class ProductBean implements ProductBeanLocal {
public Product findById(int id) {
return productFacade.find(eventBean.getCurrentEvent().getId(), id);
}
}
package fi.insomnia.bortal.beans;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.Reader;
/**
* Session Bean implementation class ReaderBean
*/
@Stateless
public class ReaderBean implements ReaderBeanLocal {
@EJB
private ReaderFacade readerfacade;
@EJB
private EventBeanLocal eventbean;
@Override
public boolean checkTag(String ident, String tag, String hash) {
Reader reader = readerfacade.findByIdent(eventbean.getCurrentEvent(), ident);
boolean ret = false;
if(reader != null)
{
}
return ret;
}
}
......@@ -35,55 +35,68 @@ public class SecurityBean implements SecurityBeanLocal {
@Resource
UserTransaction utx;
@Override
public LogEntry logPermissionDenied(User user, Exception exception) {
LogEntry entry = null;
entry = logMessage(SecurityLogType.permissionDenied, user, exception.getMessage());
logger.debug(entry.toString(), exception);
return entry;
}
public LogEntry logException(User user, Exception exception) {
LogEntry entry = logMessage(SecurityLogType.unknownException, user, exception.getMessage());
logger.debug(entry.toString(), exception);
return entry;
}
public LogEntry logMessage(User user, String description) {
LogEntry entry = logMessage(SecurityLogType.genericMessage, user, description);
return entry;
}
public LogEntry logMessage(String description) {
LogEntry entry = logMessage(SecurityLogType.genericMessage, description);
return entry;
}
public LogEntry logMessage(SecurityLogType type, String description) {
return logMessage(type, null, description);
}
public LogEntry logMessage(SecurityLogType paramType, User user, String description) {
// @Override
// public LogEntry logPermissionDenied(User user, Exception exception) {
// LogEntry entry = null;
//
// entry = logMessage(SecurityLogType.permissionDenied, user,
// exception.getMessage());
// logger.debug(entry.toString(), exception);
//
// return entry;
//
// }
//
// public LogEntry logException(User user, Exception exception) {
//
// LogEntry entry = logMessage(SecurityLogType.unknownException, user,
// exception.getMessage());
// logger.debug(entry.toString(), exception);
// return entry;
// }
//
// public LogEntry logMessage(User user, String... description) {
//
// LogEntry entry = logMessage(SecurityLogType.genericMessage, user,
// toString(description));
//
// return entry;
// }
//
// private static final String toString(String... desc) {
// StringBuilder msg = new StringBuilder();
// for (String msgpart : desc) {
// msg.append(msgpart);
// }
// return msg.toString();
// }
//
// public LogEntry logMessage(String... description) {
// LogEntry entry = logMessage(SecurityLogType.genericMessage,
// toString(description));
// return entry;
//
// }
// public LogEntry logPermissionDenied(User currentuser, String... message)
// {
// return logMessage(SecurityLogType.permissionDenied, currentuser,
// toString(message));
// }
public LogEntry logMessage(SecurityLogType paramType, User user, String... description) {
LogEntry entry = null;
try {
String desc = toString(description);
utx.begin();
LogEntryType type = typeFacade.findOrCreate(paramType);
entry = new LogEntry(Calendar.getInstance());
entry.setType(type);
entry.setDescription(description);
entry.setDescription(desc);
entry.setUser(user);
entryFacade.create(entry);
if (DEBUG) {
logger.debug("SECURITY DEBUG: Type: \"{}\" user \"{}\", description \"{}\"", new String[] { paramType.name(), (user == null) ? "null" : user.getLogin(), description });
logger.debug("SECURITY DEBUG: Type: \"{}\" user \"{}\", description \"{}\"", new String[] { paramType.name(), (user == null) ? "null" : user.getLogin(), desc });
}
utx.commit();
} catch (Exception e) {
......@@ -92,16 +105,11 @@ public class SecurityBean implements SecurityBeanLocal {
return entry;
}
public LogEntry logPermissionDenied(User currentuser, String message) {
return logMessage(SecurityLogType.permissionDenied, currentuser, message);
}
@Override
public LogEntry logMessage(User currentUser, String... message) {
private static final String toString(String... desc) {
StringBuilder msg = new StringBuilder();
for (String msgpart : message) {
for (String msgpart : desc) {
msg.append(msgpart);
}
return logMessage(currentUser, msg.toString());
return msg.toString();
}
}
......@@ -33,7 +33,6 @@ import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.BortalLocalContextHolder;
import fi.insomnia.bortal.utilities.apachecodec.binary.Base64;
/**
......@@ -73,14 +72,14 @@ public class TestDataBean implements TestDataBeanLocal {
}
public void writeMap( byte[] bytes) {
public void writeMap(byte[] bytes) {
EventMap map = new EventMap(eventBean.getCurrentEvent());
map.setName("test" + bytes);
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < bytes; ++i) {
//
// sb.append((char) (33 + i % 92));
// }
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < bytes; ++i) {
//
// sb.append((char) (33 + i % 92));
// }
map.setMapData(bytes);
eventMapFacade.create(map);
}
......@@ -149,7 +148,7 @@ public class TestDataBean implements TestDataBeanLocal {
return u;
}
public Bill createBill( User u) {
public Bill createBill(User u) {
Bill b = new Bill(eventBean.getCurrentEvent());
b.setUser(u);
b.setAddr1("Kalle Kävijä");
......@@ -238,7 +237,6 @@ public class TestDataBean implements TestDataBeanLocal {
return null;
}
public void generateTestPlaces(EventMap map) {
logger.info("Adding places to map {}, event {}", map);
......@@ -293,8 +291,4 @@ public class TestDataBean implements TestDataBeanLocal {
q.executeUpdate();
}
public void contextTest() {
logger.debug("Hostname: {}",BortalLocalContextHolder.getHostname());
}
}
......@@ -22,13 +22,18 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.facade.UserImageFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.BeanContextHolder;
import fi.insomnia.bortal.utilities.BortalLocalContextHolder;
import fi.insomnia.bortal.utilities.I18n;
......@@ -58,15 +63,22 @@ public class UserBean implements UserBeanLocal {
@EJB
private EventBeanLocal eventBean;
@EJB
private RoleFacade rolefacade;
@EJB
private UserImageFacade userimagefacade;
@EJB
private ProductBeanLocal productBean;
@EJB
private UtilBeanLocal utilbean;
@EJB
private CardTemplateBeanLocal ctbean;
@EJB
private PlaceGroupBeanLocal pgbean;
@EJB
private AccountEventBeanLocal acbean;
@EJB
private GroupMembershipFacade groupMembershipFacade;
/**
* Default constructor.
*/
......@@ -87,7 +99,9 @@ public class UserBean implements UserBeanLocal {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
}
ctbean.checkPrintedCard(user);
User ret = userFacade.merge(user);
userFacade.evict(ret);
return ret;
}
......@@ -126,7 +140,7 @@ public class UserBean implements UserBeanLocal {
defaultUser.setLogin(DEFAULT_USER_LOGIN);
defaultUser.setNick(DEFAULT_USER_LOGIN);
userFacade.create(defaultUser);
defaultUser.setSuperadmin(true);
}
return defaultUser;
......@@ -138,52 +152,84 @@ public class UserBean implements UserBeanLocal {
Calendar start = Calendar.getInstance();
Boolean ret = BortalLocalContextHolder.hasPermission(target, permission);
// Boolean ret = BortalLocalContextHolder.hasPermission(target,
// permission);
if (ret == null) {
ret = false;
for (Role role : this.findUsersRoles(user)) {
if (role == null) {
continue;
}
for (RoleRight rr : role.getRoleRights()) {
BortalLocalContextHolder.setPermission(rr);
Set<Role> checkedRoles = new HashSet<Role>();
List<Role> defaultrole = new ArrayList<Role>();
defaultrole.add(eventBean.getCurrentEvent().getDefaultRole());
ret = getRights(defaultrole, target, permission, checkedRoles);
ret = BortalLocalContextHolder.hasPermission(target, permission);
if (ret != null) {
break;
}
if (!ret) {
List<Role> rolelist = rolefacade.findForUser(user, eventBean.getCurrentEvent());
ret = getRights(rolelist, target, permission, checkedRoles);
}
if (ret != null) {
break;
}
}
BortalLocalContextHolder.setPermission(target, permission, ret);
}
// TODO: FIX THIS!! really bad idea....
if (user.isSuperadmin()) {
return true;
}
if (ret == null) {
ret = false;
BortalLocalContextHolder.setPermission(target, permission, ret);
}
return ret;
}
private boolean getRights(Collection<Role> roles, Permission expectedRight, RolePermission permission, Set<Role> checkedRoles) {
}
if (roles == null || roles.isEmpty()) {
return false;
@Override
public List<Role> findUsersRoles(User u) {
User currusr = getCurrentUser();
if (!currusr.equals(u)) {
fatalNotLoggedIn();
}
for (Role role : roles) {
if (role == null) {
continue;
}
logger.debug("Checking role permission {}", role.getName());
for (RoleRight rr : role.getRoleRights()) {
BortalLocalContextHolder.setPermission(rr);
Boolean hasright = BortalLocalContextHolder.hasPermission(expectedRight, permission);
if (hasright != null) {
return hasright;
}
Set<Role> checkedRoles = new HashSet<Role>();
addRecursive(checkedRoles, u.getRoles());
if (isLoggedIn()) {
LanEvent event = eventBean.getCurrentEvent();
addRecursive(checkedRoles, event.getDefaultRole());
addRecursive(checkedRoles, acbean.getRolesFromAccountEvents(u));
for (GroupMembership member : groupMembershipFacade.findMemberships(event, u)) {
addRecursive(checkedRoles, member.getPlaceReservation().getProvidesRole());
}
}
return new ArrayList<Role>(checkedRoles);
}
private void addRecursive(Set<Role> checkedRoles, Collection<Role> roles) {
for (Role r : roles) {
addRecursive(checkedRoles, r);
}
}
checkedRoles.addAll(roles);
return getRights(rolefacade.findAllParentsExcluding(roles, checkedRoles), expectedRight, permission, checkedRoles);
private void addRecursive(Set<Role> checkedRoles, Role role) {
if (role == null || checkedRoles.contains(role)) {
return;
}
checkedRoles.add(role);
for (Role r : role.getParents()) {
addRecursive(checkedRoles, r);
}
}
......@@ -196,21 +242,20 @@ public class UserBean implements UserBeanLocal {
public void fatalPermission(Permission target, RolePermission permission, Object... failmessage) {
boolean ret = hasPermission(target, permission);
if (!ret) {
String message = null;
StringBuilder message = new StringBuilder("Target: ").append(target).append(" permission: ").append(permission);
if (failmessage == null || failmessage.length == 0) {
message = new StringBuilder("SessionHandler mbean permission exception: Target: ")
.append(target.toString())
message.append(" MSG: SessionHandler mbean permission exception: Target: ")
.append(target)
.append(", Permission: ")
.append(permission.toString())
.toString();
.append(permission);
} else {
StringBuilder msgbuilder = new StringBuilder();
for (Object part : failmessage) {
msgbuilder.append(part.toString());
message.append(part == null ? "NULL" : part.toString());
}
message = msgbuilder.toString();
}
throw new PermissionDeniedException(secubean, getCurrentUser(), message);
// throw new SecurityException("Foobar");
throw new PermissionDeniedException(secubean, getCurrentUser(), message.toString());
}
}
......@@ -226,7 +271,7 @@ public class UserBean implements UserBeanLocal {
fatalNotLoggedIn();
User user = getCurrentUser();
if (getCurrentUser().getId() != userid) {
if (!getCurrentUser().getId().equals(userid)) {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "usert tried to save picture to userid " + userid + " without sufficient permissions!");
user = userFacade.find(userid);
}
......@@ -303,7 +348,12 @@ public class UserBean implements UserBeanLocal {
if (hash == null || hash.length() < 20 || user == null || user.getEmail() == null || user.getEmail().length() <= 5) {
return false;
}
utilbean.sendMail(user, I18n.get("passwordreset.mailSubject"), I18n.get("passwordreset.mailBody", mailpath));
MailMessage msg = new MailMessage();
msg.setTo(user);
msg.setSubject(I18n.get("passwordreset.mailSubject"));
msg.setMessage(I18n.get("passwordreset.mailBody", mailpath));
utilbean.sendMail(msg);
user.setConfirmHash(hash);
userFacade.merge(user);
......
package fi.insomnia.bortal.beans;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import javax.annotation.Resource;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
......@@ -20,8 +19,7 @@ import javax.persistence.PersistenceUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.util.MailMessage;
/**
* Session Bean implementation class UtilBean
......@@ -32,15 +30,13 @@ public class UtilBean implements UtilBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UtilBean.class);
@Resource(name = "mail/lanbortal")
private Session mailSession;
@PersistenceContext
private EntityManager em;
@PersistenceUnit
private EntityManagerFactory emf;
/**
* Default constructor.
*/
......@@ -48,24 +44,26 @@ public class UtilBean implements UtilBeanLocal {
// TODO Auto-generated constructor stub
}
@Resource(name = "jmsQueue", mappedName = "jms/mailque")
private Queue mailQueue;
@Resource(name = "connFactory", mappedName = "jms/mailconnectionfactory")
private QueueConnectionFactory mailQuefactory;
@Override
public boolean sendMail(User user, String subject, String message) {
boolean ret = true;
Message msg = new MimeMessage(mailSession);
public boolean sendMail(MailMessage message) {
Date d = new Date();
try {
msg.setSubject(subject);
msg.setFrom(new InternetAddress("info@insomnia.fi", "Insomnia lippukauppa"));
msg.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail(),
user.getFirstnames() + " " + user.getLastname()));
msg.setText(message);
Transport.send(msg);
} catch (MessagingException me) {
logger.info("Error sending email!", me);
ret = false;
} catch (UnsupportedEncodingException uee) {
logger.info("Error sending email!", uee);
ret = false;
QueueConnection conn = mailQuefactory.createQueueConnection();
Session session = conn.createSession(false, 1);
ObjectMessage objmessage = session.createObjectMessage(message);
session.createProducer(mailQueue).send(objmessage);
conn.close();
} catch (JMSException e) {
logger.debug("Got exception sending mail", e);
}
return ret;
logger.debug("Message time {}",new Date().getTime() - d.getTime());
return true;
}
}
package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
@Stateless
@LocalBean
......@@ -16,6 +23,7 @@ public class AccountEventFacade extends EventChildGenericFacade<AccountEvent> {
@EJB
private UserFacade userfacade;
public AccountEventFacade() {
super(AccountEvent.class);
}
......@@ -24,12 +32,16 @@ public class AccountEventFacade extends EventChildGenericFacade<AccountEvent> {
return em;
}
@Override
public void create(AccountEvent event)
{
public void create(AccountEvent event) {
super.create(event);
userfacade.evict(event.getUser());
}
public List<Role> findProvidedRoles(LanEvent event, User u) {
TypedQuery<Role> q = em.createQuery("select distinct ac.product.provides from AccountEvent ac where ac.id.eventId = :eventid and ac.user = :user and ac.product.provides is not null", Role.class);
q.setParameter("eventid", event.getId());
q.setParameter("user", u);
return q.getResultList();
}
}
......@@ -26,8 +26,7 @@ public abstract class EventChildGenericFacade<T extends EventChildInterface> {
public T find(Integer eventId, Integer id) {
EventPk pk = new EventPk(eventId);
pk.setId(id);
EventPk pk = new EventPk(eventId, id);
return find(pk);
}
......@@ -94,7 +93,6 @@ public abstract class EventChildGenericFacade<T extends EventChildInterface> {
return q.getResultList();
}
protected static <K> K getSingleNullableResult(TypedQuery<K> q) {
K ret = null;
try {
......
......@@ -33,9 +33,10 @@ public class EventFacade extends GenericFacade<Integer, LanEvent> {
}
public LanEvent findByName(String name) {
TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByName", LanEvent.class);
q.setParameter("name", name);
return getSingleNullableResult(q);
// TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByName", LanEvent.class);
// q.setParameter("name", name);
// return getSingleNullableResult(q);
return this.find(1);
}
public String flushCache() {
......
......@@ -52,10 +52,17 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh
return getSingleNullableResult(q);
}
public List<GroupMembership> find(LanEvent event, User user) {
public List<GroupMembership> findMemberOrCreator(LanEvent event, User user) {
TypedQuery<GroupMembership> p = em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and (gm.placeGroup.creator = :user or gm.user = :user) order by gm.placeReservation.name",GroupMembership.class);
p.setParameter("eventid", event.getId());
p.setParameter("user", user);
return p.getResultList();
}
public List<GroupMembership> findMemberships(LanEvent event, User user) {
TypedQuery<GroupMembership> p = em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and gm.user = :user",GroupMembership.class);
p.setParameter("eventid", event.getId());
p.setParameter("user", user);
return p.getResultList();
}
}
package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
@Stateless
@LocalBean
......@@ -21,4 +28,19 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> {
return em;
}
public List<PrintedCard> findForUser(LanEvent event, User user) {
ArrayList<PrintedCard> retlist = new ArrayList<PrintedCard>();
for (PrintedCard pc : user.getPrintedCards()) {
if (pc.getId().getEventId().equals(event.getId())) {
retlist.add(pc);
}
}
// TypedQuery<PrintedCard> q =
// em.createQuery("SELECT pc from PrintedCard pc where pc.id.eventId = :eventid and pc.user = :user",
// PrintedCard.class);
// q.setParameter("eventid", event.getId());
// q.setParameter("user", user);
// return q.getResultList();
return retlist;
}
}
......@@ -11,6 +11,8 @@ import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
@Stateless
@LocalBean
......@@ -50,5 +52,4 @@ public class ProductFacade extends EventChildGenericFacade<Product> {
return q.getResultList();
}
}
......@@ -4,6 +4,9 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Reader;
@Stateless
......@@ -21,4 +24,11 @@ public class ReaderFacade extends EventChildGenericFacade<Reader> {
return em;
}
public Reader findByIdent(LanEvent event, String reader) {
TypedQuery<Reader> q = em.createQuery("select r from Reader r where r.id.eventId = :eventid and r.identification = :ident", Reader.class);
q.setParameter("eventid", event.getId());
q.setParameter("ident", reader);
return getSingleNullableResult(q);
}
}
......@@ -44,19 +44,7 @@ public class RoleFacade extends EventChildGenericFacade<Role> {
return q.getResultList();
}
public Collection<Role> findAllParentsExcluding(Collection<Role> roles, Collection<Role> excludedResults) {
Set<Role> ret = new HashSet<Role>();
for (Role r : roles) {
if (r != null) {
ret.addAll(r.getParents());
}
}
ret.removeAll(excludedResults);
return ret;
}
public Role createRole(LanEvent event, String rolename) {
Role ret = new Role(event);
ret.setName(rolename);
......
......@@ -18,6 +18,7 @@ import fi.insomnia.bortal.model.User;
public class UserFacade extends GenericFacade<Integer, User> {
private static final Logger logger = LoggerFactory.getLogger(UserFacade.class);
public enum UserField {
id, nick, login, firstname, lastname
}
......@@ -39,9 +40,9 @@ public class UserFacade extends GenericFacade<Integer, User> {
return getSingleNullableResult(q);
}
public List<User> search(String name, String[] strings) {
// TODO Auto-generated method stub
return null;
public List<User> search(String name, String[] fields) {
throw new RuntimeException("NOT IMPLEMENTED!!!");
//TODO: Implement search
}
}
......@@ -3,11 +3,15 @@
<classpathentry kind="src" path="ejbModule"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry combineaccessrules="false" kind="src" path="/LanBortalAuthModuleClient"/>
<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.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility;#system#"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="ejbModule"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.utility"/>
<fixed facet="jst.java"/>
<installed facet="jst.utility" version="1.0"/>
......
Manifest-Version: 1.0
Class-Path: lib/LanBortalDatabase.jar
lib/granite.jar
Class-Path: lib/LanBortalDatabase.jar
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
@Local
public interface AccountEventBeanLocal {
AccountEvent merge(AccountEvent account);
void delete(AccountEvent account);
AccountEvent find(EventPk id);
List<Role> getRolesFromAccountEvents(User u);
}
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.User;
@Local
public interface CardTemplateBeanLocal {
List<CardTemplate> findAll();
void create(CardTemplate card);
CardTemplate findById(Integer id);
void checkPrintedCard(User user);
void checkAllUsersCardRights();
}
......@@ -11,6 +11,7 @@ import javax.ejb.Local;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
......@@ -41,4 +42,8 @@ public interface PlaceBeanLocal {
int setBuyable(EventMap map, String buyableLike, boolean b);
Place find(EventPk id);
void checkMemberships();
}
package fi.insomnia.bortal.beans;
import java.io.OutputStream;
import java.util.List;
import javax.ejb.Local;
......@@ -14,10 +15,16 @@ public interface PlaceGroupBeanLocal {
// GroupMembership createGroupMembership(PlaceGroup pg, Place p);
List<GroupMembership> getMemberships(User user);
// List<GroupMembership> getMemberships(User user);
boolean associateToToken(User user, String token);
void releaseAndGenerateToken(GroupMembership gmem);
void getGroupMembershipPdf(List<GroupMembership> memberships, OutputStream ostream);
List<GroupMembership> getMembershipsAndCreations(User user);
List<GroupMembership> getMemberships(User user);
}
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface ReaderBeanLocal {
boolean checkTag(String reader, String tag, String hash);
}
......@@ -8,20 +8,20 @@ import fi.insomnia.bortal.model.User;
@Local
public interface SecurityBeanLocal {
LogEntry logPermissionDenied(User user, Exception exception);
LogEntry logException(User user, Exception exception);
LogEntry logMessage(User user, String description);
LogEntry logMessage(SecurityLogType type, User user, String description);
LogEntry logMessage(String description);
LogEntry logMessage(SecurityLogType type, String description);
LogEntry logPermissionDenied(User currentuser, String message);
LogEntry logMessage(User currentUser, String...message);
LogEntry logMessage(SecurityLogType paramType, User user, String... description);
// LogEntry logPermissionDenied(User user, Exception exception);
//
// LogEntry logException(User user, Exception exception);
//
// LogEntry logMessage(User user, String... description);
//
// LogEntry logMessage(SecurityLogType type, User user, String... description);
//
// LogEntry logMessage(String... description);
//
// LogEntry logMessage(SecurityLogType type, String... description);
//
// LogEntry logPermissionDenied(User currentuser, String... message);
}
......@@ -3,5 +3,6 @@ package fi.insomnia.bortal.beans;
public enum SecurityLogType {
permissionDenied,
unknownException,
genericMessage
genericMessage,
accountEvent
}
......@@ -32,5 +32,4 @@ public interface TestDataBeanLocal {
void writeMap(byte[] bytes);
void flushMaps();
void contextTest();
}
......@@ -8,6 +8,7 @@ import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
......@@ -50,4 +51,7 @@ public interface UserBeanLocal {
boolean initPasswordReset(User user, String hash, String mailpath);
List<Role> findUsersRoles(User u);
}
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.util.MailMessage;
public interface UtilBeanLocal {
// boolean sendMail(User user, String subject, String message);
boolean sendMail(User user, String subject, String message);
boolean sendMail(MailMessage message);
}
package fi.insomnia.bortal.exceptions;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.SecurityLogType;
import fi.insomnia.bortal.model.User;
public class PermissionDeniedException extends RuntimeException {
public PermissionDeniedException(SecurityBeanLocal bean, User user, String message) {
super(message);
bean.logPermissionDenied(user, this);
bean.logMessage(SecurityLogType.permissionDenied, user, this.getMessage());
}
/**
......
package fi.insomnia.bortal.util;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import javax.mail.internet.InternetAddress;
import fi.insomnia.bortal.model.User;
public class MailMessage implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4769468394850407107L;
private static final String DEFAULT_MAIL_CHARSET = "iso-8859-1";
private String subject;
private String fromName = "Insomnia lippukauppa";
private String fromAddress = "info@insomnia.fi";
private String toName;
private String toAddress;
private String message;
private String charset = DEFAULT_MAIL_CHARSET;
public InternetAddress getTo() throws UnsupportedEncodingException {
return new InternetAddress(toAddress, toName, getCharset());
}
public InternetAddress getFrom() throws UnsupportedEncodingException {
return new InternetAddress(fromAddress, fromName, getCharset());
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getFromName() {
return fromName;
}
public void setFromName(String fromName) {
this.fromName = fromName;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getToName() {
return toName;
}
public void setToName(String toName) {
this.toName = toName;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getMessage() {
return message;
}
public void setMessage(Object... msgpart) {
StringBuilder msg = new StringBuilder();
for (Object o : msgpart) {
msg.append(o);
}
message = msg.toString();
}
public void setMessage(String message) {
this.message = message;
}
public static String getDefaultMailCharset() {
return DEFAULT_MAIL_CHARSET;
}
public void setCharset(String charset) {
this.charset = charset;
}
public String getCharset() {
return charset;
}
public void setTo(User user) {
setToName(user.getWholeName());
setToAddress(user.getEmail());
}
@Override
public String toString() {
return new StringBuilder("fi.insomnia.bortal.util.MailMessage[to=").append(toAddress).append("]").toString();
}
}
......@@ -3,11 +3,15 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry combineaccessrules="false" kind="src" path="/LanBortalUtilities"/>
<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.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility;#system#"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.utility"/>
<fixed facet="jst.java"/>
<fixed facet="jpt.jpa"/>
......
......@@ -7,6 +7,7 @@
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
<property name="eclipselink.cache.size.default" value="16384"/>
</properties>
</persistence-unit>
</persistence>
package fi.insomnia.bortal;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Bill;
public class asdasd {
/**
* @param args
*/
public static void main(String[] args) {
AccountEvent a = new AccountEvent();
Bill b = new Bill();
AccountEvent c = new AccountEvent();
System.out.println("A eq b " + a.equals(b));
System.out.println("A eq A " + a.equals(a));
System.out.println("B eq b " + b.equals(b));
System.out.println("B eq A " + b.equals(a));
System.out.println("C eq C " + c.equals(c));
System.out.println("A eq C " + a.equals(c));
System.out.println("C eq A " + c.equals(a));
}
}
......@@ -17,7 +17,7 @@ public enum Permission {
// PERMISSION("Description"),
LOGIN("User can see loginbutton(r), create new user(w)"),
USER_MANAGEMENT("User has right to view all users(r), modify users(w), execute actions for user(x) "),
// TICKET_SALES("User has right to view(r), administer(w) and buy(x)"),
ACCOUNT_MANAGEMENT("Manage users account events. view(r), modify(w) and create(x)"),
BILL("View bills(r), Mark paid & modify(w), and create (buy) bills (x)"),
MAP("view maps(r), Modify(w), reserve places from maps(x)"),
ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
......
......@@ -37,7 +37,12 @@ import javax.persistence.TemporalType;
@NamedQuery(name = "AccountEvent.findByEventTime", query = "SELECT a FROM AccountEvent a WHERE a.eventTime = :eventTime"),
@NamedQuery(name = "AccountEvent.findByDelivered", query = "SELECT a FROM AccountEvent a WHERE a.delivered = :delivered") })
public class AccountEvent extends GenericEventChild {
private static final long serialVersionUID = 1L;
/**
*
*/
private static final long serialVersionUID = 2588419823225148100L;
/**
* What 1 unit of this product costs.
*/
......
......@@ -4,10 +4,6 @@
*/
package fi.insomnia.bortal.model;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
......@@ -15,9 +11,6 @@ import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
/**
*
......@@ -25,16 +18,13 @@ import javax.persistence.Version;
@Entity
@Table(name = "discount_instances")
@NamedQueries({ @NamedQuery(name = "DiscountInstance.findAll", query = "SELECT d FROM DiscountInstance d") })
public class DiscountInstance implements EventChildInterface {
public class DiscountInstance extends GenericEventChild {
/**
*
*/
private static final long serialVersionUID = 2192672129232748522L;
@EmbeddedId
private EventPk id;
@JoinColumns({
@JoinColumn(name = "account_event_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
......@@ -47,17 +37,13 @@ public class DiscountInstance implements EventChildInterface {
@ManyToOne(optional = false)
private Discount discount;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
public DiscountInstance() {
}
public DiscountInstance(LanEvent event, AccountEvent ac, Discount d) {
accountEvent = ac;
discount = d;
this.id = new EventPk(event);
setId(new EventPk(event));
}
public AccountEvent getAccountEvent() {
......@@ -76,66 +62,11 @@ public class DiscountInstance implements EventChildInterface {
this.discount = discountsId;
}
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are
// not set
if (!(object instanceof DiscountInstance)) {
return false;
}
DiscountInstance other = (DiscountInstance) object;
if ((this.getId() == null && other.getId() != null)
|| (this.getId() != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "fi.insomnia.bortal.model.DiscountInstance[discountsInstancesId="
+ getId() + "]";
}
/**
* @return the id
*/
@Override
public EventPk getId() {
return id;
}
/**
* @param id
* the id to set
*/
@Override
public void setId(EventPk id) {
this.id = id;
}
/**
* @return the jpaVersionField
*/
@Override
public int getJpaVersionField() {
return jpaVersionField;
}
/**
* @param jpaVersionField
* the jpaVersionField to set
*/
@Override
public void setJpaVersionField(int jpaVersionField) {
this.jpaVersionField = jpaVersionField;
}
}
......@@ -27,7 +27,7 @@ import javax.persistence.Version;
*/
@Entity
@Table(name = "event_organiser")
@NamedQueries( {
@NamedQueries({
@NamedQuery(name = "EventOrganiser.findAll", query = "SELECT e FROM EventOrganiser e"),
@NamedQuery(name = "EventOrganiser.findByOrganisation", query = "SELECT e FROM EventOrganiser e WHERE e.organisation = :organisation"),
@NamedQuery(name = "EventOrganiser.findByBundleCountry", query = "SELECT e FROM EventOrganiser e WHERE e.bundleCountry = :bundleCountry") })
......@@ -49,7 +49,7 @@ public class EventOrganiser implements ModelInterface {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "organiser")
private List<LanEvent> events;
@ManyToOne(fetch=FetchType.LAZY)
@ManyToOne()
@JoinColumn(name = "admin_user_id", referencedColumnName = "user_id", nullable = false)
private User admin;
......@@ -57,25 +57,23 @@ public class EventOrganiser implements ModelInterface {
@Column(nullable = false)
private int jpaVersionField = 0;
@Column(nullable = false,name="bill_address1")
@Column(nullable = false, name = "bill_address1")
private String billAddress1 = "";
@Column(nullable = false,name="bill_address2")
@Column(nullable = false, name = "bill_address2")
private String billAddress2 = "";
@Column(nullable = false,name="bill_address3")
@Column(nullable = false, name = "bill_address3")
private String billAddress3 = "";
@Column(nullable = false,name="bill_address4")
@Column(nullable = false, name = "bill_address4")
private String billAddress4 = "";
@Column(nullable = false,name="bank_number1")
@Column(nullable = false, name = "bank_number1")
private String bankNumber1 = "";
@Column(nullable = false,name="bank_number2")
@Column(nullable = false, name = "bank_number2")
private String bankNumber2 = "";
@Column(nullable = false,name="bank_name1")
@Column(nullable = false, name = "bank_name1")
private String bankName1 = "";
@Column(nullable = false,name="bank_name2")
@Column(nullable = false, name = "bank_name2")
private String bankName2 = "";
public EventOrganiser() {
}
......@@ -256,5 +254,5 @@ public class EventOrganiser implements ModelInterface {
public void setBankName2(String bankName2) {
this.bankName2 = bankName2;
}
}
......@@ -65,7 +65,7 @@ public class EventPk implements Serializable {
@Override
public String toString() {
return "fi.insomnia.bortal.model.EventPk[id=" + id + ", eventId=" + getEventId() + "]";
return new StringBuilder("fi.insomnia.bortal.model.EventPk[id=").append(id).append(", eventId=").append(getEventId()).append("]").toString();
}
public void setEventId(Integer eventId) {
......
......@@ -25,6 +25,14 @@ public class GenericEventChild implements EventChildInterface {
@Column(nullable = false)
private int jpaVersionField = 0;
public GenericEventChild(LanEvent event) {
id = new EventPk(event);
}
public GenericEventChild() {
super();
}
@Override
public final boolean equals(Object object) {
......@@ -33,8 +41,7 @@ public class GenericEventChild implements EventChildInterface {
return false;
}
GenericEventChild other = (GenericEventChild) object;
if(tempId != null && tempId.equals(other.tempId))
{
if (tempId != null && tempId.equals(other.tempId)) {
return true;
}
......
......@@ -77,6 +77,12 @@ public class Place extends GenericEventChild {
@ManyToOne
private PlaceGroup group;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "provided_role_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
private Role providesRole;
@JoinColumns({
@JoinColumn(name = "map_id", referencedColumnName = "id", nullable = false, updatable = true, insertable = true),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
......@@ -161,7 +167,7 @@ public class Place extends GenericEventChild {
}
public void setGroup(PlaceGroup group) {
if (group.getId().getEventId() != getId().getEventId()) {
if (group != null && group.getId().getEventId() != getId().getEventId()) {
throw new RuntimeException("Can not set Group from different Event to Place!");
}
this.group = group;
......@@ -251,7 +257,7 @@ public class Place extends GenericEventChild {
public boolean isTaken() {
return (releaseTime != null || getGroup() != null);
return (getReleaseTime() != null || getGroup() != null);
}
/**
......@@ -277,8 +283,8 @@ public class Place extends GenericEventChild {
}
setCurrentUser(user);
releaseTime = Calendar.getInstance();
releaseTime.add(Calendar.MINUTE, RESERVE_MINUTES);
setReleaseTime(Calendar.getInstance());
getReleaseTime().add(Calendar.MINUTE, RESERVE_MINUTES);
return true;
}
......@@ -296,7 +302,7 @@ public class Place extends GenericEventChild {
return false;
}
setCurrentUser(null);
releaseTime = null;
setReleaseTime(null);
return true;
}
......@@ -313,7 +319,7 @@ public class Place extends GenericEventChild {
if (!isBuyable() || getCurrentUser() == null || getGroup() != null || !group.getCreator().equals(getCurrentUser())) {
return false;
}
releaseTime = null;
setReleaseTime(null);
setGroup(group);
// Current user temporarily used at place reservation. When buying
// release field for its original use.
......@@ -331,9 +337,9 @@ public class Place extends GenericEventChild {
*/
public boolean checkReleased() {
boolean ret = false;
if (getGroup() == null && releaseTime != null && Calendar.getInstance().after(releaseTime)) {
if (getGroup() == null && getReleaseTime() != null && Calendar.getInstance().after(getReleaseTime())) {
setCurrentUser(null);
releaseTime = null;
setReleaseTime(null);
ret = true;
}
return ret;
......@@ -347,4 +353,20 @@ public class Place extends GenericEventChild {
return buyable;
}
public void setReleaseTime(Calendar releaseTime) {
this.releaseTime = releaseTime;
}
public Calendar getReleaseTime() {
return releaseTime;
}
public void setProvidesRole(Role providesRole) {
this.providesRole = providesRole;
}
public Role getProvidesRole() {
return providesRole;
}
}
......@@ -17,6 +17,7 @@ import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
......@@ -27,7 +28,7 @@ import javax.persistence.Version;
*/
@Entity
@Table(name = "groups")
@NamedQueries( {
@NamedQueries({
@NamedQuery(name = "PlaceGroup.findAll", query = "SELECT p FROM PlaceGroup p"),
@NamedQuery(name = "PlaceGroup.findByCreated", query = "SELECT p FROM PlaceGroup p WHERE p.created = :created"),
......@@ -72,6 +73,7 @@ public class PlaceGroup implements EventChildInterface {
private List<GroupMembership> members;
@OneToMany(mappedBy = "group")
@OrderBy("name")
private List<Place> places;
@Version
......
......@@ -10,7 +10,6 @@ import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
......@@ -21,24 +20,25 @@ import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
/**
*
*/
@Entity
@Table(name = "printed_cards")
@NamedQueries( {
@NamedQueries({
@NamedQuery(name = "PrintedCard.findAll", query = "SELECT p FROM PrintedCard p"),
@NamedQuery(name = "PrintedCard.findByPrintTime", query = "SELECT p FROM PrintedCard p WHERE p.printTime = :printTime"),
@NamedQuery(name = "PrintedCard.findByBarcode", query = "SELECT p FROM PrintedCard p WHERE p.barcode = :barcode"),
@NamedQuery(name = "PrintedCard.findByEnabled", query = "SELECT p FROM PrintedCard p WHERE p.enabled = :enabled"),
@NamedQuery(name = "PrintedCard.findByRfidUid", query = "SELECT p FROM PrintedCard p WHERE p.rfidUid = :rfidUid") })
public class PrintedCard implements EventChildInterface {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EventPk id;
public class PrintedCard extends GenericEventChild {
/**
*
*/
private static final long serialVersionUID = 8603481931116401027L;
@Column(name = "print_time")
@Temporal(TemporalType.TIMESTAMP)
......@@ -48,18 +48,18 @@ public class PrintedCard implements EventChildInterface {
private String barcode;
@Column(name = "card_enabled", nullable = false)
private boolean enabled;
private boolean enabled = true;
@Column(name = "rfid_uid")
private String rfidUid;
private String rfidUid ;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "printedCard")
private List<ReaderEvent> readerEvents;
@Column(name="print_count" ,nullable = false)
@Column(name = "print_count", nullable = false)
private int printCount = 0;
@JoinColumns( {
@JoinColumns({
@JoinColumn(name = "current_location_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne
......@@ -69,35 +69,20 @@ public class PrintedCard implements EventChildInterface {
@ManyToOne(optional = false)
private User user;
@JoinColumns( {
@JoinColumns({
@JoinColumn(name = "card_template_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false)
private CardTemplate template;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
public PrintedCard() {
}
@Override
public EventPk getId() {
return id;
}
@Override
public void setId(EventPk id) {
this.id = id;
}
public PrintedCard(LanEvent event) {
this.id = new EventPk(event);
setId(new EventPk(event));
}
public PrintedCard(LanEvent event, Calendar printTime,
boolean cardEnabled) {
public PrintedCard(LanEvent event, Calendar printTime, boolean cardEnabled) {
this(event);
this.printTime = printTime;
this.enabled = cardEnabled;
......@@ -159,43 +144,13 @@ public class PrintedCard implements EventChildInterface {
this.user = usersId;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are
// not set
if (!(object instanceof PrintedCard)) {
return false;
}
PrintedCard other = (PrintedCard) object;
if ((this.id == null && other.id != null)
|| (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "fi.insomnia.bortal.model.PrintedCard[id=" + id + "]";
}
@Override
public void setJpaVersionField(int jpaVersionField) {
this.jpaVersionField = jpaVersionField;
}
@Override
public int getJpaVersionField() {
return jpaVersionField;
return "fi.insomnia.bortal.model.PrintedCard[id=" + getId() + "]";
}
public void setTemplate(CardTemplate template) {
this.template = template;
}
......
......@@ -12,8 +12,10 @@ import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
......@@ -32,13 +34,10 @@ import javax.persistence.Version;
@NamedQuery(name = "Product.findByPrice", query = "SELECT p FROM Product p WHERE p.price = :price"),
@NamedQuery(name = "Product.findBySort", query = "SELECT p FROM Product p WHERE p.sort = :sort"),
@NamedQuery(name = "Product.findByBarcode", query = "SELECT p FROM Product p WHERE p.barcode = :barcode") })
public class Product implements EventChildInterface {
public class Product extends GenericEventChild {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EventPk id;
@Column(name = "product_name")
private String name;
......@@ -57,6 +56,12 @@ public class Product implements EventChildInterface {
@Column(name = "instant_shop")
private boolean prepaidInstant = false;
@JoinColumns({
@JoinColumn(name = "provided_role_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@ManyToOne
private Role provides;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<Place> places;
......@@ -84,19 +89,12 @@ public class Product implements EventChildInterface {
uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "food_wave_template_id", "event_id" }) })
private List<FoodWaveTemplate> foodWaveTemplates;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
public Product() {
}
public Product(LanEvent event) {
this.id = new EventPk(event);
super();
}
public Product(LanEvent event, String name, BigDecimal price) {
this(event);
super(event);
this.price = price;
this.name = name;
......@@ -151,66 +149,10 @@ public class Product implements EventChildInterface {
}
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are
// not set
if (!(object instanceof Product)) {
return false;
}
Product other = (Product) object;
if ((this.getId() == null && other.getId() != null)
|| (this.getId() != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "fi.insomnia.bortal.model.Product[productsId=" + getId() + "]";
}
/**
* @return the id
*/
@Override
public EventPk getId() {
return id;
}
/**
* @param id
* the id to set
*/
@Override
public void setId(EventPk id) {
this.id = id;
}
/**
* @return the jpaVersionField
*/
@Override
public int getJpaVersionField() {
return jpaVersionField;
}
/**
* @param jpaVersionField
* the jpaVersionField to set
*/
@Override
public void setJpaVersionField(int jpaVersionField) {
this.jpaVersionField = jpaVersionField;
}
public void setDiscounts(List<Discount> discounts) {
this.discounts = discounts;
}
......@@ -266,4 +208,12 @@ public class Product implements EventChildInterface {
return prepaidInstant;
}
public void setProvides(Role provides) {
this.provides = provides;
}
public Role getProvides() {
return provides;
}
}
......@@ -15,23 +15,19 @@ import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Version;
import javax.persistence.UniqueConstraint;
/**
*
*/
@Entity
@Table(name = "readers")
@NamedQueries( {
@Table(name = "readers", uniqueConstraints = { @UniqueConstraint(columnNames = { "reader_ident", "event_id" }) })
@NamedQueries({
@NamedQuery(name = "Reader.findAll", query = "SELECT r FROM Reader r"),
@NamedQuery(name = "Reader.findByIdentification", query = "SELECT r FROM Reader r WHERE r.identification = :identification"),
@NamedQuery(name = "Reader.findByDescription", query = "SELECT r FROM Reader r WHERE r.description = :description") })
public class Reader implements EventChildInterface {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EventPk id;
public class Reader extends GenericEventChild {
@Column(name = "reader_ident")
private String identification;
......@@ -40,14 +36,14 @@ public class Reader implements EventChildInterface {
@Column(name = "reader_description")
private String description;
@JoinColumns( {
@JoinColumns({
@JoinColumn(name = "location_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@ManyToOne
private Location location;
@ManyToOne
@JoinColumns( {
@JoinColumns({
@JoinColumn(name = "map_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
private EventMap eventMap;
......@@ -61,17 +57,6 @@ public class Reader implements EventChildInterface {
@Column(name = "map_y")
private Integer mapY;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
public Reader() {
}
public Reader(LanEvent event) {
this.id = new EventPk(event);
}
public String getIdentification() {
return identification;
}
......@@ -97,67 +82,11 @@ public class Reader implements EventChildInterface {
}
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are
// not set
if (!(object instanceof Reader)) {
return false;
}
Reader other = (Reader) object;
if ((this.getId() == null && other.getId() != null)
|| (this.getId() != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "fi.insomnia.bortal.model.Reader[id=" + getId() + "]";
}
/**
* @return the id
*/
@Override
public EventPk getId() {
return id;
}
/**
* @param id
* the id to set
*/
@Override
public void setId(EventPk id) {
this.id = id;
}
/**
* @return the jpaVersionField
*/
@Override
public int getJpaVersionField() {
return jpaVersionField;
}
/**
* @param jpaVersionField
* the jpaVersionField to set
*/
@Override
public void setJpaVersionField(int jpaVersionField) {
this.jpaVersionField = jpaVersionField;
}
/**
* @return the mapX
*/
public Integer getMapX() {
......
......@@ -24,18 +24,15 @@ import javax.persistence.Version;
*/
@Entity
@Table(name = "reader_events")
@NamedQueries( {
@NamedQueries({
@NamedQuery(name = "ReaderEvent.findAll", query = "SELECT r FROM ReaderEvent r"),
@NamedQuery(name = "ReaderEvent.findByTime", query = "SELECT r FROM ReaderEvent r WHERE r.time = :time"),
@NamedQuery(name = "ReaderEvent.findByValue", query = "SELECT r FROM ReaderEvent r WHERE r.value = :value") })
public class ReaderEvent implements EventChildInterface {
public class ReaderEvent extends GenericEventChild {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EventPk id;
@Column(name = "event_time", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Calendar time;
......@@ -43,31 +40,23 @@ public class ReaderEvent implements EventChildInterface {
@Column(name = "value")
private String value;
@JoinColumns( {
@JoinColumns({
@JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false)
private PrintedCard printedCard;
@JoinColumns( {
@JoinColumns({
@JoinColumn(name = "readers_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false)
private Reader reader;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
public ReaderEvent() {
}
public ReaderEvent(LanEvent event) {
this.id = new EventPk(event);
}
public ReaderEvent(LanEvent event, Calendar eventTime, PrintedCard card, Reader reader) {
this(event);
super(event);
this.time = eventTime;
this.printedCard = card;
this.reader = reader;
......@@ -106,63 +95,8 @@ public class ReaderEvent implements EventChildInterface {
}
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are
// not set
if (!(object instanceof ReaderEvent)) {
return false;
}
ReaderEvent other = (ReaderEvent) object;
if ((this.getId() == null && other.getId() != null)
|| (this.getId() != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "fi.insomnia.bortal.model.ReaderEvent[id=" + getId() + "]";
}
/**
* @return the id
*/
@Override
public EventPk getId() {
return id;
}
/**
* @param id
* the id to set
*/
@Override
public void setId(EventPk id) {
this.id = id;
}
/**
* @return the jpaVersionField
*/
@Override
public int getJpaVersionField() {
return jpaVersionField;
}
/**
* @param jpaVersionField
* the jpaVersionField to set
*/
@Override
public void setJpaVersionField(int jpaVersionField) {
this.jpaVersionField = jpaVersionField;
}
}
......@@ -9,7 +9,6 @@ import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
......@@ -21,7 +20,6 @@ import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;
/**
*
......@@ -34,11 +32,12 @@ import javax.persistence.Version;
// @NamedQuery(name="Role.findParentsExcluding", query="select r from
// Role r, RoleRight rr where :user member of r.users ),
@NamedQuery(name = "Role.findForUser", query = "SELECT r FROM Role r WHERE :user MEMBER OF r.users and r.event = :event") })
public class Role implements EventChildInterface {
public class Role extends GenericEventChild {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EventPk id;
/**
*
*/
private static final long serialVersionUID = -4602863502464505404L;
@Column(name = "role_name", nullable = false)
private String name;
......@@ -49,6 +48,12 @@ public class Role implements EventChildInterface {
@ManyToMany(mappedBy = "parents")
private List<Role> children = new ArrayList<Role>();
@OneToMany(mappedBy = "provides")
private List<Product> productsProvide;
@OneToMany(mappedBy = "providesRole")
private List<Place> placesProvide;
@ManyToMany()
@JoinTable(name = "role_parents",
inverseJoinColumns = {
......@@ -63,7 +68,7 @@ public class Role implements EventChildInterface {
private List<RoleRight> roleRights;
@JoinColumns({
@JoinColumn(name = "card_template_id", referencedColumnName = "id", updatable = false, insertable = false),
@JoinColumn(name = "card_template_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@ManyToOne
private CardTemplate cardTemplate;
......@@ -78,15 +83,11 @@ public class Role implements EventChildInterface {
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false)
private LanEvent event;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
public Role() {
}
public Role(LanEvent event) {
this.id = new EventPk(event);
super(event);
this.event = event;
}
......@@ -120,66 +121,10 @@ public class Role implements EventChildInterface {
}
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are
// not set
if (!(object instanceof Role)) {
return false;
}
Role other = (Role) object;
if ((this.getId() == null && other.getId() != null)
|| (this.getId() != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "fi.insomnia.bortal.model.Role[id=" + getId() + "]";
}
/**
* @return the id
*/
@Override
public EventPk getId() {
return id;
}
/**
* @param id
* the id to set
*/
@Override
public void setId(EventPk id) {
this.id = id;
}
/**
* @return the jpaVersionField
*/
@Override
public int getJpaVersionField() {
return jpaVersionField;
}
/**
* @param jpaVersionField
* the jpaVersionField to set
*/
@Override
public void setJpaVersionField(int jpaVersionField) {
this.jpaVersionField = jpaVersionField;
}
public void setUsers(List<User> users) {
this.users = users;
}
......@@ -223,4 +168,20 @@ public class Role implements EventChildInterface {
public LanEvent getEvent() {
return event;
}
public void setProductsProvide(List<Product> productsProvide) {
this.productsProvide = productsProvide;
}
public List<Product> getProductsProvide() {
return productsProvide;
}
public void setPlacesProvide(List<Place> placesProvide) {
this.placesProvide = placesProvide;
}
public List<Place> getPlacesProvide() {
return placesProvide;
}
}
......@@ -34,6 +34,7 @@ import fi.insomnia.bortal.enums.Permission;
@ObjectTypeConverter(name = "permissionconverter", objectType = Permission.class, dataType = String.class, conversionValues = {
@ConversionValue(dataValue = "LOGIN", objectValue = "LOGIN"),
@ConversionValue(dataValue = "USER_MANAGEMENT", objectValue = "USER_MANAGEMENT"),
@ConversionValue(dataValue = "ACCOUNT_MANAGEMENT", objectValue = "ACCOUNT_MANAGEMENT"),
@ConversionValue(dataValue = "MAP", objectValue = "MAP"),
@ConversionValue(dataValue = "BILL", objectValue = "BILL"),
@ConversionValue(dataValue = "ROLE_MANAGEMENT", objectValue = "ROLE_MANAGEMENT"),
......
......@@ -86,7 +86,7 @@ public class User implements ModelInterface {
private Calendar birthday;
@NotNull
@Size(min = 2, message="{user.nickSizeMessage}")
@Size(min = 2, message = "{user.nickSizeMessage}")
@Column(name = "nick")
private String nick = "";
......@@ -141,7 +141,7 @@ public class User implements ModelInterface {
@OneToMany(mappedBy = "user")
private List<LogEntry> logEntryList;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY,cascade=CascadeType.ALL)
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@OrderBy
private List<UserImage> userImageList;
......@@ -213,8 +213,7 @@ public class User implements ModelInterface {
this.votes = votes;
}
public User(Integer usersId, Calendar created, boolean active, String lastname,
String firstnames) {
public User(Integer usersId, Calendar created, boolean active, String lastname, String firstnames) {
this.id = usersId;
this.created = created;
this.active = active;
......@@ -248,6 +247,10 @@ public class User implements ModelInterface {
this.password = password;
}
public String getWholeName() {
return new StringBuilder(firstnames).append(" ").append(lastname).toString();
}
public String getLastname() {
return lastname;
}
......
......@@ -3,11 +3,15 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="src" path="/LanBortalBeansClient"/>
<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.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)">
<attributes>
<attribute name="owner.project.facets" value="jst.utility;#system#"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish Server Open Source Edition 3 (Java EE 6)"/>
<fixed facet="jst.java"/>
<fixed facet="jst.utility"/>
<installed facet="jst.java" version="6.0"/>
......
package fi.insomnia.bortal.utilities;
import java.util.HashMap;
import java.util.Map;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.RoleRight;
public class BeanContextHolder {
private Map<Permission, Map<RolePermission, Boolean>> rightcache = new HashMap<Permission, Map<RolePermission, Boolean>>();
public Boolean hasPermission(Permission target, RolePermission permission) {
Map<RolePermission, Boolean> permmap = rightcache.get(target);
if (permmap == null) {
permmap = new HashMap<RolePermission, Boolean>();
rightcache.put(target, permmap);
}
return permmap.get(permission);
}
public void setPermission(Permission target, RolePermission permission, Boolean ret) {
Map<RolePermission, Boolean> permmap = rightcache.get(target);
if (permmap == null) {
permmap = new HashMap<RolePermission, Boolean>();
rightcache.put(target, permmap);
}
permmap.put(permission, ret);
}
public void setPermission(RoleRight rr) {
if (rr.isExecute()) {
setPermission(rr.getPermission(), RolePermission.EXECUTE, true);
}
if (rr.isWrite()) {
setPermission(rr.getPermission(), RolePermission.WRITE, true);
}
if (rr.isRead()) {
setPermission(rr.getPermission(), RolePermission.READ, true);
}
}
}
\ No newline at end of file
......@@ -87,4 +87,8 @@ public class BortalLocalContextHolder {
}
}
public static BortalLocalContextHolder getInstance() {
return getThread();
}
}
\ No newline at end of file
......@@ -11,7 +11,6 @@ import fi.insomnia.bortal.utilities.apachecodec.binary.Base64;
public class PasswordFunctions {
private static final Logger logger = LoggerFactory
.getLogger(PasswordFunctions.class);
......@@ -81,21 +80,25 @@ public class PasswordFunctions {
if (!theSame && UGLY_FIX) {
theSame = new UglyFix(newBase64, oldBase64).check();
}
return theSame;
}
private static final int SALT_LENGTH = 4;
private static final String ALLOWED_RANDOM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static final String ALLOWED_PASSWORD_CHARS = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz";
public static String generateRandomString(int length) {
return generateRandomString(length, ALLOWED_PASSWORD_CHARS);
}
public static String generateRandomString(int length, String allowedCharacters) {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int index = random.nextInt(ALLOWED_RANDOM_CHARS.length());
sb.append(ALLOWED_RANDOM_CHARS.charAt(index));
int index = random.nextInt(allowedCharacters.length());
sb.append(allowedCharacters.charAt(index));
}
return sb.toString();
}
......
<?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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>LanBortalWeb</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<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-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</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>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>
</servlet-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-role>
<role-name>SUPERADMIN</role-name>
</security-role>
<security-role>
<role-name>USER_BASE</role-name>
</security-role>
<security-role>
<role-name>ADMIN_BASE</role-name>
</security-role>
<security-role>
<role-name>ANONYMOUS</role-name>
</security-role>
<security-role>
<role-name>ORGANIZATION_ROOT</role-name>
</security-role>
<security-constraint>
<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>
</security-constraint>
<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>
</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>
<error-page>
<error-code>401</error-code>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<error-page>
<exception-type>fi.insomnia.bortal.exceptions.PermissionDeniedException</exception-type>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<error-page>
<exception-type>import javax.servlet.ServletException</exception-type>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<persistence-unit-ref>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
</persistence-unit-ref>
<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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>LanBortalWeb</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<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-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</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>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>
</servlet-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-role>
<role-name>SUPERADMIN</role-name>
</security-role>
<security-role>
<role-name>USER_BASE</role-name>
</security-role>
<security-role>
<role-name>ADMIN_BASE</role-name>
</security-role>
<security-role>
<role-name>ANONYMOUS</role-name>
</security-role>
<security-role>
<role-name>ORGANIZATION_ROOT</role-name>
</security-role>
<security-constraint>
<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>
</security-constraint>
<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>
</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>
<error-page>
<error-code>401</error-code>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<error-page>
<exception-type>fi.insomnia.bortal.exceptions.PermissionDeniedException</exception-type>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<error-page>
<exception-type>import javax.servlet.ServletException</exception-type>
<location>/permissionDeniedRedirect.jsp</location>
</error-page>
<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>
</web-app>
\ 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:users="http://java.sun.com/jsf/composite/tools/user" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:account="http://java.sun.com/jsf/composite/tools/account" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.account.edit" />
<ui:define name="content">
<tools:canWrite target="ACCOUNT_MANAGEMENT">
<h:form id="placeEdit">
<h:inputHidden value="#{accountView.account.id.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['accountevent.total']}:" />
<h:outputText value="#{accountView.account.total}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
<h:outputLabel value="#{i18n['accountevent.quantity']}:" />
<h:inputText value="#{accountView.account.quantity}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:inputText>
<h:outputLabel value="#{i18n['accountEvent.unitPrice']}:" />
<h:inputText value="#{accountView.account.unitPrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:inputText>
<h:outputLabel value="#{i18n['accountevent.eventTime']}:" />
<h:inputText value="#{accountView.account.eventTime.time}">
<f:convertDateTime type="both" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['accountevent.delivered']}:" />
<h:inputText value="#{accountView.account.delivered.time}">
<f:convertDateTime type="both" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['accountevent.seller']}:" />
<h:outputText value="#{accountView.account.seller.wholeName}">
</h:outputText>
</h:panelGrid>
<h:commandButton rendered="#{sessionHandler.canWrite('ACCOUNT_MANAGEMENT')}" id="commitbtn"
action="#{accountView.merge()}" value="#{i18n['accountevent.commit']}" />
<br />
<h:commandButton rendered="#{sessionHandler.canWrite('ACCOUNT_MANAGEMENT')}" id="deletebtn"
action="#{accountView.delete()}" value="#{i18n['accountevent.delete']}" />
</h:form>
<h:dataTable border="0" id="discountlist" value="#{accountView.account.discountInstances}" var="discount">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.percentage']}" />
</f:facet>
<h:outputText value="#{discount.discount.percentage}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.code']}" />
</f:facet>
<h:outputText value="#{discount.discount.code}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.details']}" />
</f:facet>
<h:outputText value="#{discount.discount.details}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.shortdesc']}" />
</f:facet>
<h:outputText value="#{discount.discount.shortdesc}" />
</h:column>
</h:dataTable>
</tools:canWrite>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -28,9 +28,11 @@
<f:convertDateTime />
</h:inputText>
<h:outputLabel value="#{i18n['event.defaultRole']}:" />
<h:selectOneMenu converter="#{eventorgView.roleconverter}" value="#{eventorgView.event.defaultRole}" >
<f:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.eventsRolelist}" />
</h:selectOneMenu>
<h:commandButton id="commitbtn" action="#{eventorgView.saveEvent()}" value="#{i18n['event.save']}" />
</h:panelGrid>
</h:form>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<!-- todo: remember to remove this :) -->
<h:commandButton value="generate the data" action="#{TestDataView.generateData}" />
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<!-- todo: remember to remove this :) -->
<h:commandButton value="generate the data" action="#{TestDataView.generateData}" />
<br />
<br />
<h:commandButton value="print places debug info" action="#{TestDataView.printPlacesInfo}" />
<br />
<h:commandButton value="Generate map tests" action="#{TestDataView.generateMapTests}" />
<br />
<h:commandButton value="Gen Test map" action="#{TestDataView.generateTestMap}" />
<br />
<h:commandButton value="Context Test" action="#{TestDataView.contextTest}" />
<br />
<h:commandButton value="Role Test" action="#{TestDataView.roletest}" />
<br />
</h:form>
</h:body>
<br />
<br />
<h:commandButton value="print places debug info" action="#{TestDataView.printPlacesInfo}" />
<br />
<h:commandButton value="Generate map tests" action="#{TestDataView.generateMapTests}" />
<br />
<h:commandButton value="Gen Test map" action="#{TestDataView.generateTestMap}" />
<br />
<h:commandButton value="Context Test" action="#{TestDataView.contextTest}" />
<br />
<h:commandButton value="Role Test" action="#{TestDataView.roletest}" />
<br />
<h:commandButton value="Multipart mailtest" action="#{TestDataView.multiparttest}" />
<br />
<h:commandButton value="Check Gms" action="#{placeView.checkMemberships()}" />
<br />
<h:commandButton value="Check all cards" action="#{TestDataView.checkCards()}" />
<br />
</h:form>
</h:body>
</html>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<h:body>
<ui:composition rendered="#{sessionHandler.loggedIn}" template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:param name="rendered" value="true" />
<ui:param name="rendered" value="true" />
<ui:define name="sidebarcontent">
<tools:canRead target="ROLE_MANAGEMENT" >
#{i18n['sidebar.roles']}
<ul>
<li><h:link outcome="/role/create" value="#{i18n['sidebar.role.create']}"/></li>
<li><h:link outcome="/role/list" value="#{i18n['sidebar.role.list']}"/></li>
</ul>
</tools:canRead>
<tools:canRead target="BILL" >
#{i18n['sidebar.bills']}
<ul>
<li><h:link outcome="/bill/listAll" value="#{i18n['sidebar.bill.listAll']}"/></li>
<li><h:link outcome="/bill/billSummary" value="#{i18n['sidebar.bill.summary']}"/></li>
</ul>
</tools:canRead>
<tools:canRead target="USER_MANAGEMENT">
#{i18n['sidebar.users']}
<ul>
<li><h:link outcome="/user/create" value="#{i18n['sidebar.user.create']}"/></li>
<li><h:link outcome="/user/list" value="#{i18n['sidebar.user.list']}"/></li>
</ul>
</tools:canRead>
<tools:canRead target="PRODUCT" >
#{i18n['sidebar.products']}
<ul>
<li><h:link outcome="/product/create" value="#{i18n['sidebar.product.create']}"/></li>
<li><h:link outcome="/product/list" value="#{i18n['sidebar.product.list']}"/></li>
</ul>
</tools:canRead>
<tools:canRead target="ROLE_MANAGEMENT">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.roles']}" />
<ul>
<li><h:link outcome="/role/create" value="#{i18n['sidebar.role.create']}" /></li>
<li><h:link outcome="/role/list" value="#{i18n['sidebar.role.list']}" /></li>
<li><h:link outcome="/user/createCardTemplate" value="#{i18n['sidebar.cardTemplate.create']}" /></li>
<li><h:link outcome="/user/listCardTemplates" value="#{i18n['sidebar.cardTemplate.list']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="BILL">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.bills']}" />
<ul>
<li><h:link outcome="/bill/listAll" value="#{i18n['sidebar.bill.listAll']}" /></li>
<li><h:link outcome="/bill/billSummary" value="#{i18n['sidebar.bill.summary']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="USER_MANAGEMENT">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.users']}" />
<ul>
<li><h:link outcome="/user/create" value="#{i18n['sidebar.user.create']}" /></li>
<li><h:link outcome="/user/list" value="#{i18n['sidebar.user.list']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="PRODUCT">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.products']}" />
<ul>
<li><h:link outcome="/product/create" value="#{i18n['sidebar.product.create']}" /></li>
<li><h:link outcome="/product/list" value="#{i18n['sidebar.product.list']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="MAP">
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.maps']}" />
<ul>
<li><h:link outcome="/map/list" value="#{i18n['sidebar.map.list']}" /></li>
</ul>
</li>
</tools:canRead>
<tools:canRead target="MAP" >
#{i18n['sidebar.maps']}
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.other']}" />
<ul>
<li><h:link outcome="/map/list" value="#{i18n['sidebar.map.list']}"/></li>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}" /></li>
</ul>
</tools:canRead>
#{i18n['sidebar.other']}
<ul>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}"/></li>
</li>
</ul>
</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:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.edit" />
<ui:define name="content">
<h1>#{i18n['editplace.header']}</h1>
<h1>edit:</h1>
<h:form id="placeEdit">
<h:inputHidden value="#{placeView.place.id.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['place.name']}:" />
<h:inputText value="#{placeView.place.name}" />
<h:outputLabel value="#{i18n['place.mapX']}:" />
<h:inputText value="#{placeView.place.mapX}" />
<h:outputLabel value="#{i18n['place.mapY']}:" />
<h:inputText value="#{placeView.place.mapY}" />
<h:outputLabel value="#{i18n['place.width']}:" />
<h:inputText value="#{placeView.place.width}" />
<h:outputLabel value="#{i18n['place.height']}:" />
<h:inputText value="#{placeView.place.height}" />
<h:outputLabel value="#{i18n['place.releasetime']}:" />
<h:outputText value="#{placeView.place.releaseTime.time}">
<f:convertDateTime pattern="yyyy.MM.dd HH:mm" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
<h:outputLabel value="#{i18n['place.code']}:" />
<h:inputText value="#{placeView.place.code}" />
<h:outputLabel value="#{i18n['place.product']}:" />
<h:outputText value="#{placeView.place.product.name}" />
<h:outputLabel value="#{i18n['place.description']}:" />
<h:inputTextarea value="#{placeView.place.description}" />
</h:panelGrid>
<h:commandButton rendered="#{placeView.place.isTaken() and (empty placeView.place.group)}"
action="#{placeView.releasePlace()}" value="#{i18n['place.release']}" />
<h:commandButton rendered="#{placeView.place.isTaken() and (!empty placeView.place.group)}"
action="#{placeView.removePlaceFromGroup()}" value="#{i18n['place.groupremove']}"
onclick="return confirm('#{i18n['place.groupremove.confirm']}')" />
<h:commandButton id="commitbtn" action="#{placeView.save()}" value="#{i18n['place.commit']}" />
</h:form>
#{placeView.initGroupsPlacelist()}
<h:form rendered="#{!empty placeView.place.group and placeView.place.group.places.size() gt 0}">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placegroup.name']}:" />
<h:inputText value="#{placeView.place.group.name}" />
<h:outputLabel value="#{i18n['placegroup.created']}:" />
<h:inputText value="#{placeView.place.group.created.time}">
<f:convertDateTime pattern="yyyy.MM.dd HH:mm" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['placegroup.edited']}:" />
<h:inputText value="#{placeView.place.group.edited.time}">
<f:convertDateTime pattern="yyyy.MM.dd HH:mm" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['placegroup.details']}:" />
<h:inputTextarea value="#{placeView.place.group.details}" />
</h:panelGrid>
</h:form>
<h:form rendered="#{!empty placeView.place.group and placeView.place.group.places.size() gt 0}">
<h:dataTable border="0" id="placelist" value="#{placeView.placesGroupPlaces}" var="place">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.name']}" />
</f:facet>
<h:outputText value="#{place.name}" />
</h:column>
<h:column>
<h:commandButton action="#{placeView.editPlacegroupPlace()}" value="#{i18n['place.edit']}" />
</h:column>
</h:dataTable>
</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:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.edit" />
<ui:define name="content">
<h1>#{i18n['editplacegroup.header']}</h1>
<h:form id="placegroupform">
<h:inputHidden value="#{placeGroupView.group.id.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placegroup.name']}:" />
<h:inputText value="#{placeGroupView.group.name}" />
<h:outputLabel value="#{i18n['placegroup.created']}:" />
<h:inputText value="#{placeGroupView.group.created.time}">
<f:convertDateTime pattern="yyyy.MM.dd HH:mm" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['placegroup.edited']}:" />
<h:inputText value="#{placeGroupView.group.edited.time}">
<f:convertDateTime pattern="yyyy.MM.dd HH:mm" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:outputLabel value="#{i18n['placegroup.details']}:" />
<h:inputTextarea value="#{placeGroupView.group.details}" />
<h:outputLabel value="#{i18n['placegroup.creator']}:" />
<h:inputTextarea value="#{placeGroupView.group.creator.wholeName}" />
</h:panelGrid>
</h:form>
<h:panelGrid columns="2" columnClasses="placegroupPadding,">
<h:panelGroup>
<h2>#{i18n['placegroup.places']}</h2>
#{placeGroupView.initPlacegroupsPlacelist()}
<h:form id="placelist">
<h:dataTable border="0" id="placelist" value="#{placeGroupView.placelist}" var="place">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['place.name']}" />
</f:facet>
<h:outputText value="#{place.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['place.membership']}" />
</f:facet>
<h:outputText rendered="#{empty place.placeReserver.user}" value="#{place.placeReserver.inviteToken}" />
<h:outputText rendered="#{!empty place.placeReserver.user}"
value="#{place.placeReserver.user.wholeName} (#{place.placeReserver.user.nick})" />
</h:column>
<h:column>
<h:commandButton action="#{placeGroupView.editPlace()}" value="#{i18n['place.edit']}" />
</h:column>
</h:dataTable>
</h:form>
</h:panelGroup>
<h:panelGroup rendered="#{!empty placeGroupView.place}">
<h2>#{i18n['placeGroupView.editplace']}</h2>
<h:form id="placeEdit">
<h:inputHidden value="#{placeGroupView.place.id.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['place.name']}:" />
<h:inputText value="#{placeGroupView.place.name}" />
<h:outputLabel value="#{i18n['place.mapX']}:" />
<h:inputText value="#{placeGroupView.place.mapX}" />
<h:outputLabel value="#{i18n['place.mapY']}:" />
<h:inputText value="#{placeGroupView.place.mapY}" />
<h:outputLabel value="#{i18n['place.width']}:" />
<h:inputText value="#{placeGroupView.place.width}" />
<h:outputLabel value="#{i18n['place.height']}:" />
<h:inputText value="#{placeGroupView.place.height}" />
<h:outputLabel value="#{i18n['place.releasetime']}:" />
<h:outputText value="#{placeGroupView.place.releaseTime.time}">
<f:convertDateTime pattern="yyyy.MM.dd HH:mm" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
<h:outputLabel value="#{i18n['place.code']}:" />
<h:inputText value="#{placeGroupView.place.code}" />
<h:outputLabel value="#{i18n['place.product']}:" />
<h:outputText value="#{placeGroupView.place.product.name}" />
<h:outputLabel value="#{i18n['place.description']}:" />
<h:inputTextarea value="#{placeGroupView.place.description}" />
</h:panelGrid>
<h:commandButton rendered="#{placeGroupView.place.isTaken() and (empty placeGroupView.place.group)}"
action="#{placeGroupView.releasePlace()}" value="#{i18n['place.release']}" />
<h:commandButton rendered="#{placeGroupView.place.isTaken() and (!empty placeGroupView.place.group)}"
action="#{placeGroupView.removePlaceFromGroup()}" value="#{i18n['place.groupremove']}"
onclick="return confirm('#{i18n['place.groupremove.confirm']}')" />
<h:commandButton id="commitbtn" action="#{placeGroupView.savePlace()}" value="#{i18n['place.commit']}" />
</h:form>
</h:panelGroup>
</h:panelGrid>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -9,41 +9,47 @@
<ui:param name="thispage" value="page.place.mygroups" />
<ui:define name="content">
#{placeGroupView.editSelf()}
<h1>#{i18n['placegroupview.header']}</h1>
<p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{!(placeGroupView.groupMemberships.rowCount gt 0)}"
value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{placeGroupView.groupMemberships.rowCount gt 0}" id="placelistform">
<p><a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a></p>
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{member.id.id}" />
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.reservationName']}" />
</f:facet>
<h:outputText value="#{member.placeReservation.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.token']}" />
</f:facet>
<h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" />
<h:outputText rendered="#{!empty member.user}"
value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.groupCreator']}" />
</f:facet>
<h:outputText
value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" />
</h:column>
<h:column>
<h:commandButton rendered="#{placeGroupView.canModify(member) and !empty member.user}"
action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}" />
</h:column>
</h:dataTable>
</h:form>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="product" />
</f:facet>
<h:outputText value="#{member.placeReservation.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="token" />
</f:facet>
<h:outputText value="#{member.inviteToken}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="user" />
</f:facet>
<h:outputText value="#{member.user.login}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="creator" />
</f:facet>
<h:outputText value="#{member.placeGroup.creator.login}" />
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
<!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"
......
......@@ -38,17 +38,15 @@
text-decoration: underline;
}
.placeSelectInfotable tr td
{
padding-left: 20px;
.placeSelectInfotable tr td {
padding-left: 20px;
}
.rightalign
{
text-align: right;
.rightalign {
text-align: right;
}
.placeSelectInfotable tr
{
.placeSelectInfotable tr {
vertical-align: top;
}
......@@ -112,18 +110,18 @@ body {
#sidebar a:link {
color: #023952;
text-decoration: none;
}
}
#sidebar a:active {
color: #023952;
text-decoration: none;
}
}
#sidebar a:visited {
color: #023952;
text-decoration: none;
}
}
#sidebar a:hover {
color: #023952;
text-decoration: underline;
......@@ -142,7 +140,6 @@ body {
margin-right: 3px;
}
.link {
background-image: url('img/link2.gif');
width: 117px;
......@@ -178,6 +175,25 @@ body {
margin-left: auto;
margin-right: auto;
}
h1 {
font-size: 20px;
font-size: 20px;
}
#sidebar ul {
padding-left: 10px;
list-style-type: none;
}
#sidebar ul li ul {
list-style-type: circle;
padding-left: 15px;
}
#sidebar .sidebartitle {
font-weight: bold;
}
.placegroupPadding {
padding-right: 50px;
}
\ No newline at end of file
......@@ -75,6 +75,7 @@
<h:outputText class="" value="#{mapView.clickedplace.product.price}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
<h:commandButton rendered="#{sessionHandler.canWrite('MAP')}" value="#{i18n['place.edit']}" action="#{placeView.editPlace(mapView.clickedplace)}" />
</h:panelGrid>
</h:panelGrid>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:role="http://java.sun.com/jsf/composite/tools/role">
<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:role="http://java.sun.com/jsf/composite/tools/role">
<composite:interface>
......@@ -9,20 +12,17 @@
<composite:implementation>
<p>
<h:form id="roleform">
<h:inputHidden id="id" value="roleView.role.id.id" />
<p><h:form id="roleform">
<h:inputHidden id="id" value="roleView.role.id.id" />
<f:facet name="errorMessage">
<h:outputText value="#{i18n['nasty.user']}" />
</f:facet>
<ui:include src="form.xhtml" />
<h:commandButton id="saverole" value="#{i18n['save']}" action="#{roleView.save}" />
</h:form>
</p>
<p>
<h:form>
</h:form></p>
<p><h:form>
<h:dataTable border="1" id="rights" value="#{roleView.roleRights}" var="rr">
<h:column>
<f:facet name="header">
......@@ -58,8 +58,7 @@
<h:commandButton id="save" value="#{i18n['role.edit.save']}" action="#{roleView.editRoleRight}" />
</h:column>
</h:dataTable>
</h:form>
</p>
</h:form></p>
</composite:implementation>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<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">
<ui:composition>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['role.name']}" />
<h:inputText value="#{roleView.role.name}" />
<ui:composition>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['role.name']}" />
<h:inputText value="#{roleView.role.name}" />
<h:outputText value="#{i18n['role.parents']}" />
<h:selectManyCheckbox converter="#{sessionHandler.roleConverter}" layout="pageDirection" id ="roleparents" value="#{roleView.role.parents}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleView.possibleParents}" />
</h:selectManyCheckbox>
</h:panelGrid>
</ui:composition>
<h:outputText value="#{i18n['role.parents']}" />
<h:selectManyCheckbox converter="#{sessionHandler.roleConverter}" layout="pageDirection" id="roleparents"
value="#{roleView.role.parents}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleView.possibleParents}" />
</h:selectManyCheckbox>
<h:outputLabel value="#{i18n['role.cardtemplate']}" />
<h:selectOneMenu converter="#{cardTemplateConverter}" value="#{roleView.role.cardTemplate}">
<f:selectItems var="role" itemLabel="#{role.name}" value="#{cardView.templatesWithNull}" />
</h:selectOneMenu>
</h:panelGrid>
</ui:composition>
</html>
......@@ -14,7 +14,7 @@
<ui:param name="thispage" value="page.role.create" />
<ui:define name="content">
<tools:fatalPermission target="ROLE_MANAGEMENT" permission="WRITE" />
#{roleView.initCreate()}
<role:create />
</ui:define>
</ui:composition>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/insomnia1/template.xhtml">
<ui:param name="thispage" value="page.permissionDenied" />
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="reader" value="#{rfidView.reader}" />
<f:viewParam name="tag" value="#{rfdiView.tag}" />
<f:viewParam name="hash" value="#{rfdiView.hash}" />
</f:metadata>
</ui:define>
<ui:define name="content">
#{rfidView.readTag()}
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -13,9 +13,9 @@
<ui:param name="thispage" value="page.account.list" />
<ui:define name="content">
#{userView.editSelf()}
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance"/> <h:outputText id="accountbalance" value="#{userView.user.accountBalance}" />
<account:list accountview="#{userView}"/>
#{accountView.editSelf()}
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance"/> <h:outputText id="accountbalance" value="#{accountView.user.accountBalance}" />
<account:list accountview="#{accountView}"/>
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<h:form id="cardTemplates">
#{cardView.initCard()}
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['cardTemplate.name']}:" />
<h:inputText value="#{cardView.card.name}" />
<h:outputLabel value="#{i18n['cardTemplate.power']}:" />
<h:inputText value="#{cardView.card.power}" size="4" />
</h:panelGrid>
<h:commandButton action="#{cardView.createTemplate()}" value="i18n['cardTemplate.create']" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:account="http://java.sun.com/jsf/composite/tools/account" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<users:edit commitaction="#{userView.saveUser()}"
commitvalue="#{i18n['user.save']}" />
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" />
<tools:canRead target="SHOP">
<h2>#{i18n['user.accountEventHeader']}</h2>
<h:outputText rendered="#{userView.user.accountEvents.size() le 0}" value="#{i18n['user.noAccountevents']}" />
<h:form rendered="#{userView.user.accountEvents.size() gt 0}" id="accountform">
<h:dataTable border="0" id="accountevent"
value="#{userView.user.accountEvents}" var="event">
#{accountView.setUser(userView.user)}
<account:list rendered="#{userView.user.accountEvents.size() gt 0}" accountview="#{accountView}" />
</tools:canRead>
<tools:canWrite target="MAP">
<h1>#{i18n['user.placegroups']}</h1>
<h:form id="placegrouplist">
<h:dataTable border="1" id="placegroup" value="#{userView.placegroups}" var="placegroup">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroup.name']}" />
</f:facet>
<h:outputText value="#{placegroup.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountevent.productname']}" />
<h:outputText value="#{i18n['placegroup.creator']}" />
</f:facet>
<h:outputText value="#{event.product.name}" />
<h:outputText value="#{placegroup.creator.wholeName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountevent.quantity']}" />
<h:outputText value="#{i18n['placegroup.created']}" />
</f:facet>
<h:outputText value="#{event.quantity}">
<f:convertNumber />
<h:outputText value="#{placegroup.created.time}">
<f:convertDateTime />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountevent.unitPrice']}" />
<h:outputText value="#{i18n['placegroup.edited']}" />
</f:facet>
<h:outputText value="#{event.unitPrice}">
<f:convertNumber />
<h:outputText value="#{placegroup.edited.time}">
<f:convertDateTime />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountevent.total']}" />
<h:outputText value="#{i18n['placegroup.details']}" />
</f:facet>
<h:outputText value="#{event.total}">
<f:convertNumber />
<h:outputText value="#{placegroup.details}">
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroup.places']}" />
</f:facet>
<h:dataTable border="0" id="placegroup" value="#{placegroup.places}" var="place">
<h:column>
<h:outputText value="#{place.name}" />
</h:column>
</h:dataTable>
</h:column>
<h:column>
<h:commandButton id="saverole" action="#{userView.editGroup(placegroup)}" value="#{i18n['placegroup.edit']}" />
</h:column>
</h:dataTable>
</h:form>
</tools:canRead>
</tools:canWrite>
</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/tools/user"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<h:form id="cardTemplates">
#{cardView.initCardTemplates()}
<h:dataTable value="#{cardView.cardTemplates}" var="card">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['cardTemplate.name']}" />
</f:facet>
<h:outputText value="#{card.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['cardTemplate.power']}" />
</f:facet>
<h:outputText value="#{card.power}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['cardTemplate.roles']}" />
</f:facet>
<h:dataTable value="#{card.roles}" var="cardrole" border="0">
<h:column>
<h:outputText value="#{cardrole.name}" />
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -54,7 +54,6 @@ public class HostnameFilter implements Filter {
Subject subj = Subject.getSubject(AccessController.getContext());
int beginindex = 7; // Let's skip http://
int slashindex = url.indexOf("/", beginindex);
// Find the first / from URL after http://
int colonindex = url.indexOf(":", beginindex);
......@@ -69,7 +68,7 @@ public class HostnameFilter implements Filter {
httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME, hostname);
BortalLocalContextHolder.setHostname( hostname);
BortalLocalContextHolder.setHostname(hostname);
}
// pass the request along the filter chain
......@@ -80,8 +79,7 @@ public class HostnameFilter implements Filter {
Throwable cause = t.getCause();
while (cause != null) {
cause = cause.getCause();
if(cause instanceof PermissionDeniedException)
{
if (cause instanceof PermissionDeniedException) {
if (response instanceof HttpServletResponse) {
HttpServletResponse httpresp = (HttpServletResponse) response;
......@@ -89,7 +87,7 @@ public class HostnameFilter implements Filter {
httpresp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
httpresp.getWriter().println("Permission denied!!");
logger.debug("Got PermissionDenied wrapped in stuff. Throwing PermissionDenied without stuff.!");
throw (PermissionDeniedException)cause;
throw (PermissionDeniedException) cause;
}
}
......
......@@ -5,6 +5,9 @@
*/
package fi.insomnia.bortal.handler;
import java.util.Locale;
import java.util.TimeZone;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
......@@ -43,6 +46,10 @@ public class SessionHandler {
public SessionHandler() {
}
public TimeZone getTimezone() {
return TimeZone.getTimeZone("Europe/Helsinki");
}
public String getLocale() {
// TODO: Locale selection code missing
// return "en_ST_v7";
......
package fi.insomnia.bortal.servlet;
//
//import org.granite.config.servlet3.FlexFilter;
//import org.granite.gravity.config.AbstractMessagingDestination;
//import org.granite.gravity.config.servlet3.MessagingDestination;
//import org.granite.messaging.service.annotations.RemoteDestination;
//import org.granite.tide.annotations.TideEnabled;
//import org.granite.tide.ejb.EjbIdentity;
//import org.granite.tide.ejb.EjbServiceFactory;
//
//@FlexFilter(
// tide = true,
// type = "ejb",
// factoryClass = EjbServiceFactory.class,
// ejbLookup = "java:global/LanBortal/LanBortalBeans/{capitalized.component.name}Bean!fi.insomnia.bortal.beans.flash.{capitalized.component.name}BeanLocal",
// entityManagerFactoryJndiName = "java:comp/env/BortalEMF",
// tideInterfaces = { EjbIdentity.class },
// tideAnnotations={TideEnabled.class,RemoteDestination.class}
// )
//public class GraniteConfig {
// @MessagingDestination(noLocal = true, sessionSelector = true)
// AbstractMessagingDestination helloTopic;
//}
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PlaceGroupBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.GroupMembership;
/**
* Servlet implementation class PlaceGroupPdf
*/
public class PlaceGroupPdf extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
private PlaceGroupBeanLocal pgbean;
@EJB
private UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupPdf.class);
/**
* @see HttpServlet#HttpServlet()
*/
public PlaceGroupPdf() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
output(request, response);
}
private void output(HttpServletRequest request, HttpServletResponse response) {
try {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "filename=Reservations.pdf");
List<GroupMembership> members = pgbean.getMembershipsAndCreations(userbean.getCurrentUser());
ServletOutputStream ostream = response.getOutputStream();
pgbean.getGroupMembershipPdf(members, ostream);
// ByteArrayOutputStream billstream = new ByteArrayOutputStream();
// billentity.getPdfBillStream(bill, billstream);
// response.setContentLength(billstream.size());
ostream.close();
} catch (IOException e) {
logger.debug("Error writing pdf", e);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
output(request, response);
}
}
......@@ -27,6 +27,7 @@ public class PrintBill extends HttpServlet {
@EJB
private EventBeanLocal eventbean;
/**
* @see HttpServlet#HttpServlet()
*/
......@@ -45,7 +46,7 @@ public class PrintBill extends HttpServlet {
private void ouput(HttpServletRequest request, HttpServletResponse response) throws IOException {
Integer billid = getIntegerParameter(request, BILL_ID);
Integer billid = ServletUtils.getIntegerParameter(request, BILL_ID);
Bill bill = billentity.findById(billid);
if (bill == null) {
return;
......@@ -78,13 +79,5 @@ public class PrintBill extends HttpServlet {
* @param parameter
* @return
*/
private static Integer getIntegerParameter(HttpServletRequest request, String parameter) {
try {
String valueString = request.getParameter(parameter);
Integer value = Integer.parseInt(valueString);
return value;
} catch (NumberFormatException nfe) {
}
return null;
}
}
package fi.insomnia.bortal.servlet;
import javax.servlet.http.HttpServletRequest;
public class ServletUtils {
public static Integer getIntegerParameter(HttpServletRequest request, String parameter) {
try {
String valueString = request.getParameter(parameter);
Integer value = Integer.parseInt(valueString);
return value;
} catch (NumberFormatException nfe) {
}
return null;
}
}
......@@ -91,15 +91,12 @@ public class UploadServlet extends HttpServlet {
String type = request.getParameter("type");
if (type.equals("userimage")) {
userbean.uploadImage(destId, contenttype, imagedata, filename, description);
}
else if(type.equals("mapimage"))
{
} else if (type.equals("mapimage")) {
eventmapbean.sendImage(destId, imagedata);
}
else{
} else {
retmsg = "FATAL: servlet type not defined!!";
}
} catch (FileUploadException e) {
logger.warn("Error uploading image", e);
retmsg = "Tiedoston tallennuksessa tapahtui virhe!";
......
......@@ -69,9 +69,11 @@ public class UserImageServlet extends HttpServlet {
UserImage image = userbean.findUserImage(imageid);
if (image == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.getWriter().append("Not Found");
} else {
response.setContentType(image.getMimeType());
response.getOutputStream().write(image.getImageData());
}
response.setContentType(image.getMimeType());
response.getOutputStream().write(image.getImageData());
}
}
......@@ -5,15 +5,66 @@ import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import fi.insomnia.bortal.beans.AccountEventBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.User;
@ManagedBean(name = "accountView")
@SessionScoped
public class AccountView {
// private AccountEventBeanLocal acbean;
@EJB
private UserBeanLocal userbean;
@EJB
private AccountEventBeanLocal accobean;
private User user;
private ListDataModel<AccountEvent> accountlist;
private AccountEvent account;
public void editSelf() {
userbean.fatalNotLoggedIn();
setUser(userbean.getCurrentUser());
}
public ListDataModel<AccountEvent> getAccountEvents() {
if (!userbean.isCurrentUser(user)) {
userbean.fatalPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.READ, "Tried to read read account events for user: ", user);
}
accountlist = new ListDataModel<AccountEvent>(getUser().getAccountEvents());
return accountlist;
}
public String editAccount() {
setAccount(accountlist.getRowData());
return "/account/edit";
}
public void setAccount(AccountEvent account) {
this.account = account;
}
public AccountEvent getAccount() {
return account;
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public void merge() {
account = accobean.merge(account);
}
public void delete() {
accobean.delete(account);
}
}
......@@ -17,6 +17,7 @@ import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n;
@ManagedBean(name = "billManageView")
......@@ -74,10 +75,11 @@ public class BillManageView extends GenericView {
bill = bills.getRowData();
billbean.markPaid(bill, Calendar.getInstance());
if (!utilbean.sendMail(bill.getUser(), I18n.get("bill.billMarkedPaidMail.subject"), I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString()))) {
addFaceMessage("email.errorSending");
}
MailMessage msg = new MailMessage();
msg.setSubject(I18n.get("bill.billMarkedPaidMail.subject"));
msg.setMessage(I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString()));
msg.setTo(bill.getUser());
utilbean.sendMail(msg);
return "";
}
......
package fi.insomnia.bortal.view;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.utilities.I18n;
@ManagedBean(name = "cardView")
@SessionScoped
public class CardView {
private ListDataModel<CardTemplate> cardTemplates;
private CardTemplate card;
@EJB
private CardTemplateBeanLocal cfbean;
@EJB
private EventBeanLocal eventBean;
public void initCardTemplates() {
cardTemplates = new ListDataModel<CardTemplate>(cfbean.findAll());
}
public ListDataModel<CardTemplate> getCardTemplates() {
return cardTemplates;
}
public void initCard() {
card = new CardTemplate(eventBean.getCurrentEvent());
}
public void setCard(CardTemplate card) {
this.card = card;
}
public CardTemplate getCard() {
return card;
}
public String createTemplate() {
cfbean.create(card);
return "/user/listCardTemplates";
}
public List<CardTemplate> getTemplatesWithNull() {
ArrayList<CardTemplate> retlist = new ArrayList<CardTemplate>();
CardTemplate dummytempl = new CardTemplate();
dummytempl.setName(I18n.get("cardTemplate.emptyCardTemplate"));
retlist.add(dummytempl);
retlist.addAll(cfbean.findAll());
return retlist;
}
}
......@@ -8,14 +8,19 @@ import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.PlaceGroupBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
@ManagedBean(name = "placeGroupView")
@SessionScoped
public class PlaceGroupView extends GenericView{
public class PlaceGroupView extends GenericView {
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupView.class);
private User user;
......@@ -25,13 +30,24 @@ public class PlaceGroupView extends GenericView{
private PlaceGroupBeanLocal placegroupBean;
private ListDataModel<GroupMembership> memberlist;
@EJB
private PlaceBeanLocal placebean;
private PlaceGroup group;
private String token;
private ListDataModel<Place> placelist;
private Place place;
public void editSelf() {
userBean.fatalNotLoggedIn();
setUser(userBean.getCurrentUser());
}
public void initPlacegroupsPlacelist() {
setPlacelist(new ListDataModel<Place>(group.getPlaces()));
}
public void setUser(User user) {
this.user = user;
}
......@@ -46,7 +62,7 @@ public class PlaceGroupView extends GenericView{
public ListDataModel<GroupMembership> getGroupMemberships() {
userBean.fatalNotLoggedIn();
memberlist = new ListDataModel<GroupMembership>(placegroupBean.getMemberships(user));
memberlist = new ListDataModel<GroupMembership>(placegroupBean.getMembershipsAndCreations(user));
return memberlist;
}
......@@ -69,4 +85,64 @@ public class PlaceGroupView extends GenericView{
public String getToken() {
return token;
}
public boolean canModify(GroupMembership row) {
boolean ret = false;
if (row != null && (
userBean.getCurrentUser().equals(row.getPlaceGroup().getCreator()) ||
userBean.hasPermission(Permission.MAP, RolePermission.WRITE))) {
ret = true;
}
return ret;
}
public String releasePlace() {
GroupMembership row = memberlist.getRowData();
if (row != null && (userBean.getCurrentUser().equals(row.getPlaceGroup().getCreator()) ||
userBean.hasPermission(Permission.MAP, RolePermission.WRITE))) {
placegroupBean.releaseAndGenerateToken(row);
this.addFaceMessage("placegroupview.placeReleased", row.getPlaceReservation().getName());
} else {
this.addFaceMessage("placegroupview.placeReleaseFailed", row.getPlaceReservation().getName());
}
return null;
}
public String removePlaceFromGroup() {
userBean.fatalPermission(Permission.MAP, RolePermission.WRITE, "No right to release place ", place);
place.getGroup().getPlaces().remove(place);
place.setGroup(null);
place = placebean.mergeChanges(place);
return null;
}
public String editPlace() {
place = placelist.getRowData();
return null;
}
public void setGroup(PlaceGroup group) {
this.group = group;
}
public PlaceGroup getGroup() {
return group;
}
public void setPlacelist(ListDataModel<Place> placelist) {
this.placelist = placelist;
}
public ListDataModel<Place> getPlacelist() {
return placelist;
}
public void setPlace(Place place) {
this.place = place;
}
public Place getPlace() {
return place;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!