Commit aedf7b75 by Tuomas Riihimäki

Yhden illan koodit

1 parent ea0bd736
Showing with 595 additions and 163 deletions
No preview for this file type
......@@ -6,6 +6,11 @@ import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal;
import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal.Right;
......@@ -29,6 +34,8 @@ import fi.insomnia.bortal.model.User;
@Stateless
public class BillBean implements BillBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(BillBean.class);
@EJB
private BillFacade billFacade;
......@@ -46,7 +53,8 @@ public class BillBean implements BillBeanLocal {
private EventFacade eventfacade;
@EJB
private BillLineFacade billLineFacade;
@PersistenceContext
private EntityManager em;
/**
* Default constructor.
*/
......@@ -108,7 +116,9 @@ public class BillBean implements BillBeanLocal {
LanEvent event = eventbean.getCurrentEvent();
Bill ret = new Bill(event, shoppingUser);
billFacade.create(ret);
ret.setUser(shoppingUser);
em.flush();
logger.debug("Created bill with id {} and user {}", ret.getId(), ret.getUser());
return ret;
}
......@@ -123,6 +133,8 @@ public class BillBean implements BillBeanLocal {
}
BillLine line = new BillLine(bill, product.getName(), product.getUnitName(), count, product.getPrice(), product.getVat());
billLineFacade.create(line);
line.setBill(bill);
em.flush();
return line;
}
......
......@@ -8,6 +8,7 @@ import javax.persistence.PersistenceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser;
......@@ -37,6 +38,8 @@ public class EventBean implements EventBeanLocal {
private EventStatusBeanLocal eventStatusBean;
@PersistenceContext
private EntityManager em;
@EJB
private SecurityBeanLocal secubean;
@Override
public LanEvent getEventByHostname(String hostname) {
......@@ -69,7 +72,7 @@ public class EventBean implements EventBeanLocal {
if (settings == null) {
settings = new EventOrganiser();
settings.setOrganisation(DEFAULT_ORGANISATION_NAME);
User defaultUser = userBean.getAnonUser();
settings.setAdmin(defaultUser);
eventOrganiserFacade.create(settings);
......@@ -79,15 +82,28 @@ public class EventBean implements EventBeanLocal {
}
public LanEvent getCurrentEvent() {
LanEvent ret = getEventByHostname( BortalLocalContextHolder.getHostname());
LanEvent ret = getEventByHostname(BortalLocalContextHolder.getHostname());
return ret;
}
@Override
public LanEvent mergeChanges(LanEvent event) {
if(!userBean.isCurrentUser(event.getOrganiser().getAdmin()))
{
throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to merge event: " + event + " without being admin of that group");
}
return eventFacade.merge(event);
}
@Override
public void create(LanEvent event) {
if (!userBean.isCurrentUser(event.getOrganiser().getAdmin())) {
throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to create a new event for organiser " + event.getOrganiser() + " without being admin of that group");
}
eventFacade.create(event);
}
}
......@@ -4,8 +4,6 @@ import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
......
......@@ -3,7 +3,6 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.List;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
......
......@@ -15,16 +15,13 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BeanRole;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.EventChildGenericFacade;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.RoleRightFacade;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User;
/**
*
......@@ -33,7 +30,7 @@ import fi.insomnia.bortal.model.User;
@Stateless
public class RoleBean implements RoleBeanLocal {
private static final String PUBLIC_ROLE_NAME = BeanRole.ANONYMOUS.toString();
// private static final String PUBLIC_ROLE_NAME = BeanRole.ANONYMOUS.toString();
@EJB
private EventBeanLocal eventBean;
......
......@@ -4,17 +4,9 @@ import java.util.Calendar;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.EJBContext;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.slf4j.Logger;
......@@ -39,8 +31,7 @@ public class SecurityBean implements SecurityBeanLocal {
private LogEntryTypeFacade typeFacade;
@EJB
private LogEntryFacade entryFacade;
@PersistenceContext
private EntityManager manager;
@Resource
UserTransaction utx;
......@@ -78,8 +69,7 @@ public class SecurityBean implements SecurityBeanLocal {
return logMessage(type, null, description);
}
@Resource
private EJBContext context;
public LogEntry logMessage(SecurityLogType paramType, User user, String description) {
LogEntry entry = null;
......
......@@ -23,15 +23,14 @@ import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.CompoEntryFacade;
import fi.insomnia.bortal.facade.CompoFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.Compo;
import fi.insomnia.bortal.model.CompoEntry;
import fi.insomnia.bortal.model.LanEvent;
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;
......@@ -65,11 +64,7 @@ public class TestDataBean implements TestDataBeanLocal {
private BillFacade billFacade;
@EJB
private BillLineFacade billLineFacade;
@EJB
private RoleBeanLocal role;
@EJB
private UserBeanLocal userbean;
// @PersistenceUnit
// private EntityManagerFactory emf;
//
......@@ -244,20 +239,7 @@ public class TestDataBean implements TestDataBeanLocal {
return null;
}
/**
* Generate all metashit, ex. events.
*/
private User generateUser() {
User user = new User();
user.setNick("Nick");
user.setPassword("plaah");
userFacade.create(user);
return user;
}
public void generateTestPlaces(EventMap map) {
logger.info("Adding places to map {}, event {}", map);
......
package fi.insomnia.bortal.beans;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashSet;
......@@ -25,9 +24,11 @@ import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.RoleRightFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.facade.UserImageFacade;
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.utilities.BortalLocalContextHolder;
/**
......@@ -40,9 +41,6 @@ public class UserBean implements UserBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UserBean.class);
public static final String DEFAULT_USER_LOGIN = "ANONYMOUS";
@EJB
private RoleRightFacade rrfacade;
/**
* Java EE container injektoi tämän luokkamuuttujan luokan luonnin
* yhteydessä.
......@@ -55,15 +53,14 @@ public class UserBean implements UserBeanLocal {
private SessionContext context;
@EJB
private RoleBeanLocal rolebean;
@EJB
private SecurityBeanLocal secubean;
@EJB
private EventBeanLocal eventBean;
@EJB
private RoleFacade rolefacade;
@EJB
private UserImageFacade userimagefacade;
/**
* Default constructor.
......@@ -162,12 +159,13 @@ public class UserBean implements UserBeanLocal {
// target, permission, ret });
// }
if (logger.isDebugEnabled()) {
long diffMs = Calendar.getInstance().getTimeInMillis() - start.getTimeInMillis();
// logger.debug("User {} Target {}, permission {} checktime {}ms result: {}",
// new Object[] { user.getLogin(), target, permission, diffMs, ret
// });
}
// if (logger.isDebugEnabled()) {
// long diffMs = Calendar.getInstance().getTimeInMillis() -
// start.getTimeInMillis();
// logger.debug("User {} Target {}, permission {} checktime {}ms result: {}",
// new Object[] { user.getLogin(), target, permission, diffMs, ret
// });
// }
// TODO: FIX THIS!! really bad idea....
if (user.isSuperadmin()) {
......@@ -243,4 +241,36 @@ public class UserBean implements UserBeanLocal {
}
}
@Override
public UserImage uploadImage(Integer userid, String contentType, byte[] image, String filename, String description) {
fatalNotLoggedIn();
User user = getCurrentUser();
if (getCurrentUser().getId() != userid) {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "usert tried to save picture to userid " + userid + " without sufficient permissions!");
user = userFacade.find(userid);
}
UserImage userimage = new UserImage(user);
userimage.setMimeType(contentType);
userimage.setImageData(image);
userimage.setName(filename);
userimage.setDescription(description);
userimagefacade.create(userimage);
// setting uploaded image as the default.
user.setCurrentImage(userimage);
userFacade.merge(user);
return userimage;
}
@Override
public UserImage findUserImage(int id) {
UserImage ret = userimagefacade.find(id);
if (ret != null && !this.isCurrentUser(ret.getUser())) {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ, "Not enough rights to access image id: " + id + " for user " + ret.getUser());
}
return ret;
}
}
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.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User;
......@@ -16,9 +20,13 @@ import fi.insomnia.bortal.model.User;
@LocalBean
public class BillFacade extends EventChildGenericFacade<Bill> {
private static final Logger logger = LoggerFactory.getLogger(BillFacade.class);
@PersistenceContext
private EntityManager em;
@EJB
private UserFacade userfacade;
public BillFacade() {
super(Bill.class);
}
......@@ -27,12 +35,21 @@ public class BillFacade extends EventChildGenericFacade<Bill> {
return em;
}
public int getBiggestBillNumber(LanEvent e) {
@Override
public void create(Bill entity)
{
super.create(entity);
userfacade.evict(entity.getUser());
}
public Integer getBiggestBillNumber(LanEvent e) {
TypedQuery<Integer> q = getEm().createNamedQuery("Bill.findbiggestBillNumber", Integer.class);
q.setParameter("event", e);
return q.getSingleResult();
return getSingleNullableResult(q);
}
}
package fi.insomnia.bortal.facade;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
......@@ -13,10 +14,19 @@ public class BillLineFacade extends EventChildGenericFacade<BillLine> {
@PersistenceContext
private EntityManager em;
@EJB
private BillFacade billfacade;
public BillLineFacade() {
super(BillLine.class);
}
public void create(BillLine entity)
{
super.create(entity);
billfacade.evict(entity.getBill());
}
protected EntityManager getEm() {
return em;
}
......
......@@ -101,8 +101,8 @@ public abstract class EventChildGenericFacade<T extends EventChildInterface> {
}
protected T getSingleNullableResult(TypedQuery<T> q) {
T ret = null;
protected static <K> K getSingleNullableResult(TypedQuery<K> q) {
K ret = null;
try {
ret = q.getSingleResult();
} catch (NoResultException e) {
......@@ -110,4 +110,9 @@ public abstract class EventChildGenericFacade<T extends EventChildInterface> {
}
return ret;
}
public void evict(T entity) {
if (entity != null && entity.getId() != null) {
getEm().getEntityManagerFactory().getCache().evict(getEntityClass(), entity.getId());
}
}
}
......@@ -3,27 +3,19 @@ package fi.insomnia.bortal.facade;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.LockModeType;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.LanEvent;
@Stateless
@LocalBean
public class EventFacade extends GenericFacade<Integer, LanEvent> {
private static final Logger logger = LoggerFactory.getLogger(EventFacade.class);
// private static final Logger logger = LoggerFactory.getLogger(EventFacade.class);
@PersistenceContext
private EntityManager em;
@PersistenceUnit
private EntityManagerFactory emf;
public EventFacade() {
super(LanEvent.class);
......@@ -36,14 +28,14 @@ public class EventFacade extends GenericFacade<Integer, LanEvent> {
public LanEvent findByHostname(String hostname) {
TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByReferer", LanEvent.class);
q.setParameter("referer", hostname);
return this.getSingleNullableResult(q);
return getSingleNullableResult(q);
}
public LanEvent findByName(String name) {
TypedQuery<LanEvent> q = em.createNamedQuery("LanEvent.findByName", LanEvent.class);
q.setParameter("name", name);
return this.getSingleNullableResult(q);
return getSingleNullableResult(q);
}
......
package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
......@@ -9,9 +7,6 @@ import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.EventMap;
@Stateless
......@@ -39,7 +34,7 @@ public class EventMapFacade extends EventChildGenericFacade<EventMap> {
public EventMap findByName(String name) {
TypedQuery<EventMap> q = em.createNamedQuery("EventMap.findByName", EventMap.class);
q.setParameter("name", name);
return this.getSingleNullableResult(q);
return getSingleNullableResult(q);
}
}
package fi.insomnia.bortal.facade;
import fi.insomnia.bortal.enums.EventStatusEnum;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.enums.EventStatusEnum;
import fi.insomnia.bortal.model.EventStatus;
import javax.persistence.NoResultException;
import javax.persistence.Query;
@Stateless
@LocalBean
......@@ -29,7 +27,7 @@ public class EventStatusFacade extends GenericFacade<Integer, EventStatus> {
public EventStatus findEventStatus(EventStatusEnum eventStatusEnum) {
TypedQuery<EventStatus> q = em.createNamedQuery("EventStatus.findByStatusName", EventStatus.class);
q.setParameter("name", eventStatusEnum.name());
return this.getSingleNullableResult(q);
return getSingleNullableResult(q);
}
}
......@@ -12,42 +12,41 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.ModelInterface;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class GenericFacade
*/
public abstract class GenericFacade<PK,T extends ModelInterface>{
public abstract class GenericFacade<PK, T extends ModelInterface> {
private static final Logger logger = LoggerFactory.getLogger(GenericFacade.class);
private static final Logger logger =LoggerFactory.getLogger(GenericFacade.class);
private Class<T> entClass;
public GenericFacade(Class<T>entityClass)
{
public GenericFacade(Class<T> entityClass) {
this.entClass = entityClass;
}
protected Class<T> getEntityClass()
{
protected Class<T> getEntityClass() {
return entClass;
}
protected abstract EntityManager getEm();
public void create(T entity) {
getEm().persist(entity);
}
}
public void remove(T entity) {
getEm().remove(entity);
}
public T merge(T entity) {
return getEm().merge(entity);
}
public T find(PK id) {
logger.debug("GenericFacade Find class {} By pk {}", new Object[]{getEntityClass(), id});
logger.debug("GenericFacade Find class {} By pk {}", new Object[] { getEntityClass(), id });
T ret = getEm().find(getEntityClass(), id);
return ret;
}
......@@ -74,10 +73,9 @@ public abstract class GenericFacade<PK,T extends ModelInterface>{
TypedQuery<Long> q = getEm().createQuery(cq);
return q.getSingleResult();
}
protected T getSingleNullableResult(TypedQuery<T> q) {
T ret = null;
protected static <K> K getSingleNullableResult(TypedQuery<K> q) {
K ret = null;
try {
ret = q.getSingleResult();
} catch (NoResultException e) {
......@@ -85,4 +83,10 @@ public abstract class GenericFacade<PK,T extends ModelInterface>{
}
return ret;
}
public void evict(T entity) {
if (entity != null && entity.getId() != null) {
getEm().getEntityManagerFactory().getCache().evict(getEntityClass(), entity.getId());
}
}
}
......@@ -30,7 +30,7 @@ public class LogEntryTypeFacade extends GenericFacade<Integer, LogEntryType> {
TypedQuery<LogEntryType> q = em.createNamedQuery("LogEntryType.findByName", LogEntryType.class);
q.setParameter("name", type.name());
LogEntryType logEntryType = this.getSingleNullableResult(q);
LogEntryType logEntryType = getSingleNullableResult(q);
// Might not exist yet
if (logEntryType == null) {
......
package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
......@@ -35,7 +34,7 @@ public class RoleFacade extends EventChildGenericFacade<Role> {
TypedQuery<Role> q = em.createNamedQuery("Role.findByRoleName", Role.class);
q.setParameter("name", name);
q.setParameter("event", event);
return this.getSingleNullableResult(q);
return getSingleNullableResult(q);
}
public List<Role> findForUser(User user, LanEvent event) {
......
......@@ -35,7 +35,7 @@ public class RoleRightFacade extends EventChildGenericFacade<RoleRight> {
TypedQuery<RoleRight> q = this.getEm().createNamedQuery("RoleRight.findByRightAndRole", RoleRight.class);
q.setParameter("permission", permission);
q.setParameter("role", role);
return this.getSingleNullableResult(q);
return getSingleNullableResult(q);
}
public List<RoleRight> find(Collection<Role> roles, Permission permission) {
......
......@@ -29,4 +29,6 @@ public class UserFacade extends GenericFacade<Integer, User> {
return getSingleNullableResult(q);
}
}
package fi.insomnia.bortal.facade;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
......@@ -13,6 +14,8 @@ public class UserImageFacade extends GenericFacade<Integer, UserImage> {
@PersistenceContext
private EntityManager em;
@EJB
private UserFacade userfacade;
public UserImageFacade() {
super(UserImage.class);
}
......@@ -20,5 +23,12 @@ public class UserImageFacade extends GenericFacade<Integer, UserImage> {
protected EntityManager getEm() {
return em;
}
@Override
public void create(UserImage entity)
{
super.create(entity);
userfacade.evict(entity.getUser());
}
}
......@@ -13,4 +13,6 @@ public interface EventBeanLocal {
LanEvent mergeChanges(LanEvent event);
void create(LanEvent event);
}
......@@ -7,6 +7,7 @@ import javax.ejb.Local;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
@Local
......@@ -37,6 +38,10 @@ public interface UserBeanLocal {
void fatalNotLoggedIn();
UserImage uploadImage(Integer userid, String contentType, byte[] image, String filename, String description);
UserImage findUserImage(int id);
......
......@@ -4,6 +4,9 @@
*/
package fi.insomnia.bortal.enums;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author tuukka
......@@ -21,9 +24,13 @@ public enum Permission {
;
private String description;
private static final Logger logger = LoggerFactory.getLogger(Permission.class);
public static Permission getPermission(String name) {
if (name == null || name.isEmpty())
{
logger.warn("Trying to get permission for empty name {}" , name);
return null;
}
try {
return valueOf(name);
} catch (IllegalArgumentException x) {
......
......@@ -108,6 +108,7 @@ public class Bill implements EventChildInterface {
/**
* Bill may have multiple items on multiple rows.
*/
@OneToMany(mappedBy = "bill")
private List<BillLine> billLines;
......@@ -124,7 +125,6 @@ public class Bill implements EventChildInterface {
/**
* User who should pay this bill.
*/
@JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
@ManyToOne(optional = false)
private User user;
......
......@@ -15,7 +15,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
......
......@@ -19,6 +19,7 @@ import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
......@@ -111,6 +112,9 @@ public class User implements ModelInterface {
@Column(name = "phone")
private String phone;
@OneToOne()
private UserImage currentImage;
@Convert("gender")
@Column(name = "gender", nullable = false)
private Gender gender = Gender.UNDEFINED;
......@@ -137,7 +141,7 @@ public class User implements ModelInterface {
@OneToMany(mappedBy = "user")
private List<LogEntry> logEntryList;
@OneToMany(mappedBy = "user")
@OneToMany(mappedBy = "user",fetch=FetchType.LAZY)
private List<UserImage> userImageList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
......@@ -560,4 +564,12 @@ public class User implements ModelInterface {
public Gender getGender() {
return gender;
}
public void setCurrentImage(UserImage currentImage) {
this.currentImage = currentImage;
}
public UserImage getCurrentImage() {
return currentImage;
}
}
......@@ -4,6 +4,8 @@
*/
package fi.insomnia.bortal.model;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
......@@ -12,9 +14,10 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
/**
......@@ -22,12 +25,12 @@ import javax.persistence.Version;
*/
@Entity
@Table(name = "user_images")
@NamedQueries( {
@NamedQuery(name = "UserImage.findAll", query = "SELECT u FROM UserImage u"),
@NamedQuery(name = "UserImage.findByName", query = "SELECT u FROM UserImage u WHERE u.name = :name"),
@NamedQuery(name = "UserImage.findByDescription", query = "SELECT u FROM UserImage u WHERE u.description = :description"),
@NamedQuery(name = "UserImage.findByMimeType", query = "SELECT u FROM UserImage u WHERE u.mimeType = :mimeType") })
//@NamedQueries({
// @NamedQuery(name = "UserImage.findAll", query = "SELECT u FROM UserImage u"),
//
// @NamedQuery(name = "UserImage.findByName", query = "SELECT u FROM UserImage u WHERE u.name = :name"),
// @NamedQuery(name = "UserImage.findByDescription", query = "SELECT u FROM UserImage u WHERE u.description = :description"),
// @NamedQuery(name = "UserImage.findByMimeType", query = "SELECT u FROM UserImage u WHERE u.mimeType = :mimeType") })
public class UserImage implements ModelInterface {
private static final long serialVersionUID = 1L;
......@@ -37,6 +40,10 @@ public class UserImage implements ModelInterface {
@Column(name = "user_image_id", nullable = false)
private Integer id;
@Column(name="uploaded",nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Calendar uploaded = Calendar.getInstance();
@Column(name = "name")
private String name;
......@@ -54,7 +61,10 @@ public class UserImage implements ModelInterface {
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
@ManyToOne
private User user;
@OneToOne(mappedBy = "currentImage")
private User defaultImage;
@Version
@Column(nullable = false)
private int jpaVersionField = 0;
......@@ -173,4 +183,20 @@ public class UserImage implements ModelInterface {
public void setUser(User user) {
this.user = user;
}
public void setDefaultImage(User defaultImage) {
this.defaultImage = defaultImage;
}
public User getDefaultImage() {
return defaultImage;
}
public void setUploaded(Calendar uploaded) {
this.uploaded = uploaded;
}
public Calendar getUploaded() {
return uploaded;
}
}
#Fri Aug 27 04:19:39 EEST 2010
XDOCLETBUILDERACTIVE=true
XDOCLETHOME=
XDOCLETUSEGLOBAL=true
XDOCLETVERSION=1.2.1
eclipse.preferences.version=1
......@@ -26,6 +26,14 @@
<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>PlaceMap</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class>
</servlet>
......
......@@ -11,7 +11,7 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.bill.list" />
<ui:define name="content">
<bills:list />
<bills:list billview="#{billView}"/>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -26,6 +26,12 @@
<h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['eventorg.createevent']}</h2>
<h:form id="createevent" >
<h:outputLabel for="createEventName" value="#{i18n['event.name']}" />
<h:inputText id="createEventName" value="#{eventorgView.eventname}" />
<h:commandButton action="#{eventorgView.createEvent()}" value="#{i18n['eventorg.createEvent']}" />
</h:form>
<h2>#{i18n['eventorg.events']}</h2>
<h:form id="orgsEventlist">
<h:dataTable border="1" id="org" value="#{eventorgView.orgsEvents}" var="event">
......
......@@ -14,6 +14,9 @@
<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="/role/create" value="#{i18n['sidebar.role.create']}"/></li>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}"/></li>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}"/></li>
</ul>
</ui:define>
......
......@@ -12,12 +12,13 @@
<composite:interface>
<composite:attribute name="billview" required="true" />
</composite:interface>
<composite:implementation>
<h:form>
<h:dataTable border="1" id="billList" value="#{billView.usersBills}" var="bill">
<h:dataTable border="1" id="billList" value="#{cc.attrs.billview.bills}" var="bill">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['bill.sentDate']}" />
......
......@@ -14,7 +14,6 @@
<composite:interface>
<composite:attribute name="items" required="true" />
<composite:attribute name="commitValue" required="true" />
<composite:attribute name="outcome" required="false" />
<composite:attribute name="commitaction" method-signature="java.lang.String action()" required="true" />
</composite:interface>
......
......@@ -12,13 +12,12 @@
<composite:interface>
<composite:attribute name="valuelist" required="true" />
</composite:interface>
<composite:implementation>
<h:form id="rolelist">
<h:dataTable border="1" id="user" value="#{cc.attrs.valuelist}" var="role">
<h:dataTable border="1" id="user" value="#{roleView.roles}" var="role">
<h:column>
<f:facet name="header">
<h:outputText value="#" />
......
......@@ -12,38 +12,71 @@
<composite:interface>
<composite:attribute name="user" required="true" />
<composite:attribute name="commitvalue" required="true" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
<h:form id="userform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['user.login']}:" for="login"/><h:inputText id="login" value="#{cc.attrs.user.login}" />
<h:outputLabel value="#{i18n['user.nick']}:" for="nick" /><h:inputText id="nick" value="#{cc.attrs.user.nick}" />
<h:outputLabel value="#{i18n['user.email']}:" for="email"/><h:inputText id="email" value="#{cc.attrs.user.email}" />
<h:outputLabel value="#{i18n['user.firstNames']}:" for="firstnames" /><h:inputText id="firstnames" value="#{cc.attrs.user.firstnames}" />
<h:outputLabel value="#{i18n['user.lastName']}:" for="lastname" /><h:inputText id="lastname" value="#{cc.attrs.user.lastname}" />
<h:outputLabel value="#{i18n['user.address']}:" for="address" /><h:inputText id="address" value="#{cc.attrs.user.address}" />
<h:outputLabel value="#{i18n['user.zipCode']}:" for="zip" /><h:inputText id="zip" value="#{cc.attrs.user.zip}" />
<h:outputLabel value="#{i18n['user.town']}:" for="town"/><h:inputText id="town" value="#{cc.attrs.user.town}" />
<h:outputLabel value="#{i18n['user.login']}:" for="login"/><h:inputText id="login" value="#{userView.user.login}" />
<h:outputLabel value="#{i18n['user.nick']}:" for="nick" /><h:inputText id="nick" value="#{userView.user.nick}" />
<h:outputLabel value="#{i18n['user.email']}:" for="email"/><h:inputText id="email" value="#{userView.user.email}" />
<h:outputLabel value="#{i18n['user.firstNames']}:" for="firstnames" /><h:inputText id="firstnames" value="#{userView.user.firstnames}" />
<h:outputLabel value="#{i18n['user.lastName']}:" for="lastname" /><h:inputText id="lastname" value="#{userView.user.lastname}" />
<h:outputLabel value="#{i18n['user.address']}:" for="address" /><h:inputText id="address" value="#{userView.user.address}" />
<h:outputLabel value="#{i18n['user.zipCode']}:" for="zip" /><h:inputText id="zip" value="#{userView.user.zip}" />
<h:outputLabel value="#{i18n['user.town']}:" for="town"/><h:inputText id="town" value="#{userView.user.town}" />
<h:outputLabel rendered="#{sessionHandler.superadmin}" value="#{i18n['user.superadmin']}:" for="superadmin" />
<h:selectBooleanCheckbox rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{cc.attrs.user.superadmin}" />
<h:selectBooleanCheckbox rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{userView.user.superadmin}" />
<h:outputLabel value="#{i18n['user.superadmin']}:" for="currentImage" />
<h:selectOneMenu id="currentImage" value="#{userView.user.currentImage}" converter="#{userimageConverter}" >
<f:selectItems var="image" itemLabel="#{image.description}" value="#{userView.user.userImageList}" />
</h:selectOneMenu>
<h:outputLabel value="#{i18n['user.sex']}:" for="sex"/>
<h:selectOneRadio id="sex" value="#{cc.attrs.user.gender}">
<h:selectOneRadio id="sex" value="#{userView.user.gender}">
<f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" />
<f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</h:selectOneRadio>
<h:selectManyCheckbox converter="#{sessionHandler.roleConverter}" rendered="#{sessionHandler.hasPermission('ROLE_MANAGEMENT', 'READ')}" disabled="#{!sessionHandler.hasPermission('ROLE_MANAGEMENT', 'WRITE')}" layout="pageDirection" id="roles" value="#{cc.attrs.user.roles}">
<h:outputLabel value="#{i18n['user.roles']}:" for="roles"/>
<h:selectManyCheckbox converter="#{sessionHandler.roleConverter}" rendered="#{sessionHandler.hasPermission('ROLE_MANAGEMENT', 'READ')}" disabled="#{!sessionHandler.hasPermission('ROLE_MANAGEMENT', 'WRITE')}" layout="pageDirection" id="roles" value="#{userView.user.roles}">
<f:selectItems var="roleitem" itemLabel="#{roleitem.name}" value="#{userView.userRoles}" />
</h:selectManyCheckbox>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['user.uploadimage']}</h2>
<form onsubmit="window.open('', 'imagesubmitpopup', 'height=200,width=400'); this.target='imagesubmitpopup'; return true; " action="#{request.contextPath}/UploadServlet" enctype="multipart/form-data" method="post">
<input type="hidden" name="userid" value="#{userView.user.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['imagefile.file']}" /><input type="file" name="imagefile" />
<h:outputLabel value="#{i18n['imagefile.description']}"/><input type="text" name="description" />
<h:panelGroup><input type="submit" name="submit" value="#{i18n['user.imagesubmit']}" /></h:panelGroup>
</h:panelGrid>
</form>
<h2>#{i18n['user.imagelist']}</h2>
<h:form id="imagelist">
<h:dataTable value="#{userView.user.userImageList}" id="imagelist" var="image">
<h:column>
<h:outputText value="#{image.name}" />
</h:column>
<h:column>
<h:outputText value="#{image.description}" />
</h:column>
</h:dataTable>
</h:form>
</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">
<composite:interface>
</composite:interface>
<composite:implementation>
<tools:fatalPermission target="USER_MANAGEMENT" permission="READ" />
<h:form id="userlistform">
<h:dataTable border="1" id="user" value="#{userView.users}" var="user">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{user.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.nick']}" />
</f:facet>
<h:outputText value="#{user.nick}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.firstnames']}" />
</f:facet>
<h:outputText value="#{user.firstnames}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.lastname']}" />
</f:facet>
<h:outputText value="#{user.lastname}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.email']}" />
</f:facet>
<h:outputText value="#{user.email}" />
</h:column>
<h:column>
<h:commandButton action="#{userView.edit()}" value="#{i18n['user.edit']}" />
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
</html>
......@@ -13,8 +13,7 @@
<ui:param name="thispage" value="page.role.list" />
<ui:define name="content">
<tools:fatalPermission target="ROLE_MANAGEMENT" permission="READ" />
<role:list valuelist="#{roleView.roles}" >
</role:list>
<role:list />
</ui:define>
</ui:composition>
</h:body>
......
......@@ -11,9 +11,7 @@
<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()}" user="#{userView.user}" commitvalue="#{i18n['user.save']}"/>
<users:editroles />
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}"/>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -11,11 +11,10 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.editself" />
<ui:define name="content">
#{userView.editSelf()}
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" />
<users:edit commitaction="#{userView.saveUser()}" user="#{userView.self}" commitvalue="#{i18n['user.save']}" />
<users:editroles rendered="#{sessionhandler.hasPermission('ROLE_MANAGEMENT', 'READ')}"/>
</ui:define>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -57,13 +57,21 @@ public class SessionHandler {
}
public boolean hasPermission(String target, String permission) {
RolePermission perm = null;
if (permission.equalsIgnoreCase("read")) {
perm = RolePermission.READ;
} else if (permission.equals("write")) {
perm = RolePermission.WRITE;
} else if (permission.equals("execute")) {
perm = RolePermission.EXECUTE;
RolePermission perm = RolePermission.valueOf(permission.toUpperCase());
// RolePermission perm = null;
// if (permission.equalsIgnoreCase("read")) {
// perm = RolePermission.READ;
// } else if (permission.equals("write")) {
// perm = RolePermission.WRITE;
// } else if (permission.equals("execute")) {
// perm = RolePermission.EXECUTE;
// }else {
// throw new RuntimeException("permission " + permission + " does not match any")
// }
if(perm == null)
{
logger.warn("Permission {} does not have matching value in RolePermission enum!");
throw new RuntimeException("Matching role permission could not be found!");
}
return hasPermission(target, perm);
......@@ -87,6 +95,7 @@ public class SessionHandler {
public boolean hasPermission(Permission target, RolePermission permission) {
if (target == null || permission == null) {
logger.warn("Target {} or permission {} is null", target, permission);
throw new RuntimeException("Empty target or permission!");
}
boolean ret = userbean.hasPermission(target, permission);
......
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.UserImage;
/**
* Servlet implementation class UploadServlet
*/
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadServlet() {
super();
// TODO Auto-generated constructor stub
}
private static final Logger logger = LoggerFactory.getLogger(UploadServlet.class);
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@EJB
private UserBeanLocal userbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// String rawResourcePath = request.getPathInfo();
// logger.info("respath2 : {}", rawResourcePath);
// String[] paths = rawResourcePath.trim().split("/");
// logger.info("paths length: {}", paths.length);
//
// if (paths.length != 2 || paths[1].trim().isEmpty()) {
// return;
// }
// Integer userId = Integer.parseInt(paths[1].trim());
// logger.info("Uploadinfg for user {}", userId);
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
try {
String contenttype = "";
byte[] imagedata = null;
int userId = 0;
String description = "";
String filename = "";
for (Object ti : upload.parseRequest(request)) {
if (ti instanceof FileItem) {
FileItem fi = (FileItem) ti;
if (fi.getFieldName().equals("userid")) {
userId = Integer.parseInt(fi.getString());
} else if (fi.getFieldName().equals("description")) {
description = fi.getString();
} else if (fi.getFieldName().equals("imagefile")) {
imagedata = fi.get();
filename = fi.getName();
contenttype = fi.getContentType();
}
}
}
UserImage userimage = userbean.uploadImage(userId, contenttype, imagedata, filename, description);
} catch (FileUploadException e) {
logger.warn("Error uploading image", e);
}
PrintWriter writer = response.getWriter();
writer.append("File upload successfull");
}
}
......@@ -27,7 +27,7 @@ public class BillView {
private ListDataModel<Bill> billList;
public ListDataModel<Bill> getUsersBills()
public ListDataModel<Bill> getBills()
{
userbean.fatalNotLoggedIn();
List<Bill> bills = userbean.getCurrentUser().getBills();
......
......@@ -47,6 +47,7 @@ public class EventOrganiserView {
private EventOrganiser eventorg;
private String createorgname;
private LanEvent event;
private String eventname;
public DataModel<EventOrganiser> getOrganisations() {
userbean.fatalNotLoggedIn();
......@@ -71,6 +72,15 @@ public class EventOrganiserView {
setEvent(orgsEvents.getRowData());
return "editEvent";
}
public String createEvent()
{
event = new LanEvent();
event.setOrganiser(eventorg);
event.setName(eventname);
eventbean.create(event);
eventname = "";
return "editEvent";
}
public String edit() {
eventorg = null;
......@@ -142,4 +152,12 @@ public class EventOrganiserView {
{
return new RoleConverter(rolebean, event);
}
public void setEventname(String eventname) {
this.eventname = eventname;
}
public String getEventname() {
return eventname;
}
}
......@@ -56,6 +56,7 @@ public class ProductShopView {
logger.debug("Committing billCart");
Iterator<ProductShopItem> cartIter = billCart.iterator();
Bill bill = null;
bill = billBean.createEmptyBill(getShoppingUser());
......@@ -70,6 +71,7 @@ public class ProductShopView {
}
public DataModel<ProductShopItem> getBillCart() {
logger.debug("Creating new BillCart");
userBean.fatalPermission(Permission.TICKET_SALES, RolePermission.EXECUTE);
billCart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
......
......@@ -63,7 +63,6 @@ public class RoleView {
public DataModel<Role> getRoles() {
items = new ListDataModel<Role>(getRoleList());
logger.info("Fetching roles. Found {}", items.getRowCount());
return items;
}
......
......@@ -58,10 +58,9 @@ public class UserView {
}
public User getSelf() {
public void editSelf() {
userBean.fatalNotLoggedIn();
setUser(userBean.getCurrentUser());
return user;
}
public String createUser() {
......@@ -88,6 +87,7 @@ public class UserView {
}
public String saveUser() {
logger.debug("Saving user at UserView mbean nick: {}", user.getNick());
User thisusr = getUser();
if (!userBean.isCurrentUser(thisusr)) {
logger.debug("user {} is modifying user {}",userBean.getCurrentUser(), thisusr);
......@@ -95,7 +95,7 @@ public class UserView {
}
setUser(userBean.mergeChanges(getUser()));
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("user.successfullySaved")));
return "";
return "edit";
}
public ListDataModel<User> getUsers() {
......@@ -105,7 +105,7 @@ public class UserView {
users = userBean.getUsers();
items = new ListDataModel<User>(users);
logger.info("Fetching users. Found {}", items.getRowCount());
logger.debug("Fetching users. Found {}", items.getRowCount());
return items;
......
......@@ -3,13 +3,11 @@ package fi.insomnia.bortal.view.flash;
import javax.inject.Named;
import org.granite.messaging.service.annotations.RemoteDestination;
import org.granite.tide.cdi.TideComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RemoteDestination
@Named("hvTest")
@TideComponent()
public class HvTest {
private static final Logger logger = LoggerFactory.getLogger(HvTest.class);
......
package fi.insomnia.bortal.web.converter;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.NoneScoped;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.UserImage;
@ManagedBean(name="userimageConverter")
@NoneScoped()
public class UserImageConverter implements Converter {
@EJB
private UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(UserImageConverter.class);
public UserImageConverter() {
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
logger.debug("converting userimage string {} to Object", value);
if(value == null || value.isEmpty())
{
return null;
}
int id = Integer.parseInt(value);
UserImage ret = userbean.findUserImage(id);
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = "";
if (value instanceof UserImage) {
ret = ((UserImage) value).getId().toString();
}
logger.debug("converting userimage {} to string", ret);
return ret;
}
}
......@@ -25,6 +25,7 @@ product.sort=J\u00e4rjestys luku
product.unitName=Tuoteyksikk\u00f6
product.vat=ALV
product.cart.count=Ostoskoriin
products.save=Tallenna
productshop.commit=Osta
role.create=Luo rooli
role.edit=Muokkaa
......@@ -53,6 +54,9 @@ user.sex=Sukupuoli
user.superadmin=Superadmin
user.rolesave=Tallenna roolit
bill.billNumber=Laskun numero
bill.sentDate=Pivys
bill.totalPrice=Laskun summa
bill.printBill=Tulosta lasku
loginerror.header=Kirjautuminen eponnistui
loginerror.message=Kyttjtunnus tai salasana ei ollut oikein.
permissiondenied.alreadyLoggedIn=Sinulla ei ole riittvsti oikeuksia!
......@@ -61,9 +65,32 @@ user.sex.MALE=Mies
user.sex.UNDEFINED=M\u00e4\u00e4rittelem\u00e4tt\u00e4
user.username=K\u00e4ytt\u00e4j\u00e4tunnus
user.validate.notUniqueUsername=K\u00e4ytt\u00e4j\u00e4tunnus on jo olemassa. Ole hyv\u00e4 ja valitse toinen tunnus
user.successfullySaved=Tiedot tallennettu onnistuneesti
user.roles=Roolit
user.uploadimage=Lhet kuva
user.imagelist=Tallennetut kuvat
imagefile.file=Kuvatiedosto
imagefile.description=Kuvaus
user.imagesubmit=Lhet kuva
permissiondenied.header=Psy kielletty
permissiondenied.notLoggedIn=Sinulla ei ole riittvsti oikeuksia tlle sivulle.
viewexpired.title=Nkym on vanhentumut
viewexpired.body=Ole hyv ja kirjaudu sisn uudelleen.
eventorg.events=Organisaation tapahtumat
eventorgView.eventname=Tapahtuman nimi
eventorg.createEvent=Luo tapahtuma
eventorg.events=Organisaation tapahtumat
\ No newline at end of file
sidebar.user.editself=Omat tiedot
sidebar.user.list=Kyttjt
sidebar.user.create=Uusi kyttj
sidebar.bill.list=Omat laskut
sidebar.product.create=Uusi tuote
sidebar.product.list=Tuotteet
sidebar.product.createBill=Luo lasku
sidebar.map.placemap=Paikkakartta
sidebar.role.create=Uusi rooli
sidebar.role.list=Roolit
sidebar.eventorg.list=Omat organisaatiot
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!