Commit 7ac50927 by Tuomas Riihimäki

Oho.. tais tulla taas vähän iso.. Tänään puljattu tietokantaa ja korjattu kuvan lähetys

1 parent 47e28be6
Showing with 2476 additions and 1600 deletions
...@@ -106,13 +106,13 @@ public class BortalLoginModule extends AppservPasswordLoginModule { ...@@ -106,13 +106,13 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
throw new LoginException( throw new LoginException(
(new StringBuilder()) (new StringBuilder())
.append("An InvalidOperationException was thrown " .append("An InvalidOperationException was thrown "
).append(" while calling getGroupNames() on the SampleRealm ") ).append(" while calling getGroupNames() on the SampleRealm ")
.append(invalidoperationexception).toString()); .append(invalidoperationexception).toString());
} catch (NoSuchUserException nosuchuserexception) { } catch (NoSuchUserException nosuchuserexception) {
throw new LoginException( throw new LoginException(
(new StringBuilder()) (new StringBuilder())
.append("A NoSuchUserException was thrown " .append("A NoSuchUserException was thrown "
).append(" while calling getGroupNames() on the SampleRealm ") ).append(" while calling getGroupNames() on the SampleRealm ")
.append(nosuchuserexception).toString()); .append(nosuchuserexception).toString());
} }
ArrayList<String> authenticatedGroups = new ArrayList<String>(); ArrayList<String> authenticatedGroups = new ArrayList<String>();
...@@ -125,10 +125,10 @@ public class BortalLoginModule extends AppservPasswordLoginModule { ...@@ -125,10 +125,10 @@ public class BortalLoginModule extends AppservPasswordLoginModule {
// Call commitUserAuthentication with the groupNames the user belongs to // Call commitUserAuthentication with the groupNames the user belongs to
String[] groups = authenticatedGroups.toArray(new String[authenticatedGroups.size()]); String[] groups = authenticatedGroups.toArray(new String[authenticatedGroups.size()]);
System.out.println("groups: " + groups.length); // System.out.println("groups: " + groups.length);
for (String str : groups) { // for (String str : groups) {
System.out.println("Str " + str); // System.out.println("Str " + str);
} // }
commitUserAuthentication(groups); commitUserAuthentication(groups);
} }
......
/**
* Generated by Gas3 v2.2.0 (Granite Data Services).
*
* WARNING: DO NOT CHANGE THIS FILE. IT MAY BE OVERWRITTEN EACH TIME YOU USE
* THE GENERATOR.
*/
package fi.insomnia.bortal {
public interface RealmBeanRemote {
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd"> <!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar> <sun-ejb-jar>
<security-role-mapping>
<role-name>USER/READ_ROLES</role-name>
<group-name>USER/READ_ROLES</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER/WRITE_ROLES</role-name>
<group-name>USER/WRITE_ROLES</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER/VIEW_ALL</role-name>
<group-name>USER/VIEW_ALL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER/VIEW_SELF</role-name>
<group-name>USER/VIEW_SELF</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER/CREATE_NEW</role-name>
<group-name>USER/CREATE_NEW</group-name>
<principal-name>ANONYMOUS</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER/MODIFY</role-name>
<group-name>USER/MODIFY</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SUPERADMIN</role-name>
<group-name>SUPERADMIN</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/WRITE_ALL</role-name>
<group-name>BILL/WRITE_ALL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/ANSWER</role-name>
<group-name>POLL/ANSWER</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/ANSWER</role-name>
<group-name>POLL/ANSWER</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/VIEW_RESULTS</role-name>
<group-name>POLL/VIEW_RESULTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>POLL/CREATE</role-name>
<group-name>POLL/CREATE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/READ_ALL</role-name>
<group-name>BILL/READ_ALL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>BILL/CREATE_BILL</role-name>
<group-name>BILL/CREATE_BILL</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/LOGOUT</role-name>
<group-name>LOGIN/LOGOUT</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>LOGIN/LOGIN</role-name>
<group-name>LOGIN/LOGIN</group-name>
<principal-name>ANONUMOUS</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/MANAGE_OTHERS</role-name>
<group-name>MAP/MANAGE_OTHERS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/BUY_PLACES</role-name>
<group-name>MAP/BUY_PLACES</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/VIEW</role-name>
<group-name>MAP/VIEW</group-name>
<principal-name>ANONUMOUS</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/MANAGE_MAPS</role-name>
<group-name>MAP/MANAGE_MAPS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/LIST_ALL_PRODUCTS</role-name>
<group-name>SHOP/LIST_ALL_PRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/MANAGE_PRODUCTS</role-name>
<group-name>SHOP/MANAGE_PRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ROLE_MANAGEMENT/WRITE</role-name>
<group-name>ROLE_MANAGEMENT/WRITE</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/SHOP_PRODUCTS</role-name>
<group-name>SHOP/SHOP_PRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/LIST_USERPRODUCTS</role-name>
<group-name>SHOP/LIST_USERPRODUCTS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER</role-name>
<group-name>USER</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USER/LOGIN</role-name>
<group-name>USER/LOGIN</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>MAP/READ</role-name>
<group-name>MAP/READ</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>SHOP/SHOP_TO_OTHERS</role-name>
<group-name>SHOP/SHOP_TO_OTHERS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ANONYMOUS</role-name>
<group-name>ANONYMOUS</group-name>
</security-role-mapping>
<enterprise-beans/> <enterprise-beans/>
</sun-ejb-jar> </sun-ejb-jar>
...@@ -10,7 +10,6 @@ import org.slf4j.LoggerFactory; ...@@ -10,7 +10,6 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.EventMapFacade; import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
/** /**
...@@ -50,8 +49,7 @@ public class EventMapBean implements EventMapBeanLocal { ...@@ -50,8 +49,7 @@ public class EventMapBean implements EventMapBeanLocal {
@Override @Override
@RolesAllowed("MAP/MANAGE_MAPS") @RolesAllowed("MAP/MANAGE_MAPS")
public void sendImage(int destId, byte[] imagedata) { public void sendImage(int destId, byte[] imagedata) {
LanEvent event = eventbean.getCurrentEvent(); EventMap map = eventmapfacade.find(destId);
EventMap map = eventmapfacade.find(event, destId);
logger.debug("Setting mapdata for map {}", map); logger.debug("Setting mapdata for map {}", map);
if (map != null) { if (map != null) {
map.setMapData(imagedata); map.setMapData(imagedata);
...@@ -62,6 +60,6 @@ public class EventMapBean implements EventMapBeanLocal { ...@@ -62,6 +60,6 @@ public class EventMapBean implements EventMapBeanLocal {
@Override @Override
@RolesAllowed("MAP/MANAGE_MAPS") @RolesAllowed("MAP/MANAGE_MAPS")
public EventMap find(Integer mapId) { public EventMap find(Integer mapId) {
return eventmapfacade.find(new EventPk(eventbean.getCurrentEvent(), mapId)); return eventmapfacade.find(mapId);
} }
} }
...@@ -11,9 +11,9 @@ import javax.ejb.Stateless; ...@@ -11,9 +11,9 @@ import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BeanRole;
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.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;
...@@ -76,19 +76,22 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -76,19 +76,22 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
HashSet<String> roleset = new HashSet<String>(); HashSet<String> roleset = new HashSet<String>();
if (usr == null) { if (usr == null) {
usr = permbean.getAnonUser(); usr = permbean.getAnonUser();
roleset.add(SpecialPermission.ANONYMOUS.name());
} }
if (usr != null && !usr.isAnonymous()) { if (usr != null && !usr.isAnonymous()) {
roleset.add("USER"); roleset.add(SpecialPermission.USER.name());
} }
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!! // TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr.isSuperadmin()) { if (usr != null && usr.isSuperadmin()) {
for (BortalApplication app : BortalApplication.values()) { for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) { for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName()); roleset.add(perm.getFullName());
} }
} }
roleset.add(BeanRole.SUPERADMIN.name()); roleset.add(SpecialPermission.SUPERADMIN.name());
} else { } else {
List<Role> usrroles = userbean.localFindUsersRoles(usr); List<Role> usrroles = userbean.localFindUsersRoles(usr);
for (Role role : usrroles) { for (Role role : usrroles) {
for (ApplicationPermission apperm : role.getPermissions()) { for (ApplicationPermission apperm : role.getPermissions()) {
......
...@@ -15,6 +15,7 @@ import fi.insomnia.bortal.enums.apps.BillPermission; ...@@ -15,6 +15,7 @@ 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.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -26,11 +27,11 @@ import fi.insomnia.bortal.model.User; ...@@ -26,11 +27,11 @@ import fi.insomnia.bortal.model.User;
UserPermission.S_LOGOUT, UserPermission.S_LOGOUT,
UserPermission.S_MODIFY, UserPermission.S_MODIFY,
UserPermission.S_MODIFY_ACCOUNTEVENTS, UserPermission.S_MODIFY_ACCOUNTEVENTS,
UserPermission.S_READ_ROLES,
UserPermission.S_VIEW_ACCOUNTEVENTS, UserPermission.S_VIEW_ACCOUNTEVENTS,
UserPermission.S_VIEW_ALL, UserPermission.S_VIEW_ALL,
UserPermission.S_VIEW_SELF, UserPermission.S_VIEW_SELF,
UserPermission.S_WRITE_ROLES, UserPermission.S_WRITE_ROLES,
UserPermission.S_READ_ROLES,
MapPermission.S_VIEW, MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS, MapPermission.S_MANAGE_MAPS,
...@@ -46,8 +47,12 @@ import fi.insomnia.bortal.model.User; ...@@ -46,8 +47,12 @@ import fi.insomnia.bortal.model.User;
BillPermission.S_CREATE_BILL, BillPermission.S_CREATE_BILL,
BillPermission.S_READ_ALL, BillPermission.S_READ_ALL,
BillPermission.S_WRITE_ALL, BillPermission.S_WRITE_ALL,
BillPermission.S_VIEW_OWN,
"ANONYMOUS", "SUPERADMIN", "USER" }) SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER,
SpecialPermission.S_ANONYMOUS,
})
public class PermissionBean implements PermissionBeanLocal { public class PermissionBean implements PermissionBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class); private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class);
...@@ -61,8 +66,6 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -61,8 +66,6 @@ public class PermissionBean implements PermissionBeanLocal {
@EJB @EJB
private UserFacade userfacade; private UserFacade userfacade;
private UserBean userbean;
// //
// @Override // @Override
// public boolean hasPermission(String perm) { // public boolean hasPermission(String perm) {
...@@ -72,8 +75,11 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -72,8 +75,11 @@ public class PermissionBean implements PermissionBeanLocal {
@Override @Override
public boolean hasPermission(IAppPermission perm) { public boolean hasPermission(IAppPermission perm) {
return getCurrentUser().isSuperadmin() if (perm == null)
|| context.isCallerInRole(perm.getFullName()); {
return true;
}
return perm == null || context.isCallerInRole(perm.getFullName());
} }
......
...@@ -144,12 +144,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -144,12 +144,8 @@ public class PlaceBean implements PlaceBeanLocal {
// TODO: Kantakysely tähän! // TODO: Kantakysely tähän!
@Override @Override
public Place findPlace(EventMap e, int x, int y) { public Place findPlace(EventMap e, int x, int y) {
for (Place place : e.getPlaces()) {
if (place.isCoordinateInPlace(x, y)) { return placeFacade.find(e, x, y);
return placeFacade.find(place.getId());
}
}
return null;
} }
...@@ -195,16 +191,19 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -195,16 +191,19 @@ public class PlaceBean implements PlaceBeanLocal {
placeFacade.timeoutPlaces(); placeFacade.timeoutPlaces();
} }
@Override //
public void releaseUsersPlaces(User user) throws PermissionDeniedException { // @Override
if (user == null) { // public void releaseUsersPlaces(User user) throws
user = permbean.getCurrentUser(); // PermissionDeniedException {
} else if (!permbean.isCurrentUser(user)) { // if (user == null) {
permbean.fatalPermission(MapPermission.MANAGE_OTHERS, "Not enough rights to release users ", user, " places"); // user = permbean.getCurrentUser();
} // } else if (!permbean.isCurrentUser(user)) {
logger.debug("timeouting places"); // permbean.fatalPermission(MapPermission.MANAGE_OTHERS,
placeFacade.releasePlaces(permbean.getCurrentUser()); // "Not enough rights to release users ", user, " places");
} // }
// logger.debug("timeouting places");
// placeFacade.releasePlaces(permbean.getCurrentUser());
// }
@Override @Override
@RolesAllowed(MapPermission.S_BUY_PLACES) @RolesAllowed(MapPermission.S_BUY_PLACES)
...@@ -224,17 +223,16 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -224,17 +223,16 @@ public class PlaceBean implements PlaceBeanLocal {
return null; return null;
} }
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
productBean.createAccountEvent(line.getKey(), new BigDecimal(line.getValue()), user);
}
// PlaceGroup pg = pgbean.createPlaceGroup(user); // PlaceGroup pg = pgbean.createPlaceGroup(user);
BigDecimal totalprice = totalReservationPrice(user, null); BigDecimal totalprice = totalReservationPrice(user, null);
BigDecimal balance = user.getAccountBalance(); BigDecimal balance = user.getAccountBalance();
if (balance.compareTo(totalprice) < 0) { if (balance.compareTo(totalprice) < 0) {
logger.debug("User {} Could not buy things because account balance is too low!", user); logger.info("User {} Could not buy things because account balance {} is too low for purchase {}", new Object[] { user, balance, totalprice });
return null; }
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
productBean.createAccountEvent(line.getKey(), new BigDecimal(line.getValue()), user);
} }
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true); PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
...@@ -251,7 +249,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -251,7 +249,7 @@ public class PlaceBean implements PlaceBeanLocal {
} }
// adding account event does funny stuff. evicting helps... // adding account event does funny stuff. evicting helps...
userfacade.evict(user); userfacade.evict();
return pg; return pg;
} }
...@@ -303,7 +301,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -303,7 +301,7 @@ public class PlaceBean implements PlaceBeanLocal {
// Current user temporarily used at place reservation. When buying // Current user temporarily used at place reservation. When buying
// release field for its original use ( show who is sitting here ). // release field for its original use ( show who is sitting here ).
p.setCurrentUser(null); p.setCurrentUser(null);
GroupMembership membership = new GroupMembership(p.getEvent(), pg, p, gmemfacade.createInviteToken(p.getEvent())); GroupMembership membership = new GroupMembership(pg, p, gmemfacade.createInviteToken());
pg.getMembers().add(membership); pg.getMembers().add(membership);
p.setPlaceReserver(membership); p.setPlaceReserver(membership);
...@@ -413,7 +411,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -413,7 +411,7 @@ public class PlaceBean implements PlaceBeanLocal {
@Override @Override
@RolesAllowed(MapPermission.S_MANAGE_MAPS) @RolesAllowed(MapPermission.S_MANAGE_MAPS)
public Place find(int placeId) { public Place find(int placeId) {
return placeFacade.find(eventBean.getCurrentEvent(), placeId); return placeFacade.find(placeId);
} }
@Override @Override
......
...@@ -69,14 +69,14 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -69,14 +69,14 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
@Override @Override
@RolesAllowed("USER") @RolesAllowed("USER")
public List<GroupMembership> getMembershipsAndCreations(User user) { public List<GroupMembership> getMembershipsAndCreations(User user) {
List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user); List<GroupMembership> ret = gmemfacade.findMemberOrCreator(user);
return ret; return ret;
} }
@Override @Override
@RolesAllowed("USER") @RolesAllowed("USER")
public List<GroupMembership> getMemberships(User user) { public List<GroupMembership> getMemberships(User user) {
List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user); List<GroupMembership> ret = gmemfacade.findMemberships(user);
return ret; return ret;
} }
...@@ -162,11 +162,10 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -162,11 +162,10 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
@Override @Override
public void releaseAndGenerateToken(GroupMembership gmem) throws PermissionDeniedException { public void releaseAndGenerateToken(GroupMembership gmem) throws PermissionDeniedException {
gmem = gmemfacade.find(gmem.getId()); gmem = gmemfacade.find(gmem.getId());
if (!permbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) || if (!(permbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) || permbean.hasPermission(MapPermission.MANAGE_OTHERS))) {
!permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem); throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
} }
gmem.setUser(null); gmem.setUser(null);
gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent())); gmem.setInviteToken(gmemfacade.createInviteToken());
} }
} }
...@@ -31,11 +31,16 @@ public class PlaceMapBean implements PlaceMapBeanLocal { ...@@ -31,11 +31,16 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
@Override @Override
public Long selectablePlaceCount(EventMap map) { public Long selectablePlaceCount(EventMap map) {
return placeFacade.countSelectable(map); return eventMapFacade.countSelectable(map);
} }
@Override @Override
public EventMap findMap(Integer mapId) { public EventMap findMap(Integer mapId) {
return eventMapFacade.find(eventbean.getCurrentEvent().getId(), mapId); return eventMapFacade.find(mapId);
}
@Override
public Long availablePlaceCount(EventMap map) {
return eventMapFacade.countAvailable(map);
} }
} }
...@@ -117,7 +117,7 @@ public class PollBean implements PollBeanLocal { ...@@ -117,7 +117,7 @@ public class PollBean implements PollBeanLocal {
@Override @Override
public PossibleAnswer findPossibleAnwerById(int id) { public PossibleAnswer findPossibleAnwerById(int id) {
PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), new Integer(id)); PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), Integer.valueOf(id));
logger.debug("Searching from facade {} found {}", id, ans.getId().getId()); logger.debug("Searching from facade {} found {}", id, ans.getId().getId());
return ans; return ans;
} }
......
...@@ -72,7 +72,7 @@ public class ProductBean implements ProductBeanLocal { ...@@ -72,7 +72,7 @@ public class ProductBean implements ProductBeanLocal {
@Override @Override
@RolesAllowed("SHOP/LIST_ALL_PRODUCTS") @RolesAllowed("SHOP/LIST_ALL_PRODUCTS")
public List<Product> getProducts() { public List<Product> getProducts() {
return productFacade.findAll(eventBean.getCurrentEvent()); return productFacade.findAll();
} }
@Override @Override
...@@ -152,13 +152,13 @@ public class ProductBean implements ProductBeanLocal { ...@@ -152,13 +152,13 @@ public class ProductBean implements ProductBeanLocal {
@Override @Override
public Product findById(int id) { public Product findById(int id) {
return productFacade.find(eventBean.getCurrentEvent().getId(), id); return productFacade.find(id);
} }
@Override @Override
@RolesAllowed("SHOP/LIST_ALL_PRODUCTS") @RolesAllowed("SHOP/LIST_ALL_PRODUCTS")
public List<Product> findForStaffshop() { public List<Product> findForStaffshop() {
return productFacade.findAll(eventBean.getCurrentEvent()); return productFacade.findAll();
} }
@RolesAllowed("SHOP/MANAGE_PRODUCTS") @RolesAllowed("SHOP/MANAGE_PRODUCTS")
......
...@@ -69,25 +69,25 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -69,25 +69,25 @@ public class TestDataBean implements TestDataBeanLocal {
} }
@Override // @Override
public void writeMap(byte[] bytes) { // public void writeMap(byte[] bytes) {
EventMap map = new EventMap(eventBean.getCurrentEvent()); // EventMap map = new EventMap(eventBean.getCurrentEvent());
map.setName("test" + bytes); // map.setName("test" + bytes);
// StringBuilder sb = new StringBuilder(); // // StringBuilder sb = new StringBuilder();
// for (int i = 0; i < bytes; ++i) { // // for (int i = 0; i < bytes; ++i) {
// // //
// sb.append((char) (33 + i % 92)); // // sb.append((char) (33 + i % 92));
// } // // }
map.setMapData(bytes); // map.setMapData(bytes);
eventMapFacade.create(map); // eventMapFacade.create(map);
} // }
@Override
public EventMap readMap(long bytes) {
return eventMapFacade.findByName("test" + bytes);
} // @Override
// public EventMap readMap(long bytes) {
//
// return eventMapFacade.findByName("test" + bytes);
//
// }
/** /**
* Default constructor. * Default constructor.
...@@ -203,11 +203,13 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -203,11 +203,13 @@ public class TestDataBean implements TestDataBeanLocal {
@Override @Override
public EventMap generateTestMap() { public EventMap generateTestMap() {
LanEvent event = eventBean.getCurrentEvent(); LanEvent event = eventBean.getCurrentEvent();
InputStream stream = null;
try { try {
logger.info("Generating Test Map for event: " + event); logger.info("Generating Test Map for event: " + event);
EventMap map = new EventMap(event); EventMap map = new EventMap(event);
InputStream stream = getClass().getResourceAsStream(TEST_MAP_IMAGE_NAME); stream = getClass().getResourceAsStream(TEST_MAP_IMAGE_NAME);
File file = new File(getClass().getResource(TEST_MAP_IMAGE_NAME).toURI()); File file = new File(getClass().getResource(TEST_MAP_IMAGE_NAME).toURI());
long length = file.length(); long length = file.length();
...@@ -227,8 +229,6 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -227,8 +229,6 @@ public class TestDataBean implements TestDataBeanLocal {
throw new IOException("Could not completely read file " + file.getName()); throw new IOException("Could not completely read file " + file.getName());
} }
stream.close();
map.setMapData(bytes); map.setMapData(bytes);
map.setName("test0"); map.setName("test0");
eventMapFacade.create(map); eventMapFacade.create(map);
...@@ -239,6 +239,17 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -239,6 +239,17 @@ public class TestDataBean implements TestDataBeanLocal {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} finally
{
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// ignore at this point
}
}
} }
return null; return null;
} }
...@@ -264,11 +275,11 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -264,11 +275,11 @@ public class TestDataBean implements TestDataBeanLocal {
@Override @Override
public void printPlacesInfo() { public void printPlacesInfo() {
logger.debug("Fetching places"); logger.debug("Fetching places");
List<Place> places = placeFacade.findAll(eventBean.getCurrentEvent()); List<Place> places = placeFacade.findAll();
logger.debug("Got places: {}", places); logger.debug("Got places: {}", places);
logger.info("Printing info from places"); logger.info("Printing info from places");
for (Place place : places) { for (Place place : places) {
logger.info("Place id: {}. Event Map id: {}.", place.getId().getId(), place.getMap().getId().getId()); logger.info("Place id: {}. Event Map id: {}.", place.getId(), place.getMap().getId());
} }
} }
......
...@@ -18,6 +18,7 @@ import javax.persistence.PersistenceContext; ...@@ -18,6 +18,7 @@ import javax.persistence.PersistenceContext;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.GroupMembershipFacade; import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
...@@ -38,7 +39,7 @@ import fi.insomnia.bortal.utilities.SearchResult; ...@@ -38,7 +39,7 @@ import fi.insomnia.bortal.utilities.SearchResult;
*/ */
@LocalBean @LocalBean
@Stateless @Stateless
@DeclareRoles({ "USER/EXECUTE", "USER/VIEW_ALL", "USER" }) @DeclareRoles({ UserPermission.S_VIEW_ALL, SpecialPermission.S_USER })
public class UserBean implements UserBeanLocal { public class UserBean implements UserBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UserBean.class); private static final Logger logger = LoggerFactory.getLogger(UserBean.class);
...@@ -75,7 +76,7 @@ public class UserBean implements UserBeanLocal { ...@@ -75,7 +76,7 @@ public class UserBean implements UserBeanLocal {
private GroupMembershipFacade gmfacade; private GroupMembershipFacade gmfacade;
@Override @Override
@RolesAllowed("USER/VIEW_ALL") @RolesAllowed(UserPermission.S_VIEW_ALL)
public List<User> getUsers() { public List<User> getUsers() {
List<User> ret = userFacade.findAll(); List<User> ret = userFacade.findAll();
...@@ -83,6 +84,7 @@ public class UserBean implements UserBeanLocal { ...@@ -83,6 +84,7 @@ public class UserBean implements UserBeanLocal {
} }
@Override @Override
@RolesAllowed(SpecialPermission.S_USER)
public User mergeChanges(User user) throws PermissionDeniedException { public User mergeChanges(User user) throws PermissionDeniedException {
if (!permbean.isCurrentUser(user)) { if (!permbean.isCurrentUser(user)) {
...@@ -113,20 +115,23 @@ public class UserBean implements UserBeanLocal { ...@@ -113,20 +115,23 @@ public class UserBean implements UserBeanLocal {
public List<Role> localFindUsersRoles(User u) { public List<Role> localFindUsersRoles(User u) {
Set<Role> checkedRoles = new HashSet<Role>(); Set<Role> checkedRoles = new HashSet<Role>();
addRecursive(checkedRoles, u.getRoles()); if (u != null)
{
addRecursive(checkedRoles, u.getRoles());
if (permbean.isLoggedIn()) { if (permbean.isLoggedIn()) {
LanEvent event = eventBean.getCurrentEvent(); LanEvent event = eventBean.getCurrentEvent();
// add roles from events default role. // add roles from events default role.
addRecursive(checkedRoles, event.getDefaultRole()); addRecursive(checkedRoles, event.getDefaultRole());
// add roles from accountEvents of the user // add roles from accountEvents of the user
addRecursive(checkedRoles, acbean.getRolesFromAccountEvents(u)); addRecursive(checkedRoles, acbean.getRolesFromAccountEvents(u));
for (GroupMembership member : groupMembershipFacade.findMemberships(event, u)) { for (GroupMembership member : groupMembershipFacade.findMemberships(u)) {
addRecursive(checkedRoles, member.getPlaceReservation().getProvidesRole()); addRecursive(checkedRoles, member.getPlaceReservation().getProvidesRole());
}
} }
} }
return new ArrayList<Role>(checkedRoles); return new ArrayList<Role>(checkedRoles);
...@@ -150,7 +155,7 @@ public class UserBean implements UserBeanLocal { ...@@ -150,7 +155,7 @@ public class UserBean implements UserBeanLocal {
} }
@Override @Override
@RolesAllowed("USER") @RolesAllowed(SpecialPermission.S_USER)
public UserImage uploadImage(Integer userid, String contentType, byte[] image, String filename, String description) throws PermissionDeniedException { public UserImage uploadImage(Integer userid, String contentType, byte[] image, String filename, String description) throws PermissionDeniedException {
User user = permbean.getCurrentUser(); User user = permbean.getCurrentUser();
logger.debug("uploading image to userid {}", userid); logger.debug("uploading image to userid {}", userid);
...@@ -158,7 +163,7 @@ public class UserBean implements UserBeanLocal { ...@@ -158,7 +163,7 @@ public class UserBean implements UserBeanLocal {
userid = user.getId(); userid = user.getId();
} }
if (!permbean.getCurrentUser().getId().equals(userid)) { if (!user.getId().equals(userid)) {
permbean.fatalPermission(UserPermission.MODIFY, "usert tried to save picture to userid " + userid + " without sufficient permissions!"); permbean.fatalPermission(UserPermission.MODIFY, "usert tried to save picture to userid " + userid + " without sufficient permissions!");
user = userFacade.find(userid); user = userFacade.find(userid);
} }
...@@ -167,13 +172,11 @@ public class UserBean implements UserBeanLocal { ...@@ -167,13 +172,11 @@ public class UserBean implements UserBeanLocal {
userimage.setImageData(image); userimage.setImageData(image);
userimage.setName(filename); userimage.setName(filename);
userimage.setDescription(description); userimage.setDescription(description);
userimagefacade.create(userimage);
// setting uploaded image as the default.
user.setCurrentImage(userimage);
user.getUserImageList().add(userimage); user.getUserImageList().add(userimage);
userFacade.merge(user); // setting uploaded image as the default.
user.setCurrentImage(userimage);
return userimage; return userimage;
} }
...@@ -236,7 +239,7 @@ public class UserBean implements UserBeanLocal { ...@@ -236,7 +239,7 @@ public class UserBean implements UserBeanLocal {
@Override @Override
public User initPasswordReset(User user, String hash, String mailpath) { public User initPasswordReset(User user, String hash, String mailpath) {
if (hash == null || hash.length() < 20 || user == null || user.getEmail() == null || user.getEmail().length() <= 5) { if (hash == null || hash.length() < 20 || user == null || user.getEmail() == null || user.getEmail().length() <= 5) {
logger.info("Not sending email with params {} {} {}", new Object[] { user, user.getEmail(), hash }); logger.info("Not sending email with params {} {}", new Object[] { user, hash });
return null; return null;
} }
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath }); logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath });
...@@ -283,7 +286,7 @@ public class UserBean implements UserBeanLocal { ...@@ -283,7 +286,7 @@ public class UserBean implements UserBeanLocal {
pg.setCreator(creator); pg.setCreator(creator);
pg.setName("Invitebean"); pg.setName("Invitebean");
String token = PasswordFunctions.generateRandomString(30, PasswordFunctions.ALL_CHARS); String token = PasswordFunctions.generateRandomString(30, PasswordFunctions.ALL_CHARS);
pg.getMembers().add(new GroupMembership(ev, pg, null, token)); pg.getMembers().add(new GroupMembership(pg, null, token));
creator.getPlaceGroups().add(pg); creator.getPlaceGroups().add(pg);
return true; return true;
...@@ -291,7 +294,7 @@ public class UserBean implements UserBeanLocal { ...@@ -291,7 +294,7 @@ public class UserBean implements UserBeanLocal {
@Override @Override
public GroupMembership findToken(String token) { public GroupMembership findToken(String token) {
return gmfacade.findToken(token); return gmfacade.findByToken(token);
} }
@Override @Override
......
package fi.insomnia.bortal.beanutil; package fi.insomnia.bortal.beanutil;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List; import java.util.List;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -26,415 +24,415 @@ import fi.insomnia.bortal.model.LanEvent; ...@@ -26,415 +24,415 @@ import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.utilities.BillUtils; import fi.insomnia.bortal.utilities.BillUtils;
public class PdfPrinter { public class PdfPrinter {
public enum LineStyle { public enum LineStyle {
THIN, THICK, NORMAL THIN, THICK, NORMAL
} }
private static final String fontname = CoreFont.HELVETICA; private static final String fontname = CoreFont.HELVETICA;
private static final String boldfontname = CoreFont.HELVETICA_BOLD; private static final String boldfontname = CoreFont.HELVETICA_BOLD;
private static final String EURO = " EUR"; private static final String EURO = " EUR";
// Legacy y-coordinater reverse constant // Legacy y-coordinater reverse constant
private static final double INVERT = 840; private static final double INVERT = 840;
private static final BigDecimal DEPERCENTER = new BigDecimal(100); private static final BigDecimal DEPERCENTER = new BigDecimal(100);
// private Biller billerInfo = new Biller(); // private Biller billerInfo = new Biller();
// private Receiver receiver = new Receiver(); // private Receiver receiver = new Receiver();
private Page page; private Page page;
private PDF pdf; private PDF pdf;
private Bill bill; private final Bill bill;
private static final Logger logger = LoggerFactory.getLogger(PdfPrinter.class); private static final Logger logger = LoggerFactory.getLogger(PdfPrinter.class);
private static final String DATEFORMAT = "dd.MM.yyyy";
public PdfPrinter(Bill printable) {
bill = printable; public PdfPrinter(Bill printable) {
} bill = printable;
}
public void output(OutputStream ostream) {
try { public void output(OutputStream ostream) {
pdf = new PDF(ostream); try {
pdf = new PDF(ostream);
page = new Page(pdf, A4.PORTRAIT);
page = new Page(pdf, A4.PORTRAIT);
// bill = testLines();
drawHeader(); // bill = testLines();
drawProducts(bill.getBillLines()); drawHeader();
pankkisiirto(); drawProducts(bill.getBillLines());
pdf.flush(); pankkisiirto();
// pdf.wrap(); pdf.flush();
// String fileName = "/Users/tuomari/Example_01.pdf"; // pdf.wrap();
// FileOutputStream fos = new FileOutputStream(fileName); // String fileName = "/Users/tuomari/Example_01.pdf";
// pdf.getData().writeTo(fos); // FileOutputStream fos = new FileOutputStream(fileName);
// fos.close(); // pdf.getData().writeTo(fos);
// return pdf.getData(); // fos.close();
// return pdf.getData();
} catch (Exception e) {
logger.warn("Error printing bill " + bill + " to stream", e); } catch (Exception e) {
logger.warn("Error printing bill " + bill + " to stream", e);
}
} }
}
private void drawProducts(List<BillLine> prods) throws Exception {
private void drawProducts(List<BillLine> prods) throws Exception {
Font pagetext = new Font(pdf, fontname);
pagetext.setSize(11); Font pagetext = new Font(pdf, fontname);
pagetext.setSize(11);
Font pagetitle = new Font(pdf, boldfontname);
pagetitle.setSize(11); Font pagetitle = new Font(pdf, boldfontname);
pagetitle.setSize(11);
// Ihan ensin tulostetaan selityskentät tuotteille.
drawText(20, 640, "Tuotteet", pagetitle); // Ihan ensin tulostetaan selityskentät tuotteille.
drawText(210, 640, "Määrä", pagetitle); drawText(20, 640, "Tuotteet", pagetitle);
drawText(250, 640, "Yks.", pagetitle); drawText(210, 640, "Määrä", pagetitle);
drawText(295, 640, "A-hinta", pagetitle); drawText(250, 640, "Yks.", pagetitle);
drawText(362, 640, "Veroton", pagetitle); drawText(295, 640, "A-hinta", pagetitle);
drawText(450, 640, "Alv, (%)", pagetitle); drawText(362, 640, "Veroton", pagetitle);
drawText(520, 640, "Yhteensä", pagetitle); drawText(450, 640, "Alv, (%)", pagetitle);
drawText(520, 640, "Yhteensä", pagetitle);
boolean firstpage = true;
boolean firstpage = true;
double height = 625.0;
for (BillLine line : prods) { double height = 625.0;
if (firstpage && height < 625 - (15 * 17)) { for (BillLine line : prods) {
drawText(250, 800, "Sivu 1/2", pagetext); if (firstpage && height < 625 - (15 * 17)) {
page = new Page(pdf, A4.PORTRAIT); drawText(250, 800, "Sivu 1/2", pagetext);
drawHeader(); page = new Page(pdf, A4.PORTRAIT);
// $this->pdfheader($pdf, $firstpage, $fontit, $laskuArray, drawHeader();
// $summaArray,$setupArray); // $this->pdfheader($pdf, $firstpage, $fontit, $laskuArray,
// $this->infoKentat($pdf, $firstpage, $setupArray, $fontit, // $summaArray,$setupArray);
// 15); // $this->infoKentat($pdf, $firstpage, $setupArray, $fontit,
drawText(250, 800, "Sivu 2/2", pagetext); // 15);
height = 625; drawText(250, 800, "Sivu 2/2", pagetext);
height = 625;
}
}
// $kerroin = 5;
// $ykshinta = help::pilkoLuku($tuote['hinta']); // $kerroin = 5;
// $kokhinta = // $ykshinta = help::pilkoLuku($tuote['hinta']);
// help::pilkoLuku(floatval($tuote['hinta'])*floatval($tuote['lkm'])); // $kokhinta =
// $alvhinta = // help::pilkoLuku(floatval($tuote['hinta'])*floatval($tuote['lkm']));
// help::pilkoLuku(floatval($tuote['hinta'])*floatval($tuote['lkm'])* // $alvhinta =
// (floatval($tuote['alv'])/100)) . // help::pilkoLuku(floatval($tuote['hinta'])*floatval($tuote['lkm'])*
// " (" . help::pilkoluku($tuote['alv']) . ")"; // (floatval($tuote['alv'])/100)) .
// // " (" . help::pilkoluku($tuote['alv']) . ")";
// //
// $yhthinta = help::pilkoLuku($tuote['hinta'] * $tuote['lkm'] * //
// ($tuote['alv']/100 + 1)); // $yhthinta = help::pilkoLuku($tuote['hinta'] * $tuote['lkm'] *
// ($tuote['alv']/100 + 1));
drawText(20, height, line.getName(), pagetext);
drawText(239, height, line.getQuantity(), pagetext); drawText(20, height, line.getName(), pagetext);
drawText(239, height, line.getQuantity(), pagetext);
drawText(252, height, line.getUnitName(), pagetext);
drawText(252, height, line.getUnitName(), pagetext);
drawText(332, height, line.getUnitPrice(), pagetext);
drawText(332, height, line.getUnitPrice(), pagetext);
drawText(402, height, line.getLinePriceVatless(), pagetext);
String vat = decRound(line.getLineVat()) + " (" + DEPERCENTER.multiply(line.getVat()).setScale(0, RoundingMode.HALF_UP) + ")"; drawText(402, height, line.getLinePriceVatless(), pagetext);
drawText(490 - pagetext.stringWidth(vat), height, vat, pagetext); String vat = decRound(line.getLineVat()) + " (" + DEPERCENTER.multiply(line.getVat()).setScale(0, RoundingMode.HALF_UP) + ")";
drawText(490 - pagetext.stringWidth(vat), height, vat, pagetext);
drawText(567, height, line.getLinePrice(), pagetext);
drawText(567, height, line.getLinePrice(), pagetext);
height -= 15;
height -= 15;
}
} }
}
private void drawText(double x, double y, BigDecimal num, Font font) throws Exception {
String nnum = num.setScale(2, RoundingMode.HALF_UP).toString(); private void drawText(double x, double y, BigDecimal num, Font font) throws Exception {
String nnum = num.setScale(2, RoundingMode.HALF_UP).toString();
drawText(x - font.stringWidth(nnum), y, nnum, font);
drawText(x - font.stringWidth(nnum), y, nnum, font);
}
}
private void drawSender(int xpos, int ystart) throws Exception {
Font sendername = new Font(pdf, boldfontname); private void drawSender(int xpos, int ystart) throws Exception {
sendername.setSize(17); Font sendername = new Font(pdf, boldfontname);
sendername.setSize(17);
Font addressfont = new Font(pdf, fontname);
addressfont.setSize(12); Font addressfont = new Font(pdf, fontname);
// User user = bill.getUser(); addressfont.setSize(12);
int space = 12; // User user = bill.getUser();
LanEvent event = bill.getEvent(); int space = 12;
logger.debug("bill is for event {}", event); LanEvent event = bill.getEvent();
EventOrganiser org = event.getOrganiser(); logger.debug("bill is for event {}", event);
logger.debug("and organiser {}", org); EventOrganiser org = event.getOrganiser();
drawText(xpos, ystart, org.getBillAddress1(), sendername); logger.debug("and organiser {}", org);
drawText(xpos, ystart - space, org.getBillAddress2(), addressfont); drawText(xpos, ystart, org.getBillAddress1(), sendername);
drawText(xpos, ystart - space * 2, org.getBillAddress3(), addressfont); drawText(xpos, ystart - space, org.getBillAddress2(), addressfont);
drawText(xpos, ystart - space * 3, org.getBillAddress4(), addressfont); drawText(xpos, ystart - space * 2, org.getBillAddress3(), addressfont);
drawText(xpos, ystart - space * 3, org.getBillAddress4(), addressfont);
} }
private void drawHeader() throws Exception { private void drawHeader() throws Exception {
Font addressfont = new Font(pdf, fontname); Font addressfont = new Font(pdf, fontname);
addressfont.setSize(12); addressfont.setSize(12);
drawSender(35, 800); drawSender(35, 800);
Font receivername = new Font(pdf, boldfontname); Font receivername = new Font(pdf, boldfontname);
receivername.setSize(13); receivername.setSize(13);
drawText(70, 730, bill.getAddr1(), receivername); drawText(70, 730, bill.getAddr1(), receivername);
drawText(70, 718, bill.getAddr2(), addressfont); drawText(70, 718, bill.getAddr2(), addressfont);
drawText(70, 706, bill.getAddr3(), addressfont); drawText(70, 706, bill.getAddr3(), addressfont);
drawText(70, 694, bill.getAddr4(), addressfont); drawText(70, 694, bill.getAddr4(), addressfont);
drawText(70, 682, bill.getAddr5(), addressfont); drawText(70, 682, bill.getAddr5(), addressfont);
drawThinLine(10, 660, 585, 660); drawThinLine(10, 660, 585, 660);
drawThinLine(300, 660, 300, 820); drawThinLine(300, 660, 300, 820);
drawThinLine(300, 820, 585, 820); drawThinLine(300, 820, 585, 820);
drawThinLine(440, 760, 440, 820); drawThinLine(440, 760, 440, 820);
drawThinLine(300, 800, 585, 800); drawThinLine(300, 800, 585, 800);
drawThinLine(300, 780, 585, 780); drawThinLine(300, 780, 585, 780);
drawThinLine(300, 760, 585, 760); drawThinLine(300, 760, 585, 760);
Font descriptionfont = new Font(pdf, fontname); Font descriptionfont = new Font(pdf, fontname);
descriptionfont.setSize(8); descriptionfont.setSize(8);
Font infofont = new Font(pdf, fontname); Font infofont = new Font(pdf, fontname);
infofont.setSize(11); infofont.setSize(11);
drawText(302, 812, "Päivämäärä", descriptionfont); SimpleDateFormat dateformat = new SimpleDateFormat(DATEFORMAT);
drawText(355, 805, DATE_FORMAT.format(bill.getSentDate().getTime()), infofont); drawText(302, 812, "Päivämäärä", descriptionfont);
drawText(355, 805, dateformat.format(bill.getSentDate().getTime()), infofont);
drawText(442, 812, "Eräpäivä", descriptionfont);
drawText(442, 812, "Eräpäivä", descriptionfont);
drawText(485, 805, DATE_FORMAT.format(bill.getDueDate().getTime()), infofont);
drawText(485, 805, dateformat.format(bill.getDueDate().getTime()), infofont);
drawText(302, 772, "Maksuehdot", descriptionfont);
String paystr = "Heti"; drawText(302, 772, "Maksuehdot", descriptionfont);
if (bill.getPaymentTime() > 0) { String paystr = "Heti";
paystr = bill.getPaymentTime() + " pv Netto"; if (bill.getPaymentTime() > 0) {
} paystr = bill.getPaymentTime() + " pv Netto";
drawText(355, 765, paystr, infofont); }
drawText(355, 765, paystr, infofont);
drawText(442, 792, "Laskun numero", descriptionfont);
drawText(510, 785, bill.getBillNumber().toString(), infofont); drawText(442, 792, "Laskun numero", descriptionfont);
drawText(510, 785, bill.getBillNumber().toString(), infofont);
/*
* drawText(442, 772, "Huomautusaika", descriptionfont); drawText(510, /*
* 765, bill.getNoticetime(), infofont); * drawText(442, 772, "Huomautusaika", descriptionfont); drawText(510,
*/ * 765, bill.getNoticetime(), infofont);
drawText(302, 792, "Viitenumero", descriptionfont); */
drawText(355, 785, BillUtils.createReferenceNumber(bill.getReferenceNumberBase()).toString(), infofont); drawText(302, 792, "Viitenumero", descriptionfont);
drawText(355, 785, BillUtils.createReferenceNumber(bill.getReferenceNumberBase()).toString(), infofont);
drawThinLine(300, 740, 585, 740); drawThinLine(300, 740, 585, 740);
drawText(302, 732, "Viitteenne", descriptionfont); drawText(302, 732, "Viitteenne", descriptionfont);
drawText(355, 725, bill.getTheirReference(), infofont); drawText(355, 725, bill.getTheirReference(), infofont);
drawText(302, 712, "Viitteemme", descriptionfont); drawText(302, 712, "Viitteemme", descriptionfont);
drawText(355, 705, bill.getOurReference(), infofont); drawText(355, 705, bill.getOurReference(), infofont);
drawThinLine(300, 720, 585, 720); drawThinLine(300, 720, 585, 720);
drawText(302, 752, "Toimitus", descriptionfont); drawText(302, 752, "Toimitus", descriptionfont);
drawText(355, 745, bill.getDeliveryTerms(), infofont); drawText(355, 745, bill.getDeliveryTerms(), infofont);
drawThinLine(300, 700, 585, 700); drawThinLine(300, 700, 585, 700);
drawThinLine(300, 680, 585, 680); drawThinLine(300, 680, 585, 680);
drawThinLine(470, 660, 470, 700); drawThinLine(470, 660, 470, 700);
drawText(472, 692, "ALV", descriptionfont); drawText(472, 692, "ALV", descriptionfont);
drawText(490, 685, decRound(bill.totalVat()) + EURO, infofont); drawText(490, 685, decRound(bill.totalVat()) + EURO, infofont);
drawText(302, 692, "0% ALV", descriptionfont);
drawText(355, 685, decRound(bill.totalPriceVatless()) + EURO, infofont);
drawText(302, 672, "Yhteensä", descriptionfont);
drawText(355, 665, decRound(bill.totalPrice()) + EURO, infofont);
/*
* drawText(472, 672, "Viivästyskorko", descriptionfont); drawText(530,
* 665, bill.getDelayIntrest() + "%", infofont);
*/
// drawText( 490, 665, "ALV Rek.",'mediumTeksti');
// Alkuosa loppuu
}
private static String decRound(BigDecimal num) {
return num.setScale(2, RoundingMode.HALF_UP).toString();
}
private void pankkisiirto() throws Exception {
// Pankkisiirtolappuosuus.
drawText(302, 692, "0% ALV", descriptionfont); // Paksu alavasen
drawText(355, 685, decRound(bill.totalPriceVatless()) + EURO, infofont); drawLine(new double[] { 10, 317, 317 }, new double[] { 102, 102, 78 });
// Iso paksu oikealla.
drawText(302, 672, "Yhteensä", descriptionfont); drawLine(new double[] { 317, 317, 576 }, new double[] { 278, 102, 102 });
drawText(355, 665, decRound(bill.totalPrice()) + EURO, infofont); // Paksu maksajan ympärillä vasen ylä
/* drawLine(new double[] { 10, 57, 57 }, new double[] { 240, 240, 198 });
* drawText(472, 672, "Viivästyskorko", descriptionfont); drawText(530, // paksu ylin vasemmalla
* 665, bill.getDelayIntrest() + "%", infofont); drawLine(new double[] { 57, 57, 317 }, new double[] { 278, 240, 240 });
*/ // Alimmainen viiva
// drawText( 490, 665, "ALV Rek.",'mediumTeksti'); drawLine(10, 78, 576, 78);
// Viitenro:n yl&auml;puolella
// Alkuosa loppuu drawLine(317, 126, 576, 126);
// pysty viite ja eräpäivän erotin
} drawLine(348, 126, 348, 78);
// eräpäivä ja euroerotin.
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy"); drawLine(442, 102, 442, 78);
// Saajan ja maksajan v&auml;liss&auml;
private static String decRound(BigDecimal num) { drawLine(10, 198, 317, 198);
return num.setScale(2, RoundingMode.HALF_UP).toString();
} // ohuet
private void pankkisiirto() throws Exception { // Allekirjoitus
// Pankkisiirtolappuosuus. drawThinLine(57, 114, 317, 114);
// Paksu alavasen // Tilin erotin
drawLine(new double[] { 10, 317, 317 }, new double[] { 102, 102, 78 }); drawThinLine(57.6, 78, 57.6, 102);
// Iso paksu oikealla.
drawLine(new double[] { 317, 317, 576 }, new double[] { 278, 102, 102 }); // pienet v&auml;k&auml;set
// Paksu maksajan ympärillä vasen ylä for (double i = 72; i < 275; i += 14.4) {
drawLine(new double[] { 10, 57, 57 }, new double[] { 240, 240, 198 }); drawThinLine(new double[] { i, i }, new double[] { 78, 85.2 });
// paksu ylin vasemmalla }
drawLine(new double[] { 57, 57, 317 }, new double[] { 278, 240, 240 }); // Viiva v&auml;k&auml;sten v&auml;liin
// Alimmainen viiva drawLine(149, 84, 154, 84);
drawLine(10, 78, 576, 78);
// Viitenro:n yl&auml;puolella // Tulostetaan katkoviiva Tilisiirron yl&auml;puolelle.
drawLine(317, 126, 576, 126); for (double i = 10; i < 576; i = i + 20) {
// pysty viite ja eräpäivän erotin drawThinLine(new double[] { i, i + 10 }, new double[] { 288, 288 });
drawLine(348, 126, 348, 78); }
// eräpäivä ja euroerotin.
drawLine(442, 102, 442, 78); // $pdf->draw_text()
// Saajan ja maksajan v&auml;liss&auml; // kirjoitukset
drawLine(10, 198, 317, 198); Font billfont = new Font(pdf, fontname);
billfont.setSize(7);
// ohuet
drawText(31, 267, "Saajan", billfont);
// Allekirjoitus drawText(23, 261, "tilinumero", billfont);
drawThinLine(57, 114, 317, 114); drawText(14, 255, "Mottagarens", billfont);
drawText(10, 249, "kontonummer", billfont);
// Tilin erotin
drawThinLine(57.6, 78, 57.6, 102); drawText(35, 220, "Saaja", billfont);
drawText(22, 214, "Mottagare", billfont);
// pienet v&auml;k&auml;set
for (double i = 72; i < 275; i += 14.4) { drawText(27, 180, "Maksaja", billfont);
drawThinLine(new double[] { i, i }, new double[] { 78, 85.2 }); drawText(27, 174, "Betalare", billfont);
}
// Viiva v&auml;k&auml;sten v&auml;liin drawText(18, 120, "Allekirjoitus", billfont);
drawLine(149, 84, 154, 84); drawText(19, 114, "Undesrkrift", billfont);
// Tulostetaan katkoviiva Tilisiirron yl&auml;puolelle. drawText(25, 91, "Tililtä nro", billfont);
for (double i = 10; i < 576; i = i + 20) { drawText(12, 85, "Från konto nr", billfont);
drawThinLine(new double[] { i, i + 10 }, new double[] { 288, 288 });
} Font titletext = new Font(pdf, boldfontname);
titletext.setSize(10);
// $pdf->draw_text()
// kirjoitukset drawText(320, 267, "TILISIIRTO GIRERING", titletext);
Font billfont = new Font(pdf, fontname);
billfont.setSize(7); Font smallPrint = new Font(pdf, fontname);
smallPrint.setSize(5);
drawText(31, 267, "Saajan", billfont);
drawText(23, 261, "tilinumero", billfont); drawText(320, 260, "Maksu välitetään saajalle vain Suomessa Kotimaan maksujenvälituksen yleisten", smallPrint);
drawText(14, 255, "Mottagarens", billfont); drawText(320, 255, "ehtojen mukaisesti ja vain maksajan ilmoittaman tilinumeron perusteella.", smallPrint);
drawText(10, 249, "kontonummer", billfont); drawText(320, 248, "Betalningen förmedlas fill mottagare endast i Finland enligt Allmänna vllkor för", smallPrint);
drawText(320, 243, "inrikes betalningsförmedling och endast till det kontonummer betalaren angivit.", smallPrint);
drawText(35, 220, "Saaja", billfont);
drawText(22, 214, "Mottagare", billfont); drawText(319, 116, "Viitenro", billfont);
drawText(319, 108, "Ref.nr", billfont);
drawText(27, 180, "Maksaja", billfont); drawText(319, 92, "Eräpäivä", billfont);
drawText(27, 174, "Betalare", billfont); drawText(319, 84, "Forf.dag", billfont);
drawText(444, 95, "Euro", billfont);
drawText(18, 120, "Allekirjoitus", billfont);
drawText(19, 114, "Undesrkrift", billfont); Font banktext = new Font(pdf, boldfontname);
banktext.setSize(8);
drawText(25, 91, "Tililtä nro", billfont);
drawText(12, 85, "Från konto nr", billfont); drawText(545, 24, "PANKKI", banktext);
drawText(542, 15, "BANKEN", banktext);
Font titletext = new Font(pdf, boldfontname);
titletext.setSize(10); // laskun tiedot
Font addrfont = new Font(pdf, fontname);
drawText(320, 267, "TILISIIRTO GIRERING", titletext); addrfont.setSize(11); // Tulostetaan tekstit pankkisiirtolomakkeeseen.
Font smallPrint = new Font(pdf, fontname); Font receivername = new Font(pdf, boldfontname);
smallPrint.setSize(5); receivername.setSize(12);
drawText(320, 260, "Maksu välitetään saajalle vain Suomessa Kotimaan maksujenvälituksen yleisten", smallPrint); // Laskuttajan tiedot
drawText(320, 255, "ehtojen mukaisesti ja vain maksajan ilmoittaman tilinumeron perusteella.", smallPrint); EventOrganiser organiser = bill.getEvent().getOrganiser();
drawText(320, 248, "Betalningen förmedlas fill mottagare endast i Finland enligt Allmänna vllkor för", smallPrint); drawText(70, 220, organiser.getBillAddress1(), receivername);
drawText(320, 243, "inrikes betalningsförmedling och endast till det kontonummer betalaren angivit.", smallPrint); drawText(70, 265, organiser.getBankNumber1() + " " + organiser.getBankName1(), addrfont);
drawText(70, 250, organiser.getBankNumber2() + " " + organiser.getBankName2(), addrfont);
drawText(319, 116, "Viitenro", billfont);
drawText(319, 108, "Ref.nr", billfont); drawText(70, 180, bill.getAddr1(), receivername);
drawText(319, 92, "Eräpäivä", billfont); drawText(70, 168, bill.getAddr2(), addrfont);
drawText(319, 84, "Forf.dag", billfont); drawText(70, 156, bill.getAddr3(), addrfont);
drawText(444, 95, "Euro", billfont); drawText(70, 144, bill.getAddr4(), addrfont);
drawText(70, 132, bill.getAddr5(), addrfont);
Font banktext = new Font(pdf, boldfontname); drawText(355, 110, BillUtils.createReferenceNumber(bill.getReferenceNumberBase()).toString(), addrfont);
banktext.setSize(8); drawText(465, 86, decRound(bill.totalPrice()), addrfont);
drawText(355, 86, new SimpleDateFormat(DATEFORMAT).format(bill.getDueDate().getTime()), addrfont);
drawText(545, 24, "PANKKI", banktext);
drawText(542, 15, "BANKEN", banktext); }
// laskun tiedot private void drawThinLine(double[] ds, double[] ds2) throws Exception {
Font addrfont = new Font(pdf, fontname); drawLine(ds, ds2, LineStyle.THIN);
addrfont.setSize(11); // Tulostetaan tekstit pankkisiirtolomakkeeseen. }
Font receivername = new Font(pdf, boldfontname); private void drawLine(double[] xs, double[] ys) throws Exception {
receivername.setSize(12); drawLine(xs, ys, LineStyle.NORMAL);
}
// Laskuttajan tiedot
EventOrganiser organiser = bill.getEvent().getOrganiser(); private void drawLine(double[] ds, double[] ds2, LineStyle style) throws Exception {
drawText(70, 220, organiser.getBillAddress1(), receivername); for (int i = 0; i + 1 < ds.length && i + 1 < ds2.length; ++i) {
drawText(70, 265, organiser.getBankNumber1() + " " + organiser.getBankName1(), addrfont); drawLine(ds[i], ds2[i], ds[i + 1], ds2[i + 1], style);
drawText(70, 250, organiser.getBankNumber2() + " " + organiser.getBankName2(), addrfont); }
drawText(70, 180, bill.getAddr1(), receivername); }
drawText(70, 168, bill.getAddr2(), addrfont);
drawText(70, 156, bill.getAddr3(), addrfont); private void drawThinLine(double x1, double y1, double x2, double y2) throws Exception {
drawText(70, 144, bill.getAddr4(), addrfont); drawLine(x1, y1, x2, y2, LineStyle.THIN);
drawText(70, 132, bill.getAddr5(), addrfont); }
drawText(355, 110, BillUtils.createReferenceNumber(bill.getReferenceNumberBase()).toString(), addrfont);
drawText(465, 86, decRound(bill.totalPrice()), addrfont); private void drawLine(int x1, int y1, int x2, int y2) throws Exception {
drawText(355, 86, DATE_FORMAT.format(bill.getDueDate().getTime()), addrfont); drawLine(x1, y1, x2, y2, LineStyle.NORMAL);
}
}
private void drawLine(double x1, double y1, double x2, double y2, LineStyle style) throws Exception {
private void drawThinLine(double[] ds, double[] ds2) throws Exception { y1 = INVERT - y1;
drawLine(ds, ds2, LineStyle.THIN); y2 = INVERT - y2;
}
Line l = new Line(x1, y1, x2, y2);
private void drawLine(double[] xs, double[] ys) throws Exception { double width = 1.0;
drawLine(xs, ys, LineStyle.NORMAL); switch (style) {
} case THIN:
width = 0.38;
private void drawLine(double[] ds, double[] ds2, LineStyle style) throws Exception { break;
for (int i = 0; i + 1 < ds.length && i + 1 < ds2.length; ++i) { case THICK:
drawLine(ds[i], ds2[i], ds[i + 1], ds2[i + 1], style); width = 1.45;
} break;
default:
} width = 1.0;
break;
private void drawThinLine(double x1, double y1, double x2, double y2) throws Exception { }
drawLine(x1, y1, x2, y2, LineStyle.THIN); l.setWidth(width);
} l.drawOn(page);
}
private void drawLine(int x1, int y1, int x2, int y2) throws Exception {
drawLine((double) x1, (double) y1, (double) x2, (double) y2, LineStyle.NORMAL); private void drawText(double x, double y, String string, Font font) throws Exception {
} TextLine text = new TextLine(font, string);
y = INVERT - y;
private void drawLine(double x1, double y1, double x2, double y2, LineStyle style) throws Exception { text.setPosition(x, y);
y1 = INVERT - y1; text.drawOn(page);
y2 = INVERT - y2; }
Line l = new Line(x1, y1, x2, y2); //
double width = 1.0; // text.setFont(f2);
switch (style) { // text.setPosition(70.0, 80.0);
case THIN: // text.drawOn(page);
width = 0.38; //
break; //
case THICK: // Line l2 = new Line(20.0,30.0,30.0,20.0);
width = 1.45; // l2.setWidth(1.45);
break; // l2.drawOn(page);
default: //
width = 1.0; //
break;
} // public static void main(String[] args) {
l.setWidth(width); // PdfPrinter.printToStream(null);
l.drawOn(page); // }
}
private void drawText(double x, double y, String string, Font font) throws Exception {
TextLine text = new TextLine(font, string);
y = INVERT - y;
text.setPosition(x, y);
text.drawOn(page);
}
//
// text.setFont(f2);
// text.setPosition(70.0, 80.0);
// text.drawOn(page);
//
//
// Line l2 = new Line(20.0,30.0,30.0,20.0);
// l2.setWidth(1.45);
// l2.drawOn(page);
//
//
// public static void main(String[] args) {
// PdfPrinter.printToStream(null);
// }
} }
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
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.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Place_;
@Stateless @Stateless
@LocalBean @LocalBean
public class EventMapFacade extends EventChildGenericFacade<EventMap> { public class EventMapFacade extends GenericFacade<Integer, EventMap> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@EJB public EventMapFacade() {
private EventMapFacade mapfacade; super(EventMap.class);
}
public EventMapFacade() { @Override
super(EventMap.class); protected EntityManager getEm() {
} return em;
}
protected EntityManager getEm() { public Long countAvailable(EventMap map) {
return em; CriteriaBuilder cb = em.getCriteriaBuilder();
} CriteriaQuery<Long> cq = cb.createQuery(Long.class);
public EventMap getMapById(Integer eventId, Integer id) { Root<Place> root = cq.from(Place.class);
return mapfacade.find(eventId, id);
}
public EventMap findByName(String name) { cq.select(cb.count(root));
TypedQuery<EventMap> q = em.createNamedQuery("EventMap.findByName", EventMap.class);
q.setParameter("name", name);
return getSingleNullableResult(q);
}
cq.where(
cb.equal(root.get(Place_.map), map),
cb.isFalse(root.get(Place_.disabled))
);
return getSingleNullableResult(em.createQuery(cq));
}
public Long countSelectable(EventMap map) {
if (map == null) {
return null;
}
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Place> root = cq.from(Place.class);
cq.select(cb.count(root));
cq.where(
cb.equal(root.get(Place_.map), map),
cb.isNull(root.get(Place_.releaseTime)),
cb.isNull(root.get(Place_.group)),
cb.isFalse(root.get(Place_.disabled))
);
return getSingleNullableResult(em.createQuery(cq));
}
} }
...@@ -182,8 +182,8 @@ public abstract class GenericFacade<I extends Serializable, C extends ModelInter ...@@ -182,8 +182,8 @@ public abstract class GenericFacade<I extends Serializable, C extends ModelInter
} }
private Root<C> searchCallbacks(CriteriaQuery<?> cq, List<FacadeCallback<C>> list) { private Root<C> searchCallbacks(CriteriaQuery<?> cq, List<FacadeCallback<C>> list) {
Root<C> root = cq.from(getEntityClass());
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
Root<C> root = cq.from(getEntityClass());
ArrayList<Predicate> predicates = new ArrayList<Predicate>(); ArrayList<Predicate> predicates = new ArrayList<Predicate>();
for (FacadeCallback<C> fc : list) { for (FacadeCallback<C> fc : list) {
......
...@@ -2,28 +2,39 @@ package fi.insomnia.bortal.facade; ...@@ -2,28 +2,39 @@ package fi.insomnia.bortal.facade;
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.Path;
import javax.persistence.criteria.Root;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.GroupMembership; import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.GroupMembership_;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.PlaceGroup_;
import fi.insomnia.bortal.model.Place_;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.PasswordFunctions; import fi.insomnia.bortal.utilities.PasswordFunctions;
@Stateless @Stateless
@LocalBean @LocalBean
public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembership> { public class GroupMembershipFacade extends GenericFacade<Integer, GroupMembership> {
private static final Logger logger = LoggerFactory.getLogger(GroupMembershipFacade.class); private static final Logger logger = LoggerFactory.getLogger(GroupMembershipFacade.class);
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@EJB
private EventBeanLocal eventbean;
public GroupMembershipFacade() { public GroupMembershipFacade() {
super(GroupMembership.class); super(GroupMembership.class);
} }
...@@ -33,14 +44,14 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh ...@@ -33,14 +44,14 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh
return em; return em;
} }
public String createInviteToken(LanEvent event) { public String createInviteToken() {
String token = null; String token = null;
GroupMembership gm = null; GroupMembership gm = null;
do { do {
if (token != null) { if (token != null) {
logger.info("Generated token {} found from GoupMembership: {} Generating new!", token, gm); logger.info("Generated token {} found from GoupMembership: {} Generating new!", token, gm);
} }
token = event.getId().toString(); token = eventbean.getCurrentEvent().getId().toString();
token += PasswordFunctions.generateRandomString(15); token += PasswordFunctions.generateRandomString(15);
gm = findByToken(token); gm = findByToken(token);
} while (gm != null); } while (gm != null);
...@@ -48,30 +59,59 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh ...@@ -48,30 +59,59 @@ public class GroupMembershipFacade extends EventChildGenericFacade<GroupMembersh
} }
public GroupMembership findByToken(String token) { public GroupMembership findByToken(String token) {
TypedQuery<GroupMembership> q = em.createQuery("Select gm from GroupMembership gm where gm.inviteToken = :token ", GroupMembership.class); CriteriaBuilder cb = em.getCriteriaBuilder();
q.setParameter("token", token); CriteriaQuery<GroupMembership> cq = cb.createQuery(GroupMembership.class);
return getSingleNullableResult(q); Root<GroupMembership> root = cq.from(GroupMembership.class);
}
cq.where(cb.equal(root.get(GroupMembership_.inviteToken), token),
cb.equal(root.get(GroupMembership_.placeGroup).get(PlaceGroup_.event), eventbean.getCurrentEvent())
);
public List<GroupMembership> findMemberOrCreator(LanEvent event, User user) { // TypedQuery<GroupMembership> q =
TypedQuery<GroupMembership> p = em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and (gm.placeGroup.creator = :user or gm.user = :user) order by gm.placeReservation.name", GroupMembership.class); // em.createQuery("Select gm from GroupMembership gm where gm.inviteToken = :token ",
p.setParameter("eventid", event.getId()); // GroupMembership.class);
p.setParameter("user", user); // q.setParameter("token", token);
return p.getResultList(); return getSingleNullableResult(em.createQuery(cq));
} }
public List<GroupMembership> findMemberships(LanEvent event, User user) { public List<GroupMembership> findMemberOrCreator(User user) {
TypedQuery<GroupMembership> p = em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and gm.user = :user", GroupMembership.class); CriteriaBuilder cb = em.getCriteriaBuilder();
p.setParameter("eventid", event.getId()); CriteriaQuery<GroupMembership> cq = cb.createQuery(GroupMembership.class);
p.setParameter("user", user); Root<GroupMembership> root = cq.from(GroupMembership.class);
return p.getResultList(); Path<PlaceGroup> pg = root.get(GroupMembership_.placeGroup);
cq.where(cb.or(cb.equal(root.get(GroupMembership_.user), user),
cb.equal(pg.get(PlaceGroup_.creator), user)
),
cb.equal(pg.get(PlaceGroup_.event), eventbean.getCurrentEvent())
);
cq.orderBy(cb.asc(root.get(GroupMembership_.placeReservation).get(Place_.name)));
// TypedQuery<GroupMembership> p =
// em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and (gm.placeGroup.creator = :user or gm.user = :user) order by gm.placeReservation.name",
// GroupMembership.class);
// p.setParameter("eventid", event.getId());
// p.setParameter("user", user);
return em.createQuery(cq).getResultList();
} }
public GroupMembership findToken(String token) { public List<GroupMembership> findMemberships(User user) {
TypedQuery<GroupMembership> q = em.createQuery("select gm from GroupMembership gm where gm.inviteEmail = :mail", GroupMembership.class); CriteriaBuilder cb = em.getCriteriaBuilder();
q.setParameter("mail", token); CriteriaQuery<GroupMembership> cq = cb.createQuery(GroupMembership.class);
Root<GroupMembership> root = cq.from(GroupMembership.class);
Path<PlaceGroup> pg = root.get(GroupMembership_.placeGroup);
cq.where(cb.equal(root.get(GroupMembership_.user), user),
cb.equal(pg.get(PlaceGroup_.event), eventbean.getCurrentEvent())
);
return em.createQuery(cq).getResultList();
return getSingleNullableResult(q); // TypedQuery<GroupMembership> p =
// em.createQuery("select gm from GroupMembership gm where gm.id.eventId = :eventid and gm.user = :user",
// GroupMembership.class);
// p.setParameter("eventid", event.getId());
// p.setParameter("user", user);
// return p.getResultList();
} }
} }
...@@ -7,16 +7,17 @@ import javax.ejb.LocalBean; ...@@ -7,16 +7,17 @@ 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.Query;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventMap_;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Place_; import fi.insomnia.bortal.model.Place_;
...@@ -24,7 +25,7 @@ import fi.insomnia.bortal.model.User; ...@@ -24,7 +25,7 @@ import fi.insomnia.bortal.model.User;
@Stateless @Stateless
@LocalBean @LocalBean
public class PlaceFacade extends EventChildGenericFacade<Place> { public class PlaceFacade extends GenericFacade<Integer, Place> {
private static final Logger logger = LoggerFactory.getLogger(PlaceFacade.class); private static final Logger logger = LoggerFactory.getLogger(PlaceFacade.class);
@PersistenceContext @PersistenceContext
...@@ -39,27 +40,6 @@ public class PlaceFacade extends EventChildGenericFacade<Place> { ...@@ -39,27 +40,6 @@ public class PlaceFacade extends EventChildGenericFacade<Place> {
return em; return em;
} }
//
// public boolean reservePlace(Place p, User reserver) {
// boolean ret = p.reserve(reserver);
// merge(p);
// return ret;
// }
//
// public List<Place> find(LanEvent event, List<Integer> placeIds) {
// if (placeIds == null || placeIds.size() <= 0) {
// return new ArrayList<Place>();
// }
//
// TypedQuery<Place> q =
// em.createQuery("Select p from Place p where p.id.eventId = :eventid and p.id.id IN :places",
// Place.class);
// q.setParameter("eventid", event.getId());
// q.setParameter("places", placeIds);
// return q.getResultList();
// }
public void timeoutPlaces() { public void timeoutPlaces() {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class); CriteriaQuery<Place> cq = cb.createQuery(Place.class);
...@@ -67,57 +47,22 @@ public class PlaceFacade extends EventChildGenericFacade<Place> { ...@@ -67,57 +47,22 @@ public class PlaceFacade extends EventChildGenericFacade<Place> {
Root<Place> root = cq.from(Place.class); Root<Place> root = cq.from(Place.class);
cq.select(root); cq.select(root);
cq.where(cb.lessThan(root.get(Place_.releaseTime), Calendar.getInstance())); cq.where(cb.lessThan(root.get(Place_.releaseTime), Calendar.getInstance()),
cb.isNull(root.get(Place_.group)));
TypedQuery<Place> q = getEm().createQuery(cq); TypedQuery<Place> q = getEm().createQuery(cq);
int updated = timeoutPlaces(q.getResultList(), true);
if (updated > 0) {
logger.info("{} places released for sale after release time exceeded.", updated);
}
}
private int timeoutPlaces(List<Place> places, boolean checkFromEntity) {
int updated = 0; int updated = 0;
for (Place p : places) { for (Place p : q.getResultList()) {
logger.debug("Releasing place {} at automagic timed place check.", p); logger.debug("Releasing place {} at automagic timed place check.", p);
if (!checkFromEntity || p.checkReleased()) { if (p.checkReleased()) {
++updated; ++updated;
merge(p);
} }
} }
// logger.debug("Checking timeouted places took: {} ms",
// Calendar.getInstance().getTimeInMillis()-begin.getTimeInMillis());
return updated;
}
public Long countSelectable(EventMap map) {
if (map == null) {
return null;
}
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class);
cq.select(root);
cq.where(
cb.and(
cb.equal(root.get(Place_.map), map),
cb.isNull(root.get(Place_.releaseTime))
));
TypedQuery<Place> q = getEm().createQuery(cq);
long count = 0; if (updated > 0) {
for (Place p : q.getResultList()) { logger.info("{} places released for sale after release time exceeded.", updated);
if (p.getGroup() == null) {
++count;
}
} }
return count;
} }
public List<Place> findUsersReservations(LanEvent event, User user) { public List<Place> findUsersReservations(LanEvent event, User user) {
...@@ -129,7 +74,7 @@ public class PlaceFacade extends EventChildGenericFacade<Place> { ...@@ -129,7 +74,7 @@ public class PlaceFacade extends EventChildGenericFacade<Place> {
cq.select(root); cq.select(root);
cq.where( cq.where(
cb.and( cb.and(
cb.equal(root.get(Place_.event), event), cb.equal(root.get(Place_.map).get(EventMap_.event), event),
cb.equal(root.get(Place_.currentUser), user) cb.equal(root.get(Place_.currentUser), user)
)); ));
TypedQuery<Place> q = getEm().createQuery(cq); TypedQuery<Place> q = getEm().createQuery(cq);
...@@ -137,34 +82,52 @@ public class PlaceFacade extends EventChildGenericFacade<Place> { ...@@ -137,34 +82,52 @@ public class PlaceFacade extends EventChildGenericFacade<Place> {
return q.getResultList(); return q.getResultList();
} }
public void releasePlaces(User user) { public int setBuyable(EventMap map, String like, boolean b) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class); CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class); Root<Place> root = cq.from(Place.class);
cq.select(root);
cq.where( cq.where(
cb.and( cb.like(root.get(Place_.name), like),
cb.lessThan(root.get(Place_.releaseTime), Calendar.getInstance()), cb.equal(root.get(Place_.map), map)
cb.equal(root.get(Place_.currentUser), user) );
));
TypedQuery<Place> q = getEm().createQuery(cq); List<Place> list = em.createQuery(cq).getResultList();
for (Place p : list) {
p.setBuyable(b);
}
// Query q =
// em.createQuery("UPDATE Place p set p.buyable = :b where p.name like :like");
// q.setParameter("b", b);
// q.setParameter("like", like);
return list.size();
int updated = timeoutPlaces(q.getResultList(), false);
logger.debug("Released {} places from user {}", updated, user);
} }
public int setBuyable(EventMap map, String like, boolean b) { // public boolean isCoordinateInPlace(int x, int y) {
// if (x > mapX
// && x < (mapX + width)
// && y > mapY
// && y < (mapY + height)) {
// return true;
// }
//
// return false;
// }
public Place find(EventMap map, int x, int y) {
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class); CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class); Root<Place> root = cq.from(Place.class);
Path<Integer> xObj = root.get(Place_.mapX);
Query q = em.createQuery("UPDATE Place p set p.buyable = :b where p.name like :like"); Path<Integer> yObj = root.get(Place_.mapY);
q.setParameter("b", b);
q.setParameter("like", like); cq.where(cb.equal(root.get(Place_.map), map),
return q.executeUpdate(); cb.lessThan(xObj, x),
cb.greaterThan(cb.sum(xObj, root.get(Place_.width)), x),
cb.lessThan(yObj, y),
cb.greaterThan(cb.sum(yObj, root.get(Place_.height)), y),
cb.isFalse(root.get(Place_.disabled))
);
return getSingleNullableResult(em.createQuery(cq));
} }
} }
...@@ -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.PlaceGroup; import fi.insomnia.bortal.model.PlaceGroup;
@Stateless @Stateless
@LocalBean @LocalBean
public class PlaceGroupFacade extends EventChildGenericFacade<PlaceGroup> { public class PlaceGroupFacade extends GenericFacade<Integer, PlaceGroup> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public PlaceGroupFacade() { public PlaceGroupFacade() {
super(PlaceGroup.class); super(PlaceGroup.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
...@@ -18,7 +18,7 @@ import fi.insomnia.bortal.model.Product_; ...@@ -18,7 +18,7 @@ import fi.insomnia.bortal.model.Product_;
@Stateless @Stateless
@LocalBean @LocalBean
public class ProductFacade extends EventChildGenericFacade<Product> { public class ProductFacade extends GenericFacade<Integer, Product> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
......
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
...@@ -15,7 +17,6 @@ import org.slf4j.Logger; ...@@ -15,7 +17,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.callbacks.OrderCallback; import fi.insomnia.bortal.facade.callbacks.OrderCallback;
import fi.insomnia.bortal.facade.callbacks.StringPredicateField;
import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator; import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.User_; import fi.insomnia.bortal.model.User_;
...@@ -27,18 +28,32 @@ public class UserFacade extends GenericFacade<Integer, User> { ...@@ -27,18 +28,32 @@ public class UserFacade extends GenericFacade<Integer, User> {
private static final Logger logger = LoggerFactory.getLogger(UserFacade.class); private static final Logger logger = LoggerFactory.getLogger(UserFacade.class);
private enum Userfields implements StringPredicateField<User> { // private enum Userfields implements StringPredicateField<User> {
nick(User_.nick), login(User_.login), firstnames(User_.firstnames), lastname(User_.lastname), email(User_.email); // nick(User_.nick), login(User_.login), firstnames(User_.firstnames),
private SingularAttribute<User, String> field; // lastname(User_.lastname), email(User_.email);
// private SingularAttribute<User, String> field;
Userfields(SingularAttribute<User, String> f) { //
field = f; // Userfields(SingularAttribute<User, String> f) {
} // field = f;
// }
//
// @Override
// public SingularAttribute<User, String> getField() {
// return field;
// }
// }
@Override private static final List<SingularAttribute<User, String>> SEARCHATTRS;
public SingularAttribute<User, String> getField() { static {
return field; ArrayList<SingularAttribute<User, String>> buildAttrs = new ArrayList<SingularAttribute<User, String>>();
}
buildAttrs.add(User_.nick);
buildAttrs.add(User_.login);
buildAttrs.add(User_.firstnames);
buildAttrs.add(User_.lastname);
buildAttrs.add(User_.email);
buildAttrs.add(User_.phone);
SEARCHATTRS = Collections.unmodifiableList(buildAttrs);
} }
// final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", // final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname",
...@@ -103,7 +118,7 @@ public class UserFacade extends GenericFacade<Integer, User> { ...@@ -103,7 +118,7 @@ public class UserFacade extends GenericFacade<Integer, User> {
} }
return super.searcher(page, pagesize, return super.searcher(page, pagesize,
new StringSearchPredicateCreator<User>(search, Userfields.values()), new StringSearchPredicateCreator<User>(search, SEARCHATTRS),
new OrderCallback<User>(true, sort) new OrderCallback<User>(true, sort)
); );
...@@ -128,4 +143,8 @@ public class UserFacade extends GenericFacade<Integer, User> { ...@@ -128,4 +143,8 @@ public class UserFacade extends GenericFacade<Integer, User> {
return em.createQuery(cq).getResultList(); return em.createQuery(cq).getResultList();
} }
public void evict() {
em.getEntityManagerFactory().getCache().evictAll();
}
} }
...@@ -31,6 +31,7 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac ...@@ -31,6 +31,7 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) {
Expression<?> path = null; Expression<?> path = null;
if (sort == null) { if (sort == null) {
if (sortstr == null) { if (sortstr == null) {
...@@ -44,7 +45,6 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac ...@@ -44,7 +45,6 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
} else { } else {
path = root.get(sort); path = root.get(sort);
} }
if (path == null) { if (path == null) {
return; return;
} }
......
package fi.insomnia.bortal.facade.callbacks; package fi.insomnia.bortal.facade.callbacks;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
...@@ -8,30 +9,26 @@ import javax.persistence.criteria.Predicate; ...@@ -8,30 +9,26 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class StringSearchPredicateCreator<T extends ModelInterface<?>> implements FacadeCallback<T> { public class StringSearchPredicateCreator<T extends ModelInterface<?>> implements FacadeCallback<T> {
private static final String WILDCARD = "%"; private static final String WILDCARD = "%";
private String searchstr = null; private String searchstr = null;
private StringPredicateField<T>[] attributes = null; private List<SingularAttribute<T, String>> attributes = null;
private SingularAttribute<T, String> attr; private static final Logger logger = LoggerFactory.getLogger(StringSearchPredicateCreator.class);
// public StringSearchPredicateCreator(String search,
// List<SingularAttribute<T, String>> attrs) {
// if (addSearch(search)) {
// attributes = attrs.;
// }
// }
public StringSearchPredicateCreator(String search, SingularAttribute<T, String> from) { public StringSearchPredicateCreator(String search, List<SingularAttribute<T, String>> attrs) {
if (addSearch(search)) { if (addSearch(search)) {
from = attr; attributes = attrs;
} }
} }
public StringSearchPredicateCreator(String name, StringPredicateField<T>[] values) { public StringSearchPredicateCreator(String search, SingularAttribute<T, String> from) {
if (addSearch(name)) { if (addSearch(search)) {
attributes = values; attributes = Collections.singletonList(from);
} }
} }
...@@ -50,18 +47,16 @@ public class StringSearchPredicateCreator<T extends ModelInterface<?>> implement ...@@ -50,18 +47,16 @@ public class StringSearchPredicateCreator<T extends ModelInterface<?>> implement
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) {
if (searchstr == null || (attr == null && (attributes == null || attributes.length == 0))) { if (searchstr == null || attributes == null || attributes.isEmpty()) {
return; return;
} }
if (attr == null) { Predicate[] preds = new Predicate[attributes.size()];
predicates.add(cb.equal(root.get(attr), searchstr)); int i = 0;
} else { for (SingularAttribute<T, String> attr : attributes) {
Predicate[] preds = new Predicate[attributes.length]; logger.info("Equalling {} to {}", attr.getName(), searchstr);
int i = 0; preds[i++] = cb.like(root.get(attr), searchstr);
for (StringPredicateField<T> attr : attributes) {
preds[i++] = cb.equal(root.get(attr.getField()), searchstr);
}
predicates.add(cb.and(preds));
} }
predicates.add(cb.or(preds));
} }
} }
...@@ -18,6 +18,8 @@ public interface PermissionBeanLocal { ...@@ -18,6 +18,8 @@ public interface PermissionBeanLocal {
boolean fatalPermission(IAppPermission perm, Object... failmessage) throws PermissionDeniedException; boolean fatalPermission(IAppPermission perm, Object... failmessage) throws PermissionDeniedException;
// throws PermissionDeniedException;
void fatalNotLoggedIn() throws PermissionDeniedException; void fatalNotLoggedIn() throws PermissionDeniedException;
User getAnonUser(); User getAnonUser();
......
...@@ -39,7 +39,7 @@ public interface PlaceBeanLocal { ...@@ -39,7 +39,7 @@ public interface PlaceBeanLocal {
BigDecimal totalReservationPrice(User user, Place newPlace) throws PermissionDeniedException; BigDecimal totalReservationPrice(User user, Place newPlace) throws PermissionDeniedException;
void releaseUsersPlaces(User user) throws PermissionDeniedException; // void releaseUsersPlaces(User user) throws PermissionDeniedException;
Place find(int placeId); Place find(int placeId);
......
...@@ -7,14 +7,17 @@ import fi.insomnia.bortal.model.EventMap; ...@@ -7,14 +7,17 @@ import fi.insomnia.bortal.model.EventMap;
@Local @Local
public interface PlaceMapBeanLocal { public interface PlaceMapBeanLocal {
// public String getSelectPlaceMapUrl(EventMap activeMap, List<Place> selectedPlaces, User user); // public String getSelectPlaceMapUrl(EventMap activeMap, List<Place>
// selectedPlaces, User user);
public Long selectablePlaceCount(EventMap activeMap); public Long selectablePlaceCount(EventMap activeMap);
public EventMap findMap(Integer mapId); public EventMap findMap(Integer mapId);
// public List<Place> findSelectedPlaces(EventMap map); public Long availablePlaceCount(EventMap activeMap);
// public List<Place> findSelectedPlaces(EventMap map);
// public EventMap findMap(int i);
// public EventMap findMap(int i);
} }
...@@ -9,27 +9,23 @@ import fi.insomnia.bortal.model.User; ...@@ -9,27 +9,23 @@ import fi.insomnia.bortal.model.User;
@Local @Local
public interface TestDataBeanLocal { public interface TestDataBeanLocal {
EventMap generateTestMap();
EventMap generateTestMap();
void generateTestPlaces(EventMap map); void generateTestPlaces(EventMap map);
Bill createBill(User u);
Bill createBill(User u); User createUser();
public void printPlacesInfo();
User createUser(); void generateTestCompos();
User createAdmin();
public void printPlacesInfo(); // EventMap readMap(long bytes);
void generateTestCompos(); // void writeMap(byte[] bytes);
User createAdmin(); void flushMaps();
EventMap readMap(long bytes);
void writeMap(byte[] bytes);
void flushMaps();
} }
...@@ -2,11 +2,6 @@ ...@@ -2,11 +2,6 @@
<classpath> <classpath>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="con" path="eclipse.fproj.jdt.libprov.osgi/jpt.jpa">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="../"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1"> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.sun.enterprise.jst.server.runtimeTarget/GlassFish 3.1">
<attributes> <attributes>
<attribute name="owner.project.facets" value="jst.utility"/> <attribute name="owner.project.facets" value="jst.utility"/>
......
#Thu Oct 28 16:55:14 EEST 2010 #Sat Sep 24 03:09:23 EEST 2011
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jpt.core.discoverAnnotatedClasses=true org.eclipse.jpt.core.discoverAnnotatedClasses=true
org.eclipse.jpt.core.metamodelSourceFolderName=src org.eclipse.jpt.core.metamodelSourceFolderName=src
org.eclipse.jpt.core.platform=eclipselink2_1 org.eclipse.jpt.core.platform=eclipselink2_3
<root> <root>
<facet id="jpt.jpa"> <facet id="jpt.jpa">
<node name="libprov"> <node name="libprov">
<attribute name="provider-id" value="eclipselink-210-osgi-bundles-library-provider"/> <attribute name="provider-id" value="jpa-no-op-library-provider"/>
</node>
<node name="osgi-bundles-container">
<attribute name="bundles" value="javax.persistence:[2.0.0,2.1.0);org.eclipse.persistence.core:[2.1.0,2.2.0);org.eclipse.persistence.jpa:[2.1.0,2.2.0);org.eclipse.persistence.asm:[2.1.0,2.2.0);org.eclipse.persistence.antlr:[2.1.0,2.2.0)"/>
<attribute name="label" value="EclipseLink 2.1.x"/>
</node> </node>
<node name="osgi-bundles-container"/>
</facet> </facet>
</root> </root>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><entities>
<entity>
<entity-name>fi.insomnia.bortal.model.DiscountInstance</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>780</entity-X-Coordinate>
<entity-Y-Coordinate>238</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Role</entity-name>
<entity-width>130</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>430</entity-X-Coordinate>
<entity-Y-Coordinate>1018</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Vote</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>109</entity-X-Coordinate>
<entity-Y-Coordinate>833</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Bill</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>348</entity-X-Coordinate>
<entity-Y-Coordinate>108</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.UserImage</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1420</entity-X-Coordinate>
<entity-Y-Coordinate>971</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Poll</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1439</entity-X-Coordinate>
<entity-Y-Coordinate>1523</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.EventStatus</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>364</entity-X-Coordinate>
<entity-Y-Coordinate>580</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.CompoEntryParticipant</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-24</entity-X-Coordinate>
<entity-Y-Coordinate>904</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.LogEntryType</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>272</entity-X-Coordinate>
<entity-Y-Coordinate>256</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.FoodWave</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>817</entity-X-Coordinate>
<entity-Y-Coordinate>85</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Product</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1315</entity-X-Coordinate>
<entity-Y-Coordinate>256</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.EventMap</entity-name>
<entity-width>120</entity-width>
<entity-height>208</entity-height>
<entity-X-Coordinate>610</entity-X-Coordinate>
<entity-Y-Coordinate>1595</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.CompoEntry</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>91</entity-X-Coordinate>
<entity-Y-Coordinate>627</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.ReaderEvent</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>364</entity-X-Coordinate>
<entity-Y-Coordinate>1696</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.FoodWaveTemplate</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1133</entity-X-Coordinate>
<entity-Y-Coordinate>164</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.EventOrganiser</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>622</entity-X-Coordinate>
<entity-Y-Coordinate>744</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.PlaceGroup</entity-name>
<entity-width>120</entity-width>
<entity-height>268</entity-height>
<entity-X-Coordinate>1065</entity-X-Coordinate>
<entity-Y-Coordinate>1486</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.BillLine</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>966</entity-X-Coordinate>
<entity-Y-Coordinate>-14</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.LanEvent</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>243</entity-X-Coordinate>
<entity-Y-Coordinate>692</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Discount</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>881</entity-X-Coordinate>
<entity-Y-Coordinate>311</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Place</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>492</entity-X-Coordinate>
<entity-Y-Coordinate>1510</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.LogEntry</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>279</entity-X-Coordinate>
<entity-Y-Coordinate>368</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Reader</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>413</entity-X-Coordinate>
<entity-Y-Coordinate>1877</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Compo</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>0</entity-X-Coordinate>
<entity-Y-Coordinate>188</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.Location</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>194</entity-X-Coordinate>
<entity-Y-Coordinate>1841</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.PrintedCard</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>205</entity-X-Coordinate>
<entity-Y-Coordinate>1559</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.PossibleAnswer</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1254</entity-X-Coordinate>
<entity-Y-Coordinate>1510</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.GroupMembership</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>817</entity-X-Coordinate>
<entity-Y-Coordinate>1370</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.AccountEvent</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>549</entity-X-Coordinate>
<entity-Y-Coordinate>168</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.ApplicationPermission</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>718</entity-X-Coordinate>
<entity-Y-Coordinate>1053</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.News</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>966</entity-X-Coordinate>
<entity-Y-Coordinate>1090</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.NewsGroup</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>663</entity-X-Coordinate>
<entity-Y-Coordinate>1150</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.CardTemplate</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>156</entity-X-Coordinate>
<entity-Y-Coordinate>1205</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.PollQuestion</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1152</entity-X-Coordinate>
<entity-Y-Coordinate>1720</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.PollAnswer</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1315</entity-X-Coordinate>
<entity-Y-Coordinate>1423</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.User</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1132</entity-X-Coordinate>
<entity-Y-Coordinate>994</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
<entity>
<entity-name>fi.insomnia.bortal.model.CompoEntryFile</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>-88</entity-X-Coordinate>
<entity-Y-Coordinate>460</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
</entity>
</entities>
\ No newline at end of file
...@@ -16,8 +16,6 @@ import javax.persistence.Entity; ...@@ -16,8 +16,6 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns; 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.OneToOne; import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
...@@ -31,17 +29,19 @@ import javax.persistence.TemporalType; ...@@ -31,17 +29,19 @@ import javax.persistence.TemporalType;
@Entity @Entity
@Table(name = "account_events") @Table(name = "account_events")
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "AccountEvent.findAll", query = "SELECT a FROM AccountEvent a"), // @NamedQuery(name = "AccountEvent.findAll", query =
@NamedQuery(name = "AccountEvent.findByUnitPrice", query = "SELECT a FROM AccountEvent a WHERE a.unitPrice = :unitPrice"), // "SELECT a FROM AccountEvent a"),
@NamedQuery(name = "AccountEvent.findByQuantity", query = "SELECT a FROM AccountEvent a WHERE a.quantity = :units"), // @NamedQuery(name = "AccountEvent.findByUnitPrice", query =
@NamedQuery(name = "AccountEvent.findByEventTime", query = "SELECT a FROM AccountEvent a WHERE a.eventTime = :eventTime"), // "SELECT a FROM AccountEvent a WHERE a.unitPrice = :unitPrice"),
@NamedQuery(name = "AccountEvent.findByDelivered", query = "SELECT a FROM AccountEvent a WHERE a.delivered = :delivered") }) // @NamedQuery(name = "AccountEvent.findByQuantity", query =
// "SELECT a FROM AccountEvent a WHERE a.quantity = :units"),
// @NamedQuery(name = "AccountEvent.findByEventTime", query =
// "SELECT a FROM AccountEvent a WHERE a.eventTime = :eventTime"),
// @NamedQuery(name = "AccountEvent.findByDelivered", query =
// "SELECT a FROM AccountEvent a WHERE a.delivered = :delivered") })
public class AccountEvent extends GenericEventChild { public class AccountEvent extends GenericEventChild {
/**
*
*/
private static final long serialVersionUID = 2588419823225148100L; private static final long serialVersionUID = 2588419823225148100L;
@Column(name = "cash", nullable = false) @Column(name = "cash", nullable = false)
......
...@@ -76,9 +76,7 @@ public class BillLine extends GenericEventChild { ...@@ -76,9 +76,7 @@ public class BillLine extends GenericEventChild {
@ManyToOne @ManyToOne
private Bill bill; private Bill bill;
@JoinColumns({ @JoinColumn(name = "lineProduct_id", referencedColumnName = "id", nullable = true, updatable = false)
@JoinColumn(name = "lineProduct_id", referencedColumnName = "id", nullable = true, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@OneToOne @OneToOne
@OrderBy("id.id") @OrderBy("id.id")
private Product lineProduct; private Product lineProduct;
......
...@@ -36,7 +36,7 @@ public abstract class EntityEquals { ...@@ -36,7 +36,7 @@ public abstract class EntityEquals {
private Integer getRndid() { private Integer getRndid() {
if (rndid == null) { if (rndid == null) {
Random rng = new Random(new Date().getTime()); Random rng = new Random(new Date().getTime());
rndid = new Integer(rng.nextInt()); rndid = Integer.valueOf(rng.nextInt());
} }
return rndid; return rndid;
} }
......
...@@ -11,8 +11,7 @@ import javax.persistence.CascadeType; ...@@ -11,8 +11,7 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.NamedQueries; import javax.persistence.ManyToOne;
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;
...@@ -22,16 +21,28 @@ import javax.persistence.Table; ...@@ -22,16 +21,28 @@ import javax.persistence.Table;
*/ */
@Entity @Entity
@Table(name = "maps") @Table(name = "maps")
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "EventMap.findAll", query = "SELECT e FROM EventMap e"), // @NamedQuery(name = "EventMap.findAll", query = "SELECT e FROM EventMap e"),
@NamedQuery(name = "EventMap.findByName", query = "SELECT e FROM EventMap e WHERE e.name = :name") }) // @NamedQuery(name = "EventMap.findByName", query =
public class EventMap extends GenericEventChild { // "SELECT e FROM EventMap e WHERE e.name = :name") })
public class EventMap extends GenericEntity {
/** /**
* *
*/ */
private static final long serialVersionUID = 3411450245513673619L; private static final long serialVersionUID = 3411450245513673619L;
@ManyToOne()
private LanEvent event;
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
@Lob @Lob
@Column(name = "map_data") @Column(name = "map_data")
private byte[] mapData; private byte[] mapData;
...@@ -58,7 +69,8 @@ public class EventMap extends GenericEventChild { ...@@ -58,7 +69,8 @@ public class EventMap extends GenericEventChild {
} }
public EventMap(LanEvent event) { public EventMap(LanEvent event) {
super(event); super();
this.event = event;
} }
public String getName() { public String getName() {
......
...@@ -75,7 +75,7 @@ public class EventPk implements Serializable { ...@@ -75,7 +75,7 @@ public class EventPk implements Serializable {
return false; return false;
} }
EventPk pk = (EventPk) obj; EventPk pk = (EventPk) obj;
return pk.id == this.id && pk.getEventId() == this.getEventId(); return pk.id.equals(this.id) && pk.getEventId().equals(this.getEventId());
} }
@Override @Override
......
...@@ -56,10 +56,10 @@ public class FoodWave extends GenericEventChild { ...@@ -56,10 +56,10 @@ public class FoodWave extends GenericEventChild {
@OneToMany(mappedBy = "foodWave") @OneToMany(mappedBy = "foodWave")
private List<AccountEvent> accountEvents; private List<AccountEvent> accountEvents;
@ManyToOne
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "template_id", referencedColumnName = "id", nullable = false), @JoinColumn(name = "template_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) }) @JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne
private FoodWaveTemplate template; private FoodWaveTemplate template;
public FoodWave() { public FoodWave() {
......
...@@ -15,13 +15,13 @@ public abstract class GenericEventChild extends EntityEquals implements ModelInt ...@@ -15,13 +15,13 @@ public abstract class GenericEventChild extends EntityEquals implements ModelInt
private static final long serialVersionUID = -9041737052951021560L; private static final long serialVersionUID = -9041737052951021560L;
public static final String ID_COLUMN = "id"; public static final String ID_COLUMN = "id";
public static final String EVENT_ID_COLUMN = "event_id";
@EmbeddedId @EmbeddedId
private EventPk id; private EventPk id;
@Version @Version
@Column(nullable = false) @Column(nullable = false)
private int jpaVersionField = 0; private int jpaVersionField = 0;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne() @ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, insertable = false, updatable = false) @JoinColumn(name = EVENT_ID_COLUMN, insertable = false, updatable = false)
private LanEvent event; private LanEvent 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.OneToOne; import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
...@@ -27,13 +24,17 @@ import javax.persistence.UniqueConstraint; ...@@ -27,13 +24,17 @@ import javax.persistence.UniqueConstraint;
@Entity @Entity
@Table(name = "group_memberships", uniqueConstraints = { @UniqueConstraint(columnNames = { @Table(name = "group_memberships", uniqueConstraints = { @UniqueConstraint(columnNames = {
"user_id", "group_id" }) }) "user_id", "group_id" }) })
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "GroupMembership.findAll", query = "SELECT g FROM GroupMembership g"), // @NamedQuery(name = "GroupMembership.findAll", query =
// "SELECT g FROM GroupMembership g"),
@NamedQuery(name = "GroupMembership.findByInviteAccepted", query = "SELECT g FROM GroupMembership g WHERE g.inviteAccepted = :inviteAccepted"), //
@NamedQuery(name = "GroupMembership.findByInviteEmail", query = "SELECT g FROM GroupMembership g WHERE g.inviteEmail = :inviteEmail"), // @NamedQuery(name = "GroupMembership.findByInviteAccepted", query =
@NamedQuery(name = "GroupMembership.findByInviteName", query = "SELECT g FROM GroupMembership g WHERE g.inviteName = :inviteName") }) // "SELECT g FROM GroupMembership g WHERE g.inviteAccepted = :inviteAccepted"),
public class GroupMembership extends GenericEventChild { // @NamedQuery(name = "GroupMembership.findByInviteEmail", query =
// "SELECT g FROM GroupMembership g WHERE g.inviteEmail = :inviteEmail"),
// @NamedQuery(name = "GroupMembership.findByInviteName", query =
// "SELECT g FROM GroupMembership g WHERE g.inviteName = :inviteName") })
public class GroupMembership extends GenericEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -50,16 +51,12 @@ public class GroupMembership extends GenericEventChild { ...@@ -50,16 +51,12 @@ public class GroupMembership extends GenericEventChild {
@Column(name = "invite_name") @Column(name = "invite_name")
private String inviteName; private String inviteName;
@JoinColumns({
@JoinColumn(name = "group_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false, cascade = ALL) @ManyToOne(optional = false, cascade = ALL)
@JoinColumn(name = "group_id", referencedColumnName = "id", nullable = false)
private PlaceGroup placeGroup; private PlaceGroup placeGroup;
@JoinColumns({
@JoinColumn(name = "place_reservation_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@OneToOne(optional = false) @OneToOne(optional = false)
@JoinColumn(name = "place_reservation_id", referencedColumnName = "id", nullable = false)
private Place placeReservation; private Place placeReservation;
@JoinColumn(name = "user_id", referencedColumnName = "id") @JoinColumn(name = "user_id", referencedColumnName = "id")
...@@ -73,8 +70,8 @@ public class GroupMembership extends GenericEventChild { ...@@ -73,8 +70,8 @@ public class GroupMembership extends GenericEventChild {
public GroupMembership() { public GroupMembership() {
} }
public GroupMembership(LanEvent event, PlaceGroup pg, Place p, String token) { public GroupMembership(PlaceGroup pg, Place p, String token) {
super(event); super();
this.setPlaceGroup(pg); this.setPlaceGroup(pg);
this.setPlaceReservation(p); this.setPlaceReservation(p);
this.inviteToken = token; this.inviteToken = token;
......
...@@ -10,11 +10,8 @@ import javax.persistence.CascadeType; ...@@ -10,11 +10,8 @@ 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.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne; import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
...@@ -25,15 +22,21 @@ import javax.persistence.TemporalType; ...@@ -25,15 +22,21 @@ import javax.persistence.TemporalType;
*/ */
@Entity @Entity
@Table(name = "places") @Table(name = "places")
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "Place.findAll", query = "SELECT p FROM Place p"), // @NamedQuery(name = "Place.findAll", query = "SELECT p FROM Place p"),
@NamedQuery(name = "Place.findByDescription", query = "SELECT p FROM Place p WHERE p.description = :description"), // @NamedQuery(name = "Place.findByDescription", query =
@NamedQuery(name = "Place.findByName", query = "SELECT p FROM Place p WHERE p.name = :name"), // "SELECT p FROM Place p WHERE p.description = :description"),
@NamedQuery(name = "Place.findByMapX", query = "SELECT p FROM Place p WHERE p.mapX = :mapX"), // @NamedQuery(name = "Place.findByName", query =
@NamedQuery(name = "Place.findByMapY", query = "SELECT p FROM Place p WHERE p.mapY = :mapY"), // "SELECT p FROM Place p WHERE p.name = :name"),
@NamedQuery(name = "Place.findByDetails", query = "SELECT p FROM Place p WHERE p.details = :details"), // @NamedQuery(name = "Place.findByMapX", query =
@NamedQuery(name = "Place.findByCode", query = "SELECT p FROM Place p WHERE p.code = :code") }) // "SELECT p FROM Place p WHERE p.mapX = :mapX"),
public class Place extends GenericEventChild { // @NamedQuery(name = "Place.findByMapY", query =
// "SELECT p FROM Place p WHERE p.mapY = :mapY"),
// @NamedQuery(name = "Place.findByDetails", query =
// "SELECT p FROM Place p WHERE p.details = :details"),
// @NamedQuery(name = "Place.findByCode", query =
// "SELECT p FROM Place p WHERE p.code = :code") })
public class Place extends GenericEntity {
/** /**
* *
...@@ -66,30 +69,27 @@ public class Place extends GenericEventChild { ...@@ -66,30 +69,27 @@ public class Place extends GenericEventChild {
@Column(name = "buyable", nullable = false) @Column(name = "buyable", nullable = false)
private boolean buyable = true; private boolean buyable = true;
@Column(nullable = false)
private boolean disabled = false;
/** /**
* Which group has bought the place * Which group has bought the place
*/ */
@JoinColumns({
@JoinColumn(name = "group_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne @ManyToOne
@JoinColumn(name = "group_id", referencedColumnName = "id")
private PlaceGroup group; private PlaceGroup group;
@ManyToOne @ManyToOne
@JoinColumn(name = "provided_role_id", referencedColumnName = "id") @JoinColumn(name = "provided_role_id", referencedColumnName = "id")
private Role providesRole; private Role providesRole;
@JoinColumns({ @JoinColumn(name = "map_id", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "map_id", referencedColumnName = "id", nullable = false, updatable = true, insertable = true),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false, cascade = CascadeType.ALL) @ManyToOne(optional = false, cascade = CascadeType.ALL)
private EventMap map; private EventMap map;
/** /**
* Which ticket type is this place sold as * Which ticket type is this place sold as
*/ */
@JoinColumns({ @JoinColumn(name = "products_id", referencedColumnName = "id")
@JoinColumn(name = "products_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne() @ManyToOne()
private Product product; private Product product;
/** /**
...@@ -106,8 +106,6 @@ public class Place extends GenericEventChild { ...@@ -106,8 +106,6 @@ public class Place extends GenericEventChild {
public Place(EventMap eventMap) { public Place(EventMap eventMap) {
super(); super();
setId(new EventPk());
getId().setEventId(eventMap.getId().getEventId());
this.map = eventMap; this.map = eventMap;
} }
...@@ -164,7 +162,7 @@ public class Place extends GenericEventChild { ...@@ -164,7 +162,7 @@ public class Place extends GenericEventChild {
} }
public void setGroup(PlaceGroup group) { public void setGroup(PlaceGroup group) {
if (group != null && group.getId().getEventId() != getId().getEventId()) { if (group != null && !group.getEvent().equals(map.getEvent())) {
throw new RuntimeException("Can not set Group from different Event to Place!"); throw new RuntimeException("Can not set Group from different Event to Place!");
} }
this.group = group; this.group = group;
...@@ -175,11 +173,7 @@ public class Place extends GenericEventChild { ...@@ -175,11 +173,7 @@ public class Place extends GenericEventChild {
} }
public void setMap(EventMap map) { public void setMap(EventMap map) {
if (map.getId().getEventId() != getId().getEventId()) {
throw new RuntimeException("Can not set Map from different Event to Place!");
}
this.map = map; this.map = map;
// this.mapId = map.getId().getId();
} }
public Product getProduct() { public Product getProduct() {
...@@ -236,17 +230,6 @@ public class Place extends GenericEventChild { ...@@ -236,17 +230,6 @@ public class Place extends GenericEventChild {
this.width = width; this.width = width;
} }
public boolean isCoordinateInPlace(int x, int y) {
if (x > mapX
&& x < (mapX + width)
&& y > mapY
&& y < (mapY + height)) {
return true;
}
return false;
}
public boolean isTaken() { public boolean isTaken() {
return (getReleaseTime() != null || getGroup() != null); return (getReleaseTime() != null || getGroup() != null);
...@@ -300,4 +283,12 @@ public class Place extends GenericEventChild { ...@@ -300,4 +283,12 @@ public class Place extends GenericEventChild {
return providesRole; return providesRole;
} }
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
} }
...@@ -37,14 +37,20 @@ import javax.persistence.TemporalType; ...@@ -37,14 +37,20 @@ import javax.persistence.TemporalType;
@NamedQuery(name = "PlaceGroup.findByName", query = "SELECT p FROM PlaceGroup p WHERE p.name = :name"), @NamedQuery(name = "PlaceGroup.findByName", query = "SELECT p FROM PlaceGroup p WHERE p.name = :name"),
@NamedQuery(name = "PlaceGroup.findByActive", query = "SELECT p FROM PlaceGroup p WHERE p.active = :active"), @NamedQuery(name = "PlaceGroup.findByActive", query = "SELECT p FROM PlaceGroup p WHERE p.active = :active"),
@NamedQuery(name = "PlaceGroup.findByDetails", query = "SELECT p FROM PlaceGroup p WHERE p.details = :details") }) @NamedQuery(name = "PlaceGroup.findByDetails", query = "SELECT p FROM PlaceGroup p WHERE p.details = :details") })
public class PlaceGroup extends GenericEventChild { public class PlaceGroup extends GenericEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static final String EVENT_ID_COLUMN = "event_id";
@Column(name = "group_created", nullable = false) @Column(name = "group_created", nullable = false)
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar created; private Calendar created;
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "group_edited", nullable = false) @Column(name = "group_edited", nullable = false)
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar edited; private Calendar edited;
...@@ -75,16 +81,12 @@ public class PlaceGroup extends GenericEventChild { ...@@ -75,16 +81,12 @@ public class PlaceGroup extends GenericEventChild {
public PlaceGroup(LanEvent event, Calendar groupCreated, Calendar groupEdited, public PlaceGroup(LanEvent event, Calendar groupCreated, Calendar groupEdited,
boolean groupActive) { boolean groupActive) {
this(event); this.event = event;
this.created = groupCreated; this.created = groupCreated;
this.edited = groupEdited; this.edited = groupEdited;
this.active = groupActive; this.active = groupActive;
} }
public PlaceGroup(LanEvent event) {
super(event);
}
public PlaceGroup() { public PlaceGroup() {
super(); super();
} }
...@@ -161,4 +163,12 @@ public class PlaceGroup extends GenericEventChild { ...@@ -161,4 +163,12 @@ public class PlaceGroup extends GenericEventChild {
this.places = placeList; this.places = placeList;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -165,9 +165,6 @@ public class PrintedCard extends GenericEventChild { ...@@ -165,9 +165,6 @@ public class PrintedCard extends GenericEventChild {
return printCount; return printCount;
} }
@Transient
private Integer gamepoints = null;
public static final Comparator<PrintedCard> GAMEPOINT_COMPARATOR = new Comparator<PrintedCard>() { public static final Comparator<PrintedCard> GAMEPOINT_COMPARATOR = new Comparator<PrintedCard>() {
@Override @Override
...@@ -181,23 +178,23 @@ public class PrintedCard extends GenericEventChild { ...@@ -181,23 +178,23 @@ public class PrintedCard extends GenericEventChild {
} }
}; };
@Transient
private Integer gamepoints = null;
public Integer getGamepoints() { public Integer getGamepoints() {
if (gamepoints == null) { if (gamepoints == null) {
synchronized (this) { Integer ret = 0;
if (gamepoints == null) { for (ReaderEvent re : this.getReaderEvents()) {
gamepoints = 0; ret += re.getGamePoint();
for (ReaderEvent re : this.getReaderEvents()) {
gamepoints += re.getGamePoint();
}
}
} }
gamepoints = ret;
} }
return gamepoints; return gamepoints;
} }
@Transient @Transient
private ListDataModel<ReaderEvent> revents; private transient ListDataModel<ReaderEvent> revents;
public ListDataModel<ReaderEvent> getGameCards() { public ListDataModel<ReaderEvent> getGameCards() {
if (revents == null) { if (revents == null) {
......
...@@ -15,8 +15,6 @@ import javax.persistence.JoinColumn; ...@@ -15,8 +15,6 @@ import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
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.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
...@@ -26,15 +24,23 @@ import javax.persistence.UniqueConstraint; ...@@ -26,15 +24,23 @@ import javax.persistence.UniqueConstraint;
*/ */
@Entity @Entity
@Table(name = "products") @Table(name = "products")
@NamedQueries({ // @NamedQueries({
@NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p"), // @NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p"),
@NamedQuery(name = "Product.findByProductName", query = "SELECT p FROM Product p WHERE p.name = :name"), // @NamedQuery(name = "Product.findByProductName", query =
@NamedQuery(name = "Product.findByPrice", query = "SELECT p FROM Product p WHERE p.price = :price"), // "SELECT p FROM Product p WHERE p.name = :name"),
@NamedQuery(name = "Product.findBySort", query = "SELECT p FROM Product p WHERE p.sort = :sort"), // @NamedQuery(name = "Product.findByPrice", query =
@NamedQuery(name = "Product.findByBarcode", query = "SELECT p FROM Product p WHERE p.barcode = :barcode") }) // "SELECT p FROM Product p WHERE p.price = :price"),
public class Product extends GenericEventChild { // @NamedQuery(name = "Product.findBySort", query =
// "SELECT p FROM Product p WHERE p.sort = :sort"),
// @NamedQuery(name = "Product.findByBarcode", query =
// "SELECT p FROM Product p WHERE p.barcode = :barcode") })
public class Product 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 = "product_name") @Column(name = "product_name")
private String name; private String name;
...@@ -66,11 +72,11 @@ public class Product extends GenericEventChild { ...@@ -66,11 +72,11 @@ public class Product extends GenericEventChild {
@ManyToMany(cascade = CascadeType.ALL) @ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "product_discounts", inverseJoinColumns = { @JoinTable(name = "product_discounts", inverseJoinColumns = {
@JoinColumn(name = "discount_id", referencedColumnName = "id"), @JoinColumn(name = "discount_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id") }, @JoinColumn(name = "event_id", referencedColumnName = "event_id") },
joinColumns = { @JoinColumn(name = "product_id", referencedColumnName = "id"), joinColumns = { @JoinColumn(name = "product_id", referencedColumnName = "id")
@JoinColumn(name = "event_id", referencedColumnName = "event_id")
}) })
private List<Discount> discounts; private List<Discount> discounts;
private BigDecimal vat = BigDecimal.ZERO; private BigDecimal vat = BigDecimal.ZERO;
...@@ -78,11 +84,11 @@ public class Product extends GenericEventChild { ...@@ -78,11 +84,11 @@ public class Product extends GenericEventChild {
@ManyToMany() @ManyToMany()
@JoinTable(name = "product_foodwavetemplate", joinColumns = { @JoinTable(name = "product_foodwavetemplate", joinColumns = {
@JoinColumn(name = "product_id", referencedColumnName = "id"), @JoinColumn(name = "product_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id") }, inverseJoinColumns = { }, inverseJoinColumns = {
@JoinColumn(name = "food_wave_template_id", referencedColumnName = "id"), @JoinColumn(name = "food_wave_template_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id") }, @JoinColumn(name = "event_id", referencedColumnName = "event_id") },
uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "food_wave_template_id", "event_id" }) }) uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "food_wave_template_id", "event_id" }) })
private List<FoodWaveTemplate> foodWaveTemplates; private List<FoodWaveTemplate> foodWaveTemplates;
public Product() { public Product() {
...@@ -90,7 +96,8 @@ public class Product extends GenericEventChild { ...@@ -90,7 +96,8 @@ public class Product extends GenericEventChild {
} }
public Product(LanEvent event) { public Product(LanEvent event) {
super(event); super();
this.setEvent(event);
} }
...@@ -238,4 +245,12 @@ public class Product extends GenericEventChild { ...@@ -238,4 +245,12 @@ public class Product extends GenericEventChild {
return provides; return provides;
} }
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -68,9 +68,7 @@ public class Reader extends GenericEventChild { ...@@ -68,9 +68,7 @@ public class Reader extends GenericEventChild {
private Location location; private Location location;
@ManyToOne @ManyToOne
@JoinColumns({ @JoinColumn(name = "map_id", referencedColumnName = "id")
@JoinColumn(name = "map_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
private EventMap eventMap; private EventMap eventMap;
@Column(name = "map_x") @Column(name = "map_x")
......
...@@ -15,6 +15,8 @@ import java.util.List; ...@@ -15,6 +15,8 @@ import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
...@@ -28,9 +30,7 @@ import javax.persistence.TemporalType; ...@@ -28,9 +30,7 @@ import javax.persistence.TemporalType;
import javax.persistence.Transient; import javax.persistence.Transient;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.PrivateOwned;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -42,11 +42,6 @@ import fi.insomnia.bortal.utilities.PasswordFunctions; ...@@ -42,11 +42,6 @@ import fi.insomnia.bortal.utilities.PasswordFunctions;
*/ */
@Entity @Entity
@Table(name = "users") @Table(name = "users")
@ObjectTypeConverter(name = "gender", objectType = Gender.class, dataType = String.class, conversionValues = {
@ConversionValue(objectValue = "MALE", dataValue = "M"),
@ConversionValue(objectValue = "FEMALE", dataValue = "F"),
@ConversionValue(objectValue = "UNDEFINED", dataValue = "U"),
})
public class User extends GenericEntity { public class User extends GenericEntity {
public static final String ANONYMOUS_LOGINNAME = "anonymous"; public static final String ANONYMOUS_LOGINNAME = "anonymous";
private static final long serialVersionUID = -1632200627103418206L; private static final long serialVersionUID = -1632200627103418206L;
...@@ -101,7 +96,7 @@ public class User extends GenericEntity { ...@@ -101,7 +96,7 @@ public class User extends GenericEntity {
@JoinColumn(name = "current_image_id", referencedColumnName = "id") @JoinColumn(name = "current_image_id", referencedColumnName = "id")
private UserImage currentImage; private UserImage currentImage;
@Convert("gender") @Enumerated(EnumType.STRING)
@Column(name = "gender", nullable = false) @Column(name = "gender", nullable = false)
private Gender gender = Gender.UNDEFINED; private Gender gender = Gender.UNDEFINED;
...@@ -120,8 +115,8 @@ public class User extends GenericEntity { ...@@ -120,8 +115,8 @@ public class User extends GenericEntity {
@ManyToMany() @ManyToMany()
@JoinTable(name = "role_memberships", inverseJoinColumns = { @JoinTable(name = "role_memberships", inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) }, @JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) },
joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }) joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") })
private List<Role> roles = new ArrayList<Role>(); private List<Role> roles = new ArrayList<Role>();
@OneToMany(mappedBy = "user") @OneToMany(mappedBy = "user")
...@@ -129,6 +124,7 @@ public class User extends GenericEntity { ...@@ -129,6 +124,7 @@ public class User extends GenericEntity {
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@OrderBy @OrderBy
@PrivateOwned
private List<UserImage> userImageList; private List<UserImage> userImageList;
@OneToMany(mappedBy = "user") @OneToMany(mappedBy = "user")
...@@ -218,7 +214,11 @@ public class User extends GenericEntity { ...@@ -218,7 +214,11 @@ public class User extends GenericEntity {
} }
public String getWholeName() { public String getWholeName() {
return new StringBuilder().append(firstnames).append(" ").append(lastname).toString(); String ret = new StringBuilder().append(firstnames).append(" ").append(lastname).toString().trim();
if (ret.isEmpty()) {
ret = login;
}
return ret;
} }
public String getLastname() { public String getLastname() {
......
package fi.insomnia.bortal.enums;
import java.util.HashSet;
import java.util.Set;
public enum BeanRole {
// If modified update to sun-web.xml
// Bean level access
ANONYMOUS, // Unauthenticated web user
USER_BASE, // JAAS access for logged in user
ADMIN_BASE(USER_BASE), // JAAS access to administrative beans
// Admin for the whole system (JAAS, boolean in User)
SUPERADMIN(false, ADMIN_BASE),
ORGANIZATION_ROOT(ADMIN_BASE), // E.g. Vectorama organisation admin
;
private boolean inDatabase;
private Set<BeanRole> parents = new HashSet<BeanRole>();
BeanRole() {
}
/**
* Default (on-demand create time) parents for the role
*
* @param parent
*/
BeanRole(BeanRole... parent) {
for (BeanRole role : parent) {
parents.add(role);
}
}
/**
* Is the role stored in the database (default true) or is it a magic role
* like superadmin (stored as boolean in User).
*
* @param inDb
* stored in roles-table
* @param parent
* default (create time) parent roles
*/
BeanRole(boolean inDb, BeanRole... parent) {
this(parent);
this.inDatabase = inDb;
}
public boolean isInDatabase() {
return inDatabase;
}
/**
* Default parent roles (when creating role on first use)
*
* @return
*/
public Set<BeanRole> getParents() {
return parents;
}
}
...@@ -5,13 +5,15 @@ import fi.insomnia.bortal.enums.BortalApplication; ...@@ -5,13 +5,15 @@ import fi.insomnia.bortal.enums.BortalApplication;
public enum BillPermission implements IAppPermission { public enum BillPermission implements IAppPermission {
READ_ALL("Read all bills"), READ_ALL("Read all bills"),
WRITE_ALL("Modify all bills"), WRITE_ALL("Modify all bills"),
CREATE_BILL("Create bills for self") CREATE_BILL("Create bills for self"),
VIEW_OWN("View own bills"),
; ;
public static final String S_READ_ALL = "BILL/READ_ALL"; public static final String S_READ_ALL = "BILL/READ_ALL";
public static final String S_CREATE_BILL = "BILL/CREATE_BILL"; public static final String S_CREATE_BILL = "BILL/CREATE_BILL";
public static final String S_WRITE_ALL = "BILL/WRITE_ALL"; public static final String S_WRITE_ALL = "BILL/WRITE_ALL";
public static final String S_VIEW_OWN = "BILL/VIEW_OWN";
private final String description; private final String description;
private final String fullName; private final String fullName;
......
package fi.insomnia.bortal.enums.apps;
public enum SpecialPermission {
SUPERADMIN, USER, ANONYMOUS;
public static final String S_USER = "USER";
public static final String S_SUPERADMIN = "SUPERADMIN";
public static final String S_ANONYMOUS = "ANONYMOUS";
}
...@@ -46,7 +46,7 @@ public class StreampartyLegacyPwdcheck { ...@@ -46,7 +46,7 @@ public class StreampartyLegacyPwdcheck {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
return new String(password); return password;
} }
......
<?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="place/placemap" x="180" y="137" id="pf13156916815477" outlinks="pf13156916815478" inlinks="pf13156916815478" path="/place/placemap.xhtml"/> <nodes xsi:type="pageflow:PFPage" name="*" x="120" y="60" id="pf131682121330014" referenceLink="//@navigationRule.0/@fromViewId|" outlinks="pf131682121330015" path="*"/>
<links id="pf13156916815478" target="pf13156916815477" source="pf13156916815477" outcome="placesReserved" redirect="true"> <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"/>
<bendPoints d1Height="-36" d2Height="-36"/> <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"/>
<bendPoints d1Width="3" d1Height="-86" d2Width="3" d2Height="-86"/> <links id="pf131682121330015" target="pf131682121330016" source="pf131682121330014" outcome="logoutDone" redirect="true"/>
<bendPoints d1Width="-65" d1Height="-88" d2Width="-65" d2Height="-88"/> <links id="pf13168224196921" target="pf13168224196920" source="pf13168224196920" outcome="placesReserved" redirect="true"/>
<bendPoints d1Width="-64" d2Width="-64"/>
</links>
</pageflow:Pageflow> </pageflow:Pageflow>
...@@ -20,73 +20,63 @@ ...@@ -20,73 +20,63 @@
</locale-config> </locale-config>
</application> </application>
<!-- <navigation-rule> --> <!-- <navigation-rule> -->
<!-- <from-view-id>/user/list.xhtml</from-view-id> --> <!-- <from-view-id>/user/list.xhtml</from-view-id> -->
<!-- <navigation-case> --> <!-- <navigation-case> -->
<!-- <from-outcome>userEdit</from-outcome> --> <!-- <from-outcome>userEdit</from-outcome> -->
<!-- <to-view-id>/user/edit.xhtml</to-view-id> --> <!-- <to-view-id>/user/edit.xhtml</to-view-id> -->
<!-- </navigation-case> --> <!-- </navigation-case> -->
<!-- </navigation-rule> --> <!-- </navigation-rule> -->
<!-- <navigation-rule> --> <!-- <navigation-rule> -->
<!-- <from-view-id>/user/edit.xhtml</from-view-id> --> <!-- <from-view-id>/user/edit.xhtml</from-view-id> -->
<!-- <navigation-case> --> <!-- <navigation-case> -->
<!-- <from-outcome>userSave</from-outcome> --> <!-- <from-outcome>userSave</from-outcome> -->
<!-- <to-view-id>/user/edit.xhtml</to-view-id> --> <!-- <to-view-id>/user/edit.xhtml</to-view-id> -->
<!-- </navigation-case> --> <!-- </navigation-case> -->
<!-- </navigation-rule> --> <!-- </navigation-rule> -->
<!-- <navigation-rule> --> <!-- <navigation-rule> -->
<!-- <from-view-id>/role/list.xhtml</from-view-id> --> <!-- <from-view-id>/role/list.xhtml</from-view-id> -->
<!-- <navigation-case> --> <!-- <navigation-case> -->
<!-- <from-outcome>roleEdit</from-outcome> --> <!-- <from-outcome>roleEdit</from-outcome> -->
<!-- <to-view-id>/role/edit.xhtml</to-view-id> --> <!-- <to-view-id>/role/edit.xhtml</to-view-id> -->
<!-- </navigation-case> --> <!-- </navigation-case> -->
<!-- </navigation-rule> --> <!-- </navigation-rule> -->
<!-- <navigation-rule> --> <navigation-rule>
<!-- <from-view-id>*</from-view-id> --> <from-view-id>*</from-view-id>
<!-- <navigation-case> -->
<!-- <from-outcome>frontpage</from-outcome> -->
<!-- <to-view-id>/news/frontpage.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- <navigation-case> -->
<!-- <from-outcome>userprefs</from-outcome> -->
<!-- <to-view-id>/news/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- <navigation-case> -->
<!-- <from-outcome>shopfrontpage</from-outcome> -->
<!-- <to-view-id>/product/createBill.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- <navigation-case> -->
<!-- <from-outcome>adminfront</from-outcome> -->
<!-- <to-view-id>/admin/frontpage.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> --> <navigation-case>
<!-- <navigation-rule> --> <from-outcome>logoutDone</from-outcome>
<!-- <from-view-id>/role/edit.xhtml</from-view-id> --> <to-view-id>/auth/logoutResponse</to-view-id>
<!-- <navigation-case> --> <redirect/>
<!-- <from-outcome>roleSaved</from-outcome> --> </navigation-case>
<!-- <to-view-id>/role/edit.xhtml</to-view-id> --> </navigation-rule>
<!-- </navigation-case> --> <!-- </navigation-rule> -->
<!-- </navigation-rule> --> <!-- <navigation-rule> -->
<!-- <navigation-rule> --> <!-- <from-view-id>/role/edit.xhtml</from-view-id> -->
<!-- <navigation-case> -->
<!-- <from-outcome>roleSaved</from-outcome> -->
<!-- <to-view-id>/role/edit.xhtml</to-view-id> -->
<!-- </navigation-case> -->
<!-- </navigation-rule> -->
<!-- <navigation-rule> -->
<!-- <from-view-id>/product/createBill.xhtml</from-view-id> --> <!-- <from-view-id>/product/createBill.xhtml</from-view-id> -->
<!-- <navigation-case> --> <!-- <navigation-case> -->
<!-- <from-outcome>success</from-outcome> --> <!-- <from-outcome>success</from-outcome> -->
<!-- <to-view-id>/bill/list.xhtml</to-view-id> --> <!-- <to-view-id>/bill/list.xhtml</to-view-id> -->
<!-- </navigation-case> --> <!-- </navigation-case> -->
<!-- </navigation-rule> --> <!-- </navigation-rule> -->
<factory> <factory>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory> <exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory> </factory>
<navigation-rule> <navigation-rule>
<display-name>place/placemap</display-name> <display-name>place/placemap</display-name>
<from-view-id>/place/placemap.xhtml</from-view-id> <from-view-id>/place/placemap</from-view-id>
<navigation-case> <navigation-case>
<from-outcome>placesReserved</from-outcome> <from-outcome>placesReserved</from-outcome>
<to-view-id>/place/placemap.xhtml</to-view-id> <to-view-id>/place/placemap</to-view-id>
<redirect /> <redirect/>
</navigation-case> </navigation-case>
</navigation-rule> </navigation-rule>
</faces-config> </faces-config>
......
...@@ -64,13 +64,7 @@ ...@@ -64,13 +64,7 @@
<form-error-page>/auth/loginError.jsf</form-error-page> <form-error-page>/auth/loginError.jsf</form-error-page>
</form-login-config> </form-login-config>
</login-config> </login-config>
<security-role> <security-constraint>
<role-name>SUPERADMIN</role-name>
</security-role>
<security-role>
<role-name>USER</role-name>
</security-role>
<security-constraint>
<display-name>Forbidden resource</display-name> <display-name>Forbidden resource</display-name>
<web-resource-collection> <web-resource-collection>
<web-resource-name>Forbidden</web-resource-name> <web-resource-name>Forbidden</web-resource-name>
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
> >
<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.auth.logoutsuccess" />
<ui:define name="content"> <ui:define name="content">
<h:outputText value="#{i18n['login.logoutmessage']}" /> <h:outputText value="#{i18n['login.logoutmessage']}" />
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!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" <html xmlns="http://www.w3.org/1999/xhtml" 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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> >
<h:head> <h:head>
<title></title> <title></title>
</h:head> </h:head>
<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.index" />
<ui:define name="content"> <ui:define name="content">
<h1>Insomnia lippukauppa</h1>
<h3>Lippujen hinnat</h3> <h3>Lippujen hinnat</h3>
<ul> <ul>
<li>1-4 konepaikkaa 30e/paikka</li> <li>1-4 konepaikkaa 30e/paikka</li>
...@@ -21,46 +22,36 @@ ...@@ -21,46 +22,36 @@
<h3>Rekisteröityminen ja lippujen tilaaminen</h3> <h3>Rekisteröityminen ja lippujen tilaaminen</h3>
<p>Tilataksesi konepaikkoja sinun tulee rekisteröityä Insomnian <p>Tilataksesi konepaikkoja sinun tulee rekisteröityä Insomnian lippukauppaan. Rekisteröitymisvaiheessa teet
lippukauppaan. Rekisteröitymisvaiheessa teet käyttäjätunnuksen ja tilaat käyttäjätunnuksen ja tilaat haluamasi määrän konepaikkoja.</p>
haluamasi määrän konepaikkoja.</p>
<h3>Maksaminen</h3> <h3>Maksaminen</h3>
<p> <p>
Lippukauppaan ilmestyy lasku tilaamiesi konepaikkojen ja lippujen mukaisesti. Lippukauppaan ilmestyy lasku tilaamiesi konepaikkojen ja lippujen mukaisesti. Laskusta löydät kaikki maksamiseen
Laskusta löydät kaikki maksamiseen tarvittavat tiedot.<br /> tarvittavat tiedot.<br /> <br /> <b>Muista käyttää viitenumeroa laskua maksaessasi!</b> Huomioithan myös
<br /> pankkiviiveet maksaessasi muusta pankista kuin Osuuspankista. Maksut tarkastetaan pari kertaa päivässä. Maksuja ei
<b>Muista käyttää viitenumeroa laskua maksaessasi!</b> Huomioithan myös palauteta ilman erittäin hyvää syytä (esimerkiksi sairaustapauksissa lääkärintodistusta vastaan).
pankkiviiveet maksaessasi muusta pankista kuin Osuuspankista. Maksut </p>
tarkastetaan pari kertaa päivässä. Maksuja ei palauteta ilman erittäin hyvää
syytä (esimerkiksi sairaustapauksissa lääkärintodistusta vastaan).</p>
<h3>Paikkojen varaaminen</h3> <h3>Paikkojen varaaminen</h3>
<p> <p>Kun olet maksanut saamasi laskun ja olemme kirjanneet maksusi, saat sähköpostiisi ilmoituksen kun voit varata
Kun olet maksanut saamasi laskun ja olemme kirjanneet maksusi, saat paikkoja. Tällöin voit varata paikkakartalta tilaamasi määrän konepaikkoja.</p>
sähköpostiisi ilmoituksen kun voit varata paikkoja. Tällöin voit varata
paikkakartalta tilaamasi määrän konepaikkoja.</p>
<h3>Lippujen lunastaminen tapahtuman yhteydessä</h3> <h3>Lippujen lunastaminen tapahtuman yhteydessä</h3>
<p> <p>Kun olet täyttänyt tietosi järjestelmään, tulosta tilauksesi mukaiset viivakoodit ja jaa ne ryhmäsi jäsenille.
Kun olet täyttänyt tietosi järjestelmään, tulosta tilauksesi mukaiset Viivakoodin avulla nopeutat lippujen lunastusta huomattavasti.</p>
viivakoodit ja jaa ne ryhmäsi jäsenille. Viivakoodin avulla nopeutat lippujen
lunastusta huomattavasti.</p>
<h3>Tavalliset konepaikat ja pro-konepaikat</h3> <h3>Tavalliset konepaikat ja pro-konepaikat</h3>
<p> <p>
Tapahtumassa on tarjolla sekä tavallisia 80cm leveitä konepaikkoja että myös Tapahtumassa on tarjolla sekä tavallisia 80cm leveitä konepaikkoja että myös rajattu määrä normaaleista
rajattu määrä normaaleista konepaikoista poikkeavia pro-konepaikkoja.<br /> konepaikoista poikkeavia pro-konepaikkoja.<br /> <br /> Pro-konepaikoilla pääsee nauttimaan suuremmasta tilasta,
<br /> sillä konepaikan leveys on 100cm ja lisäksi paikat on jaoteltu viiden konepaikan riveihin. Pro-konepaikkojen
Pro-konepaikoilla pääsee nauttimaan suuremmasta tilasta, sillä konepaikan käytävävälit ovat myös leveämmät.
leveys on 100cm ja lisäksi paikat on jaoteltu viiden konepaikan riveihin. </p>
Pro-konepaikkojen käytävävälit ovat myös leveämmät.</p>
<h3>Kysymykset</h3> <h3>Kysymykset</h3>
<p> <p>Mikäli mieltäsi askarruttaa jokin liittyen tapahtuman konepaikkoihin tai lippukauppaan, ota rohkeasti yhteyttä
Mikäli mieltäsi askarruttaa jokin liittyen tapahtuman konepaikkoihin tai sähköpostilla osoitteeseen info [at] insomnia.fi.</p>
lippukauppaan, ota rohkeasti yhteyttä sähköpostilla osoitteeseen info
[at] insomnia.fi.</p>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -24,9 +24,7 @@ ...@@ -24,9 +24,7 @@
</ul></li> </ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.bills']}" /> <li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.bills']}" />
<ul> <ul>
<li><h:link outcome="/bill/list" value="#{i18n['sidebar.bill.listAll']}" /> <li><h:link outcome="/bill/billSummary" value="#{i18n['sidebar.bill.summary']}" />
</li>
<li><h:link outcome="/bill/billSummary" value="#{i18n['sidebar.bill.summary']}" />
</li> </li>
</ul></li> </ul></li>
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.users']}" /> <li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.users']}" />
......
<!DOCTYPE html <!DOCTYPE html
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 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html" >
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/insomnia1/sidebartemplate.xhtml"> <ui:composition template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:param name="rendered" value="true" /> <ui:param name="rendered" value="true" />
<ui:define name="sidebarcontent"> <ui:define name="sidebarcontent">
<ul> <ul>
<li><h:link outcome="/bill/list" value="#{i18n['sidebar.bill.list']}"/></li> <li><h:link outcome="/bill/list" value="#{i18n['sidebar.bill.list']}" />
</li>
</ul> <c:if test="#{billListView.canReadAllBills()}">
<li><h:link outcome="/bill/listAll" value="#{i18n['sidebar.bill.listAll']}" />
</li>
</c:if>
</ul>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -6,11 +6,9 @@ ...@@ -6,11 +6,9 @@
> >
<f:view locale="#{sessionHandler.locale}"> <f:view 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(thispage)}" /> <title><h:outputText value="#{layoutView.getHeader()}" /></title>
</title>
<meta name="description" content="Insomnia lippukauppa" /> <meta name="description" content="Insomnia lippukauppa" />
<meta name="author" content="Niko Juusela, csharp" /> <meta name="author" content="Niko Juusela, csharp" />
<meta http-equiv="Content-Language" content="fi" /> <meta http-equiv="Content-Language" content="fi" />
...@@ -34,58 +32,39 @@ ...@@ -34,58 +32,39 @@
<div id="wrapper"> <div id="wrapper">
<div id="navigation"> <div id="navigation">
<ul class="menu"> <ul class="menu" jsfc="ui:repeat" var="menuitem" value="#{menuView.topmenu}">
<li><h:link outcome="/index" value="#{i18n['topmenu.frontpage']}" <li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'frontpage'?'active':''}" styleClass="#{menuitem.selected?'active':''}"
/></li> >
<c:if test="#{sessionHandler.isLoggedIn()}"> <f:param name="cid" value="#{menuitem.cid?userView.conversationId:null}" />
<li><h:link outcome="/user/edit" value="#{i18n['topmenu.usersPreferences']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'active':''}" </h:link></li>
/>
</li>
<!--
<li><h:link outcome="/poll/start" value="#{i18n['topmenu.poll']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'poll'?'active': ''}"
/></li>
-->
</c:if>
<c:if test="#{mapView.canView()}">
<li><h:link outcome="/place/placemap" value="#{i18n['topmenu.placemap']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'placemap'?'active':''}"
/>
</li>
</c:if>
<c:if test="#{sessionHandler.isLoggedIn()}">
<!--<li><h:link outcome="/product/list" value="#{i18n['topmenu.adminfront']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'active':''}"
/>
</li>-->
<li><h:link outcome="/shop/createBill" value="#{i18n['sidebar.product.createBill']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'active':''}"
/>
</li>
<!-- <li><h:link outcome="/shop/showReaderEvents" value="#{i18n['topmenu.rfidshop']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'rfidshop'?'active':''}"
/>
</li>
<li><h:link outcome="/game/start" value="#{i18n['topmenu.game']}"
styleClass="#{i18n[util.concat(thispage,'.pagegroup')] == 'game'?'active':''}"
/>
</li>
-->
</c:if>
</ul> </ul>
</div> </div>
<div id="container" class="top"></div> <div id="container" class="top" />
<div id="container" class="clearfix"> <div id="container" class="clearfix">
<div id="left"> <div id="left">
<ui:insert name="title" />
<h:messages globalOnly="true" /> <h:messages globalOnly="true" />
<ui:insert name="content" /> <ui:insert name="content" />
</div> </div>
<div id="right"> <c:if test="#{menuView.submenu.size() > 1}">
<ui:include src="/layout/insomnia2/sidebar-#{i18n[util.concat(thispage,'.pagegroup')]}.xhtml" /> <div id="right">
</div> <ul class="menu">
<ui:repeat var="menuitem" value="#{menuView.submenu}">
<h:outputText rendered="#{!empty menuitem.header}"
value="&lt;/ul>&lt;h1>#{i18n[menuitem.header]}&lt;/h1>&lt;ul>" escape="false"
/>
<li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}"
styleClass="#{menuitem.selected?'active':''}"
>
<f:param name="cid" value="#{menuitem.cid?userView.conversationId:null}" />
</h:link></li>
</ui:repeat>
</ul>
</div>
</c:if>
</div> </div>
<div id="container" class="bottom"></div> <div id="container" class="bottom"></div>
</div> </div>
......
...@@ -49,12 +49,14 @@ ...@@ -49,12 +49,14 @@
<h:outputText value="#{placeView.place.product.name}" /> <h:outputText value="#{placeView.place.product.name}" />
<h:outputLabel value="#{i18n['place.buyable']}" /> <h:outputLabel value="#{i18n['place.buyable']}" />
<h:selectBooleanCheckbox value="#{plaveView.place.buyable}"/> <h:selectBooleanCheckbox value="#{placeView.place.buyable}"/>
<h:outputLabel value="#{i18n['place.description']}:" /> <h:outputLabel value="#{i18n['place.description']}:" />
<h:inputTextarea value="#{placeView.place.description}" /> <h:inputTextarea value="#{placeView.place.description}" />
</h:panelGrid> </h:panelGrid>
<h:commandButton id="commitbtn" action="#{placeView.save()}" value="#{i18n['place.commit']}" />
<h:commandButton rendered="#{placeView.place.isTaken() and (empty placeView.place.group)}" <h:commandButton rendered="#{placeView.place.isTaken() and (empty placeView.place.group)}"
action="#{placeView.releasePlace()}" value="#{i18n['place.release']}" action="#{placeView.releasePlace()}" value="#{i18n['place.release']}"
/> />
...@@ -63,9 +65,9 @@ ...@@ -63,9 +65,9 @@
onclick="return confirm('#{i18n['place.groupremove.confirm']}')" onclick="return confirm('#{i18n['place.groupremove.confirm']}')"
/> />
<h:commandButton id="commitbtn" action="#{placeView.save()}" value="#{i18n['place.commit']}" />
</h:form> </h:form>
<h2>Placegroup</h2>
<h:panelGrid columns="2" rendered="#{empty placeView.place.group}"> <h:panelGrid columns="2" rendered="#{empty placeView.place.group}">
<h:form id="usersearchform"> <h:form id="usersearchform">
<h:outputText value="#{i18n['user.searchUser']}" /> <h:outputText value="#{i18n['user.searchUser']}" />
...@@ -124,9 +126,14 @@ ...@@ -124,9 +126,14 @@
<h:outputLabel value="#{i18n['placegroup.details']}:" /> <h:outputLabel value="#{i18n['placegroup.details']}:" />
<h:inputTextarea value="#{placeView.place.group.details}" /> <h:inputTextarea value="#{placeView.place.group.details}" />
<h:outputLabel value="#{i18n['placegroup.creator']}" />
<h:link outcome="/user/edit" value="#{placeView.place.group.creator.wholeName}" >
<f:param name="userid" value="#{placeView.place.group.creator.id}"/>
</h:link>
</h:panelGrid> </h:panelGrid>
</h:form> </h:form>
<h:dataTable border="0" id="placelist" value="#{placeView.place.group.places}" var="place"> <h:dataTable border="0" id="placelist" value="#{placeView.place.group.places}" var="place">
......
...@@ -7,9 +7,15 @@ ...@@ -7,9 +7,15 @@
<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:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['placegroupview.header']}</h1> <h1>#{i18n['placegroupview.header']}</h1>
<p>#{i18n['placegroupview.toptext']}</p> <p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" <h:outputText rendered="#{empty placeGroupView.groupMemberships}"
value="#{i18n['placegroupview.noMemberships']}" /> value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform"> <h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
/> />
<h:commandButton styleClass="imgcenter" id="commandbutton" image="/PlaceMap?mapid=#{mapView.activeMap.id.id}" <h:commandButton styleClass="imgcenter" id="commandbutton" image="/PlaceMap?mapid=#{mapView.activeMap.id}"
actionListener="#{placeView.placeSelectActionListener}" actionListener="#{placeView.placeSelectActionListener}"
/> />
...@@ -51,10 +51,10 @@ ...@@ -51,10 +51,10 @@
<h:panelGroup> <h:panelGroup>
<h:panelGrid columnClasses=",rightalign" columns="2"> <h:panelGrid columnClasses=",rightalign" columns="2">
<h:outputLabel value="#{i18n['placeSelect.totalPlaces']}:" /> <h:outputLabel value="#{i18n['placeSelect.totalPlaces']}:" />
<h:outputText value="#{mapView.activeMap.places.size()}" /> <h:outputText value="#{mapView.availablePlaces}" />
<h:outputLabel value="#{i18n['placeSelect.placesleft']}:" /> <h:outputLabel value="#{i18n['placeSelect.placesleft']}:" />
<h:outputText value="#{mapView.placeLeftToSelect()}" /> <h:outputText value="#{mapView.placesLeftToSelect}" />
<h:outputLabel rendered="#{mapView.canUserBuy()}" value="#{i18n['user.accountBalance']}:" /> <h:outputLabel rendered="#{mapView.canUserBuy()}" value="#{i18n['user.accountBalance']}:" />
<h:outputText rendered="#{mapView.canUserBuy()}" value="#{mapView.user.accountBalance}"> <h:outputText rendered="#{mapView.canUserBuy()}" value="#{mapView.user.accountBalance}">
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
action="#{request.contextPath}/UploadServlet?type=mapimage" enctype="multipart/form-data" method="post" action="#{request.contextPath}/UploadServlet?type=mapimage" enctype="multipart/form-data" method="post"
> >
<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.id}" /> Lähetä kartan taustakuva
</p> </p>
......
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "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" <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:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" >
>
<composite:interface> <composite:interface>
...@@ -20,6 +19,7 @@ ...@@ -20,6 +19,7 @@
<h:form id="userform"> <h:form id="userform">
<h:panelGrid columns="3"> <h:panelGrid columns="3">
<h:outputLabel rendered="#{!cc.attrs.creating}" value="#{i18n['user.login']}:" for="viewlogin" /> <h:outputLabel rendered="#{!cc.attrs.creating}" value="#{i18n['user.login']}:" for="viewlogin" />
<h:outputText rendered="#{!cc.attrs.creating}" disabled="#{!cc.attrs.creating and !userView.canSave()}" <h:outputText rendered="#{!cc.attrs.creating}" disabled="#{!cc.attrs.creating and !userView.canSave()}"
id="viewlogin" value="#{userView.selectedUser.login}" id="viewlogin" value="#{userView.selectedUser.login}"
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
<h:message rendered="#{!cc.attrs.creating}" for="viewlogin" /> <h:message rendered="#{!cc.attrs.creating}" for="viewlogin" />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.login']}:" for="login" /> <h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.login']}:" for="login" />
<h:inputText rendered="#{cc.attrs.creating}" validator="#{userValidator.login}" disabled="#{!cc.attrs.creating and !userView.canSave()}" <h:inputText rendered="#{cc.attrs.creating}" validator="#{userValidator.login}"
id="login" value="#{userView.selectedUser.login}" disabled="#{!cc.attrs.creating and !userView.canSave()}" id="login" value="#{userView.selectedUser.login}"
/> />
<h:message rendered="#{cc.attrs.creating}" for="login" /> <h:message rendered="#{cc.attrs.creating}" for="login" />
...@@ -94,13 +94,18 @@ ...@@ -94,13 +94,18 @@
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}:" for="password" /> <h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}:" for="password" />
<h:inputSecret validator="#{userValidator.password}" rendered="#{cc.attrs.creating}" id="password" value="#{userView.password}" /> <h:inputSecret validator="#{userValidator.password}" rendered="#{cc.attrs.creating}" id="password"
value="#{userView.password}"
/>
<h:message rendered="#{cc.attrs.creating}" for="password" /> <h:message rendered="#{cc.attrs.creating}" for="password" />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.passwordcheck']}:" for="passwordcheck" /> <h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.passwordcheck']}:" for="passwordcheck" />
<h:inputSecret validator="#{userValidator.password}" rendered="#{cc.attrs.creating}" id="passwordcheck" value="#{userView.passwordcheck}" /> <h:inputSecret validator="#{userValidator.password}" rendered="#{cc.attrs.creating}" id="passwordcheck"
value="#{userView.passwordcheck}"
/>
<h:message rendered="#{cc.attrs.creating}" for="passwordcheck" /> <h:message rendered="#{cc.attrs.creating}" for="passwordcheck" />
<h:outputLabel rendered="#{roleView.canReadRoles()}" value="#{i18n['user.roles']}:" for="roles" /> <h:outputLabel rendered="#{roleView.canReadRoles()}" value="#{i18n['user.roles']}:" for="roles" />
<h:selectManyCheckbox converter="#{roleConverter}" rendered="#{roleView.canReadRoles()}" <h:selectManyCheckbox converter="#{roleConverter}" rendered="#{roleView.canReadRoles()}"
disabled="#{!roleView.canWriteRoles()}" layout="pageDirection" id="roles" value="#{userView.selectedUser.roles}" disabled="#{!roleView.canWriteRoles()}" layout="pageDirection" id="roles" value="#{userView.selectedUser.roles}"
......
<?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"
>
<composite:interface>
</composite:interface>
<composite:implementation>
<h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript target="head" library="jpegcam" name="webcam.js" />
<h:outputScript target="head">
webcam.set_api_url( '#{request.contextPath}/UploadServlet?type=userimage&amp;id=#{userView.selectedUser.id}' );
webcam.set_hook('onComplete', 'my_completion_handler');
webcam.set_swf_url('#{request.contextPath}/resources/jpegcam/Webcam.swf');
webcam.set_shutter_sound(true,'#{request.contextPath}/resources/jpegcam/shutter.mp3');
function my_completion_handler(msg) {
// alert("Completition handler executed" + msg);
window.location.href=window.location.href;
}
</h:outputScript>
<button onclick="$('#webcamcontainer').prepend(webcam.get_html(320, 240));$('#webcamcontainer').show();$(this).hide();">#{i18n['userimage.webcam']}</button>
<div id="webcamcontainer" style="display: none;"></div>
<p>Voit lisätä kuvan kävijälippuasi varten. Näin nopeutat asiointiasi tapahtumaan tullessasi.</p>
<p>
Kuvasta on pystyttävä tunnistamaan ongelmitta kortin omistaja. Tästä johtuen kuvan tulee olla selkeä, eikä kuvassa saa
olla useita henkilöitä. Ohjeita hyvän tunnistekuvan ottamiseksi löytyy <a
href="http://www.poliisi.fi/poliisi/home.nsf/files/Passikuvaohje_26-02-2008_FI/$file/Passikuvaohje_26-02-2008_FI.pdf"
>poliisin passikuvaohjeesta.</a>
</p>
<form
onsubmit="window.open('', 'imagesubmitpopup', 'height=240,width=320'); this.target='imagesubmitpopup'; return true; "
action="#{request.contextPath}/UploadServlet?type=userimage" enctype="multipart/form-data" method="post"
>
<input type="hidden" name="id" value="#{userView.user.id}" />
<!-- <h:outputLabel value="#{i18n['imagefile.file']}" /> -->
<input type="file" name="file" />
<!-- <h:outputLabel value="#{i18n['imagefile.description']}"/><input type="text" name="description" /> -->
<input type="submit" name="submit" value="#{i18n['user.imagesubmit']}" />
</form>
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<h:panelGroup rendered="#{!empty userView.user.currentImage}">
<img width="300" src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}" alt="image" />
</h:panelGroup>
</composite:implementation>
</html>
...@@ -5,193 +5,223 @@ ...@@ -5,193 +5,223 @@
/* http://www.gnu.org/licenses/lgpl.html */ /* http://www.gnu.org/licenses/lgpl.html */
/* Usage: /* Usage:
<script language="JavaScript"> <script language="JavaScript">
document.write( webcam.get_html(320, 240) ); document.write( webcam.get_html(320, 240) );
webcam.set_api_url( 'test.php' ); webcam.set_api_url( 'test.php' );
webcam.set_hook( 'onComplete', 'my_callback_function' ); webcam.set_hook( 'onComplete', 'my_callback_function' );
function my_callback_function(response) { function my_callback_function(response) {
alert("Success! PHP returned: " + response); alert("Success! PHP returned: " + response);
} }
</script> </script>
<a href="javascript:void(webcam.snap())">Take Snapshot</a> <a href="javascript:void(webcam.snap())">Take Snapshot</a>
*/ */
// Everything is under a 'webcam' Namespace // Everything is under a 'webcam' Namespace
window.webcam = { window.webcam = {
version: '1.0.9', version : '1.0.9',
// globals // globals
ie: !!navigator.userAgent.match(/MSIE/), ie : !!navigator.userAgent.match(/MSIE/),
protocol: location.protocol.match(/https/i) ? 'https' : 'http', protocol : location.protocol.match(/https/i) ? 'https' : 'http',
callback: null, // user callback for completed uploads callback : null, // user callback for completed uploads
swf_url: 'webcam.swf', // URI to webcam.swf movie (defaults to cwd) swf_url : 'webcam.swf', // URI to webcam.swf movie (defaults to cwd)
shutter_url: 'shutter.mp3', // URI to shutter.mp3 sound shutter_url : 'shutter.mp3', // URI to shutter.mp3 sound
api_url: '', // URL to upload script api_url : '', // URL to upload script
loaded: false, // true when webcam movie finishes loading loaded : false, // true when webcam movie finishes loading
quality: 90, // JPEG quality (1 - 100) quality : 90, // JPEG quality (1 - 100)
shutter_sound: true, // shutter sound effect on/off shutter_sound : true, // shutter sound effect on/off
stealth: false, // stealth mode (do not freeze image upon capture) stealth : false, // stealth mode (do not freeze image upon capture)
hooks: { hooks : {
onLoad: null, onLoad : null,
onComplete: null, onComplete : null,
onError: null onError : null
}, // callback hook functions }, // callback hook functions
set_hook: function(name, callback) { set_hook : function(name, callback) {
// set callback hook // set callback hook
// supported hooks: onLoad, onComplete, onError // supported hooks: onLoad, onComplete, onError
if (typeof(this.hooks[name]) == 'undefined') if (typeof (this.hooks[name]) == 'undefined')
return alert("Hook type not supported: " + name); return alert("Hook type not supported: " + name);
this.hooks[name] = callback; this.hooks[name] = callback;
}, },
fire_hook: function(name, value) { fire_hook : function(name, value) {
// fire hook callback, passing optional value to it // fire hook callback, passing optional value to it
if (this.hooks[name]) { if (this.hooks[name]) {
if (typeof(this.hooks[name]) == 'function') { if (typeof (this.hooks[name]) == 'function') {
// callback is function reference, call directly // callback is function reference, call directly
this.hooks[name](value); this.hooks[name](value);
} } else if (typeof (this.hooks[name]) == 'array') {
else if (typeof(this.hooks[name]) == 'array') {
// callback is PHP-style object instance method // callback is PHP-style object instance method
this.hooks[name][0][this.hooks[name][1]](value); this.hooks[name][0][this.hooks[name][1]](value);
} } else if (window[this.hooks[name]]) {
else if (window[this.hooks[name]]) {
// callback is global function name // callback is global function name
window[ this.hooks[name] ](value); window[this.hooks[name]](value);
} }
return true; return true;
} }
return false; // no hook defined return false; // no hook defined
}, },
set_api_url: function(url) { get_api_url : function() {
return this.api_url;
},
set_api_url : function(url) {
// set location of upload API script // set location of upload API script
this.api_url = url; this.api_url = url;
}, },
set_swf_url: function(url) { set_swf_url : function(url) {
// set location of SWF movie (defaults to webcam.swf in cwd) // set location of SWF movie (defaults to webcam.swf in cwd)
this.swf_url = url; this.swf_url = url;
}, },
get_html: function(width, height, server_width, server_height) { get_html : function(width, height, server_width, server_height) {
// Return HTML for embedding webcam capture movie // Return HTML for embedding webcam capture movie
// Specify pixel width and height (640x480, 320x240, etc.) // Specify pixel width and height (640x480, 320x240, etc.)
// Server width and height are optional, and default to movie width/height // Server width and height are optional, and default to movie
if (!server_width) server_width = width; // width/height
if (!server_height) server_height = height; if (!server_width)
server_width = width;
if (!server_height)
server_height = height;
var html = ''; var html = '';
var flashvars = 'shutter_enabled=' + (this.shutter_sound ? 1 : 0) + var flashvars = 'shutter_enabled=' + (this.shutter_sound ? 1 : 0)
'&shutter_url=' + escape(this.shutter_url) + + '&shutter_url=' + escape(this.shutter_url) + '&width='
'&width=' + width + + width + '&height=' + height + '&server_width=' + server_width
'&height=' + height + + '&server_height=' + server_height;
'&server_width=' + server_width +
'&server_height=' + server_height;
if (this.ie) { if (this.ie) {
html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+this.protocol+'://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="webcam_movie" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+this.swf_url+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/></object>'; html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'
} + this.protocol
else { + '://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'
html += '<embed id="webcam_movie" src="'+this.swf_url+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="webcam_movie" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" />'; + width
+ '" height="'
+ height
+ '" id="webcam_movie" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'
+ this.swf_url
+ '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'
+ flashvars + '"/></object>';
} else {
html += '<embed id="webcam_movie" src="'
+ this.swf_url
+ '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'
+ width
+ '" height="'
+ height
+ '" name="webcam_movie" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'
+ flashvars + '" />';
} }
this.loaded = false; this.loaded = false;
return html; return html;
}, },
get_movie: function() { get_movie : function() {
// get reference to movie object/embed in DOM // get reference to movie object/embed in DOM
if (!this.loaded) return alert("ERROR: Movie is not loaded yet"); if (!this.loaded)
return alert("ERROR: Movie is not loaded yet");
var movie = document.getElementById('webcam_movie'); var movie = document.getElementById('webcam_movie');
if (!movie) alert("ERROR: Cannot locate movie 'webcam_movie' in DOM"); if (!movie)
alert("ERROR: Cannot locate movie 'webcam_movie' in DOM");
return movie; return movie;
}, },
set_stealth: function(stealth) { set_stealth : function(stealth) {
// set or disable stealth mode // set or disable stealth mode
this.stealth = stealth; this.stealth = stealth;
}, },
snap: function(url, callback, stealth) { // snap : function(url, callback, stealth) {
// take snapshot and send to server // // take snapshot and send to server
// specify fully-qualified URL to server API script // // specify fully-qualified URL to server API script
// and callback function (string or function object) // // and callback function (string or function object)
if (callback) this.set_hook('onComplete', callback); // if (callback)
if (url) this.set_api_url(url); // this.set_hook('onComplete', callback);
if (typeof(stealth) != 'undefined') this.set_stealth( stealth ); // if (url)
// this.set_api_url(url);
this.get_movie()._snap( this.api_url, this.quality, this.shutter_sound ? 1 : 0, this.stealth ? 1 : 0 ); // if (typeof (stealth) != 'undefined')
}, // this.set_stealth(stealth);
//
freeze: function() { // this.get_movie()._snap(this.api_url, this.quality,
// this.shutter_sound ? 1 : 0, this.stealth ? 1 : 0);
// },
freeze : function() {
// freeze webcam image (capture but do not upload) // freeze webcam image (capture but do not upload)
this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0, 0 ); this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0, 0);
}, },
upload: function(url, callback) { // upload : function(url, callback) {
// upload image to server after taking snapshot // // upload image to server after taking snapshot
// specify fully-qualified URL to server API script // // specify fully-qualified URL to server API script
// and callback function (string or function object) // // and callback function (string or function object)
if (callback) this.set_hook('onComplete', callback); // if (callback)
if (url) this.set_api_url(url); // this.set_hook('onComplete', callback);
// if (url)
this.get_movie()._upload( this.api_url ); // this.set_api_url(url);
}, //
// this.get_movie()._upload(this.api_url);
reset: function() { // },
reset : function() {
// reset movie after taking snapshot // reset movie after taking snapshot
this.get_movie()._reset(); this.get_movie()._reset();
}, },
configure: function(panel) { configure : function(panel) {
// open flash configuration panel -- specify tab name: // open flash configuration panel -- specify tab name:
// "camera", "privacy", "default", "localStorage", "microphone", "settingsManager" // "camera", "privacy", "default", "localStorage", "microphone",
if (!panel) panel = "camera"; // "settingsManager"
if (!panel)
panel = "camera";
this.get_movie()._configure(panel); this.get_movie()._configure(panel);
}, },
set_quality: function(new_quality) { set_quality : function(new_quality) {
// set the JPEG quality (1 - 100) // set the JPEG quality (1 - 100)
// default is 90 // default is 90
this.quality = new_quality; this.quality = new_quality;
}, },
set_shutter_sound: function(enabled, url) { set_shutter_sound : function(enabled, url) {
// enable or disable the shutter sound effect // enable or disable the shutter sound effect
// defaults to enabled // defaults to enabled
this.shutter_sound = enabled; this.shutter_sound = enabled;
this.shutter_url = url ? url : 'shutter.mp3'; this.shutter_url = url ? url : 'shutter.mp3';
}, },
flash_notify: function(type, msg) {
flash_notify : function(type, msg) {
// receive notification from flash about event // receive notification from flash about event
// alert("got msg; Type: " + type + " MSG" + msg);
switch (type) { switch (type) {
case 'flashLoadComplete': case 'flashLoadComplete':
// movie loaded successfully // movie loaded successfully
this.loaded = true; this.loaded = true;
this.fire_hook('onLoad'); this.fire_hook('onLoad');
break; break;
case 'error': case 'error':
// HTTP POST error most likely // HTTP POST error most likely
if (!this.fire_hook('onError', msg)) { if (!this.fire_hook('onError', msg)) {
alert("JPEGCam Flash Error: " + msg); alert("JPEGCam Flash Error: " + msg);
} }
break; break;
case 'success': case 'success':
// upload complete, execute user callback function // upload complete, execute user callback function
// and pass raw API script results to function // and pass raw API script results to function
this.fire_hook('onComplete', msg.toString()); this.fire_hook('onComplete', msg.toString());
break; break;
default: default:
// catch-all, just in case // catch-all, just in case
alert("jpegcam flash_notify: " + type + ": " + msg); alert("jpegcam flash_notify: " + type + ": " + msg);
break; break;
} }
} }
}; };
/* begin css tabs */
ul#tabnav { /* general settings */
text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #6c6; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 3px 10px; /* THIRD number must change with respect to padding-top (X) below */
}
ul#tabnav li { /* do not change */
display: inline;
}
body#tab1 li.tab1, body#tab2 li.tab2, body#tab3 li.tab3, body#tab4 li.tab4 { /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
}
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 */
background-color: #fff; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul#tabnav 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 */
border: 1px solid #6c6; /* set border COLOR as desired; usually matches border color specified in #tabnav */
background-color: #cfc; /* set unselected tab background color as desired */
color: #666; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
}
ul#tabnav a:hover { /* settings for hover effect */
background: #fff; /* set desired hover color */
}
/* end css tabs */
\ 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:role="http://java.sun.com/jsf/composite/cditools/role" xmlns:role="http://java.sun.com/jsf/composite/cditools/role" 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">
......
...@@ -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:role="http://java.sun.com/jsf/composite/cditools/role" xmlns:role="http://java.sun.com/jsf/composite/cditools/role" 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,15 +7,16 @@ ...@@ -7,15 +7,16 @@
> >
<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.product.createBill" />
<f:metadata> <f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" /> <f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{productShopView.initView}" /> <f:event type="preRenderView" listener="#{productShopView.initView}" />
</f:metadata> </f:metadata>
<ui:define name="content"> <ui:define name="title">
<h1>#{i18n['page.product.createBill.header']}</h1> <h1>#{i18n['page.product.createBill.header']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="billshopform"> <h:form id="billshopform">
<products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.shoppingcart}" <products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.shoppingcart}"
commitValue="#{i18n['productshop.commit']}" commitValue="#{i18n['productshop.commit']}"
......
...@@ -11,9 +11,11 @@ ...@@ -11,9 +11,11 @@
<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:param name="thispage" value="page.user.create" /> <ui:define name="title">
<h1>#{i18n['user.changepassword.title']}</h1>
</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']}:" />
......
<!DOCTYPE html <!DOCTYPE html 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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
...@@ -13,12 +12,13 @@ ...@@ -13,12 +12,13 @@
<f:event type="preRenderView" listener="#{userView.initView}" /> <f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.user.edit" /> <!-- <ui:param name="thispage" value="page.user.edit" /> -->
<ui:define name="title">
<h1>#{i18n['user.edit.title']}</h1>
</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']}" />
<!--
<!--
<h2>#{i18n['user.accountEventHeader']}</h2> <h2>#{i18n['user.accountEventHeader']}</h2>
<h:outputText rendered="#{userView.user.accountEvents.size() le 0}" value="#{i18n['user.noAccountevents']}" /> <h:outputText rendered="#{userView.user.accountEvents.size() le 0}" value="#{i18n['user.noAccountevents']}" />
...@@ -94,7 +94,6 @@ ...@@ -94,7 +94,6 @@
</h:form> </h:form>
--> -->
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
</html> </html>
\ No newline at end of file
...@@ -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:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" 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">
...@@ -12,7 +12,11 @@ ...@@ -12,7 +12,11 @@
<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['sendPicture.header']}</h1>
</ui:define>
<ui:define name="content"> <ui:define name="content">
<users:sendImage /> <users:sendImage />
</ui:define> </ui:define>
......
package fi.insomnia.bortal; package fi.insomnia.bortal;
import java.io.IOException; import java.io.IOException;
import java.security.AccessController;
import javax.security.auth.Subject;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; import javax.servlet.FilterConfig;
...@@ -53,7 +51,7 @@ public class HostnameFilter implements Filter { ...@@ -53,7 +51,7 @@ public class HostnameFilter implements Filter {
httpRequest = ((HttpServletRequest) request); httpRequest = ((HttpServletRequest) request);
StringBuffer url = httpRequest.getRequestURL(); StringBuffer url = httpRequest.getRequestURL();
Subject subj = Subject.getSubject(AccessController.getContext());
int beginindex = 7; // Let's skip http:// int beginindex = 7; // Let's skip http://
int slashindex = url.indexOf("/", beginindex); int slashindex = url.indexOf("/", beginindex);
...@@ -76,7 +74,7 @@ public class HostnameFilter implements Filter { ...@@ -76,7 +74,7 @@ public class HostnameFilter implements Filter {
try { try {
httpRequest.login(User.ANONYMOUS_LOGINNAME, null); httpRequest.login(User.ANONYMOUS_LOGINNAME, null);
} catch (Throwable t) { } catch (Throwable t) {
logger.warn("Error logging in as anonymous... ignoring.. {}", t.getCause()); logger.warn("Error logging in as anonymous... ignoring.. ", t);
} }
} }
......
...@@ -20,7 +20,7 @@ public class NavigationHandler implements Serializable { ...@@ -20,7 +20,7 @@ public class NavigationHandler implements Serializable {
private String destNavi; private String destNavi;
@Inject @Inject
private Conversation conversation; private transient Conversation conversation;
public void saveDestination(String pageid) { public void saveDestination(String pageid) {
if (conversation.isTransient()) { if (conversation.isTransient()) {
......
...@@ -94,7 +94,7 @@ public class SessionHandler { ...@@ -94,7 +94,7 @@ public class SessionHandler {
public boolean hasPermission(IAppPermission permission) { public boolean hasPermission(IAppPermission permission) {
if (permission == null) { if (permission == null) {
logger.warn("permission {} is null", permission); logger.warn("permission is null");
throw new RuntimeException("Empty target or permission!"); throw new RuntimeException("Empty target or permission!");
} }
boolean ret = permbean.hasPermission(permission); boolean ret = permbean.hasPermission(permission);
......
...@@ -77,11 +77,11 @@ page.permissionDenied.pagegroup=frontpage ...@@ -77,11 +77,11 @@ page.permissionDenied.pagegroup=frontpage
page.bill.placemap.pagegroup=placemap page.bill.placemap.pagegroup=placemap
page.bill.listAll.pagegroup=admin page.bill.listAll.pagegroup=shop
page.bill.edit.pagegroup=admin page.bill.edit.pagegroup=shop
page.bill.billSummary.pagegroup=admin page.bill.billSummary.pagegroup=shop
page.account.list.pagegroup=user page.account.list.pagegroup=user
......
...@@ -95,7 +95,6 @@ mapView.errorWhenReleasingPlace=Paikkaa vapauttassa tapahtui virhe. ...@@ -95,7 +95,6 @@ mapView.errorWhenReleasingPlace=Paikkaa vapauttassa tapahtui virhe.
mapView.errorWhenReservingPlace=Paikkaa varatessa tapahtui virhe. mapView.errorWhenReservingPlace=Paikkaa varatessa tapahtui virhe.
mapView.errorWhileBuyingPlaces=Virhe paikkojen ostossa. Ole hyv\u00e4 ja yrit\u00e4 uudelleen. Jos virhe toistuu ota yhteytt\u00e4 j\u00e4rjest\u00e4jiin. mapView.errorWhileBuyingPlaces=Virhe paikkojen ostossa. Ole hyv\u00e4 ja yrit\u00e4 uudelleen. Jos virhe toistuu ota yhteytt\u00e4 j\u00e4rjest\u00e4jiin.
mapView.notEnoughCreditsToReserve=Sinulla ei ole riitt\u00e4v\u00e4sti suoritettuja konepaikkamaksuja t\u00e4m\u00e4n paikan varaamiseen. mapView.notEnoughCreditsToReserve=Sinulla ei ole riitt\u00e4v\u00e4sti suoritettuja konepaikkamaksuja t\u00e4m\u00e4n paikan varaamiseen.
nasty.user=Wait, wot! Mene pois!
org.hibernate.validator.constraints.Email.message=not a well-formed email address org.hibernate.validator.constraints.Email.message=not a well-formed email address
org.hibernate.validator.constraints.Length.message=length must be between {min} and {max} org.hibernate.validator.constraints.Length.message=length must be between {min} and {max}
org.hibernate.validator.constraints.NotEmpty.message=may not be empty org.hibernate.validator.constraints.NotEmpty.message=may not be empty
...@@ -232,20 +231,48 @@ sidebar.users=K\u00e4ytt\u00e4j\u00e4t ...@@ -232,20 +231,48 @@ sidebar.users=K\u00e4ytt\u00e4j\u00e4t
sidebar.utils.flushCache=Flush Cache sidebar.utils.flushCache=Flush Cache
sidebar.utils.testdata=Testdata sidebar.utils.testdata=Testdata
topmenu.adminfront=Admintavaraa topmenu.adminfront=Admintavaraa
topmenu.frontpage=Etusivu
menu.index=Etusivu
menu.user.edit=Omat tiedot
menu.place.placemap=Paikkakartta
menu.shop.createBill=Kauppa
submenu.shop.createBill=Luo lasku
submenu.bill.list=N\u00e4yt\u00e4 omat laskut
submenu.index=Etusivu
submenu.user.create=Luo uusi kyttj
submenu.auth.sendResetMail=Salasanan palautus
submenu.user.sendPicture=Lhet kuva
submenu.user.userlinks=Muokkaa tietoja
submenu.user.edit=K\u00e4ytt\u00e4j\u00e4n tiedot
user.changePassword=Vaihda salasana
submenu.user.changePassword=Vaihda salasana
submenu.user.accountEvents=Tilitapahtumat
submenu.place.myGroups=Omat paikkavaraukset
submenu.place.insertToken=Sy\u00f6t\u00e4 paikkakoodi
submenu.user.manageuserlinks=Hallitse k\u00e4ytt\u00e4ji\u00e4
submenu.user.list=Kaikki k\u00e4ytt\u00e4j\u00e4t
submenu.user.create=Luo k\u00e4ytt\u00e4j\u00e4
submenu.user.rolelinks=Hallitse rooleja
submenu.role.list=Roolit
submenu.role.create=Luo rooli
submenu.user.listCardTemplates=Korttiryhm\u00e4t
submenu.user.createCardTemplate=Luo korttiryhm\u00e4
topmenu.game=Insomnia Game topmenu.game=Insomnia Game
topmenu.placemap=Paikkakartta
topmenu.poll=Kyselyt topmenu.poll=Kyselyt
topmenu.rfidshop=Staffshop topmenu.rfidshop=Staffshop
topmenu.shoppings=Kauppa
topmenu.usersPreferences=Omat tiedot
user.accountBalance=Tilin saldo user.accountBalance=Tilin saldo
user.accountEventHeader=Tilitapahtumat user.accountEventHeader=Tilitapahtumat
user.accountEvents=Tilitapahtumat
user.address=Osoite user.address=Osoite
user.bank=Pankki user.bank=Pankki
user.bankaccount=Pankkitili user.bankaccount=Pankkitili
user.changePassword=Vaihda salasana
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
...@@ -255,10 +282,8 @@ user.firstNames=Etunimi ...@@ -255,10 +282,8 @@ user.firstNames=Etunimi
user.hasImage=Kuva user.hasImage=Kuva
user.imagelist=Tallennetut kuvat user.imagelist=Tallennetut kuvat
user.imagesubmit=L\u00e4het\u00e4 kuva user.imagesubmit=L\u00e4het\u00e4 kuva
user.insertToken=Sy\u00f6t\u00e4 paikkakoodi
user.lastName=Sukunimi user.lastName=Sukunimi
user.login=K\u00e4ytt\u00e4j\u00e4tunnus user.login=K\u00e4ytt\u00e4j\u00e4tunnus
user.myGroups=Omat paikkavaraukset
user.nick=Nick user.nick=Nick
user.noAccountevents=Ei tilitapahtumia user.noAccountevents=Ei tilitapahtumia
user.noCurrentImage=Ei kuvaa user.noCurrentImage=Ei kuvaa
...@@ -271,7 +296,8 @@ user.realname=Nimi ...@@ -271,7 +296,8 @@ user.realname=Nimi
user.roles=Roolit user.roles=Roolit
user.rolesave=Tallenna roolit user.rolesave=Tallenna roolit
user.save=Tallenna user.save=Tallenna
user.sendPicture=Kuvan l\u00e4hetys user.sendPicture=Kuvan lhetys
sendPicture.header=Lhet kuva
user.sex.FEMALE=Nainen user.sex.FEMALE=Nainen
user.sex.MALE=Mies user.sex.MALE=Mies
user.sex.UNDEFINED=M\u00e4\u00e4rittelem\u00e4tt\u00e4 user.sex.UNDEFINED=M\u00e4\u00e4rittelem\u00e4tt\u00e4
...@@ -301,9 +327,13 @@ page.auth.logout.header=Uloskirjautuminen ...@@ -301,9 +327,13 @@ page.auth.logout.header=Uloskirjautuminen
page.bill.billSummary.header=Laskujen yhteenveto page.bill.billSummary.header=Laskujen yhteenveto
bill.markedPaid=Lasku merkitty maksetuksi. bill.markedPaid=Lasku merkitty maksetuksi.
page.product.createBill.header=Osta tuotteita page.product.createBill.header=Osta tuotteita
page.index.header=Etusivu
page.user.edit.header=Omat tiedot index.title=Etusivu
user.edit.title=K\u00e4ytt\u00e4j\u00e4n tiedot
user.changepassword.title=Vaihda salasana
user.changepassword.forUser=K\u00e4ytt\u00e4j\u00e4lle
page.place.placemap.header=Paikkakartta page.place.placemap.header=Paikkakartta
page.bill.list.header=Laskut page.bill.list.header=Laskut
page.bill.edit.header=Laskun tiedot page.bill.edit.header=Laskun tiedot
page.auth.logoutsuccess.header=Logout page.auth.logoutsuccess.header=Logout
...@@ -315,3 +345,15 @@ page.account.list.header=Tilitapahtumat ...@@ -315,3 +345,15 @@ page.account.list.header=Tilitapahtumat
applicationPermission.name=Oikeusryhm\u00e4 applicationPermission.name=Oikeusryhm\u00e4
applicationPermission.description=kuvaus applicationPermission.description=kuvaus
userlist.header=Etsi k\u00e4ytt\u00e4ji\u00e4
userlist.search=Etsi
pagination.results=Tuloksia
pagination.pages=Sivuja
pagination.firstpage=Ensimm\u00e4inen
pagination.previouspage=Edellinen
pagination.nextpage=Seuraava
pagination.lastpage=Viimeinen
page.bill.edit.pagegroup=rai
page.bill.billSummary.pagegroup=asdasd
page.bill.placemap.pagegroup=
page.bill.listAll.pagegroup=
page.permissionDenied.pagegroup=
#Default Category
page.permissionDenied.pagegroup=frontpage
page.bill.placemap.pagegroup=placemap
page.bill.listAll.pagegroup=shop
page.bill.edit.pagegroup=shop
page.bill.billSummary.pagegroup=shop
...@@ -24,10 +24,10 @@ public class PlaceGroupPdf extends HttpServlet { ...@@ -24,10 +24,10 @@ public class PlaceGroupPdf extends HttpServlet {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@EJB @EJB
private PlaceGroupBeanLocal pgbean; private transient PlaceGroupBeanLocal pgbean;
@EJB @EJB
private PermissionBeanLocal permbean; private transient PermissionBeanLocal permbean;
private static final Logger logger = LoggerFactory.getLogger(PlaceGroupPdf.class); private static final Logger logger = LoggerFactory.getLogger(PlaceGroupPdf.class);
/** /**
......
...@@ -45,10 +45,10 @@ public class PlaceMap extends HttpServlet { ...@@ -45,10 +45,10 @@ public class PlaceMap extends HttpServlet {
*/ */
private static final long serialVersionUID = 8769688627918936258L; private static final long serialVersionUID = 8769688627918936258L;
@EJB @EJB
private PlaceMapBeanLocal placemapBean; private transient PlaceMapBeanLocal placemapBean;
@EJB @EJB
private PermissionBeanLocal permbean; private transient PermissionBeanLocal permbean;
private static final String PARAMETER_EVENT_MAP_ID = "mapid"; private static final String PARAMETER_EVENT_MAP_ID = "mapid";
...@@ -104,11 +104,11 @@ public class PlaceMap extends HttpServlet { ...@@ -104,11 +104,11 @@ public class PlaceMap extends HttpServlet {
* () + "</h1>"); out.println("</body>"); out.println("</html>"); * () + "</h1>"); out.println("</body>"); out.println("</html>");
*/ */
} catch (PermissionDeniedException e) { } catch (PermissionDeniedException e) {
logger.debug("Permission denied. Returning SC_NOT_FOUND!"); logger.debug("Permission denied. Returning SC_FORBIDDEN!");
response.setContentType("text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8");
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_FORBIDDEN);
ostream = response.getOutputStream(); ostream = response.getOutputStream();
ostream.print("Permission denied!"); ostream.print("Error 403 \nPermission denied! Please login before accessing resource");
} finally { } finally {
if (ostream != null) { if (ostream != null) {
ostream.close(); ostream.close();
...@@ -229,6 +229,10 @@ public class PlaceMap extends HttpServlet { ...@@ -229,6 +229,10 @@ public class PlaceMap extends HttpServlet {
private static final int BORDER_WIDTH = 2; private static final int BORDER_WIDTH = 2;
private static void drawPlace(Place p, Graphics2D g, User user) { private static void drawPlace(Place p, Graphics2D g, User user) {
if (p.isDisabled())
{
return;
}
Color color = null; Color color = null;
if (!p.isBuyable()) { if (!p.isBuyable()) {
color = LOCKED_COLOR; color = LOCKED_COLOR;
...@@ -251,5 +255,4 @@ public class PlaceMap extends HttpServlet { ...@@ -251,5 +255,4 @@ public class PlaceMap extends HttpServlet {
g.fill(new Rectangle(p.getMapX() + BORDER_WIDTH, p.getMapY() + BORDER_WIDTH, p.getWidth() - BORDER_WIDTH, p.getHeight() - BORDER_WIDTH)); g.fill(new Rectangle(p.getMapX() + BORDER_WIDTH, p.getMapY() + BORDER_WIDTH, p.getWidth() - BORDER_WIDTH, p.getHeight() - BORDER_WIDTH));
} }
} }
} }
...@@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream; ...@@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
...@@ -24,9 +25,9 @@ public class PrintBill extends HttpServlet { ...@@ -24,9 +25,9 @@ public class PrintBill extends HttpServlet {
private static final String BILL_ID = "billid"; private static final String BILL_ID = "billid";
@EJB @EJB
private BillBeanLocal billentity; private transient BillBeanLocal billentity;
@EJB @EJB
private EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
/** /**
* @see HttpServlet#HttpServlet() * @see HttpServlet#HttpServlet()
...@@ -47,10 +48,9 @@ public class PrintBill extends HttpServlet { ...@@ -47,10 +48,9 @@ public class PrintBill extends HttpServlet {
private void ouput(HttpServletRequest request, HttpServletResponse response) throws IOException { private void ouput(HttpServletRequest request, HttpServletResponse response) throws IOException {
Integer billid = ServletUtils.getIntegerParameter(request, BILL_ID);
Bill bill;
try { try {
bill = billentity.findById(billid); Integer billid = ServletUtils.getIntegerParameter(request, BILL_ID);
Bill bill = billentity.findById(billid);
if (bill == null) { if (bill == null) {
return; return;
...@@ -66,9 +66,14 @@ public class PrintBill extends HttpServlet { ...@@ -66,9 +66,14 @@ public class PrintBill extends HttpServlet {
ServletOutputStream ostream = response.getOutputStream(); ServletOutputStream ostream = response.getOutputStream();
billstream.writeTo(ostream); billstream.writeTo(ostream);
ostream.close(); ostream.close();
return;
} catch (EJBAccessException e) {
} catch (PermissionDeniedException e) { } catch (PermissionDeniedException e) {
response.getWriter().println("Permission denied!");
} }
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.getWriter().println("ERROR 403\nPermission denied! Please login before trying to access resource.");
} }
/** /**
......
...@@ -49,12 +49,12 @@ public class UploadServlet extends HttpServlet { ...@@ -49,12 +49,12 @@ public class UploadServlet extends HttpServlet {
} }
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
@EJB @EJB
private EventMapBeanLocal eventmapbean; private transient EventMapBeanLocal eventmapbean;
@EJB @EJB
private UtilBeanLocal utilbean; private transient UtilBeanLocal utilbean;
/** /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
...@@ -73,20 +73,26 @@ public class UploadServlet extends HttpServlet { ...@@ -73,20 +73,26 @@ public class UploadServlet extends HttpServlet {
String contenttype = ""; String contenttype = "";
byte[] imagedata = null; byte[] imagedata = null;
int destId = 0; Integer destId = 0;
String description = ""; String description = "";
String filename = ""; String filename = "";
String idstr = request.getParameter("id"); String idstr = request.getParameter("id");
if (idstr != null) { if (idstr != null) {
destId = Integer.parseInt(idstr); try {
destId = Integer.parseInt(idstr);
} catch (NumberFormatException e)
{
logger.warn("Could not parse ID from string: {}", idstr);
destId = null;
}
} }
for (Object ti : upload.parseRequest(request)) { for (Object ti : upload.parseRequest(request)) {
if (ti instanceof FileItem) { if (ti instanceof FileItem) {
FileItem fi = (FileItem) ti; FileItem fi = (FileItem) ti;
if (fi.getFieldName().equals("id")) { if (fi.getFieldName().equals("id") && !fi.getString().isEmpty()) {
logger.debug("Parsing int {}", fi.getString()); logger.debug("Parsing int {}", fi.getString());
destId = Integer.parseInt(fi.getString()); destId = Integer.parseInt(fi.getString());
......
...@@ -46,7 +46,7 @@ public class UserImageServlet extends HttpServlet { ...@@ -46,7 +46,7 @@ public class UserImageServlet extends HttpServlet {
} }
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
/** /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
......
...@@ -24,6 +24,7 @@ public abstract class GenericCDIView implements Serializable { ...@@ -24,6 +24,7 @@ public abstract class GenericCDIView implements Serializable {
private static final long serialVersionUID = -4000065015178815761L; private static final long serialVersionUID = -4000065015178815761L;
@Inject @Inject
private Conversation conversation; private Conversation conversation;
private static final Logger logger = LoggerFactory.getLogger(GenericCDIView.class); private static final Logger logger = LoggerFactory.getLogger(GenericCDIView.class);
@Inject @Inject
...@@ -46,18 +47,23 @@ public abstract class GenericCDIView implements Serializable { ...@@ -46,18 +47,23 @@ public abstract class GenericCDIView implements Serializable {
} }
public boolean hasPermission(IAppPermission perm) {
// boolean ret =
// FacesContext.getCurrentInstance().getExternalContext().isUserInRole(perm.getFullName());
return permbean.hasPermission(perm);
}
protected boolean requirePermissions(IAppPermission perm, boolean... externalChecks) { protected boolean requirePermissions(IAppPermission perm, boolean... externalChecks) {
boolean[] perms = new boolean[externalChecks.length + 1]; boolean ret = requirePermissions(hasPermission(perm));
perms[0] = permbean.hasPermission(perm); if (ret && externalChecks.length > 0) {
if (externalChecks.length == 0) { ret = requirePermissions(externalChecks);
System.arraycopy(externalChecks, 0, perms, 1, externalChecks.length);
} }
boolean ret = requirePermissions(perms);
if (!ret) { if (!ret) {
logger.info("Permission required failed for {} / {}", perm.getParent(), perm); logger.info("Permission required failed for {}", perm.getFullName());
} }
return ret; return ret;
} }
......
...@@ -32,16 +32,16 @@ public class MapManageView extends GenericCDIView { ...@@ -32,16 +32,16 @@ public class MapManageView extends GenericCDIView {
private static final long serialVersionUID = -3276250982780044688L; private static final long serialVersionUID = -3276250982780044688L;
private static final Logger logger = LoggerFactory.getLogger(MapManageView.class); private static final Logger logger = LoggerFactory.getLogger(MapManageView.class);
@EJB @EJB
private UserBeanLocal userBean; private transient UserBeanLocal userBean;
@EJB @EJB
private EventBeanLocal eventBean; private transient EventBeanLocal eventBean;
@EJB @EJB
private EventMapBeanLocal eventmapBean; private transient EventMapBeanLocal eventmapBean;
@EJB @EJB
private PlaceBeanLocal placebean; private transient PlaceBeanLocal placebean;
@EJB @EJB
private ProductBeanLocal productbean; private transient ProductBeanLocal productbean;
private List<EventMap> eventmaps; private List<EventMap> eventmaps;
private EventMap map; private EventMap map;
private String mapname; private String mapname;
...@@ -113,7 +113,7 @@ public class MapManageView extends GenericCDIView { ...@@ -113,7 +113,7 @@ public class MapManageView extends GenericCDIView {
public void generatePlaces() { public void generatePlaces() {
String[] tablenames = getNamebase().split(";"); String[] tablenames = getNamebase().split(";");
List<Place> mapplaces = map.getPlaces(); List<Place> mapplaces = map.getPlaces();
logger.debug("places in map before {}", mapplaces.size());
if (mapplaces == null || mapplaces.isEmpty()) { if (mapplaces == null || mapplaces.isEmpty()) {
mapplaces = new ArrayList<Place>(); mapplaces = new ArrayList<Place>();
map.setPlaces(mapplaces); map.setPlaces(mapplaces);
......
...@@ -28,7 +28,7 @@ public class MapView extends GenericCDIView { ...@@ -28,7 +28,7 @@ public class MapView extends GenericCDIView {
private static final long serialVersionUID = 2374905512998240551L; private static final long serialVersionUID = 2374905512998240551L;
@EJB @EJB
private PlaceMapBeanLocal placeMapBean; private transient PlaceMapBeanLocal placeMapBean;
@Inject @Inject
@SelectedUser @SelectedUser
...@@ -37,9 +37,9 @@ public class MapView extends GenericCDIView { ...@@ -37,9 +37,9 @@ public class MapView extends GenericCDIView {
private EventMap activeMap; private EventMap activeMap;
@EJB @EJB
private PlaceBeanLocal placeBean; private transient PlaceBeanLocal placeBean;
@EJB @EJB
private EventBeanLocal eventBean; private transient EventBeanLocal eventBean;
private static final Logger logger = LoggerFactory.getLogger(MapView.class); private static final Logger logger = LoggerFactory.getLogger(MapView.class);
...@@ -58,13 +58,20 @@ public class MapView extends GenericCDIView { ...@@ -58,13 +58,20 @@ public class MapView extends GenericCDIView {
return placeBean.totalReservationPrice(user, null); return placeBean.totalReservationPrice(user, null);
} }
public String releaseUsersPlaces() throws PermissionDeniedException { public Long getPlacesLeftToSelect() {
placeBean.releaseUsersPlaces(user); Long ret = placeMapBean.selectablePlaceCount(getActiveMap());
return ""; logger.info("Got {} places left for map {}", ret, getActiveMap());
return ret;
} }
public Long placeLeftToSelect() { public Long getAvailablePlaces()
return placeMapBean.selectablePlaceCount(getActiveMap()); {
Long ret = placeMapBean.availablePlaceCount(getActiveMap());
logger.info("Got {} availbale places for map {}", ret, getActiveMap());
return ret;
} }
......
...@@ -39,9 +39,9 @@ public class PlaceView extends GenericCDIView { ...@@ -39,9 +39,9 @@ public class PlaceView extends GenericCDIView {
private Place place; private Place place;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
@EJB @EJB
private PlaceBeanLocal placebean; private transient PlaceBeanLocal placebean;
@Inject @Inject
@SelectedUser @SelectedUser
...@@ -50,7 +50,7 @@ public class PlaceView extends GenericCDIView { ...@@ -50,7 +50,7 @@ public class PlaceView extends GenericCDIView {
private EventMap currentMap; private EventMap currentMap;
private String searchuser; private String searchuser;
private ListDataModel<User> userlist; private transient ListDataModel<User> userlist;
public boolean canEdit() { public boolean canEdit() {
return permbean.hasPermission(MapPermission.MANAGE_MAPS); return permbean.hasPermission(MapPermission.MANAGE_MAPS);
...@@ -62,7 +62,6 @@ public class PlaceView extends GenericCDIView { ...@@ -62,7 +62,6 @@ public class PlaceView extends GenericCDIView {
return "/place/myGroups"; return "/place/myGroups";
} catch (BortalCatchableException e) { } catch (BortalCatchableException e) {
addFaceMessage("mapView.errorWhileBuyingPlaces"); addFaceMessage("mapView.errorWhileBuyingPlaces");
placebean.releaseUsersPlaces(user);
} }
return null; return null;
} }
...@@ -167,6 +166,7 @@ public class PlaceView extends GenericCDIView { ...@@ -167,6 +166,7 @@ public class PlaceView extends GenericCDIView {
public String save() { public String save() {
placebean.mergeChanges(place); placebean.mergeChanges(place);
super.addFaceMessage("place.saved");
return null; return null;
} }
......
...@@ -31,18 +31,19 @@ public class PlacegroupView extends GenericCDIView { ...@@ -31,18 +31,19 @@ public class PlacegroupView extends GenericCDIView {
@Inject @Inject
@SelectedUser @SelectedUser
private User user; private User user;
@EJB @EJB
private PlaceGroupBeanLocal placegroupBean; private transient PlaceGroupBeanLocal placegroupBean;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
private Place place; private Place place;
private PlaceGroup group; private PlaceGroup group;
private ListDataModel<PlaceGroup> placegroups; private transient ListDataModel<PlaceGroup> placegroups;
private ListDataModel<Place> placelist; private transient ListDataModel<Place> placelist;
private ListDataModel<GroupMembership> memberlist; private transient ListDataModel<GroupMembership> memberlist;
public String editGroup() { public String editGroup() {
setGroup(placegroups.getRowData()); setGroup(placegroups.getRowData());
...@@ -68,15 +69,17 @@ public class PlacegroupView extends GenericCDIView { ...@@ -68,15 +69,17 @@ public class PlacegroupView extends GenericCDIView {
public String releasePlace() throws PermissionDeniedException { public String releasePlace() throws PermissionDeniedException {
GroupMembership row = memberlist.getRowData(); GroupMembership row = memberlist.getRowData();
if (row != null && (permbean.isCurrentUser(row.getPlaceGroup().getCreator()) || if (row != null)
permbean.hasPermission(MapPermission.MANAGE_OTHERS))) { {
placegroupBean.releaseAndGenerateToken(row); if (permbean.isCurrentUser(row.getPlaceGroup().getCreator()) ||
this.addFaceMessage("placegroupview.placeReleased", row.getPlaceReservation().getName()); permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
} else { placegroupBean.releaseAndGenerateToken(row);
this.addFaceMessage("placegroupview.placeReleaseFailed", row.getPlaceReservation().getName()); this.addFaceMessage("placegroupview.placeReleased", row.getPlaceReservation().getName());
} else {
this.addFaceMessage("placegroupview.placeReleaseFailed", row.getPlaceReservation().getName());
}
} }
return null; return null;
} }
......
...@@ -25,7 +25,7 @@ public class TokenView extends GenericCDIView { ...@@ -25,7 +25,7 @@ public class TokenView extends GenericCDIView {
private User user; private User user;
@EJB @EJB
private PlaceGroupBeanLocal placegroupbean; private transient PlaceGroupBeanLocal placegroupbean;
public String saveToken() throws PermissionDeniedException { public String saveToken() throws PermissionDeniedException {
super.requirePermissions(); super.requirePermissions();
......
package fi.insomnia.bortal.web.cdiview.menu;
public class JsfMenuitem {
private final Menuitem item;
private boolean selected;
private final String text;
public JsfMenuitem(Menuitem item, String text) {
this.item = item;
this.text = text;
}
public MenuGroup getGroup() {
return item.getGroup();
}
public void setSelected() {
selected = true;
}
public boolean isSelected() {
return selected;
}
public String getOutcome() {
return item.getUrl();
}
public String getLinktext() {
return text;
}
public String getHeader() {
return item.getHeader();
}
public boolean isCid() {
return item.isCid();
}
}
package fi.insomnia.bortal.web.cdiview.menu;
import java.util.ArrayList;
import java.util.List;
public class MenuGroup {
private final List<Menuitem> items = new ArrayList<Menuitem>();
private final String groupname;
public MenuGroup(String name) {
groupname = name;
}
public void add(Menuitem menuitem) {
getItems().add(menuitem);
}
public String getGroupname() {
return groupname;
}
public List<Menuitem> getItems() {
return items;
}
}
package fi.insomnia.bortal.web.cdiview.menu;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
@RequestScoped
@Named
public class MenuView {
private static List<MenuGroup> PAGEGROUPS;
@Inject
private FacesContext context;
private String pagename;
@EJB
private PermissionBeanLocal permbean;
private ArrayList<JsfMenuitem> topmenu;
private ArrayList<JsfMenuitem> submenu;
private ResourceBundle rb;
private static final Map<String, Menuitem> PAGES;
private String localize(String key) {
String value = null;
try {
value = getResourcebundle().getString(key);
} catch (MissingResourceException e) {
value = null;
}
if (key == null) {
value = "########";
} else if (value == null) {
value = "???" + key + "???";
}
return value;
}
private ResourceBundle getResourcebundle() {
if (rb == null) {
rb = context.getApplication().getResourceBundle(context, "i18n");
}
return rb;
}
static {
Map<String, Menuitem> temppages = new HashMap<String, Menuitem>();
MenuGroup frontpage = new MenuGroup("frontpage");
MenuGroup user = new MenuGroup("user");
MenuGroup placemap = new MenuGroup("placemap");
MenuGroup shop = new MenuGroup("shop");
PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop));
addPage(temppages, "/index", frontpage, null);
addPage(temppages, "/user/create", frontpage, UserPermission.CREATE_NEW);
addPage(temppages, "/auth/sendResetMail", frontpage, UserPermission.LOGIN);
addPage(temppages, "/user/edit", user, UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks").setCid(true);
addPage(temppages, "/user/changePassword", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/user/accountEvents", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/place/myGroups", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/place/insertToken", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/user/sendPicture", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/user/list", user, UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
addPage(temppages, "/user/create", user, UserPermission.VIEW_ALL);
addPage(temppages, "/role/list", user, UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks");
addPage(temppages, "/role/create", user, UserPermission.WRITE_ROLES);
addPage(temppages, "/user/listCardTemplates", user, UserPermission.READ_ROLES);
addPage(temppages, "/user/createCardTemplate", user, UserPermission.WRITE_ROLES);
addPage(temppages, "/place/placemap", placemap, null);
addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL).setCid(true);
addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN).setCid(true);
PAGES = Collections.unmodifiableMap(temppages);
}
public String getPagename() {
if (pagename == null) {
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
String[] splitted = req.getServletPath().split("\\.");
if (splitted.length > 0) {
pagename = splitted[0];
}
}
return pagename;
}
private static Menuitem addPage(Map<String, Menuitem> temppages, String url, MenuGroup group, IAppPermission perm) {
Menuitem ret = new Menuitem(url, group, perm);
temppages.put(url, ret);
return ret;
}
public void setContext(FacesContext context) {
this.context = context;
}
public FacesContext getContext() {
return context;
}
public List<JsfMenuitem> getTopmenu() {
if (topmenu == null) {
topmenu = new ArrayList<JsfMenuitem>();
Menuitem currentPage = PAGES.get(getPagename());
MenuGroup currentGroup = null;
if (currentPage != null) {
currentGroup = currentPage.getGroup();
}
for (MenuGroup m : PAGEGROUPS) {
for (Menuitem item : m.getItems()) {
if (permbean.hasPermission(item.getPermission())) {
JsfMenuitem thisitem = new JsfMenuitem(item, this.localize(item, "menu"));
topmenu.add(thisitem);
if (m.equals(currentGroup)) {
thisitem.setSelected();
}
break;
}
}
}
}
return topmenu;
}
private String localize(Menuitem item, String prefix) {
StringBuilder sb = new StringBuilder(prefix);
for (String part : item.getUrl().split("/")) {
if (!part.isEmpty()) {
sb.append(".").append(part);
}
}
return localize(sb.toString());
}
public void setSubmenu(ArrayList<JsfMenuitem> submenu) {
this.submenu = submenu;
}
public ArrayList<JsfMenuitem> getSubmenu() {
if (submenu == null) {
Menuitem currentPage = PAGES.get(getPagename());
if (currentPage != null) {
MenuGroup currentGroup = currentPage.getGroup();
submenu = new ArrayList<JsfMenuitem>();
for (Menuitem item : currentGroup.getItems()) {
if (permbean.hasPermission(item.getPermission())) {
JsfMenuitem thisitem = new JsfMenuitem(item, localize(item, "submenu"));
submenu.add(thisitem);
if (currentPage.equals(item)) {
thisitem.setSelected();
}
}
}
}
}
return submenu;
}
}
package fi.insomnia.bortal.web.cdiview.menu;
import fi.insomnia.bortal.enums.apps.IAppPermission;
public class Menuitem {
private final String url;
private final MenuGroup group;
private final IAppPermission permission;
private String header;
private boolean cid = false;
public Menuitem(String url, MenuGroup group, IAppPermission perm) {
this.url = url;
this.permission = perm;
this.group = group;
group.add(this);
}
public String getUrl() {
return url;
}
public MenuGroup getGroup() {
return group;
}
public IAppPermission getPermission() {
return permission;
}
public Menuitem setHeader(String string) {
header = string;
return this;
}
public String getHeader() {
return header;
}
public void setCid(boolean val) {
this.cid = val;
}
public boolean isCid() {
return cid;
}
}
...@@ -21,7 +21,7 @@ public class NewsListView extends GenericCDIView { ...@@ -21,7 +21,7 @@ public class NewsListView extends GenericCDIView {
private static final long serialVersionUID = 1720809638296537794L; private static final long serialVersionUID = 1720809638296537794L;
@EJB @EJB
private NewsBeanLocal newsbean; private transient NewsBeanLocal newsbean;
private List<NewsGroup> newsgroups; private List<NewsGroup> newsgroups;
......
...@@ -13,7 +13,7 @@ public class NewsView extends GenericCDIView { ...@@ -13,7 +13,7 @@ public class NewsView extends GenericCDIView {
private static final long serialVersionUID = 4141547312297765524L; private static final long serialVersionUID = 4141547312297765524L;
@EJB @EJB
private NewsBeanLocal newsbean; private transient NewsBeanLocal newsbean;
private NewsGroup group; private NewsGroup group;
......
...@@ -19,7 +19,7 @@ public class NewsgroupView extends GenericCDIView { ...@@ -19,7 +19,7 @@ public class NewsgroupView extends GenericCDIView {
private static final long serialVersionUID = 1752803732191587695L; private static final long serialVersionUID = 1752803732191587695L;
private int newsgroupid; private int newsgroupid;
@EJB @EJB
private NewsBeanLocal newsbean; private transient NewsBeanLocal newsbean;
private NewsGroup newsgroup; private NewsGroup newsgroup;
public void initView() { public void initView() {
......
...@@ -21,9 +21,9 @@ public class EventOrgView extends GenericCDIView { ...@@ -21,9 +21,9 @@ public class EventOrgView extends GenericCDIView {
private static final long serialVersionUID = -1351272199807699797L; private static final long serialVersionUID = -1351272199807699797L;
@EJB @EJB
private EventOrganiserBeanLocal eventorgbean; private transient EventOrganiserBeanLocal eventorgbean;
@EJB @EJB
private EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
@LoggedIn @LoggedIn
@Inject @Inject
......
...@@ -27,7 +27,7 @@ public class PollView extends GenericCDIView { ...@@ -27,7 +27,7 @@ public class PollView extends GenericCDIView {
private static final long serialVersionUID = -7636682120192671958L; private static final long serialVersionUID = -7636682120192671958L;
@EJB @EJB
private PollBeanLocal pollBean; private transient PollBeanLocal pollBean;
private List<Poll> polls; private List<Poll> polls;
private HashMap<Integer, List<QuestionWrapper>> pages; private HashMap<Integer, List<QuestionWrapper>> pages;
...@@ -128,7 +128,7 @@ public class PollView extends GenericCDIView { ...@@ -128,7 +128,7 @@ public class PollView extends GenericCDIView {
return pages; return pages;
} }
public class QuestionWrapper { public static class QuestionWrapper {
private PollQuestion question; private PollQuestion question;
private ArrayList<PollAnswer> answers; private ArrayList<PollAnswer> answers;
......
...@@ -23,7 +23,7 @@ public class BillEditView extends GenericCDIView { ...@@ -23,7 +23,7 @@ public class BillEditView extends GenericCDIView {
private Bill bill; private Bill bill;
@EJB @EJB
private BillBeanLocal billbean; private transient BillBeanLocal billbean;
public void initView() throws PermissionDeniedException { public void initView() throws PermissionDeniedException {
if (this.requirePermissions(permbean.isLoggedIn())) { if (this.requirePermissions(permbean.isLoggedIn())) {
......
...@@ -29,9 +29,9 @@ public class BillListView extends GenericCDIView { ...@@ -29,9 +29,9 @@ public class BillListView extends GenericCDIView {
private User user; private User user;
@EJB @EJB
private BillBeanLocal billbean; private transient BillBeanLocal billbean;
private ListDataModel<Bill> bills; private transient ListDataModel<Bill> bills;
private boolean writeBill; private boolean writeBill;
...@@ -44,7 +44,7 @@ public class BillListView extends GenericCDIView { ...@@ -44,7 +44,7 @@ public class BillListView extends GenericCDIView {
} }
public void initUsersBills() { public void initUsersBills() {
if (requirePermissions(permbean.isLoggedIn())) { if (requirePermissions(BillPermission.VIEW_OWN, permbean.isLoggedIn())) {
beginConversation(); beginConversation();
bills = new ListDataModel<Bill>(user.getBills()); bills = new ListDataModel<Bill>(user.getBills());
writeBill = permbean.hasPermission(BillPermission.WRITE_ALL); writeBill = permbean.hasPermission(BillPermission.WRITE_ALL);
...@@ -79,4 +79,8 @@ public class BillListView extends GenericCDIView { ...@@ -79,4 +79,8 @@ public class BillListView extends GenericCDIView {
public boolean canWriteBill() { public boolean canWriteBill() {
return writeBill; return writeBill;
} }
public boolean canReadAllBills() {
return permbean.hasPermission(BillPermission.READ_ALL);
}
} }
...@@ -24,7 +24,7 @@ public class DiscountView extends GenericCDIView { ...@@ -24,7 +24,7 @@ public class DiscountView extends GenericCDIView {
private Discount discount; private Discount discount;
@EJB @EJB
private ProductBeanLocal prodbean; private transient ProductBeanLocal prodbean;
public void initEditView() { public void initEditView() {
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && discount == null) { if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && discount == null) {
...@@ -57,4 +57,44 @@ public class DiscountView extends GenericCDIView { ...@@ -57,4 +57,44 @@ public class DiscountView extends GenericCDIView {
return "/product/editDiscount"; return "/product/editDiscount";
} }
public Integer getDiscountid() {
return discountid;
}
public void setDiscountid(Integer discountid) {
this.discountid = discountid;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Discount getDiscount() {
return discount;
}
public void setDiscount(Discount discount) {
this.discount = discount;
}
public ProductBeanLocal getProdbean() {
return prodbean;
}
public void setProdbean(ProductBeanLocal prodbean) {
this.prodbean = prodbean;
}
} }
...@@ -22,7 +22,7 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -22,7 +22,7 @@ public class InviteAcceptView extends GenericCDIView {
private User user; private User user;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
public String createUser() { public String createUser() {
GroupMembership gm = userbean.findToken(token); GroupMembership gm = userbean.findToken(token);
......
...@@ -16,7 +16,7 @@ public class InviteView extends GenericCDIView { ...@@ -16,7 +16,7 @@ public class InviteView extends GenericCDIView {
private String invitemail; private String invitemail;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
public String invite() { public String invite() {
boolean ret = userbean.invite(invitemail); boolean ret = userbean.invite(invitemail);
......
...@@ -28,7 +28,7 @@ public class ProductListView extends GenericCDIView implements IPaginationView { ...@@ -28,7 +28,7 @@ public class ProductListView extends GenericCDIView implements IPaginationView {
private long pagecount; private long pagecount;
@EJB @EJB
private ProductBeanLocal prodbean; private transient ProductBeanLocal prodbean;
public void initView() { public void initView() {
if (super.requirePermissions(ShopPermission.LIST_ALL_PRODUCTS)) { if (super.requirePermissions(ShopPermission.LIST_ALL_PRODUCTS)) {
......
...@@ -33,31 +33,34 @@ public class ProductShopView extends GenericCDIView { ...@@ -33,31 +33,34 @@ public class ProductShopView extends GenericCDIView {
*/ */
private static final long serialVersionUID = 1288114954999406683L; private static final long serialVersionUID = 1288114954999406683L;
@EJB @EJB
private ProductBeanLocal productBean; private transient ProductBeanLocal productBean;
@EJB @EJB
private BillBeanLocal billbean; private transient BillBeanLocal billbean;
@EJB @EJB
private EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
@Inject @Inject
@SelectedUser @SelectedUser
private User user; private User user;
private boolean payInstant; private boolean payInstant;
private ListDataModel<ProductShopItem> shoppingcart; private transient ListDataModel<ProductShopItem> shoppingcart;
public void initView() { public void initView() {
boolean ok = true; boolean ok = true;
if (!permbean.isCurrentUser(user)) { if (!permbean.isCurrentUser(user)) {
ok = requirePermissions(ShopPermission.SHOP_TO_OTHERS); ok = requirePermissions(ShopPermission.SHOP_TO_OTHERS);
} }
if (ok) { if (ok && shoppingcart == null) {
if (permbean.hasPermission(ShopPermission.LIST_ALL_PRODUCTS)) { if (permbean.hasPermission(ShopPermission.LIST_ALL_PRODUCTS)) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.getProducts())); shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.getProducts()));
} else if (requirePermissions(ShopPermission.LIST_USERPRODUCTS)) { } else if (requirePermissions(ShopPermission.LIST_USERPRODUCTS)) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts())); shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
} }
logger.info("Initialized shoppingcart to {}", shoppingcart);
this.beginConversation(); this.beginConversation();
} }
} }
......
...@@ -17,9 +17,9 @@ public class ProductView extends GenericCDIView { ...@@ -17,9 +17,9 @@ public class ProductView extends GenericCDIView {
private static final long serialVersionUID = -7042949133729016773L; private static final long serialVersionUID = -7042949133729016773L;
@EJB @EJB
private EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
@EJB @EJB
private ProductBeanLocal prodbean; private transient ProductBeanLocal prodbean;
private Product product; private Product product;
......
...@@ -22,7 +22,7 @@ public class ReaderView extends GenericCDIView { ...@@ -22,7 +22,7 @@ public class ReaderView extends GenericCDIView {
private String readername; private String readername;
@Inject @Inject
private RfidContainer container; private transient RfidContainer container;
public void initView() { public void initView() {
super.requirePermissions(permbean.hasPermission(ShopPermission.SHOP_TO_OTHERS)); super.requirePermissions(permbean.hasPermission(ShopPermission.SHOP_TO_OTHERS));
......
...@@ -24,10 +24,10 @@ public class RfidView extends GenericCDIView { ...@@ -24,10 +24,10 @@ public class RfidView extends GenericCDIView {
private String hash; private String hash;
@EJB @EJB
private ReaderBeanLocal readerbean; private transient ReaderBeanLocal readerbean;
@Inject @Inject
private RfidContainer container; private transient RfidContainer container;
private static final Logger logger = LoggerFactory.getLogger(RfidView.class); private static final Logger logger = LoggerFactory.getLogger(RfidView.class);
......
...@@ -19,7 +19,7 @@ public class AccountEventView extends GenericCDIView { ...@@ -19,7 +19,7 @@ public class AccountEventView extends GenericCDIView {
private static final long serialVersionUID = -1873486276276870190L; private static final long serialVersionUID = -1873486276276870190L;
@EJB @EJB
private AccountEventBeanLocal accounteventbean; private transient AccountEventBeanLocal accounteventbean;
@EJB @EJB
private AccountEvent accountevent; private AccountEvent accountevent;
private int accountid; private int accountid;
......
...@@ -20,6 +20,9 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView; ...@@ -20,6 +20,9 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
@RequestScoped @RequestScoped
public class AuthView extends GenericCDIView { public class AuthView extends GenericCDIView {
private static final long serialVersionUID = -124938035666457802L;
private static final Logger logger = LoggerFactory.getLogger(AuthView.class); private static final Logger logger = LoggerFactory.getLogger(AuthView.class);
private String login; private String login;
...@@ -31,10 +34,10 @@ public class AuthView extends GenericCDIView { ...@@ -31,10 +34,10 @@ public class AuthView extends GenericCDIView {
private HttpServletRequest getRequest() { private HttpServletRequest getRequest() {
FacesContext facesContext = FacesContext.getCurrentInstance(); FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext. ExternalContext externalContext = facesContext.
getExternalContext(); getExternalContext();
Object request = externalContext.getRequest(); Object request = externalContext.getRequest();
return request instanceof HttpServletRequest ? return request instanceof HttpServletRequest ?
(HttpServletRequest) request : null; (HttpServletRequest) request : null;
} }
public void executeLogout() { public void executeLogout() {
......
...@@ -29,7 +29,7 @@ public class PasswordResetView extends GenericCDIView { ...@@ -29,7 +29,7 @@ public class PasswordResetView extends GenericCDIView {
private String mailuser; private String mailuser;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(PasswordResetView.class); private static final Logger logger = LoggerFactory.getLogger(PasswordResetView.class);
public void initView() { public void initView() {
......
...@@ -26,7 +26,7 @@ public class PasswordView extends GenericCDIView { ...@@ -26,7 +26,7 @@ public class PasswordView extends GenericCDIView {
private User user; private User user;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
private String password; private String password;
private String passwordcheck; private String passwordcheck;
......
...@@ -16,9 +16,9 @@ public class RoleDataView extends GenericCDIView { ...@@ -16,9 +16,9 @@ public class RoleDataView extends GenericCDIView {
private static final long serialVersionUID = -5165373936500592099L; private static final long serialVersionUID = -5165373936500592099L;
@EJB @EJB
private RoleBeanLocal rolebean; private transient RoleBeanLocal rolebean;
private ListDataModel<Role> roles; private transient ListDataModel<Role> roles;
public ListDataModel<Role> getRoles() { public ListDataModel<Role> getRoles() {
if (roles == null) { if (roles == null) {
......
...@@ -34,12 +34,12 @@ public class RoleView extends GenericCDIView { ...@@ -34,12 +34,12 @@ public class RoleView extends GenericCDIView {
private static final long serialVersionUID = -5165373936500592099L; private static final long serialVersionUID = -5165373936500592099L;
private Role role; private Role role;
private int roleid; private Integer roleid;
@EJB @EJB
private RoleBeanLocal rolebean; private transient RoleBeanLocal rolebean;
@EJB @EJB
private EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
private ArrayList<BortalApplicationWrapper> rolePermissions; private ArrayList<BortalApplicationWrapper> rolePermissions;
...@@ -69,9 +69,11 @@ public class RoleView extends GenericCDIView { ...@@ -69,9 +69,11 @@ public class RoleView extends GenericCDIView {
} }
public void initViewFromId() { public void initViewFromId() {
if (requirePermissions(permbean.hasPermission(UserPermission.READ_ROLES)) && role == null) { if (requirePermissions(UserPermission.READ_ROLES, roleid != null)
&& role == null) {
super.beginConversation(); super.beginConversation();
setRole(rolebean.find(getRoleid())); setRole(rolebean.find(getRoleid()));
logger.debug("Initialized role: {} from id ", getRole(), getRoleid()); logger.debug("Initialized role: {} from id ", getRole(), getRoleid());
} }
} }
...@@ -148,11 +150,11 @@ public class RoleView extends GenericCDIView { ...@@ -148,11 +150,11 @@ public class RoleView extends GenericCDIView {
return rolebean.getPossibleParents(getRole()); return rolebean.getPossibleParents(getRole());
} }
public void setRoleid(int roleid) { public void setRoleid(Integer roleid) {
this.roleid = roleid; this.roleid = roleid;
} }
public int getRoleid() { public Integer getRoleid() {
return roleid; return roleid;
} }
......
...@@ -26,7 +26,7 @@ public class UserSearchView extends PaginationView<User> implements IPaginationV ...@@ -26,7 +26,7 @@ public class UserSearchView extends PaginationView<User> implements IPaginationV
// private String search; // private String search;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
// private ListDataModel<User> users; // private ListDataModel<User> users;
......
...@@ -27,7 +27,7 @@ public class UserValidator implements Serializable { ...@@ -27,7 +27,7 @@ public class UserValidator implements Serializable {
private static final long serialVersionUID = 8081093389856720678L; private static final long serialVersionUID = 8081093389856720678L;
private static final Integer PASSWORD_MIN_LENGTH = 8; private static final Integer PASSWORD_MIN_LENGTH = 8;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(UserValidator.class); private static final Logger logger = LoggerFactory.getLogger(UserValidator.class);
public void login(FacesContext context, UIComponent ui, Object object) { public void login(FacesContext context, UIComponent ui, Object object) {
......
package fi.insomnia.bortal.web.cdiview.user; package fi.insomnia.bortal.web.cdiview.user;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.enterprise.inject.Produces; import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -26,10 +28,20 @@ public class UserView extends GenericCDIView { ...@@ -26,10 +28,20 @@ public class UserView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(UserView.class); private static final Logger logger = LoggerFactory.getLogger(UserView.class);
private static final long serialVersionUID = 7724348195373468017L; private static final long serialVersionUID = 7724348195373468017L;
@EJB @EJB
private UserBeanLocal userbean; private transient UserBeanLocal userbean;
private int userid; private Integer userid;
private User user; private User user;
@Inject
private transient Conversation conversation;
public String getConversationId() {
if (conversation != null)
{
return conversation.getId();
}
return null;
}
private boolean canSave = false; private boolean canSave = false;
private String password; private String password;
...@@ -45,7 +57,7 @@ public class UserView extends GenericCDIView { ...@@ -45,7 +57,7 @@ public class UserView extends GenericCDIView {
@SelectedUser @SelectedUser
public User getSelectedUser() { public User getSelectedUser() {
if (user == null) { if (user == null) {
if (userid > 0 && permbean.hasPermission(UserPermission.VIEW_ALL)) { if (userid != null && permbean.hasPermission(UserPermission.VIEW_ALL)) {
user = userbean.findById(userid); user = userbean.findById(userid);
} else { } else {
user = getCurrentUser(); user = getCurrentUser();
...@@ -55,7 +67,7 @@ public class UserView extends GenericCDIView { ...@@ -55,7 +67,7 @@ public class UserView extends GenericCDIView {
} }
public void initCreateView() { public void initCreateView() {
if (super.requirePermissions(permbean.hasPermission(UserPermission.CREATE_NEW))) { if (super.requirePermissions(UserPermission.CREATE_NEW)) {
user = new User(); user = new User();
super.beginConversation(); super.beginConversation();
} }
...@@ -67,7 +79,11 @@ public class UserView extends GenericCDIView { ...@@ -67,7 +79,11 @@ public class UserView extends GenericCDIView {
* Require logged in user AND userid is own userid OR has enought bits. * Require logged in user AND userid is own userid OR has enought bits.
* permissions. * permissions.
*/ */
if (super.requirePermissions(UserPermission.VIEW_SELF)) { if (user != null && userid != null && !user.getId().equals(userid)) {
user = null;
}
if (super.requirePermissions(UserPermission.VIEW_SELF) && user == null) {
getSelectedUser(); getSelectedUser();
canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY); canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY);
this.beginConversation(); this.beginConversation();
...@@ -96,11 +112,11 @@ public class UserView extends GenericCDIView { ...@@ -96,11 +112,11 @@ public class UserView extends GenericCDIView {
return "/user/created"; return "/user/created";
} }
public void setUserid(int userid) { public void setUserid(Integer userid) {
this.userid = userid; this.userid = userid;
} }
public int getUserid() { public Integer getUserid() {
return userid; return userid;
} }
......
...@@ -31,7 +31,7 @@ public class ProductConverter implements Converter { ...@@ -31,7 +31,7 @@ public class ProductConverter implements Converter {
String ret = ""; String ret = "";
if (value != null && value instanceof Product) { if (value != null && value instanceof Product) {
ret = ((Product) value).getId().getId().toString(); ret = ((Product) value).getId().toString();
} }
return ret; return ret;
} }
......
...@@ -21,13 +21,33 @@ public class LayoutView { ...@@ -21,13 +21,33 @@ public class LayoutView {
@Inject @Inject
private FacesContext context; private FacesContext context;
private ResourceBundle rb; private ResourceBundle rb;
private String pagename; private String pagename_priv;
private String pagegroup;
private static final Logger logger = LoggerFactory.getLogger(LayoutView.class); private static final Logger logger = LoggerFactory.getLogger(LayoutView.class);
public void init() { public void init() {
logger.info("Initialized layoutView"); logger.info("Initialized layoutView");
} }
public boolean isPagegroup(String check) {
return getPagegroup() != null && check.equals(pagegroup);
}
private String getPagegroup() {
if (pagegroup == null) {
pagegroup = localize(getPagename() + ".pagegroup");
if (pagegroup == null) {
pagegroup = "default";
}
}
return pagegroup;
}
public String getPagename() {
return "page.user.create";
}
private String localize(String key) { private String localize(String key) {
String value = null; String value = null;
try { try {
...@@ -53,11 +73,10 @@ public class LayoutView { ...@@ -53,11 +73,10 @@ public class LayoutView {
return rb; return rb;
} }
public String getHeader(String page) { public String getHeader() {
this.pagename = page;
return new StringBuilder().append(localize("global.eventname")).append(" - ") return new StringBuilder().append(localize("global.eventname")).append(" - ")
.append(localize(new StringBuilder(page).append(".header").toString())).toString(); .append(localize(new StringBuilder(getPagename()).append(".header").toString())).toString();
} }
......
...@@ -22,7 +22,6 @@ public class ApplicationPermissionWrapper implements Serializable { ...@@ -22,7 +22,6 @@ public class ApplicationPermissionWrapper implements Serializable {
public ApplicationPermissionWrapper(IAppPermission ap, boolean canHasPerm) { public ApplicationPermissionWrapper(IAppPermission ap, boolean canHasPerm) {
permission = ap; permission = ap;
logger.info("Seting canHas for {}: {}", ap, canHasPerm);
this.canHas = canHasPerm; this.canHas = canHasPerm;
} }
......
...@@ -11,46 +11,46 @@ import fi.insomnia.bortal.model.Product; ...@@ -11,46 +11,46 @@ import fi.insomnia.bortal.model.Product;
public class ProductShopItem { public class ProductShopItem {
private static final Logger logger = LoggerFactory.getLogger(ProductShopItem.class); private static final Logger logger = LoggerFactory.getLogger(ProductShopItem.class);
private Product product; private final Product product;
private BigDecimal count = BigDecimal.ZERO; private BigDecimal count = BigDecimal.ZERO;
private Integer id; private final Integer id;
public ProductShopItem(Product prod) { public ProductShopItem(Product prod) {
this.product = prod; this.product = prod;
id = this.product.getId().getId(); id = this.product.getId();
} }
public static List<ProductShopItem> productList(List<Product> products) { public static List<ProductShopItem> productList(List<Product> products) {
List<ProductShopItem> ret = new ArrayList<ProductShopItem>(); List<ProductShopItem> ret = new ArrayList<ProductShopItem>();
for (Product prod : products) { for (Product prod : products) {
ret.add(new ProductShopItem(prod)); ret.add(new ProductShopItem(prod));
} }
return ret; return ret;
} }
public Product getProduct() { public Product getProduct() {
return this.product; return this.product;
} }
public void setCount(BigDecimal count) { public void setCount(BigDecimal count) {
this.count = count; this.count = count;
} }
public BigDecimal getCount() { public BigDecimal getCount() {
return count; return count;
} }
public void setId(Integer setid) { public void setId(Integer setid) {
logger.debug("Setting id {} to cart {}", setid, id); logger.info("Setting id {} to cart {}", setid, id);
if (id != setid) { if (!id.equals(setid)) {
throw new RuntimeException("Carts mixed up! Please raport an error to coders!"); throw new RuntimeException("Carts mixed up! Please raport an error to coders! ");
} }
} }
public Integer getId() { public Integer getId() {
return id; return id;
} }
} }
ALTER TABLE group_memberships DROP CONSTRAINT unq_group_memberships_0;
ALTER TABLE group_memberships DROP CONSTRAINT fk_group_memberships_place_reservation_id;
ALTER TABLE group_memberships DROP CONSTRAINT fk_group_memberships_group_id;
ALTER TABLE group_memberships DROP CONSTRAINT fk_group_memberships_event_id;
ALTER TABLE group_memberships DROP CONSTRAINT group_memberships_pkey;
ALTER TABLE group_memberships DROP COLUMN event_id;
ALTER TABLE group_memberships ADD PRIMARY KEY (id);
ALTER TABLE places DROP CONSTRAINT fk_places_products_id;
ALTER TABLE places DROP CONSTRAINT fk_places_map_id;
ALTER TABLE places DROP CONSTRAINT fk_places_group_id;
ALTER TABLE places DROP CONSTRAINT fk_places_event_id;
ALTER TABLE places DROP CONSTRAINT places_pkey;
ALTER TABLE places DROP COLUMN event_id;
ALTER TABLE places ADD PRIMARY KEY (id);
ALTER TABLE groups DROP CONSTRAINT fk_groups_event_id;
ALTER TABLE groups DROP CONSTRAINT groups_pkey;
ALTER TABLE groups ADD PRIMARY KEY (id);
ALTER TABLE readers DROP CONSTRAINT fk_readers_map_id;
ALTER TABLE maps DROP CONSTRAINT fk_maps_event_id;
ALTER TABLE maps DROP CONSTRAINT maps_pkey;
ALTER TABLE maps ADD PRIMARY KEY (id);
ALTER TABLE product_foodwavetemplate DROP CONSTRAINT fk_product_foodwavetemplate_food_wave_template_id;
FOOOOO!!! bill lines product_id
ALTER TABLE product_discounts DROP CONSTRAINT fk_product_discounts_product_id;
ALTER TABLE product_foodwavetemplate DROP CONSTRAINT fk_product_foodwavetemplate_product_id;
ALTER TABLE products DROP CONSTRAINT products_pkey;
ALTER TABLE products ADD PRIMARY KEY (id);
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!