Commit 69553a9e by Tuomas Riihimäki

Tapahtuma lähti käyntiin....

1 parent f704bb71
Showing with 1859 additions and 520 deletions
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.imageio.ImageIO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.CardTemplateFacade; import fi.insomnia.bortal.facade.CardTemplateFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade; import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
...@@ -24,7 +31,7 @@ import fi.insomnia.bortal.util.MailMessage; ...@@ -24,7 +31,7 @@ import fi.insomnia.bortal.util.MailMessage;
* Session Bean implementation class CardTemplateBean * Session Bean implementation class CardTemplateBean
*/ */
@Stateless @Stateless
@DeclareRoles({ "USER_MANAGEMENT/WRITE", "USER_MANAGEMENT/READ" }) @DeclareRoles({ UserPermission.S_WRITE_ROLES })
public class CardTemplateBean implements CardTemplateBeanLocal { public class CardTemplateBean implements CardTemplateBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(CardTemplateBean.class); private static final Logger logger = LoggerFactory.getLogger(CardTemplateBean.class);
...@@ -61,13 +68,20 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -61,13 +68,20 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
// } // }
@Override @Override
@RolesAllowed("USER_MANAGEMENT/WRITE") @RolesAllowed(UserPermission.S_WRITE_ROLES)
public void create(CardTemplate card) { public void create(CardTemplate card) {
cdFacade.create(card);
LanEvent currEv = eventBean.getCurrentEvent();
if (currEv.getCardTemplates() == null)
{
currEv.setCardTemplates(new ArrayList<CardTemplate>());
}
card.setEvent(currEv);
currEv.getCardTemplates().add(card);
} }
@Override @Override
@RolesAllowed("USER_MANAGEMENT/READ") @RolesAllowed(UserPermission.S_WRITE_ROLES)
public CardTemplate find(Integer id) { public CardTemplate find(Integer id) {
return cdFacade.find(id); return cdFacade.find(id);
} }
...@@ -84,8 +98,11 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -84,8 +98,11 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
* *
* @throws PermissionDeniedException * @throws PermissionDeniedException
*/ */
@RolesAllowed(UserPermission.S_MODIFY)
@Override @Override
public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException { public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException {
logger.info("Checking printed card");
user = userfacade.find(user.getId()); user = userfacade.find(user.getId());
LanEvent currEvent = eventBean.getCurrentEvent(); LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user); List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
...@@ -93,6 +110,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -93,6 +110,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
PrintedCard biggestCard = null; PrintedCard biggestCard = null;
PrintedCard smallestCard = null; PrintedCard smallestCard = null;
for (PrintedCard card : myCards) { for (PrintedCard card : myCards) {
logger.info("Checking card {}", card);
if (card.getEnabled()) { if (card.getEnabled()) {
if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) { if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) {
biggestCard = card; biggestCard = card;
...@@ -127,7 +145,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -127,7 +145,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
user.getPrintedCards().add(pc); user.getPrintedCards().add(pc);
// printedcardfacade.create(pc); // printedcardfacade.create(pc);
biggestCard = pc; biggestCard = pc;
logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.info("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else if (existingPower > newPower) { } else if (existingPower > newPower) {
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin(); User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin();
...@@ -139,21 +157,22 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -139,21 +157,22 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
msg.setSubject("User " + user.getLogin() + " has too powerful card!"); msg.setSubject("User " + user.getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa"); msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
mailbean.sendMail(msg); mailbean.sendMail(msg);
logger.debug("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.info("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else { } else {
logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.info("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
} }
return biggestCard; return biggestCard;
} }
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public CardTemplate getUsersCardtype(User user) throws PermissionDeniedException { public CardTemplate getUsersCardtype(User user) throws PermissionDeniedException {
List<Role> roles = userbean.findUsersRoles(user); List<Role> roles = userbean.findUsersRoles(user);
CardTemplate greatestTemplate = null; CardTemplate greatestTemplate = null;
for (Role listrole : roles) { for (Role listrole : roles) {
logger.info("Checking role {}", listrole);
if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) { if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) {
greatestTemplate = listrole.getCardTemplate(); greatestTemplate = listrole.getCardTemplate();
} }
...@@ -176,8 +195,42 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -176,8 +195,42 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
} }
@Override @Override
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public List<PrintedCard> findActiveCards() { public List<PrintedCard> findActiveCards() {
return this.printedcardfacade.findAllEnabled(eventBean.getCurrentEvent()); return this.printedcardfacade.findAllEnabled(eventBean.getCurrentEvent());
} }
@RolesAllowed(UserPermission.S_WRITE_ROLES)
@Override
public CardTemplate save(CardTemplate card) {
return cdFacade.merge(card);
}
@Override
public PrintedCard getCard(Integer id) {
return printedcardfacade.find(id);
}
@Override
public List<PrintedCard> getCards(User user) {
return printedcardfacade.getCards(user);
}
@Override
public CardTemplate saveImage(CardTemplate cardTemplate, byte[] bytes) throws IOException {
cardTemplate = cdFacade.find(cardTemplate.getId());
BufferedImage base = ImageIO.read(new ByteArrayInputStream(bytes));
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
ImageIO.write(base, "jpeg", ostr);
cardTemplate.setImage(ostr.toByteArray());
return cardTemplate;
}
@Override
public List<CardTemplate> findAll() {
return cdFacade.findAll();
}
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.NewsGroupFacade; import fi.insomnia.bortal.facade.NewsGroupFacade;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup;
/** /**
* Session Bean implementation class GameBean * Session Bean implementation class GameBean
...@@ -30,18 +24,4 @@ public class GameBean implements GameBeanLocal { ...@@ -30,18 +24,4 @@ public class GameBean implements GameBeanLocal {
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
@Override
public List<News> getNews() {
ArrayList<News> retlist = new ArrayList<News>();
NewsGroup ng = ngfacade.findByName(eventbean.getCurrentEvent(), "game");
for (News n : ng.getNews()) {
if ((n.getPublish() == null || n.getPublish().after(Calendar.getInstance())) && (n.getExpire() == null || n.getExpire().before(Calendar.getInstance()))) {
retlist.add(n);
}
}
return retlist;
}
} }
...@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; ...@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BortalApplication; import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission; import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.ApplicationPermission; import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
...@@ -74,6 +75,8 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -74,6 +75,8 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
logger.info("Fetching groupNames for user {}", user); logger.info("Fetching groupNames for user {}", user);
User usr = userbean.getUser(user); User usr = userbean.getUser(user);
HashSet<String> roleset = new HashSet<String>(); HashSet<String> roleset = new HashSet<String>();
roleset.add(UserPermission.ANYUSER.getFullName());
if (usr == null) { if (usr == null) {
usr = permbean.getAnonUser(); usr = permbean.getAnonUser();
roleset.add(SpecialPermission.ANONYMOUS.name()); roleset.add(SpecialPermission.ANONYMOUS.name());
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
...@@ -8,8 +9,9 @@ import javax.ejb.EJB; ...@@ -8,8 +9,9 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.NewsFacade;
import fi.insomnia.bortal.facade.NewsGroupFacade; import fi.insomnia.bortal.facade.NewsGroupFacade;
import fi.insomnia.bortal.model.EventPk; import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
/** /**
...@@ -17,45 +19,70 @@ import fi.insomnia.bortal.model.NewsGroup; ...@@ -17,45 +19,70 @@ import fi.insomnia.bortal.model.NewsGroup;
*/ */
@Stateless @Stateless
@LocalBean @LocalBean
@DeclareRoles({ "ROLE_MANAGEMENT/READ", "ROLE_MANAGEMENT/WRITE" }) @DeclareRoles({ "NEWS/MANAGE" })
public class NewsBean implements NewsBeanLocal { public class NewsBean implements NewsBeanLocal {
@EJB @EJB
private NewsGroupFacade ngfacade; private NewsGroupFacade ngfacade;
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private NewsFacade newsfacade;
@Override @Override
public NewsGroup findByName(String groupname) { public NewsGroup findByName(String groupname) {
NewsGroup ret = ngfacade.findByName(groupname);
return ngfacade.findByName(eventbean.getCurrentEvent(), groupname); return ret;
} }
@Override @Override
@RolesAllowed("ROLE_MANAGEMENT/READ") @RolesAllowed("NEWS/MANAGE")
public List<NewsGroup> findAll() { public List<NewsGroup> findAll() {
return ngfacade.findAll(eventbean.getCurrentEvent()); return ngfacade.findNews();
} }
@Override @Override
@RolesAllowed("ROLE_MANAGEMENT/READ") @RolesAllowed("NEWS/MANAGE")
public NewsGroup findById(int newsgroupid) { public NewsGroup findById(int newsgroupid) {
return ngfacade.find(eventbean.getCurrentEvent(), newsgroupid); return ngfacade.find(newsgroupid);
} }
@Override @Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE") @RolesAllowed("NEWS/MANAGE")
public NewsGroup merge(NewsGroup newsgroup) { public NewsGroup merge(NewsGroup newsgroup) {
return ngfacade.merge(newsgroup); return ngfacade.merge(newsgroup);
} }
@Override @Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE") @RolesAllowed("NEWS/MANAGE")
public void createNewsgroup(NewsGroup newsgroup) { public void createNewsgroup(NewsGroup newsgroup) {
newsgroup.setId(new EventPk(eventbean.getCurrentEvent())); newsgroup.setEvent(eventbean.getCurrentEvent());
ngfacade.create(newsgroup); ngfacade.create(newsgroup);
} }
@Override
public News createNews(NewsGroup newsgroup) {
newsgroup = ngfacade.find(newsgroup.getId());
if (newsgroup.getNews() == null)
{
newsgroup.setNews(new ArrayList<News>());
}
News ret = new News(newsgroup);
newsgroup.getNews().add(ret);
return ret;
}
@Override
public News saveNews(News news) {
return newsfacade.merge(news);
}
@Override
public News findNews(Integer newsid) {
return newsfacade.find(newsid);
}
} }
...@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; ...@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission; import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
...@@ -32,6 +33,7 @@ import fi.insomnia.bortal.model.User; ...@@ -32,6 +33,7 @@ import fi.insomnia.bortal.model.User;
UserPermission.S_VIEW_SELF, UserPermission.S_VIEW_SELF,
UserPermission.S_WRITE_ROLES, UserPermission.S_WRITE_ROLES,
UserPermission.S_READ_ROLES, UserPermission.S_READ_ROLES,
UserPermission.S_ANYUSER,
MapPermission.S_VIEW, MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS, MapPermission.S_MANAGE_MAPS,
...@@ -49,6 +51,8 @@ import fi.insomnia.bortal.model.User; ...@@ -49,6 +51,8 @@ import fi.insomnia.bortal.model.User;
BillPermission.S_WRITE_ALL, BillPermission.S_WRITE_ALL,
BillPermission.S_VIEW_OWN, BillPermission.S_VIEW_OWN,
NewsPermission.S_MANAGE,
SpecialPermission.S_SUPERADMIN, SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER, SpecialPermission.S_USER,
SpecialPermission.S_ANONYMOUS, SpecialPermission.S_ANONYMOUS,
...@@ -77,9 +81,9 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -77,9 +81,9 @@ public class PermissionBean implements PermissionBeanLocal {
if (perm == null) if (perm == null)
{ {
return true; return false;
} }
return perm == null || context.isCallerInRole(perm.getFullName()); return context.isCallerInRole(perm.getFullName());
} }
......
...@@ -46,7 +46,7 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -46,7 +46,7 @@ public class ReaderBean implements ReaderBeanLocal {
public ReaderEvent checkTag(String ident, String tag, String hash) { public ReaderEvent checkTag(String ident, String tag, String hash) {
LanEvent ev = eventbean.getCurrentEvent(); LanEvent ev = eventbean.getCurrentEvent();
PrintedCard card = cardfacade.findByRfid(ev, tag); PrintedCard card = cardfacade.findByRfid(tag);
ReaderEvent ret = null; ReaderEvent ret = null;
logger.debug("Found card by rfid: {}", card); logger.debug("Found card by rfid: {}", card);
if (card != null) { if (card != null) {
...@@ -97,7 +97,7 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -97,7 +97,7 @@ public class ReaderBean implements ReaderBeanLocal {
} }
} }
} }
ReaderEvent ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader); ReaderEvent ret = new ReaderEvent(Calendar.getInstance(), card, reader);
ret.setGamePoint(reader.getGamepoints()); ret.setGamePoint(reader.getGamepoints());
ret.setReader(reader); ret.setReader(reader);
reader.getEvents().add(ret); reader.getEvents().add(ret);
......
...@@ -20,6 +20,7 @@ import org.slf4j.Logger; ...@@ -20,6 +20,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.RoleFacade; import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.model.ApplicationPermission; import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
...@@ -30,7 +31,7 @@ import fi.insomnia.bortal.model.Role; ...@@ -30,7 +31,7 @@ import fi.insomnia.bortal.model.Role;
* @author tuukka * @author tuukka
*/ */
@Stateless @Stateless
@DeclareRoles({ "USER/READ_ROLES", "USER/WRITE_ROLES" }) @DeclareRoles({ UserPermission.S_READ_ROLES, UserPermission.S_WRITE_ROLES })
public class RoleBean implements RoleBeanLocal { public class RoleBean implements RoleBeanLocal {
// private static final String PUBLIC_ROLE_NAME = // private static final String PUBLIC_ROLE_NAME =
...@@ -44,30 +45,30 @@ public class RoleBean implements RoleBeanLocal { ...@@ -44,30 +45,30 @@ public class RoleBean implements RoleBeanLocal {
private RoleFacade roleFacade; private RoleFacade roleFacade;
@Override @Override
@RolesAllowed("USER/READ_ROLES") @RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> listRoles() { public List<Role> listRoles() {
return listRoles(eventBean.getCurrentEvent()); return listRoles(eventBean.getCurrentEvent());
} }
@RolesAllowed("USER/READ_ROLES") @RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> listRoles(LanEvent event) { public List<Role> listRoles(LanEvent event) {
return roleFacade.findAll(event); return roleFacade.findAll(event);
} }
@Override @Override
@RolesAllowed("USER/WRITE_ROLES") @RolesAllowed(UserPermission.S_WRITE_ROLES)
public Role mergeChanges(Role role) { public Role mergeChanges(Role role) {
return roleFacade.merge(role); return roleFacade.merge(role);
} }
@Override @Override
@RolesAllowed("USER/WRITE_ROLES") @RolesAllowed(UserPermission.S_WRITE_ROLES)
public void create(Role role) { public void create(Role role) {
roleFacade.create(role); roleFacade.create(role);
} }
@Override @Override
@RolesAllowed("USER/READ_ROLES") @RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> getPossibleParents(Role role) { public List<Role> getPossibleParents(Role role) {
List<Role> roleList = listRoles(); List<Role> roleList = listRoles();
...@@ -138,7 +139,7 @@ public class RoleBean implements RoleBeanLocal { ...@@ -138,7 +139,7 @@ public class RoleBean implements RoleBeanLocal {
} }
@Override @Override
@RolesAllowed("USER/WRITE_ROLES") @RolesAllowed(UserPermission.S_WRITE_ROLES)
public Role setPermissions(Role role, List<IAppPermission> newPerms) { public Role setPermissions(Role role, List<IAppPermission> newPerms) {
role = roleFacade.find(role.getId()); role = roleFacade.find(role.getId());
List<ApplicationPermission> permissions = role.getPermissions(); List<ApplicationPermission> permissions = role.getPermissions();
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
...@@ -12,6 +16,7 @@ import javax.annotation.security.RolesAllowed; ...@@ -12,6 +16,7 @@ import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.imageio.ImageIO;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
...@@ -75,6 +80,9 @@ public class UserBean implements UserBeanLocal { ...@@ -75,6 +80,9 @@ public class UserBean implements UserBeanLocal {
private GroupMembershipFacade gmfacade; private GroupMembershipFacade gmfacade;
@EJB
private UserImageFacade imagefacade;
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
public List<User> getUsers() { public List<User> getUsers() {
...@@ -180,6 +188,12 @@ public class UserBean implements UserBeanLocal { ...@@ -180,6 +188,12 @@ public class UserBean implements UserBeanLocal {
} }
@Override @Override
public UserImage findUserimageFORCE(Integer id)
{
return userimagefacade.find(id);
}
@Override
public UserImage findUserImage(int id) throws PermissionDeniedException { public UserImage findUserImage(int id) throws PermissionDeniedException {
UserImage ret = null; UserImage ret = null;
...@@ -305,4 +319,39 @@ public class UserBean implements UserBeanLocal { ...@@ -305,4 +319,39 @@ public class UserBean implements UserBeanLocal {
userFacade.create(user); userFacade.create(user);
} }
@Override
public UserImage saveCroppedImage(UserImage currimage, int left, int top, int width, int height) throws IOException {
currimage = imagefacade.find(currimage.getId());
User user = currimage.getUser();
logger.info("Current image {}, current user {}", currimage, user);
user = userFacade.find(user.getId());
ByteArrayInputStream naamastream = new
ByteArrayInputStream(currimage.getImageData());
BufferedImage face;
face = ImageIO.read(naamastream);
BufferedImage newFace = face.getSubimage(left, top, width, height);
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
ImageIO.write(newFace, "jpeg", naamaout);
UserImage ret = new UserImage(user);
ret.setMimeType(currimage.getMimeType());
User curruser = permbean.getCurrentUser();
ret.setDescription("Cropped by: [" + curruser.getId() + "] " + curruser.getWholeName() + " from image: " + currimage.getId());
ret.setImageData(naamaout.toByteArray());
ret.setMimeType(currimage.getMimeType());
if (user.getUserImageList() == null)
{
user.setUserImageList(new ArrayList<UserImage>());
}
user.getUserImageList().add(ret);
user.setCurrentImage(ret);
return ret;
}
} }
...@@ -12,7 +12,6 @@ import java.util.Date; ...@@ -12,7 +12,6 @@ import java.util.Date;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -76,29 +75,34 @@ public class UtilBean implements UtilBeanLocal { ...@@ -76,29 +75,34 @@ public class UtilBean implements UtilBeanLocal {
return true; return true;
} }
@Override // @Override
@RolesAllowed("SUPERADMIN") // @RolesAllowed("SUPERADMIN")
public void checkAllUsersImages() throws PermissionDeniedException { // public void checkAllUsersImages() throws PermissionDeniedException {
//
for (User usr : userbean.getUsers()) { // for (User usr : userbean.getUsers()) {
convertImage(usr); // convertImage(usr);
} // }
//
} // }
@Override @Override
public boolean convertImage(User user) throws PermissionDeniedException { public boolean convertImage(User user) throws PermissionDeniedException {
user = userbean.mergeChanges(user);
UserImage oldpic = user.getCurrentImage(); UserImage oldpic = user.getCurrentImage();
if (oldpic == null || oldpic.getMimeType() == null || oldpic.getMimeType().isEmpty()) { if (oldpic == null || oldpic.getMimeType() == null ||
oldpic.getMimeType().isEmpty()) {
return false; return false;
} }
for (String imgtype : ImageIO.getReaderFormatNames()) { for (String imgtype : ImageIO.getReaderFormatNames()) {
logger.debug("found imgtype {}", imgtype); logger.debug("found imgtype {}", imgtype);
} }
logger.debug("converting users image id {}, type {} to jpeg", oldpic.getId(), oldpic.getMimeType()); logger.debug("converting users image id {}, type {} to jpeg",
oldpic.getId(), oldpic.getMimeType());
ByteArrayInputStream naamastream = new ByteArrayInputStream(oldpic.getImageData()); ByteArrayInputStream naamastream = new
ByteArrayInputStream(oldpic.getImageData());
try { try {
BufferedImage face = ImageIO.read(naamastream); BufferedImage face = ImageIO.read(naamastream);
...@@ -106,11 +110,14 @@ public class UtilBean implements UtilBeanLocal { ...@@ -106,11 +110,14 @@ public class UtilBean implements UtilBeanLocal {
if (face == null) { if (face == null) {
return false; return false;
} }
if (face.getWidth() > 700) { if (face.getWidth() > 700) {
logger.debug("Scaling from {} {} ", face.getWidth(), face.getHeight()); logger.debug("Scaling from {} {} ", face.getWidth(), face.getHeight());
BigDecimal scale = new BigDecimal(SCALEWIDTH).divide(new BigDecimal(face.getWidth()), 5, RoundingMode.HALF_UP); BigDecimal scale = new BigDecimal(SCALEWIDTH).divide(new
BigDecimal(face.getWidth()), 5, RoundingMode.HALF_UP);
int height = scale.multiply(new BigDecimal(face.getHeight())).intValue(); int height = scale.multiply(new BigDecimal(face.getHeight())).intValue();
logger.info("Imagetype: {}", face.getType());
BufferedImage scaledImage = new BufferedImage( BufferedImage scaledImage = new BufferedImage(
SCALEWIDTH, height, face.getType()); SCALEWIDTH, height, face.getType());
...@@ -135,8 +142,8 @@ public class UtilBean implements UtilBeanLocal { ...@@ -135,8 +142,8 @@ public class UtilBean implements UtilBeanLocal {
user.setCurrentImage(img); user.setCurrentImage(img);
user.getUserImageList().add(img); user.getUserImageList().add(img);
user.getUserImageList().remove(oldpic);
userbean.mergeChanges(user);
} catch (IOException e) { } catch (IOException e) {
logger.warn("error converting image ", e); logger.warn("error converting image ", e);
} }
......
...@@ -4,21 +4,23 @@ import javax.ejb.LocalBean; ...@@ -4,21 +4,23 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.Location; import fi.insomnia.bortal.model.Location;
@Stateless @Stateless
@LocalBean @LocalBean
public class LocationFacade extends EventChildGenericFacade<Location> { public class LocationFacade extends GenericFacade<Integer, Location> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public LocationFacade() { public LocationFacade() {
super(Location.class); super(Location.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
...@@ -4,21 +4,23 @@ import javax.ejb.LocalBean; ...@@ -4,21 +4,23 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.News; import fi.insomnia.bortal.model.News;
@Stateless @Stateless
@LocalBean @LocalBean
public class NewsFacade extends EventChildGenericFacade<News> { public class NewsFacade extends GenericFacade<Integer, News> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public NewsFacade() { public NewsFacade() {
super(News.class); super(News.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.model.NewsGroup_;
@Stateless @Stateless
@LocalBean @LocalBean
public class NewsGroupFacade extends EventChildGenericFacade<NewsGroup> { public class NewsGroupFacade extends GenericFacade<Integer, NewsGroup> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public NewsGroupFacade() { public NewsGroupFacade() {
super(NewsGroup.class); super(NewsGroup.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
public NewsGroup findByName(LanEvent e, String name) {
TypedQuery<NewsGroup> q = em.createQuery("select ng from NewsGroup ng where ng.name = :name", NewsGroup.class); @EJB
q.setParameter("name", name); private EventBeanLocal eventbean;
NewsGroup ret = getSingleNullableResult(q);
if (ret == null) { public NewsGroup findByName(String name) {
ret = new NewsGroup(e);
ret.setName(name); CriteriaBuilder cb = em.getCriteriaBuilder();
this.create(ret); CriteriaQuery<NewsGroup> cq = cb.createQuery(NewsGroup.class);
} Root<NewsGroup> root = cq.from(NewsGroup.class);
return ret; cq.where(cb.equal(root.get(NewsGroup_.event), eventbean.getCurrentEvent()),
} cb.equal(root.get(NewsGroup_.name), name)
);
NewsGroup ret = getSingleNullableResult(em.createQuery(cq));
if (ret == null) {
ret = new NewsGroup(eventbean.getCurrentEvent());
ret.setName(name);
this.create(ret);
}
return ret;
}
public List<NewsGroup> findNews() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<NewsGroup> cq = cb.createQuery(NewsGroup.class);
Root<NewsGroup> root = cq.from(NewsGroup.class);
cq.where(cb.equal(root.get(NewsGroup_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
}
} }
...@@ -3,19 +3,24 @@ package fi.insomnia.bortal.facade; ...@@ -3,19 +3,24 @@ package fi.insomnia.bortal.facade;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.PrintedCard_;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Stateless @Stateless
@LocalBean @LocalBean
public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> { public class PrintedCardFacade extends GenericFacade<Integer, PrintedCard> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
...@@ -33,7 +38,7 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> { ...@@ -33,7 +38,7 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> {
ArrayList<PrintedCard> retlist = new ArrayList<PrintedCard>(); ArrayList<PrintedCard> retlist = new ArrayList<PrintedCard>();
for (PrintedCard pc : user.getPrintedCards()) { for (PrintedCard pc : user.getPrintedCards()) {
if (pc.getId().getEventId().equals(event.getId())) { if (pc.getEvent().equals(event)) {
retlist.add(pc); retlist.add(pc);
} }
} }
...@@ -46,17 +51,41 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> { ...@@ -46,17 +51,41 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> {
return retlist; return retlist;
} }
public PrintedCard findByRfid(LanEvent event, String uid) { @EJB
TypedQuery<PrintedCard> q = em.createQuery("select pc from PrintedCard pc where pc.rfidUid = :uid and pc.id.eventId = :eventid ", PrintedCard.class); private EventBeanLocal eventbean;
q.setParameter("uid", uid);
q.setParameter("eventid", event.getId()); public PrintedCard findByRfid(String uid) {
return getSingleNullableResult(q);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.equal(root.get(PrintedCard_.rfidUid), uid),
cb.equal(root.get(PrintedCard_.event), eventbean.getCurrentEvent()));
return getSingleNullableResult(em.createQuery(cq));
} }
public List<PrintedCard> findAllEnabled(LanEvent currentEvent) { public List<PrintedCard> findAllEnabled(LanEvent currentEvent) {
TypedQuery<PrintedCard> q = em.createQuery("select pc from PrintedCard pc where pc.id.eventId = :eventid and pc.enabled = true", PrintedCard.class);
q.setParameter("eventid", currentEvent.getId()); CriteriaBuilder cb = em.getCriteriaBuilder();
return q.getResultList(); CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.isTrue(root.get(PrintedCard_.enabled)),
cb.equal(root.get(PrintedCard_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
}
public List<PrintedCard> getCards(User user) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.equal(root.get(PrintedCard_.user), user),
cb.equal(root.get(PrintedCard_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
} }
} }
...@@ -4,21 +4,23 @@ import javax.ejb.LocalBean; ...@@ -4,21 +4,23 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
@Stateless @Stateless
@LocalBean @LocalBean
public class ReaderEventFacade extends EventChildGenericFacade<ReaderEvent> { public class ReaderEventFacade extends GenericFacade<Integer, ReaderEvent> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public ReaderEventFacade() { public ReaderEventFacade() {
super(ReaderEvent.class); super(ReaderEvent.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
...@@ -15,7 +15,7 @@ import fi.insomnia.bortal.model.Reader_; ...@@ -15,7 +15,7 @@ import fi.insomnia.bortal.model.Reader_;
@Stateless @Stateless
@LocalBean @LocalBean
public class ReaderFacade extends EventChildGenericFacade<Reader> { public class ReaderFacade extends GenericFacade<Integer, Reader> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
...@@ -28,4 +29,14 @@ public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> { ...@@ -28,4 +29,14 @@ public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> {
List<PrintedCard> findActiveCards(); List<PrintedCard> findActiveCards();
CardTemplate save(CardTemplate card);
PrintedCard getCard(Integer idParam);
List<PrintedCard> getCards(User user);
CardTemplate saveImage(CardTemplate cardTemplate, byte[] bytes) throws IOException;
List<CardTemplate> findAll();
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.News;
@Local @Local
public interface GameBeanLocal { public interface GameBeanLocal {
List<News> getNews();
} }
...@@ -4,6 +4,7 @@ import java.util.List; ...@@ -4,6 +4,7 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
@Local @Local
...@@ -19,4 +20,10 @@ public interface NewsBeanLocal { ...@@ -19,4 +20,10 @@ public interface NewsBeanLocal {
void createNewsgroup(NewsGroup newsgroup); void createNewsgroup(NewsGroup newsgroup);
News createNews(NewsGroup newsgroup);
News saveNews(News news);
News findNews(Integer newsid);
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
...@@ -53,4 +54,8 @@ public interface UserBeanLocal { ...@@ -53,4 +54,8 @@ public interface UserBeanLocal {
void createFromToken(User user, GroupMembership gm); void createFromToken(User user, GroupMembership gm);
UserImage findUserimageFORCE(Integer id);
UserImage saveCroppedImage(UserImage currentImage, int left, int top, int width, int height) throws IOException;
} }
...@@ -14,6 +14,6 @@ public interface UtilBeanLocal { ...@@ -14,6 +14,6 @@ public interface UtilBeanLocal {
boolean convertImage(User user) throws PermissionDeniedException; boolean convertImage(User user) throws PermissionDeniedException;
void checkAllUsersImages() throws PermissionDeniedException; // void checkAllUsersImages() throws PermissionDeniedException;
} }
...@@ -244,7 +244,7 @@ ...@@ -244,7 +244,7 @@
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.Reader</entity-name> <entity-name>fi.insomnia.bortal.model.Reader</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>268</entity-height>
<entity-X-Coordinate>413</entity-X-Coordinate> <entity-X-Coordinate>413</entity-X-Coordinate>
<entity-Y-Coordinate>1877</entity-Y-Coordinate> <entity-Y-Coordinate>1877</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
...@@ -333,8 +333,8 @@ ...@@ -333,8 +333,8 @@
<entity-name>fi.insomnia.bortal.model.News</entity-name> <entity-name>fi.insomnia.bortal.model.News</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>966</entity-X-Coordinate> <entity-X-Coordinate>920</entity-X-Coordinate>
<entity-Y-Coordinate>1090</entity-Y-Coordinate> <entity-Y-Coordinate>1127</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
...@@ -343,7 +343,7 @@ ...@@ -343,7 +343,7 @@
<entity> <entity>
<entity-name>fi.insomnia.bortal.model.NewsGroup</entity-name> <entity-name>fi.insomnia.bortal.model.NewsGroup</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>208</entity-height>
<entity-X-Coordinate>663</entity-X-Coordinate> <entity-X-Coordinate>663</entity-X-Coordinate>
<entity-Y-Coordinate>1150</entity-Y-Coordinate> <entity-Y-Coordinate>1150</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
...@@ -366,8 +366,8 @@ ...@@ -366,8 +366,8 @@
<entity-name>fi.insomnia.bortal.model.PollQuestion</entity-name> <entity-name>fi.insomnia.bortal.model.PollQuestion</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>1152</entity-X-Coordinate> <entity-X-Coordinate>1274</entity-X-Coordinate>
<entity-Y-Coordinate>1720</entity-Y-Coordinate> <entity-Y-Coordinate>1706</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
...@@ -388,8 +388,8 @@ ...@@ -388,8 +388,8 @@
<entity-name>fi.insomnia.bortal.model.PollAnswer</entity-name> <entity-name>fi.insomnia.bortal.model.PollAnswer</entity-name>
<entity-width>120</entity-width> <entity-width>120</entity-width>
<entity-height>30</entity-height> <entity-height>30</entity-height>
<entity-X-Coordinate>1315</entity-X-Coordinate> <entity-X-Coordinate>1236</entity-X-Coordinate>
<entity-Y-Coordinate>1423</entity-Y-Coordinate> <entity-Y-Coordinate>1323</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed> <primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed> <relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed> <basic-collapsed>false</basic-collapsed>
......
...@@ -86,9 +86,7 @@ public class AccountEvent extends GenericEventChild { ...@@ -86,9 +86,7 @@ public class AccountEvent extends GenericEventChild {
* The product user has acquired and this this AccountEvent is a reference * The product user has acquired and this this AccountEvent is a reference
* to. * to.
*/ */
@JoinColumns({ @JoinColumn(name = "product_id", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "product_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false) @ManyToOne(optional = false)
private Product product; private Product product;
......
...@@ -55,7 +55,7 @@ public class CardTemplate extends GenericEntity { ...@@ -55,7 +55,7 @@ public class CardTemplate extends GenericEntity {
public CardTemplate(LanEvent event) { public CardTemplate(LanEvent event) {
super(); super();
this.event = event; this.setEvent(event);
} }
public CardTemplate(LanEvent event, String templateName) { public CardTemplate(LanEvent event, String templateName) {
...@@ -107,4 +107,8 @@ public class CardTemplate extends GenericEntity { ...@@ -107,4 +107,8 @@ public class CardTemplate extends GenericEntity {
return power; return power;
} }
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -81,7 +81,7 @@ public class LanEvent extends GenericEntity { ...@@ -81,7 +81,7 @@ public class LanEvent extends GenericEntity {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "event") @OneToMany(cascade = CascadeType.ALL, mappedBy = "event")
private List<Compo> compos; private List<Compo> compos;
@OneToMany(mappedBy = "event") @OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<CardTemplate> cardTemplates; private List<CardTemplate> cardTemplates;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "event") @OneToMany(cascade = CascadeType.ALL, mappedBy = "event")
......
...@@ -8,8 +8,8 @@ import java.util.List; ...@@ -8,8 +8,8 @@ import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.NamedQueries; import javax.persistence.JoinColumn;
import javax.persistence.NamedQuery; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
...@@ -18,13 +18,18 @@ import javax.persistence.Table; ...@@ -18,13 +18,18 @@ import javax.persistence.Table;
*/ */
@Entity @Entity
@Table(name = "locations") @Table(name = "locations")
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "Location.findAll", query = "SELECT l FROM Location l"), // @NamedQuery(name = "Location.findAll", query = "SELECT l FROM Location l"),
//
@NamedQuery(name = "Location.findByLocationName", query = "SELECT l FROM Location l WHERE l.name = :name") }) // @NamedQuery(name = "Location.findByLocationName", query =
public class Location extends GenericEventChild { // "SELECT l FROM Location l WHERE l.name = :name") })
public class Location extends GenericEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "location_name", nullable = false) @Column(name = "location_name", nullable = false)
private String name; private String name;
...@@ -40,11 +45,13 @@ public class Location extends GenericEventChild { ...@@ -40,11 +45,13 @@ public class Location extends GenericEventChild {
} }
public Location(LanEvent event) { public Location(LanEvent event) {
super(event); super();
this.event = event;
} }
public Location(LanEvent event, String name) { public Location(LanEvent event, String name) {
super(event); super();
this.event = event;
this.name = name; this.name = name;
} }
...@@ -72,4 +79,12 @@ public class Location extends GenericEventChild { ...@@ -72,4 +79,12 @@ public class Location extends GenericEventChild {
this.printedCardsAtLocation = printedCardList; this.printedCardsAtLocation = printedCardList;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -4,16 +4,13 @@ ...@@ -4,16 +4,13 @@
*/ */
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import java.util.Calendar; import java.util.Date;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
...@@ -24,24 +21,15 @@ import javax.persistence.TemporalType; ...@@ -24,24 +21,15 @@ import javax.persistence.TemporalType;
*/ */
@Entity @Entity
@Table(name = "news") @Table(name = "news")
@NamedQueries({ public class News extends GenericEntity {
@NamedQuery(name = "News.findAll", query = "SELECT n FROM News n"),
@NamedQuery(name = "News.findByTitle", query = "SELECT n FROM News n WHERE n.title = :title"),
@NamedQuery(name = "News.findByBody", query = "SELECT n FROM News n WHERE n.body = :body"),
@NamedQuery(name = "News.findByAbstract", query = "SELECT n FROM News n WHERE n.bodyAbstract = :bodyAbstract"),
@NamedQuery(name = "News.findByPublish", query = "SELECT n FROM News n WHERE n.publish = :publish"),
@NamedQuery(name = "News.findByExpire", query = "SELECT n FROM News n WHERE n.expire = :expire"),
@NamedQuery(name = "News.findByPriority", query = "SELECT n FROM News n WHERE n.priority = :priority") })
public class News extends GenericEventChild {
private static final long serialVersionUID = 498925968565236275L; private static final long serialVersionUID = 498925968565236275L;
@Column(name = "title", nullable = false) @Column(name = "title")
private String title; private String title;
@Lob @Lob
@Column(name = "body", nullable = false) @Column(name = "body")
private String body; private String body;
@Lob @Lob
...@@ -50,31 +38,51 @@ public class News extends GenericEventChild { ...@@ -50,31 +38,51 @@ public class News extends GenericEventChild {
@Column(name = "publish") @Column(name = "publish")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar publish; private Date publish = new Date();
@Column(name = "expire") @Column(name = "expire")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar expire; private Date expire;
public Date getPublish() {
return publish;
}
public void setPublish(Date publish) {
this.publish = publish;
}
public Date getExpire() {
return expire;
}
public void setExpire(Date expire) {
this.expire = expire;
}
@Column(name = "priority", nullable = false) @Column(name = "priority", nullable = false)
private int priority; private int priority = 10;
@JoinColumns({
@JoinColumn(name = "news_group_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false) @ManyToOne(optional = false)
@JoinColumn(nullable = false, name = "group_id")
private NewsGroup group; private NewsGroup group;
public News() { public News() {
super(); super();
} }
public News(LanEvent event, String title, int priority) { public News(NewsGroup group, String title, int priority) {
super(event); super();
this.group = group;
this.title = title; this.title = title;
this.priority = priority; this.priority = priority;
} }
public News(NewsGroup newsgroup) {
super();
group = newsgroup;
}
public String getTitle() { public String getTitle() {
return title; return title;
} }
...@@ -99,22 +107,6 @@ public class News extends GenericEventChild { ...@@ -99,22 +107,6 @@ public class News extends GenericEventChild {
this.bodyAbstract = abstract1; this.bodyAbstract = abstract1;
} }
public Calendar getPublish() {
return publish;
}
public void setPublish(Calendar publish) {
this.publish = publish;
}
public Calendar getExpire() {
return expire;
}
public void setExpire(Calendar expire) {
this.expire = expire;
}
public int getPriority() { public int getPriority() {
return priority; return priority;
} }
......
...@@ -10,35 +10,32 @@ import javax.persistence.CascadeType; ...@@ -10,35 +10,32 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OrderBy; import javax.persistence.OrderBy;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.PrivateOwned;
/** /**
* *
* @author jkj * @author jkj
*/ */
@Entity @Entity
@Table(name = "news_groups", uniqueConstraints = @UniqueConstraint(columnNames = { "event_id", "group_name" })) @Table(name = "news_groups", uniqueConstraints = @UniqueConstraint(columnNames = { "event_id", "group_name" }))
@NamedQueries({ public class NewsGroup extends GenericEntity {
@NamedQuery(name = "NewsGroup.findAll", query = "SELECT n FROM NewsGroup n"),
@NamedQuery(name = "NewsGroup.findByName", query = "SELECT n FROM NewsGroup n WHERE n.name = :name"),
@NamedQuery(name = "NewsGroup.findByDescription", query = "SELECT n FROM NewsGroup n WHERE n.description = :description"),
@NamedQuery(name = "NewsGroup.findByPriority", query = "SELECT n FROM NewsGroup n WHERE n.priority = :priority") })
public class NewsGroup extends GenericEventChild {
/** /**
* *
*/ */
private static final long serialVersionUID = 4014463478275469802L; private static final long serialVersionUID = 4014463478275469802L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "group_name", nullable = false) @Column(name = "group_name", nullable = false)
private String name; private String name;
...@@ -50,19 +47,15 @@ public class NewsGroup extends GenericEventChild { ...@@ -50,19 +47,15 @@ public class NewsGroup extends GenericEventChild {
@Column(name = "priority", nullable = false) @Column(name = "priority", nullable = false)
private int priority; private int priority;
@ManyToOne(optional = false) @ManyToOne()
@JoinColumns({ @JoinColumn(name = "writer_role_id", referencedColumnName = Role.ID_COLUMN, nullable = false), }) @JoinColumn(name = "writer_role_id", referencedColumnName = Role.ID_COLUMN)
private Role writerRole; private Role writerRole;
@OrderBy("priority") @OrderBy("priority")
@OneToMany(cascade = CascadeType.ALL, mappedBy = "group") @OneToMany(cascade = CascadeType.ALL, mappedBy = "group")
private List<News> news; private List<News> news;
@ManyToMany @ManyToMany()
@JoinTable(name = "read_group_roles", joinColumns = {
@JoinColumn(name = "read_group_id", referencedColumnName = ID_COLUMN),
@JoinColumn(name = "event_id", referencedColumnName = EVENT_ID_COLUMN) }, inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) })
private List<Role> readerRoles; private List<Role> readerRoles;
public NewsGroup() { public NewsGroup() {
...@@ -70,13 +63,8 @@ public class NewsGroup extends GenericEventChild { ...@@ -70,13 +63,8 @@ public class NewsGroup extends GenericEventChild {
} }
public NewsGroup(LanEvent event) { public NewsGroup(LanEvent event) {
super(event); super();
} this.setEvent(event);
public NewsGroup(LanEvent event, String groupName, int priority) {
super(event);
this.name = groupName;
this.priority = priority;
} }
public String getName() { public String getName() {
...@@ -104,6 +92,8 @@ public class NewsGroup extends GenericEventChild { ...@@ -104,6 +92,8 @@ public class NewsGroup extends GenericEventChild {
} }
@OrderBy("priority") @OrderBy("priority")
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
@PrivateOwned
public List<News> getNews() { public List<News> getNews() {
return news; return news;
} }
...@@ -127,4 +117,12 @@ public class NewsGroup extends GenericEventChild { ...@@ -127,4 +117,12 @@ public class NewsGroup extends GenericEventChild {
public List<Role> getReaderRoles() { public List<Role> getReaderRoles() {
return readerRoles; return readerRoles;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -15,10 +15,7 @@ import javax.persistence.CascadeType; ...@@ -15,10 +15,7 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
...@@ -33,19 +30,28 @@ import javax.persistence.UniqueConstraint; ...@@ -33,19 +30,28 @@ import javax.persistence.UniqueConstraint;
@Table(name = "printed_cards", uniqueConstraints = { @Table(name = "printed_cards", uniqueConstraints = {
@UniqueConstraint(columnNames = { "event_id", "rfid_uid", }), @UniqueConstraint(columnNames = { "event_id", "rfid_uid", }),
@UniqueConstraint(columnNames = { "event_id", "barcode" }) }) @UniqueConstraint(columnNames = { "event_id", "barcode" }) })
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "PrintedCard.findAll", query = "SELECT p FROM PrintedCard p"), // @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.findByEnabled", query = "SELECT p FROM PrintedCard p WHERE p.enabled = :enabled"), // @NamedQuery(name = "PrintedCard.findByPrintTime", query =
@NamedQuery(name = "PrintedCard.findByRfidUid", query = "SELECT p FROM PrintedCard p WHERE p.rfidUid = :rfidUid") }) // "SELECT p FROM PrintedCard p WHERE p.printTime = :printTime"),
public class PrintedCard extends GenericEventChild { // @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 extends GenericEntity {
/** /**
* *
*/ */
private static final long serialVersionUID = 8603481931116401027L; private static final long serialVersionUID = 8603481931116401027L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "print_time") @Column(name = "print_time")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar printTime; private Calendar printTime;
...@@ -65,9 +71,7 @@ public class PrintedCard extends GenericEventChild { ...@@ -65,9 +71,7 @@ public class PrintedCard extends GenericEventChild {
@Column(name = "print_count", nullable = false) @Column(name = "print_count", nullable = false)
private int printCount = 0; private int printCount = 0;
@JoinColumns({ @JoinColumn(name = "current_location_id", referencedColumnName = "id")
@JoinColumn(name = "current_location_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne @ManyToOne
private Location currentLocation; private Location currentLocation;
...@@ -85,12 +89,21 @@ public class PrintedCard extends GenericEventChild { ...@@ -85,12 +89,21 @@ public class PrintedCard extends GenericEventChild {
this.enabled = cardEnabled; this.enabled = cardEnabled;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public PrintedCard() { public PrintedCard() {
super(); super();
} }
public PrintedCard(LanEvent event) { public PrintedCard(LanEvent event) {
super(event); super();
this.event = event;
} }
public Calendar getPrintTime() { public Calendar getPrintTime() {
......
...@@ -10,11 +10,8 @@ import java.util.List; ...@@ -10,11 +10,8 @@ import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
...@@ -24,12 +21,14 @@ import javax.persistence.UniqueConstraint; ...@@ -24,12 +21,14 @@ import javax.persistence.UniqueConstraint;
*/ */
@Entity @Entity
@Table(name = "readers", uniqueConstraints = { @UniqueConstraint(columnNames = { "reader_ident", "event_id" }) }) @Table(name = "readers", uniqueConstraints = { @UniqueConstraint(columnNames = { "reader_ident", "event_id" }) })
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "Reader.findAll", query = "SELECT r FROM Reader r"), // @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.findByIdentification", query =
@NamedQuery(name = "Reader.findByDescription", query = "SELECT r FROM Reader r WHERE r.description = :description") }) // "SELECT r FROM Reader r WHERE r.identification = :identification"),
public class Reader extends GenericEventChild { // @NamedQuery(name = "Reader.findByDescription", query =
// "SELECT r FROM Reader r WHERE r.description = :description") })
public class Reader extends GenericEntity {
public Reader(LanEvent ev, String ident) { public Reader(LanEvent ev, String ident) {
this(ev); this(ev);
...@@ -41,9 +40,15 @@ public class Reader extends GenericEventChild { ...@@ -41,9 +40,15 @@ public class Reader extends GenericEventChild {
} }
public Reader(LanEvent ev) { public Reader(LanEvent ev) {
super(ev); super();
this.setEvent(ev);
} }
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(nullable = false) @Column(nullable = false)
private Integer gamepoints = 0; private Integer gamepoints = 0;
@Column(nullable = false) @Column(nullable = false)
...@@ -61,9 +66,7 @@ public class Reader extends GenericEventChild { ...@@ -61,9 +66,7 @@ public class Reader extends GenericEventChild {
@Column(name = "reader_description") @Column(name = "reader_description")
private String description; private String description;
@JoinColumns({ @JoinColumn(name = "location_id", referencedColumnName = "id")
@JoinColumn(name = "location_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@ManyToOne @ManyToOne
private Location location; private Location location;
...@@ -171,4 +174,12 @@ public class Reader extends GenericEventChild { ...@@ -171,4 +174,12 @@ public class Reader extends GenericEventChild {
public List<ReaderEvent> getEvents() { public List<ReaderEvent> getEvents() {
return events; return events;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -11,10 +11,7 @@ import java.util.Calendar; ...@@ -11,10 +11,7 @@ import java.util.Calendar;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
...@@ -24,12 +21,7 @@ import javax.persistence.TemporalType; ...@@ -24,12 +21,7 @@ import javax.persistence.TemporalType;
*/ */
@Entity @Entity
@Table(name = "reader_events") @Table(name = "reader_events")
@NamedQueries({ public class ReaderEvent extends GenericEntity {
@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 extends GenericEventChild {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -43,20 +35,15 @@ public class ReaderEvent extends GenericEventChild { ...@@ -43,20 +35,15 @@ public class ReaderEvent extends GenericEventChild {
@Column(nullable = false) @Column(nullable = false)
private Integer gamePoint = 0; private Integer gamePoint = 0;
@JoinColumns({ @JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = false, updatable = false)
@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) @ManyToOne(optional = false)
private PrintedCard printedCard; private PrintedCard printedCard;
@JoinColumns({ @JoinColumn(name = "readers_id", referencedColumnName = "id", nullable = false, updatable = false)
@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, cascade = ALL) @ManyToOne(optional = false, cascade = ALL)
private Reader reader; private Reader reader;
public ReaderEvent(LanEvent event, Calendar eventTime, PrintedCard card, Reader reader) { public ReaderEvent(Calendar eventTime, PrintedCard card, Reader reader) {
this(event);
this.time = eventTime; this.time = eventTime;
this.printedCard = card; this.printedCard = card;
this.reader = reader; this.reader = reader;
...@@ -66,10 +53,6 @@ public class ReaderEvent extends GenericEventChild { ...@@ -66,10 +53,6 @@ public class ReaderEvent extends GenericEventChild {
super(); super();
} }
public ReaderEvent(LanEvent event) {
super(event);
}
public Calendar getTime() { public Calendar getTime() {
return time; return time;
} }
......
...@@ -3,6 +3,7 @@ package fi.insomnia.bortal.enums; ...@@ -3,6 +3,7 @@ package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.PollPermission; import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
...@@ -16,7 +17,8 @@ public enum BortalApplication { ...@@ -16,7 +17,8 @@ public enum BortalApplication {
BILL("Creating, and managing bills", BillPermission.class), BILL("Creating, and managing bills", BillPermission.class),
POLL("Poll stuff", PollPermission.class), POLL("Poll stuff", PollPermission.class),
MAP("Map management ", MapPermission.class), MAP("Map management ", MapPermission.class),
SHOP("Product & shop management", ShopPermission.class); SHOP("Product & shop management", ShopPermission.class),
NEWS("News and other dynamic data", NewsPermission.class);
// BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)", // BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)",
// BillPermission.class) // BillPermission.class)
// USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "), // USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
......
...@@ -5,6 +5,8 @@ import fi.insomnia.bortal.enums.BortalApplication; ...@@ -5,6 +5,8 @@ import fi.insomnia.bortal.enums.BortalApplication;
public enum NewsPermission implements IAppPermission { public enum NewsPermission implements IAppPermission {
MANAGE("Manage newsgroups"); MANAGE("Manage newsgroups");
public static final String S_MANAGE = "NEWS/MANAGE";
private String description; private String description;
private String fullName; private String fullName;
...@@ -15,7 +17,7 @@ public enum NewsPermission implements IAppPermission { ...@@ -15,7 +17,7 @@ public enum NewsPermission implements IAppPermission {
@Override @Override
public BortalApplication getParent() { public BortalApplication getParent() {
return BortalApplication.SHOP; return BortalApplication.NEWS;
} }
@Override @Override
......
package fi.insomnia.bortal.enums.apps; package fi.insomnia.bortal.enums.apps;
public enum SpecialPermission { public enum SpecialPermission {
SUPERADMIN, USER, ANONYMOUS; SUPERADMIN, USER, ANONYMOUS;
public static final String S_USER = "USER"; public static final String S_USER = "USER";
......
...@@ -12,7 +12,12 @@ public enum UserPermission implements IAppPermission { ...@@ -12,7 +12,12 @@ public enum UserPermission implements IAppPermission {
READ_ROLES("View all roles."), READ_ROLES("View all roles."),
WRITE_ROLES("Modify roles"), WRITE_ROLES("Modify roles"),
VIEW_ACCOUNTEVENTS("Show other users account events"), VIEW_ACCOUNTEVENTS("Show other users account events"),
MODIFY_ACCOUNTEVENTS("Modify Account events"); MODIFY_ACCOUNTEVENTS("Modify Account events"),
ANYUSER("All users have this anyways"),
;
;
public static final String S_VIEW_ALL = "USER/VIEW_ALL"; public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY"; public static final String S_MODIFY = "USER/MODIFY";
...@@ -24,6 +29,7 @@ public enum UserPermission implements IAppPermission { ...@@ -24,6 +29,7 @@ public enum UserPermission implements IAppPermission {
public static final String S_WRITE_ROLES = "USER/WRITE_ROLES"; public static final String S_WRITE_ROLES = "USER/WRITE_ROLES";
public static final String S_VIEW_ACCOUNTEVENTS = "USER/VIEW_ACCOUNTEVENTS"; public static final String S_VIEW_ACCOUNTEVENTS = "USER/VIEW_ACCOUNTEVENTS";
public static final String S_MODIFY_ACCOUNTEVENTS = "USER/MODIFY_ACCOUNTEVENTS"; public static final String S_MODIFY_ACCOUNTEVENTS = "USER/MODIFY_ACCOUNTEVENTS";
public static final String S_ANYUSER = "USER/ANYUSER";
private String description; private String description;
private String fullName; private String fullName;
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<pageflow:Pageflow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pageflow="http://www.sybase.com/suade/pageflow" id="pf13012981621060" configfile="/LanBortalWeb/WebContent/WEB-INF/faces-config.xml"> <pageflow:Pageflow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pageflow="http://www.sybase.com/suade/pageflow" id="pf13012981621060" configfile="/LanBortalWeb/WebContent/WEB-INF/faces-config.xml">
<nodes xsi:type="pageflow:PFPage" name="*" x="120" y="60" id="pf131682121330014" referenceLink="//@navigationRule.0/@fromViewId|" outlinks="pf131682121330015" path="*"/> <nodes xsi:type="pageflow:PFPage" name="*" x="120" y="60" id="pf131682121330014" referenceLink="//@navigationRule.0/@fromViewId|" outlinks="pf131682121330015 pf13196506256640" path="*"/>
<nodes xsi:type="pageflow:PFPage" name="auth/logoutResponse" x="288" y="60" id="pf131682121330016" referenceLink="//@navigationRule.0/@navigationCase.0/@toViewId|" inlinks="pf131682121330015" path="/auth/logoutResponse"/> <nodes xsi:type="pageflow:PFPage" name="auth/logoutResponse" x="288" y="60" id="pf131682121330016" referenceLink="//@navigationRule.0/@navigationCase.0/@toViewId|" inlinks="pf131682121330015" path="/auth/logoutResponse"/>
<nodes xsi:type="pageflow:PFPage" name="place/placemap" x="276" y="228" id="pf13168224196920" referenceLink="//@navigationRule.1/@navigationCase.0/@toViewId|" outlinks="pf13168224196921" inlinks="pf13168224196921" path="/place/placemap"/> <nodes xsi:type="pageflow:PFPage" name="place/placemap" x="276" y="228" id="pf13168224196920" referenceLink="//@navigationRule.1/@navigationCase.0/@toViewId|" outlinks="pf13168224196921" inlinks="pf13168224196921" path="/place/placemap"/>
<nodes xsi:type="pageflow:PFPage" name="user/sendPicture" id="pf13196506256641" referenceLink="//@navigationRule.0/@navigationCase.1/@toViewId|" inlinks="pf13196506256640" path="/user/sendPicture"/>
<links id="pf131682121330015" target="pf131682121330016" source="pf131682121330014" outcome="logoutDone" redirect="true"/> <links id="pf131682121330015" target="pf131682121330016" source="pf131682121330014" outcome="logoutDone" redirect="true"/>
<links id="pf13168224196921" target="pf13168224196920" source="pf13168224196920" outcome="placesReserved" redirect="true"/> <links id="pf13168224196921" target="pf13168224196920" source="pf13168224196920" outcome="placesReserved" redirect="true"/>
<links id="pf13196506256640" target="pf13196506256641" source="pf131682121330014" outcome="redirToUserimage" redirect="true"/>
</pageflow:Pageflow> </pageflow:Pageflow>
...@@ -44,13 +44,25 @@ ...@@ -44,13 +44,25 @@
<navigation-rule> <navigation-rule>
<from-view-id>*</from-view-id> <from-view-id>*</from-view-id>
<navigation-case> <navigation-case>
<from-outcome>logoutDone</from-outcome> <from-outcome>logoutDone</from-outcome>
<to-view-id>/auth/logoutResponse</to-view-id> <to-view-id>/auth/logoutResponse</to-view-id>
<redirect/> <redirect/>
</navigation-case> </navigation-case>
<navigation-case>
<from-outcome>redirToUserimage</from-outcome>
<to-view-id>/user/sendPicture</to-view-id>
<redirect>
<view-param>
<name>userid</name>
<value>#{userView.user.id}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule> </navigation-rule>
<!-- </navigation-rule> --> <!-- </navigation-rule> -->
<!-- <navigation-rule> --> <!-- <navigation-rule> -->
<!-- <from-view-id>/role/edit.xhtml</from-view-id> --> <!-- <from-view-id>/role/edit.xhtml</from-view-id> -->
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" <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" 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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="2.5"> id="WebApp_ID" version="3.0">
<display-name>LanBortalWeb</display-name> <display-name>LanBortalWeb</display-name>
<session-config> <session-config>
<session-timeout>30</session-timeout> <session-timeout>30</session-timeout>
...@@ -42,6 +42,25 @@ ...@@ -42,6 +42,25 @@
<url-pattern>/Userimage</url-pattern> <url-pattern>/Userimage</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet> <servlet>
<servlet-name>UserCardServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UserCardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserCardServlet</servlet-name>
<url-pattern>/UserCard</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CardTemplateServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.CardTemplateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CardTemplateServlet</servlet-name>
<url-pattern>/CardTemplate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PlaceMap</servlet-name> <servlet-name>PlaceMap</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class> <servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class>
</servlet> </servlet>
......
<!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:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.game.list" />
<ui:define name="content">
<ui:repeat var="news" value="#{gameView.indexnews.news}">
<h:outputText escape="false" value="#{news.body}" />
</ui:repeat>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['printedCard.id']}" /> <h:outputText value="${i18n['printedCard.id']}" />
</f:facet> </f:facet>
<h:outputText value="#{card.id.id}" /> <h:outputText value="#{card.id}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
> >
<f:view contentType="text/html" locale="#{sessionHandler.locale}"> <f:view contentType="text/html" locale="#{sessionHandler.locale}">
<h:head> <h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{layoutView.getHeader()}" /></title> <title><h:outputText value="#{layoutView.getHeader()}" /></title>
...@@ -35,10 +35,7 @@ ...@@ -35,10 +35,7 @@
<ul class="menu" jsfc="ui:repeat" var="menuitem" value="#{menuView.topmenu}"> <ul class="menu" jsfc="ui:repeat" var="menuitem" value="#{menuView.topmenu}">
<li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}" <li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}"
styleClass="#{menuitem.selected?'active':''}" styleClass="#{menuitem.selected?'active':''}"
> /></li>
<f:param name="cid" value="#{menuitem.cid?userView.conversationId:null}" />
</h:link></li>
</ul> </ul>
</div> </div>
<div id="container" class="top" /> <div id="container" class="top" />
...@@ -58,9 +55,8 @@ ...@@ -58,9 +55,8 @@
/> />
<li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}" <li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}"
styleClass="#{menuitem.selected?'active':''}" styleClass="#{menuitem.selected?'active':''}"
> />
<f:param name="cid" value="#{menuitem.cid?userView.conversationId:null}" /> </li>
</h:link></li>
</ui:repeat> </ui:repeat>
</ul> </ul>
</div> </div>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<map:setBuyable /> <map:setBuyable />
<img width="600" src="#{request.contextPath}/PlaceMap?mapid=#{mapView.activeMap.id.id}" alt="placeimage" /> <img width="600" src="#{request.contextPath}/PlaceMap?mapid=#{mapView.activeMap.id}" alt="placeimage" />
<map:genplaces /> <map:genplaces />
<map:submitBg /> <map:submitBg />
......
<!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:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{newsgroupView.initCreate}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<news:edit commitaction="#{newsgroupView.createNew()}" commitvalue="#{i18n['newsgroup.create']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:account="http://java.sun.com/jsf/composite/tools/account" xmlns:c="http://java.sun.com/jsp/jstl/core"
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
...@@ -14,44 +13,43 @@ ...@@ -14,44 +13,43 @@
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.user.edit" /> <ui:param name="thispage" value="page.user.edit" />
<ui:define name="content"> <ui:define name="content">
<h:form id="billform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['newsgroup.name']}:" />
<h:inputText id="name" value="#{newsgroupView.newsgroup.name}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="priority" value="#{i18n['newsgroup.priority']}:" /> <news:edit commitaction="#{newsgroupView.saveNewsgroup()}" commitvalue="#{i18n['newsgroup.save']}" />
<h:inputText id="priority" value="#{newsgroupView.newsgroup.priority}">
<f:validateLongRange minimum="1" maximum="9999999" />
</h:inputText>
<h:message for="priority" />
<h:outputLabel for="writerrole" value="#{i18n['newsgroup.writerrole']}:" /> <h2>#{i18n['newsgroup.contents']}</h2>
<h:selectOneMenu converter="#{roleConverter}" id="writerrole" <h:form>
value="#{newsgroupView.newsgroup.writerRole}" <h:commandButton action="#{newsgroupView.createNews}" value="#{i18n['newsgroup.createNewNews']}" />
>
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectOneMenu>
<h:message for="writerrole" />
<h:outputLabel for="readroles" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="readroles"
value="#{newsgroupView.newsgroup.readerRoles}"
>
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="readroles" />
</h:panelGrid>
<h:commandButton rendered="#{empty newsgroupView.newsgroup.id}" action="#{newsgroupView.createNew()}"
value="#{i18n['newsgroup.create']}"
/>
<h:commandButton rendered="#{!empty newsgroupView.newsgroup.id}" action="#{newsgroupView.saveNewsgroup()}"
value="#{i18n['newsgroup.save']}"
/>
</h:form> </h:form>
<h:dataTable var="news" value="#{newsgroupView.newsgroup.news}">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.title']}" />
</f:facet>
<h:outputText value="#{news.title}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.publish']}" />
</f:facet>
<h:outputText value="#{news.publish.time}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.expire']}" />
</f:facet>
<h:outputText value="#{news.expire.time}" />
</h:column>
<h:column>
<h:link outcome="/news/editNews" value="#{i18n['news.edit']}">
<f:param name="newsid" value="#{news.id}" />
</h:link>
<h:outputText value="#{news.publish.time}" />
</h:column>
</h:dataTable>
</ui:define> </ui:define>
</ui:composition> </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:f="http://java.sun.com/jsf/core"
xmlns:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="newsid" value="#{newsgroupView.newsid}" />
<f:event type="preRenderView" listener="#{newsgroupView.initNews}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript target="head" library="script" name="textinputs_jquery.js" />
<h:button onclick="var sel = $('#newsform:editor').getSelection(); alert(sel.start +', ' + sel.end);" value="Click me"/>
<h:form id="newsform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['news.title']}:" />
<h:inputText id="name" value="#{newsgroupView.news.title}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="abstract" value="#{i18n['news.abstract']}:" />
<h:inputTextarea id="abstract" value="#{newsgroupView.news.bodyAbstract}" />
<h:message for="abstract" />
<h:outputLabel for="publish" value="#{i18n['news.publish']}:" />
<h:inputText id="publish" value="#{newsgroupView.news.publish}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:message for="publish" />
<h:outputLabel for="expire" value="#{i18n['news.expire']}:" />
<h:inputText id="expire" value="#{newsgroupView.news.expire}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:message for="expire" />
</h:panelGrid>
<p:editor id="editor" value="#{newsgroupView.news.body}" />
<h:commandButton id="commit" action="#{newsgroupView.saveNews()}" value="#{i18n['news.save']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<f:facet name="header"> <f:facet name="header">
ID ID
</f:facet> </f:facet>
<h:outputText value="#{newsgroup.id.id}" /> <h:outputText value="#{newsgroup.id}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</h:column> </h:column>
<h:column> <h:column>
<h:link outcome="/news/edit" value="#{i18n['newsgroup.edit']}"> <h:link outcome="/news/edit" value="#{i18n['newsgroup.edit']}">
<f:param name="newsgroupid" value="#{newsgroup.id.id}" /> <f:param name="newsgroupid" value="#{newsgroup.id}" />
</h:link> </h:link>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
......
...@@ -3,26 +3,21 @@ ...@@ -3,26 +3,21 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:c="http://java.sun.com/jsp/jstl/core" 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" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:f="http://java.sun.com/jsf/core"
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.insertToken" /> <ui:param name="thispage" value="page.place.insertToken" />
<f:metadata> <f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" /> <f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" /> <f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata> </f:metadata>
<ui:define name="title">
<h1>#{i18n['user.accountevents']}</h1>
<users:usertabs tabId="token" />
</ui:define>
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['placetoken.pageHeader']}</h1>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
...@@ -3,23 +3,39 @@ ...@@ -3,23 +3,39 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:c="http://java.sun.com/jsp/jstl/core" 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"> xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.mygroups" /> <ui:param name="thispage" value="page.place.mygroups" />
<f:metadata> <f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" /> <f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" /> <f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata> </f:metadata>
<ui:define name="content"> <ui:define name="title">
<h1>#{i18n['placegroupview.header']}</h1> <h1>#{i18n['placegroupview.header']}</h1>
<p>#{i18n['placegroupview.toptext']}</p> <users:usertabs tabId="groups" />
</ui:define>
<ui:define name="content">
<h2>#{i18n['placetoken.pageHeader']}</h2>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" <h2>#{i18n['placetoken.placelist']}</h2>
value="#{i18n['placegroupview.noMemberships']}" /> <p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform"> <h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<p><a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a></p> <p>
<a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a>
</p>
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member"> <h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
...@@ -35,7 +51,8 @@ ...@@ -35,7 +51,8 @@
</f:facet> </f:facet>
<h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" /> <h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" />
<h:outputText rendered="#{!empty member.user}" <h:outputText rendered="#{!empty member.user}"
value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" /> value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})"
/>
</h:column> </h:column>
<h:column> <h:column>
...@@ -43,13 +60,15 @@ ...@@ -43,13 +60,15 @@
<h:outputText value="#{i18n['placegroupview.groupCreator']}" /> <h:outputText value="#{i18n['placegroupview.groupCreator']}" />
</f:facet> </f:facet>
<h:outputText <h:outputText
value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" /> value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})"
/>
</h:column> </h:column>
<h:column> <h:column>
<h:commandButton rendered="#{placeGroupView.canModify(member) and !empty member.user}" <h:commandButton rendered="#{placeGroupView.canModify(member) and !empty member.user}"
action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}" /> action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}"
/>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<composite:implementation> <composite:implementation>
<h:form id="productform"> <h:form id="productform">
<h:inputHidden value="#{mapManageView.map.id.id}" /> <h:inputHidden value="#{mapManageView.map.id}" />
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventmap.name']}:" /> <h:outputLabel value="#{i18n['eventmap.name']}:" />
<h:inputText value="#{mapManageView.map.name}" /> <h:inputText value="#{mapManageView.map.name}" />
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['map.id']}" /> <h:outputText value="#{i18n['map.id']}" />
</f:facet> </f:facet>
<h:outputText value="#{map.id.id}" /> <h:outputText value="#{map.id}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
</h:column> </h:column>
<h:column> <h:column>
<h:link value="#{i18n['map.edit']}" outcome="/map/edit"> <h:link value="#{i18n['map.edit']}" outcome="/map/edit">
<f:param name="mapid" value="#{map.id.id}" /> <f:param name="mapid" value="#{map.id}" />
</h:link> </h:link>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<composite:implementation> <composite:implementation>
<h:form> <h:form>
<p><input type="hidden" name="id" value="#{mapManageView.map.id.id}" /></p> <p><input type="hidden" name="id" value="#{mapManageView.map.id}" /></p>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['setBuyable.like']}" /> <h:outputLabel value="#{i18n['setBuyable.like']}" />
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
> >
<p> <p>
<input type="hidden" name="id" value="#{mapManageView.map.id.id}" /> Lähetä kartan taustakuva <input type="hidden" name="id" value="#{mapManageView.map.id}" /> Lähetä kartan taustakuva
</p> </p>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
......
<?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:attribute name="commitvalue" required="true" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
<h:form id="newsform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['newsgroup.name']}:" />
<h:inputText id="name" value="#{newsgroupView.newsgroup.name}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="priority" value="#{i18n['newsgroup.priority']}:" />
<h:inputText id="priority" value="#{newsgroupView.newsgroup.priority}">
<f:validateLongRange minimum="1" maximum="9999999" />
</h:inputText>
<h:message for="priority" />
<h:outputLabel for="writerrole" value="#{i18n['newsgroup.writerRole']}:" />
<h:selectOneMenu converter="#{roleConverter}" id="writerrole" value="#{newsgroupView.newsgroup.writerRole}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectOneMenu>
<h:message for="writerrole" />
<h:outputLabel for="readroles" value="#{i18n['newsgroup.readerRole']}" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="readroles"
value="#{newsgroupView.newsgroup.readerRoles}"
>
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="readroles" />
</h:panelGrid>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:form>
</composite:implementation>
</html>
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<composite:implementation> <composite:implementation>
<h:form id="productform"> <h:form id="productform">
<h:inputHidden value="#{productView.product.id.id}" /> <h:inputHidden value="#{productView.product.id}" />
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['product.name']}:" /> <h:outputLabel value="#{i18n['product.name']}:" />
<h:inputText value="#{productView.product.name}" /> <h:inputText value="#{productView.product.name}" />
...@@ -46,12 +46,12 @@ ...@@ -46,12 +46,12 @@
</h:form> </h:form>
<h:commandButton rendered="#{!empty productView.product.id.id}" action="#{productView.createDiscount}" <h:commandButton rendered="#{!empty productView.product.id}" action="#{productView.createDiscount}"
value="#{i18n['product.createDiscount']}" value="#{i18n['product.createDiscount']}"
/> />
<h:form id="discounts" rendered="#{!empty productView.product.id.id and !empty productView.product.discounts}"> <h:form id="discounts" rendered="#{!empty productView.product.id and !empty productView.product.discounts}">
<h:dataTable border="1" id="discount" value="#{productView.product.discounts}" var="discount"> <h:dataTable border="1" id="discount" value="#{productView.product.discounts}" var="discount">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<h:column> <h:column>
<h:link outcome="/product/edit" value="#{i18n['product.edit']}"> <h:link outcome="/product/edit" value="#{i18n['product.edit']}">
<f:param name="productid" value="#{product.id.id}" /> <f:param name="productid" value="#{product.id}" />
</h:link> </h:link>
</h:column> </h:column>
<h:column> <h:column>
......
...@@ -53,23 +53,27 @@ ...@@ -53,23 +53,27 @@
<h:outputText value="#{event.event.gamePoint}" /> <h:outputText value="#{event.event.gamePoint}" />
</h:column> </h:column>
<h:column> <h:column>
<h:link outcome="/rfid/assocToUser" value="#{i18n['readerevent.associateToUser']}"> <h:link rendered="#{empty event.event}" outcome="/rfid/assocToUser" value="#{i18n['readerevent.associateToUser']}">
<f:param value="#{event.tag}" var="tag" /> <f:param value="#{event.tag}" var="tag" />
</h:link> </h:link>
<h:commandButton rendered="#{empty event.event}" action="#{readerView.selectEvent()}"
value="#{i18n['readerevent.associateToUser']}" <h:link rendered="#{!empty event.event}" outcome="/user/edit" value="#{i18n['user.edit']}">
/> <f:param value="#{event.event.printedCard.user.id}" var="userid" />
<h:commandButton rendered="#{!empty event.event}" action="#{readerView.selectEvent()}" </h:link>
value="#{i18n['readerevent.shopToUser']}"
/> <!-- <h:commandButton rendered="#{!empty event.event}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" /> -->
<!-- <h:commandButton rendered="#{empty event.event}" action="#{readerView.selectEvent()}" -->
<!-- value="#{i18n['readerevent.associateToUser']}" -->
<!-- /> -->
<!-- <h:commandButton rendered="#{!empty event.event}" action="#{readerView.selectEvent()}" -->
<!-- value="#{i18n['readerevent.shopToUser']}" -->
<!-- /> -->
</h:column> </h:column>
<h:column> <h:column>
<h:commandButton rendered="#{!empty event.event}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" />
</h:column>
<h:column rendered="#{sessionHandler.hasPermission('GAME','WRITE')}">
<h:commandButton action="#{readerView.editGameEvent()}" value="Game" />
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</h:form> </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" 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:attribute name="tabId" type="java.lang.String" required="true" />
</composite:interface>
<composite:implementation>
<h:outputStylesheet library="style" name="tabnav.css" />
<ui:fragment rendered="#{!userView.currentUser}">
<h2>#{i18n['usertitle.managingUser']}: #{userView.user.wholeName}</h2>
</ui:fragment>
<div id="#{cc.attrs.tabId}">
<ul id="usertabnav">
<li class="edit"><h:link outcome="/user/edit" value="#{i18n['user.edit']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="chpass"><h:link outcome="/user/changePassword" value="#{i18n['submenu.user.changePassword']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="accountevents"><h:link outcome="/user/accountEvents" value="#{i18n['submenu.user.accountEvents']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="groups"><h:link outcome="/place/myGroups" value="#{i18n['submenu.place.myGroups']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="picture"><h:link outcome="/user/sendPicture" value="#{i18n['submenu.user.sendPicture']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
</ul>
</div>
</composite:implementation>
</html>
/*
Rangy Text Inputs, a cross-browser textarea and text input library plug-in for jQuery.
Part of Rangy, a cross-browser JavaScript range and selection library
http://code.google.com/p/rangy/
Depends on jQuery 1.0 or later.
Copyright 2010, Tim Down
Licensed under the MIT license.
Version: 0.1.205
Build date: 5 November 2010
*/
(function(n){function o(e,g){var a=typeof e[g];return a==="function"||!!(a=="object"&&e[g])||a=="unknown"}function p(e,g,a){if(g<0)g+=e.value.length;if(typeof a=="undefined")a=g;if(a<0)a+=e.value.length;return{start:g,end:a}}function k(){return typeof document.body=="object"&&document.body?document.body:document.getElementsByTagName("body")[0]}var i,h,q,l,r,s,t,u,m;n(document).ready(function(){function e(a,b){return function(){var c=this.jquery?this[0]:this,d=c.nodeName.toLowerCase();if(c.nodeType==
1&&(d=="textarea"||d=="input"&&c.type=="text")){c=[c].concat(Array.prototype.slice.call(arguments));c=a.apply(this,c);if(!b)return c}if(b)return this}}var g=document.createElement("textarea");k().appendChild(g);if(typeof g.selectionStart!="undefined"&&typeof g.selectionEnd!="undefined"){i=function(a){return{start:a.selectionStart,end:a.selectionEnd,length:a.selectionEnd-a.selectionStart,text:a.value.slice(a.selectionStart,a.selectionEnd)}};h=function(a,b,c){b=p(a,b,c);a.selectionStart=b.start;a.selectionEnd=
b.end};m=function(a,b){if(b)a.selectionEnd=a.selectionStart;else a.selectionStart=a.selectionEnd}}else if(o(g,"createTextRange")&&typeof document.selection=="object"&&document.selection&&o(document.selection,"createRange")){i=function(a){var b=0,c=0,d,f,j;if((j=document.selection.createRange())&&j.parentElement()==a){f=a.value.length;d=a.value.replace(/\r\n/g,"\n");c=a.createTextRange();c.moveToBookmark(j.getBookmark());j=a.createTextRange();j.collapse(false);if(c.compareEndPoints("StartToEnd",j)>
-1)b=c=f;else{b=-c.moveStart("character",-f);b+=d.slice(0,b).split("\n").length-1;if(c.compareEndPoints("EndToEnd",j)>-1)c=f;else{c=-c.moveEnd("character",-f);c+=d.slice(0,c).split("\n").length-1}}}return{start:b,end:c,length:c-b,text:a.value.slice(b,c)}};h=function(a,b,c){b=p(a,b,c);c=a.createTextRange();var d=b.start-(a.value.slice(0,b.start).split("\r\n").length-1);c.collapse(true);if(b.start==b.end)c.move("character",d);else{c.moveEnd("character",b.end-(a.value.slice(0,b.end).split("\r\n").length-
1));c.moveStart("character",d)}c.select()};m=function(a,b){var c=document.selection.createRange();c.collapse(b);c.select()}}else{k().removeChild(g);window.console&&window.console.log&&window.console.log("TextInputs module for Rangy not supported in your browser. Reason: No means of finding text input caret position");return}k().removeChild(g);l=function(a,b,c,d){var f;if(b!=c){f=a.value;a.value=f.slice(0,b)+f.slice(c)}d&&h(a,b,b)};q=function(a){var b=i(a);l(a,b.start,b.end,true)};u=function(a){var b=
i(a),c;if(b.start!=b.end){c=a.value;a.value=c.slice(0,b.start)+c.slice(b.end)}h(a,b.start,b.start);return b.text};r=function(a,b,c,d){var f=a.value;a.value=f.slice(0,c)+b+f.slice(c);if(d){b=c+b.length;h(a,b,b)}};s=function(a,b){var c=i(a),d=a.value;a.value=d.slice(0,c.start)+b+d.slice(c.end);c=c.start+b.length;h(a,c,c)};t=function(a,b,c){var d=i(a),f=a.value;a.value=f.slice(0,d.start)+b+d.text+c+f.slice(d.end);b=d.start+b.length;h(a,b,b+d.length)};n.fn.extend({getSelection:e(i,false),setSelection:e(h,
true),collapseSelection:e(m,true),deleteSelectedText:e(q,true),deleteText:e(l,true),extractSelectedText:e(u,false),insertText:e(r,true),replaceSelectedText:e(s,true),surroundSelectedText:e(t,true)})})})(jQuery);
\ No newline at end of file
/* begin css tabs */ /* begin css tabs */
ul#tabnav { /* general settings */ ul#usertabnav { /* general settings */
text-align: left; /* set to left, right or center */ text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */ margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */ font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #6c6; /* set border COLOR as desired */ border-bottom: 1px solid #7DAC0C; /* set border COLOR as desired */
list-style-type: none; list-style-type: none;
padding: 3px 10px 3px 10px; /* THIRD number must change with respect to padding-top (X) below */ padding: 3px 10px 4px 10px; /* THIRD number must change with respect to padding-top (X) below */
} }
ul#tabnav li { /* do not change */ ul#usertabnav li { /* do not change */
display: inline; display: inline;
} }
body#tab1 li.tab1, body#tab2 li.tab2, body#tab3 li.tab3, body#tab4 li.tab4 { /* settings for selected tab */ div#edit li.edit,
div#chpass li.chpass,
div#accountevents li.accountevents,
div#groups li.groups,
div#token li.token,
div#picture li.picture
{ /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */ border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */ background-color: #fff; /* set background color to match above border color */
} }
body#tab1 li.tab1 a, body#tab2 li.tab2 a, body#tab3 li.tab3 a, body#tab4 li.tab4 a { /* settings for selected tab link */ div#edit li.edit a,
background-color: #fff; /* set selected tab background color as desired */ div#chpass li.chpass a,
div#accountevents li.accountevents a,
div#groups li.groups a,
div#token li.token a,
div#picture li.picture a{ /* settings for selected tab link */
background-color: #FFF; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */ color: #000; /* set selected tab link color as desired */
position: relative; position: relative;
top: 1px; top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */ padding-top: 4px; /* must change with respect to padding (X) above and below */
} }
ul#tabnav li a { /* settings for all tab links */ ul#usertabnav li a { /* settings for all tab links */
padding: 3px 4px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */ padding: 4px 5px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #6c6; /* set border COLOR as desired; usually matches border color specified in #tabnav */ border: 1px solid #7DAC0C; /* set border COLOR as desired; usually matches border color specified in #usertabnav */
background-color: #cfc; /* set unselected tab background color as desired */ background-color: #37bce6; /* set unselected tab background color as desired */
color: #666; /* set unselected tab link color as desired */ color: #0f3541; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */ margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none; text-decoration: none;
border-bottom: none; border-bottom: none;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
} }
ul#tabnav a:hover { /* settings for hover effect */ ul#usertabnav a:hover { /* settings for hover effect */
background: #fff; /* set desired hover color */ background: #b8f7ff; /* set desired hover color */
} }
/* end css tabs */ /* end css tabs */
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:users="http://java.sun.com/jsf/composite/tools/user" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cdiqtools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
> >
<h:body> <h:body>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
xmlns:shop="http://java.sun.com/jsf/composite/tools/shop" xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<title></title> <title></title>
</h:head> </h:head>
<h:body> <h:body>
<ui:composition template="/layout/insomnia1/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.permissionDenied" /> <ui:param name="thispage" value="page.permissionDenied" />
<ui:define name="metadata"> <ui:define name="metadata">
<f:metadata> <f:metadata>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:shop="http://java.sun.com/jsf/composite/tools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.shop.readerevents" /> <ui:param name="thispage" value="page.shop.readerevents" />
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:account="http://java.sun.com/jsf/composite/tools/account" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
...@@ -12,7 +12,10 @@ ...@@ -12,7 +12,10 @@
<f:event type="preRenderView" listener="#{userView.initView}" /> <f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.account.list" /> <ui:param name="thispage" value="page.account.list" />
<ui:define name="title">
<h1>#{i18n['user.accountevents']}</h1>
<users:usertabs tabId="accountevents" />
</ui:define>
<ui:define name="content"> <ui:define name="content">
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" /> <h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" />
<h:outputText id="accountbalance" value="#{userView.user.accountBalance}" /> <h:outputText id="accountbalance" value="#{userView.user.accountBalance}" />
...@@ -65,11 +68,11 @@ ...@@ -65,11 +68,11 @@
</h:column> </h:column>
<!-- <h:column> --> <!-- <h:column> -->
<!-- <h:link outcome="/user/editAccountevent" value="#{i18n['accountEvent.edit']}"> --> <!-- <h:link outcome="/user/editAccountevent" value="#{i18n['accountEvent.edit']}"> -->
<!-- <f:param name="accountid" value="#{ac.id}" /> --> <!-- <f:param name="accountid" value="#{ac.id}" /> -->
<!-- </h:link> --> <!-- </h:link> -->
<!-- </h:column> --> <!-- </h:column> -->
</h:dataTable> </h:dataTable>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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: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:c="http://java.sun.com/jsp/jstl/core" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
...@@ -13,16 +13,19 @@ ...@@ -13,16 +13,19 @@
</f:metadata> </f:metadata>
<ui:define name="title"> <ui:define name="title">
<h1>#{i18n['user.changepassword.title']}</h1> <h1>#{i18n['user.changepassword.title']}</h1>
<users:usertabs tabId="edit" />
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<h2>#{i18n['user.changepassword.forUser']}: #{userView.user.wholeName}</h2>
<h:form id="userform"> <h:form id="userform">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['user.password']}:" /> <h:outputLabel value="#{i18n['user.password']}:" />
<h:inputSecret id="password" value="#{passwordView.password}" /> <h:inputSecret id="password" value="#{passwordView.password}" />
<h:outputLabel value="#{i18n['user.passwordcheck']}:" /> <h:outputLabel value="#{i18n['user.passwordcheck']}:" />
<h:inputSecret id="passwordcheck" value="#{passwordView.passwordcheck}" /> <h:inputSecret id="passwordcheck" value="#{passwordView.passwordcheck}" />
<h:commandButton id="createuserbtn" action="#{passwordView.changePassword()}" value="#{i18n['user.changePassword']}" /> <h:commandButton id="createuserbtn" action="#{passwordView.changePassword()}"
value="#{i18n['user.changePassword']}"
/>
</h:panelGrid> </h:panelGrid>
</h:form> </h:form>
</ui:define> </ui:define>
......
...@@ -3,19 +3,21 @@ ...@@ -3,19 +3,21 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:users="http://java.sun.com/jsf/composite/tools/user" 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"> xmlns:f="http://java.sun.com/jsf/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" /> <f:metadata>
<f:event type="preRenderView" listener="#{cardView.initCardCreate}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:form id="cardTemplates"> <h:form id="cardTemplates">
#{cardView.initCard()}
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['cardTemplate.name']}:" /> <h:outputLabel value="#{i18n['cardTemplate.name']}:" />
<h:inputText value="#{cardView.card.name}" /> <h:inputText value="#{cardView.cardTemplate.name}" />
<h:outputLabel value="#{i18n['cardTemplate.power']}:" /> <h:outputLabel value="#{i18n['cardTemplate.power']}:" />
<h:inputText value="#{cardView.card.power}" size="4" /> <h:inputText value="#{cardView.cardTemplate.power}" size="4" />
</h:panelGrid> </h:panelGrid>
<h:commandButton action="#{cardView.createTemplate()}" value="#{i18n['cardTemplate.create']}" /> <h:commandButton action="#{cardView.createTemplate()}" value="#{i18n['cardTemplate.create']}" />
</h:form> </h:form>
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
<!-- <ui:param name="thispage" value="page.user.edit" /> --> <!-- <ui:param name="thispage" value="page.user.edit" /> -->
<ui:define name="title"> <ui:define name="title">
<h1>#{i18n['user.edit.title']}</h1> <h1>#{i18n['user.edit.title']}</h1>
<users:usertabs tabId="edit" />
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" /> <users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" />
......
<!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" xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="templateid" value="#{cardView.templateId}" />
<f:event type="preRenderView" listener="#{cardView.initCardTemplate}" />
</f:metadata>
<ui:define name="content">
<h:form id="cardTemplates">
<h:panelGrid columns="3">
<h:outputLabel for="id" value="#{i18n['cardTemplate.id']}:" />
<h:outputText id="id" value="#{cardView.cardTemplate.id}" />
<h:message for="id" />
<h:outputLabel for="name" value="#{i18n['cardTemplate.name']}:" />
<h:inputText id="name" value="#{cardView.cardTemplate.name}" />
<h:message for="name" />
<h:outputLabel for="power" value="#{i18n['cardTemplate.power']}:" />
<h:inputText id="power" value="#{cardView.cardTemplate.power}" size="4" />
<h:message for="power" />
<h:outputLabel for="roles" value="#{i18n['cardTemplate.roles']}" />
<h:selectManyCheckbox layout="pageDirection" value="#{cardView.cardTemplate.roles}" converter="#{roleConverter}"
id="roles"
>
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="roles"></h:message>
</h:panelGrid>
<h:commandButton action="#{cardView.saveTemplate()}" value="#{i18n['cardTemplate.save']}" />
</h:form>
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{cardView.templateImage}" mode="simple" />
<h:commandButton action="#{cardView.saveImage}" value="#{i18n['sendImage']}" />
</h:form>
<img src="#{request.contextPath}/CardTemplate?imageid=#{cardView.cardTemplate.id}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -3,15 +3,22 @@ ...@@ -3,15 +3,22 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:users="http://java.sun.com/jsf/composite/tools/user" 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"> xmlns:f="http://java.sun.com/jsf/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" /> <f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
<f:event type="preRenderView" listener="#{cardView.initCardTemplatelist()}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h:form id="cardTemplates"> <h:form id="cardTemplates">
#{cardView.initCardTemplates()}
<h:dataTable value="#{cardView.cardTemplates}" var="card"> <h:dataTable value="#{cardView.cardTemplates}" var="card">
<h:column> <h:column>
#{card.id}
</h:column>
<h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['cardTemplate.name']}" /> <h:outputText value="#{i18n['cardTemplate.name']}" />
</f:facet> </f:facet>
...@@ -34,7 +41,11 @@ ...@@ -34,7 +41,11 @@
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</h:column> </h:column>
<h:column>
<h:link outcome="/user/editCardTemplate" value="#{i18n['cardTemplate.edit']}">
<f:param name="templateid" value="#{card.id}" />
</h:link>
</h:column>
</h:dataTable> </h:dataTable>
</h:form> </h:form>
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<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: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:p="http://primefaces.prime.com.tr/ui" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
...@@ -14,11 +15,12 @@ ...@@ -14,11 +15,12 @@
</f:metadata> </f:metadata>
<ui:define name="title"> <ui:define name="title">
<h1>#{i18n['sendPicture.header']}</h1> <h1>#{i18n['sendPicture.header']}</h1>
<users:usertabs tabId="picture" />
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<h:outputScript target="head" library="script" name="jquery.min.js" /> <h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript target="head" library="jpegcam" name="webcam.js" /> <h:outputScript target="head" library="jpegcam" name="webcam.js" />
<h:outputScript target="head"> <h:outputScript target="head">
webcam.set_api_url( '#{request.contextPath}/UploadServlet?type=userimage&amp;id=#{userView.selectedUser.id}' ); webcam.set_api_url( '#{request.contextPath}/UploadServlet?type=userimage&amp;id=#{userView.selectedUser.id}' );
...@@ -58,10 +60,59 @@ ...@@ -58,10 +60,59 @@
<h2>#{i18n['user.thisIsCurrentImage']}</h2> <h2>#{i18n['user.thisIsCurrentImage']}</h2>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" /> <h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<h:panelGroup rendered="#{!empty userView.user.currentImage}"> <ui:fragment rendered="#{!empty userView.user.currentImage}">
<img width="300" src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}" alt="image" /> <h:panelGrid columns="2">
</h:panelGroup> <img width="300"
src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}"
alt="image"
/>
<ui:fragment rendered="#{userView.canManage()}">
<h:form>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8"
image="http://kauppa.insomnia.fi#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}"
/>
<h:commandButton action="#{userView.crop}" value="#{i18n['user.cropImage']}" />
</h:form>
</ui:fragment>
</h:panelGrid>
<ui:fragment rendered="#{userView.canManage()}">
<h2>Ylläpito</h2>
<h:form>
<h:commandButton action="#{userView.makeCard()}" value="#{i18n['user.makeCard']}" />
<h:dataTable var="card" value="#{userCardView.printedCards}">
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}">View Card</a>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}&amp;download=1">Print Card</a>
</h:column>
</h:dataTable>
</h:form>
</ui:fragment>
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.name}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.description}" /> -->
<!-- </h:column> -->
<!-- </h:dataTable> -->
</ui:fragment>
......
...@@ -34,7 +34,7 @@ public class CardView { ...@@ -34,7 +34,7 @@ public class CardView {
return cardTemplates; return cardTemplates;
} }
public void initCard() { public void initCardCreate() {
card = new CardTemplate(eventBean.getCurrentEvent()); card = new CardTemplate(eventBean.getCurrentEvent());
} }
......
...@@ -9,6 +9,7 @@ import java.util.TimeZone; ...@@ -9,6 +9,7 @@ import java.util.TimeZone;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -92,6 +93,16 @@ public class SessionHandler { ...@@ -92,6 +93,16 @@ public class SessionHandler {
// return permbean.hasPermission(perm); // return permbean.hasPermission(perm);
// } // }
public String getDateFormat()
{
return "dd.MM.yyyy";
}
public String getDatetimeFormat()
{
return "dd.MM.yyyy HH:mm";
}
public boolean hasPermission(IAppPermission permission) { public boolean hasPermission(IAppPermission permission) {
if (permission == null) { if (permission == null) {
logger.warn("permission is null"); logger.warn("permission is null");
...@@ -122,4 +133,23 @@ public class SessionHandler { ...@@ -122,4 +133,23 @@ public class SessionHandler {
} }
private String preurlString;
public String getRequestPreUrl()
{
if (preurlString == null)
{
Object ext = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (ext instanceof HttpServletRequest)
{
StringBuffer url = ((HttpServletRequest) ext).getRequestURL();
preurlString = url.substring(0, url.indexOf("/", 7));
} else {
preurlString = "";
}
}
return preurlString;
}
} }
...@@ -158,7 +158,8 @@ placetoken.commit=Liit\u00e4 ...@@ -158,7 +158,8 @@ placetoken.commit=Liit\u00e4
placetoken.pageHeader=Lis\u00e4\u00e4 konepaikkakoodi placetoken.pageHeader=Lis\u00e4\u00e4 konepaikkakoodi
placetoken.token=Paikkakoodi placetoken.token=Paikkakoodi
placetoken.tokenNotFound=Paikkakoodia ei l\u00f6ytynyt! Tarkista koodi. placetoken.tokenNotFound=Paikkakoodia ei l\u00f6ytynyt! Tarkista koodi.
placetoken.topText=Voit yhdist\u00e4\u00e4 ryhm\u00e4njohtajasi ostaman paikan omaan k\u00e4ytt\u00e4j\u00e4tunnukseesi sy\u00f6tt\u00e4m\u00e4ll\u00e4 paikkakoodin allaolevaan kentt\u00e4\u00e4n. placetoken.placelist=Omat paikat
placetoken.topText=Voit yhdist\u00e4\u00e4 paikan omaan k\u00e4ytt\u00e4j\u00e4tunnukseesi sy\u00f6tt\u00e4m\u00e4ll\u00e4 paikkakoodin allaolevaan kentt\u00e4\u00e4n.
poll.answer=Vastaa kyselyyn poll.answer=Vastaa kyselyyn
poll.save=L\u00e4het\u00e4 vastauksesi poll.save=L\u00e4het\u00e4 vastauksesi
product.barcode=Viivakoodi product.barcode=Viivakoodi
...@@ -276,6 +277,7 @@ user.bank=Pankki ...@@ -276,6 +277,7 @@ user.bank=Pankki
user.bankaccount=Pankkitili user.bankaccount=Pankkitili
user.imageUploaded=Kuva lhetetty. user.imageUploaded=Kuva lhetetty.
user.accountevents=Tilitapahtumat
user.create=Luo k\u00e4ytt\u00e4j\u00e4 user.create=Luo k\u00e4ytt\u00e4j\u00e4
user.createdmessage=K\u00e4ytt\u00e4j\u00e4tunnus on luotu onnistuneesti. Voit nyt kirjautua sis\u00e4\u00e4n. user.createdmessage=K\u00e4ytt\u00e4j\u00e4tunnus on luotu onnistuneesti. Voit nyt kirjautua sis\u00e4\u00e4n.
user.defaultImage=Oletukuva user.defaultImage=Oletukuva
...@@ -359,4 +361,17 @@ pagination.previouspage=Edellinen ...@@ -359,4 +361,17 @@ pagination.previouspage=Edellinen
pagination.nextpage=Seuraava pagination.nextpage=Seuraava
pagination.lastpage=Viimeinen pagination.lastpage=Viimeinen
newslist.header=Uutisryhmt
newsgroup.name=Uutisryhmn nimi
newsgroup.priority=Jrjestysnumero
newsgroup.writerRole=Kirjoittajaryhm
newsgroup.edit=Muokkaa
newsgroup.readerRole=Lukijoiden roolit
news.title=Otsikko
news.abstract=Lyhennelm
news.publish=Julkaise
news.expire=Lopeta julkaisu
news.save=Tallenna
usertitle.managingUser=Hallitaan kyttj
package fi.insomnia.bortal.servlet;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.model.CardTemplate;
/**
* Servlet implementation class UploadServlet
*/
public class CardTemplateServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
@EJB
private transient CardTemplateBeanLocal ctbean;
@EJB
private transient PermissionBeanLocal permbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
private final Pattern lhMatcher = Pattern.compile("^127.[0-9.]*|(0:)*1%0");
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
CardTemplate templ = ctbean.find(getIdParam("imageid"));
if (templ != null) { // &&
ret.setData(templ.getImage());
ret.setImagetype("image/jpeg");
} else
{
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
}
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class GenericImageServlet extends HttpServlet {
/**
*
*/
protected enum ResponseType {
OK, FORBIDDEN, NOT_FOUND,
}
private static final long serialVersionUID = -2900241580433674121L;
protected class ImageMover
{
private Integer response;
private byte[] data;
private String imagetype;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public String getImagetype() {
return imagetype;
}
public void setImagetype(String imagetype) {
this.imagetype = imagetype;
}
public Integer getResponse() {
return response;
}
public void setResponse(Integer response) {
this.response = response;
}
}
/**
* @see HttpServlet#HttpServlet()
*/
public GenericImageServlet() {
super();
// TODO Auto-generated constructor stub
}
private static final Logger logger = LoggerFactory.getLogger(UserImageServlet.class);
protected abstract ImageMover getImagedata();
protected HttpServletRequest request;
protected Integer getIdParam(String name)
{
Integer ret = null;
String idStr = request.getParameter(name);
if (idStr != null)
{
ret = Integer.parseInt(idStr);
}
return ret;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.request = request;
ImageMover data = getImagedata();
if (data == null || data.getResponse() != null) {
response.setStatus(data.getResponse());
response.getWriter().append("Not Found");
} else {
response.setContentLength(data.getData().length);
if (request.getParameter("download") != null)
{
response.setContentType("application/x-unknown");
}
else {
response.setContentType(data.getImagetype());
}
response.getOutputStream().write(data.getData());
}
request = null;
}
}
package fi.insomnia.bortal.servlet;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.imageio.ImageIO;
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.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
/**
* Servlet implementation class UploadServlet
*/
public class UserCardServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
private final Pattern lhMatcher = Pattern.compile("^127.[0-9.]*|(0:)*1%0");
@EJB
private CardTemplateBeanLocal cardbean;
private static final Logger logger = LoggerFactory.getLogger(UserCardServlet.class);
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
Integer id = getIdParam("cardid");
PrintedCard card = cardbean.getCard(id);
logger.info("image data id {}, card {}", id, card);
if (card != null) {
if (!permbean.isCurrentUser(card.getUser())
&& !permbean.hasPermission(UserPermission.MODIFY)
&& !lhMatcher.matcher(request.getLocalAddr()).matches())
{
ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
}
else
{
try {
ret.setData(mkCard(card));
ret.setImagetype("image/jpeg");
} catch (IOException e) {
ret.setResponse(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
} else
{
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
private byte[] mkCard(PrintedCard card) throws IOException {
User user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));
BufferedImage outimage = new BufferedImage(base.getWidth(), base.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = outimage.createGraphics();
// g.drawImage(org, AffineTransform.getScaleInstance(0.31, 0.31), null);
g.drawImage(base, 0, 0, base.getWidth(), base.getHeight(), null);
// g.drawImage(face, AffineTransform.getScaleInstance(0.31, 0.31),
// null);
g.drawImage(face, 50, 320, 320, 400, null);
g.setFont(new Font("Century gothic", Font.PLAIN, 70));
// g.drawString(nick, 595 -
// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
// 840);
g.drawString(user.getNick(), 50, 810);
g.setFont(new Font("Century gothic", Font.BOLD, 35));
StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getFirstnames()).append(" ").append(user.getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 -
// g.getFontMetrics().charsWidth(name.toCharArray(), 0, name.length()),
// 890);
//
// g.drawString(owner.getId().toString(), 60, 948);
g.drawString(wholeName.toString(), 60, 865);
g.drawString(card.getTemplate().getName(), 60, 915);
g.dispose();
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
ImageIO.write(outimage, "jpeg", ostr);
return ostr.toByteArray();
}
}
package fi.insomnia.bortal.servlet; package fi.insomnia.bortal.servlet;
import java.io.IOException; import java.util.regex.Pattern;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage; import fi.insomnia.bortal.model.UserImage;
/** /**
* Servlet implementation class UploadServlet * Servlet implementation class UploadServlet
*/ */
public class UserImageServlet extends HttpServlet { public class UserImageServlet extends GenericImageServlet {
/** /**
* *
*/ */
private static final long serialVersionUID = -3359999630873773508L; private static final long serialVersionUID = -3359999630873773508L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserImageServlet() {
super();
// TODO Auto-generated constructor stub
}
private static final Logger logger = LoggerFactory.getLogger(UserImageServlet.class);
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@EJB @EJB
private transient UserBeanLocal userbean; private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
/** /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response) * response)
*/ */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String useridStr = request.getParameter("userid");
String keyhashStr = request.getParameter("hash");
UserImage image = null;
if (useridStr != null && "i-AW1Nfzk5KTi8iaLYua".equals(keyhashStr)) {
int userid = Integer.parseInt(useridStr);
User usr = userbean.findById(userid);
if (usr != null) {
image = usr.getCurrentImage();
}
} else { private final Pattern lhMatcher = Pattern.compile("^(10|127).[0-9.]*|(0:)*1%0");
String imageidobj = request.getParameter("imageid");
int imageid = 0; @Override
if (imageidobj != null) { protected ImageMover getImagedata() {
imageid = Integer.parseInt(imageidobj); ImageMover ret = new ImageMover();
} UserImage image = userbean.findUserimageFORCE(super.getIdParam("imageid"));
if (image != null) { // &&
try { // if (permbean.isCurrentUser(image.getUser()) ||
image = userbean.findUserImage(imageid); // permbean.hasPermission(UserPermission.MODIFY) ||
} catch (PermissionDeniedException e) { // lhMatcher.matcher(request.getLocalAddr()).matches())
image = null; // {
} ret.setData(image.getImageData());
ret.setImagetype(image.getMimeType());
// }
// else
// {
// ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
// }
} else
{
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
} }
return ret;
if (image == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.getWriter().append("Not Found");
} else {
response.setContentType(image.getMimeType());
response.getOutputStream().write(image.getImageData());
}
} }
} }
package fi.insomnia.bortal.web.cdiview.game;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class GameView extends GenericCDIView {
@EJB
private NewsBeanLocal newsbean;
public NewsGroup getIndexnews()
{
return newsbean.findByName("game-index");
}
}
...@@ -35,7 +35,4 @@ public class JsfMenuitem { ...@@ -35,7 +35,4 @@ public class JsfMenuitem {
return item.getHeader(); return item.getHeader();
} }
public boolean isCid() {
return item.isCid();
}
} }
...@@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.enums.apps.BillPermission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
@RequestScoped @RequestScoped
...@@ -70,16 +71,16 @@ public class MenuView { ...@@ -70,16 +71,16 @@ public class MenuView {
MenuGroup shop = new MenuGroup("shop"); MenuGroup shop = new MenuGroup("shop");
PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop)); PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop));
addPage(temppages, "/index", frontpage, null); addPage(temppages, "/index", frontpage, UserPermission.ANYUSER);
addPage(temppages, "/user/create", frontpage, UserPermission.CREATE_NEW); addPage(temppages, "/user/create", frontpage, UserPermission.CREATE_NEW);
addPage(temppages, "/auth/sendResetMail", frontpage, UserPermission.LOGIN); addPage(temppages, "/auth/sendResetMail", frontpage, UserPermission.LOGIN);
addPage(temppages, "/user/edit", user, UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks").setCid(true); addPage(temppages, "/user/edit", user, UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks");
addPage(temppages, "/user/changePassword", user, UserPermission.VIEW_SELF).setCid(true); addPage(temppages, "/user/changePassword", user, null);
addPage(temppages, "/user/accountEvents", user, UserPermission.VIEW_SELF).setCid(true); addPage(temppages, "/user/accountEvents", user, null);
addPage(temppages, "/place/myGroups", user, UserPermission.VIEW_SELF).setCid(true); addPage(temppages, "/place/myGroups", user, null);
addPage(temppages, "/place/insertToken", user, UserPermission.VIEW_SELF).setCid(true); addPage(temppages, "/place/insertToken", user, null);
addPage(temppages, "/user/sendPicture", user, UserPermission.VIEW_SELF).setCid(true); addPage(temppages, "/user/sendPicture", user, null);
addPage(temppages, "/user/list", user, UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks"); addPage(temppages, "/user/list", user, UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
addPage(temppages, "/user/create", user, UserPermission.VIEW_ALL); addPage(temppages, "/user/create", user, UserPermission.VIEW_ALL);
...@@ -89,10 +90,10 @@ public class MenuView { ...@@ -89,10 +90,10 @@ public class MenuView {
addPage(temppages, "/user/listCardTemplates", user, UserPermission.READ_ROLES); addPage(temppages, "/user/listCardTemplates", user, UserPermission.READ_ROLES);
addPage(temppages, "/user/createCardTemplate", user, UserPermission.WRITE_ROLES); addPage(temppages, "/user/createCardTemplate", user, UserPermission.WRITE_ROLES);
addPage(temppages, "/place/placemap", placemap, null); addPage(temppages, "/place/placemap", placemap, MapPermission.VIEW);
addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL).setCid(true); addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL);
addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN).setCid(true); addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN);
PAGES = Collections.unmodifiableMap(temppages); PAGES = Collections.unmodifiableMap(temppages);
} }
......
...@@ -8,7 +8,6 @@ public class Menuitem { ...@@ -8,7 +8,6 @@ public class Menuitem {
private final MenuGroup group; private final MenuGroup group;
private final IAppPermission permission; private final IAppPermission permission;
private String header; private String header;
private boolean cid = false;
public Menuitem(String url, MenuGroup group, IAppPermission perm) { public Menuitem(String url, MenuGroup group, IAppPermission perm) {
this.url = url; this.url = url;
...@@ -38,12 +37,4 @@ public class Menuitem { ...@@ -38,12 +37,4 @@ public class Menuitem {
return header; return header;
} }
public void setCid(boolean val) {
this.cid = val;
}
public boolean isCid() {
return cid;
}
} }
...@@ -6,6 +6,7 @@ import javax.inject.Named; ...@@ -6,6 +6,7 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal; import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.enums.apps.NewsPermission; import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -17,26 +18,42 @@ public class NewsgroupView extends GenericCDIView { ...@@ -17,26 +18,42 @@ public class NewsgroupView extends GenericCDIView {
* *
*/ */
private static final long serialVersionUID = 1752803732191587695L; private static final long serialVersionUID = 1752803732191587695L;
private int newsgroupid; private Integer newsgroupid;
private Integer newsid;
private NewsGroup newsgroup;
private News news;
@EJB @EJB
private transient NewsBeanLocal newsbean; private transient NewsBeanLocal newsbean;
private NewsGroup newsgroup;
public void initView() { public void initView() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && newsgroup == null) {
super.beginConversation();
newsgroup = newsbean.findById(newsgroupid);
}
}
public void initNews() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && getNews() == null) {
super.beginConversation();
news = newsbean.findNews(newsid);
}
}
public void initCreate() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) { if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) {
super.beginConversation(); super.beginConversation();
if (newsgroupid == 0 && newsgroup == null) { newsgroup = new NewsGroup();
newsgroup = new NewsGroup(); newsgroup.setPriority(10);
} else {
newsgroup = newsbean.findById(newsgroupid);
}
} }
} }
public String createNew() { public String createNew() {
this.addFaceMessage("newsgroup.created"); this.addFaceMessage("newsgroup.created");
newsbean.createNewsgroup(newsgroup); newsbean.createNewsgroup(newsgroup);
return null; return "/news/edit.xhtml";
} }
public String saveNewsgroup() { public String saveNewsgroup() {
...@@ -45,11 +62,24 @@ public class NewsgroupView extends GenericCDIView { ...@@ -45,11 +62,24 @@ public class NewsgroupView extends GenericCDIView {
return null; return null;
} }
public void setNewsgroupid(int newsgroupid) { public String createNews()
{
setNews(newsbean.createNews(newsgroup));
return "/news/editNews";
}
public String saveNews()
{
newsbean.saveNews(getNews());
newsgroup = getNews().getGroup();
return null;
}
public void setNewsgroupid(Integer newsgroupid) {
this.newsgroupid = newsgroupid; this.newsgroupid = newsgroupid;
} }
public int getNewsgroupid() { public Integer getNewsgroupid() {
return newsgroupid; return newsgroupid;
} }
...@@ -60,4 +90,20 @@ public class NewsgroupView extends GenericCDIView { ...@@ -60,4 +90,20 @@ public class NewsgroupView extends GenericCDIView {
public NewsGroup getNewsgroup() { public NewsGroup getNewsgroup() {
return newsgroup; return newsgroup;
} }
public Integer getNewsid() {
return newsid;
}
public void setNewsid(Integer newsid) {
this.newsid = newsid;
}
public News getNews() {
return news;
}
public void setNews(News news) {
this.news = news;
}
} }
package fi.insomnia.bortal.web.cdiview.user;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class CardView extends GenericCDIView {
private static final long serialVersionUID = -9115983838324313414L;
private Integer templateId;
private CardTemplate cardTemplate;
@EJB
private CardTemplateBeanLocal cfbean;
@EJB
private EventBeanLocal eventBean;
@Inject
@SelectedUser
private User user;
private Integer cardid;
private List<CardTemplate> cardTemplates;
private UploadedFile templateImage;
private static final Logger logger = LoggerFactory.getLogger(CardView.class);
public void initCardCreate() {
if (super.requirePermissions(UserPermission.WRITE_ROLES))
{
setCardTemplate(new CardTemplate(eventBean.getCurrentEvent()));
super.beginConversation();
}
}
public String saveImage()
{
try {
logger.info("Templateimage: {}", getTemplateImage());
cardTemplate = cfbean.saveImage(cardTemplate, getTemplateImage().getContents());
} catch (IOException e) {
logger.info("Error converting template image", e);
super.addFaceMessage("template.uploadFailed", e.getMessage());
}
return null;
}
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;
}
public void initCardTemplate()
{
if (super.requirePermissions(UserPermission.WRITE_ROLES))
{
setCardTemplate(cfbean.find(templateId));
super.beginConversation();
}
}
public void initCardTemplatelist()
{
if (super.requirePermissions(UserPermission.WRITE_ROLES))
{
cardTemplates = eventBean.getCurrentEvent().getCardTemplates();
}
}
public Integer getCardid() {
return cardid;
}
public void setCardid(Integer cardid) {
this.cardid = cardid;
}
public String createTemplate() {
cfbean.create(getCardTemplate());
cardTemplates = getCardTemplate().getEvent().getCardTemplates();
return "/user/listCardTemplates";
}
public String saveTemplate()
{
cardTemplate = cfbean.save(cardTemplate);
return null;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<CardTemplate> getCardTemplates() {
return cardTemplates;
}
public void setCardTemplates(List<CardTemplate> cardTemplates) {
this.cardTemplates = cardTemplates;
}
public Integer getTemplateId() {
return templateId;
}
public void setTemplateId(Integer templateId) {
this.templateId = templateId;
}
public CardTemplate getCardTemplate() {
return cardTemplate;
}
public void setCardTemplate(CardTemplate cardTemplate) {
this.cardTemplate = cardTemplate;
}
public UploadedFile getTemplateImage() {
return templateImage;
}
public void setTemplateImage(UploadedFile templateImage) {
this.templateImage = templateImage;
}
}
package fi.insomnia.bortal.web.cdiview.user;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class UserCardView extends GenericCDIView {
@EJB
private CardTemplateBeanLocal cardBean;
@Inject
@SelectedUser
private User user;
private ListDataModel<PrintedCard> printedCards;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public ListDataModel<PrintedCard> getPrintedCards() {
if (printedCards == null && user != null)
{
printedCards = new ListDataModel<PrintedCard>(cardBean.getCards(user));
}
return printedCards;
}
public void setPrintedCards(ListDataModel<PrintedCard> printedCards) {
this.printedCards = printedCards;
}
}
package fi.insomnia.bortal.web.cdiview.user; package fi.insomnia.bortal.web.cdiview.user;
import java.io.IOException;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.Conversation; import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
...@@ -7,13 +9,16 @@ import javax.enterprise.inject.Produces; ...@@ -7,13 +9,16 @@ import javax.enterprise.inject.Produces;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.primefaces.model.CroppedImage;
import org.primefaces.model.UploadedFile; import org.primefaces.model.UploadedFile;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionDeniedException; import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage; import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.web.annotations.LoggedIn; import fi.insomnia.bortal.web.annotations.LoggedIn;
...@@ -34,6 +39,8 @@ public class UserView extends GenericCDIView { ...@@ -34,6 +39,8 @@ public class UserView extends GenericCDIView {
private Integer userid; private Integer userid;
private UploadedFile image; private UploadedFile image;
private CroppedImage croppedImage;
private User user; private User user;
@Inject @Inject
private transient Conversation conversation; private transient Conversation conversation;
...@@ -49,6 +56,8 @@ public class UserView extends GenericCDIView { ...@@ -49,6 +56,8 @@ public class UserView extends GenericCDIView {
private boolean canSave = false; private boolean canSave = false;
private String password; private String password;
private String passwordcheck; private String passwordcheck;
@EJB
private CardTemplateBeanLocal cardBean;
@Produces @Produces
@LoggedIn @LoggedIn
...@@ -69,6 +78,37 @@ public class UserView extends GenericCDIView { ...@@ -69,6 +78,37 @@ public class UserView extends GenericCDIView {
return user; return user;
} }
public String crop()
{
logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop());
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
UserImage newImage;
try {
newImage = userbean.saveCroppedImage(user.getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(), croppedImage.getWidth(), croppedImage.getHeight());
user = newImage.getUser();
} catch (IOException e) {
logger.info("Error converting image", e);
super.addFaceMessage("user.errorConvertingImage");
}
return "redirToUserimage";
}
public String makeCard()
{
try {
PrintedCard card = cardBean.checkPrintedCard(user);
if (card != null)
{
user = card.getUser();
}
} catch (PermissionDeniedException e) {
logger.info("Error printing card {}", e);
}
return null;
}
public String sendImage() { public String sendImage() {
try { try {
...@@ -106,6 +146,11 @@ public class UserView extends GenericCDIView { ...@@ -106,6 +146,11 @@ public class UserView extends GenericCDIView {
} }
} }
public boolean canManage()
{
return permbean.hasPermission(UserPermission.MODIFY);
}
public String saveUser() { public String saveUser() {
if (permbean.getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY)) { if (permbean.getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY)) {
this.addFaceMessage("user.successfullySaved"); this.addFaceMessage("user.successfullySaved");
...@@ -123,6 +168,11 @@ public class UserView extends GenericCDIView { ...@@ -123,6 +168,11 @@ public class UserView extends GenericCDIView {
return "edit"; return "edit";
} }
public boolean isCurrentUser()
{
return permbean.isCurrentUser(user);
}
public String createUser() { public String createUser() {
userbean.createNewUser(user, getPassword()); userbean.createNewUser(user, getPassword());
return "/user/created"; return "/user/created";
...@@ -171,4 +221,12 @@ public class UserView extends GenericCDIView { ...@@ -171,4 +221,12 @@ public class UserView extends GenericCDIView {
public void setImage(UploadedFile image) { public void setImage(UploadedFile image) {
this.image = image; this.image = image;
} }
public CroppedImage getCroppedImage() {
return croppedImage;
}
public void setCroppedImage(CroppedImage croppedImage) {
this.croppedImage = croppedImage;
}
} }
package fi.insomnia.bortal.web.converter; package fi.insomnia.bortal.web.converter;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal; import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.model.CardTemplate; import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
@Named("cardTemplateConverter") @Named("cardTemplateConverter")
@RequestScoped
public class CardTemplateConverter extends GenericIntegerEntityConverter<CardTemplate> { public class CardTemplateConverter extends GenericIntegerEntityConverter<CardTemplate> {
@EJB @EJB
private CardTemplateBeanLocal ctbean; private CardTemplateBeanLocal ctbean;
private static final Logger logger = LoggerFactory.getLogger(CardTemplateConverter.class);
@Override @Override
protected EntityFinderBean<CardTemplate> getFinder() { protected CardTemplate find(Integer id) {
return ctbean; CardTemplate ret = ctbean.find(id);
logger.info("CardTemplateConverter {} with id {}", ret, id);
return ret;
} }
// //
......
...@@ -7,19 +7,52 @@ import javax.faces.convert.Converter; ...@@ -7,19 +7,52 @@ import javax.faces.convert.Converter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.GenericEntity; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
public abstract class GenericIntegerEntityConverter<T extends GenericEntity> implements Converter { public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Integer>> implements Converter {
protected abstract EntityFinderBean<T> getFinder(); protected abstract T find(Integer id);
public GenericIntegerEntityConverter() { public GenericIntegerEntityConverter() {
super(); super();
} }
// private static final IMultiIdConverter<Integer> INTEGER_CONVERTER = new
// IMultiIdConverter<Integer>() {
//
// @Override
// public Integer getId(String idstring) {
// if (idstring != null && !idstring.isEmpty() && !idstring.equals("0")) {
// try {
// return Integer.parseInt(idstring);
// } catch (NumberFormatException e)
// {
// logger.info("Caught number format exception while parsing {}", idstring,
// e);
// }
// }
// return null;
//
// }
//
// @Override
// public String getString(Integer id) {
// if (id != null)
// {
// return id.toString();
// }
// return "0";
// }
//
// };
private static final Logger logger = LoggerFactory.getLogger(GenericIntegerEntityConverter.class); private static final Logger logger = LoggerFactory.getLogger(GenericIntegerEntityConverter.class);
// public IMultiIdConverter<Integer> getConverter() {
//
// return INTEGER_CONVERTER;
// }
@Override @Override
public Object getAsObject(FacesContext context, UIComponent component, String value) { public Object getAsObject(FacesContext context, UIComponent component, String value) {
T ret = null; T ret = null;
...@@ -27,7 +60,7 @@ public abstract class GenericIntegerEntityConverter<T extends GenericEntity> imp ...@@ -27,7 +60,7 @@ public abstract class GenericIntegerEntityConverter<T extends GenericEntity> imp
if (value != null) { if (value != null) {
id = Integer.parseInt(value); id = Integer.parseInt(value);
if (id != null) { if (id != null) {
ret = getFinder().find(id); ret = find(id);
} }
} }
logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret }); logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret });
...@@ -38,11 +71,50 @@ public abstract class GenericIntegerEntityConverter<T extends GenericEntity> imp ...@@ -38,11 +71,50 @@ public abstract class GenericIntegerEntityConverter<T extends GenericEntity> imp
public String getAsString(FacesContext context, UIComponent component, Object value) { public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = null; String ret = null;
if (value != null && value instanceof GenericEntity) { if (value != null && value instanceof ModelInterface) {
GenericEntity entity = (GenericEntity) value; ModelInterface<Integer> entity = (ModelInterface<Integer>) value;
ret = entity.getId().toString(); if (entity != null && entity.getId() != null)
{
ret = entity.getId().toString();
}
} }
return ret; return ret;
} }
//
// @Override
// public Object getAsObject(FacesContext context, UIComponent component,
// String value) {
// IntegerModelInterface ret = null;
// if (value != null && !value.isEmpty()) {
// try {
// int id = Integer.parseInt(value);
// if (id == 0) {
// ret = null;
// } else {
// ret = getFacade().find(id);
// }
// } catch (NumberFormatException ne) {
// logger.info("Error parsing value '{}' as number!");
// ret = null;
// }
// }
// return ret;
// }
//
// @Override
// public String getAsString(FacesContext context, UIComponent component,
// Object value) {
//
// String ret = "";
// if (value == null) {
// ret = "0";
// } else if (value instanceof IntegerModelInterface) {
// Integer id = ((IntegerModelInterface) value).getId();
// if (id != null) {
// ret = id.toString();
// }
// }
// return ret;
// }
} }
No preview for this file type
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!