Commit 99af43cc by Tuomas Riihimäki

some changes

2 parents 38d217be b35272de
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.model.Place;
import javax.ejb.EJB;
import javax.ejb.Stateless;
/**
*
* @author tuukka
*/
@Stateless
public class PlaceBean implements PlaceBeanLocal {
@EJB
private PlaceFacade placeFacade;
public void mergeChanges(Place place) {
placeFacade.merge(place);
}
}
...@@ -95,12 +95,21 @@ public class PlaceMapBean implements PlaceMapBeanLocal { ...@@ -95,12 +95,21 @@ public class PlaceMapBean implements PlaceMapBeanLocal {
} }
public String getSelectPlaceMapUrl(EventMap activeMap, List<Place> selectedPlace, User user) { public String getSelectPlaceMapUrl(EventMap activeMap, List<Place> selectedPlaces, User user) {
String parameters = "?"; String parameters = "?";
if (selectedPlace != null) { if (selectedPlaces != null && selectedPlaces.size() > 0) {
// parameters += "placeid=" + selectedPlace.getId().getId(); parameters += "placeid=";
for (Place place : selectedPlaces) {
parameters += place.getId().getId() + ",";
}
if (parameters.endsWith(",")) {
parameters.substring(parameters.length() -1);
}
} else { } else {
parameters += "mapid=" + activeMap.getId().getId(); parameters += "mapid=" + activeMap.getId().getId();
} }
......
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.model.Place;
import javax.ejb.Local;
/**
*
* @author tuukka
*/
@Local
public interface PlaceBeanLocal {
public void mergeChanges(Place place);
}
package fi.insomnia.bortal.enums; package fi.insomnia.bortal.enums;
public enum BeanRole { import java.util.HashSet;
USER_BASE(true), // Logged in user import java.util.Set;
ADMIN_BASE(true),
SUPERADMIN(false) // Admin for this event public enum Role {
// 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 boolean inDatabase;
private Set<Role> parents = new HashSet<Role>();
BeanRole(boolean inDb) { Role() {
inDatabase = inDb; }
/**
* Default (on-demand create time) parents for the role
*
* @param parent
*/
Role(Role... parent) {
for (Role 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
*/
Role(boolean inDb, Role... parent) {
this(parent);
this.inDatabase = inDb;
} }
public boolean isInDatabase() { public boolean isInDatabase() {
return inDatabase; return inDatabase;
} }
/**
* Default parent roles (when creating role on first use)
*
* @return
*/
public Set<Role> getParents() {
return parents;
}
} }
...@@ -25,8 +25,6 @@ import javax.persistence.OneToMany; ...@@ -25,8 +25,6 @@ import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Version; import javax.persistence.Version;
import org.eclipse.persistence.annotations.Cache;
import org.eclipse.persistence.annotations.CacheType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
......
...@@ -8,6 +8,7 @@ import java.awt.Color; ...@@ -8,6 +8,7 @@ import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.Calendar;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.EmbeddedId; import javax.persistence.EmbeddedId;
...@@ -20,10 +21,10 @@ import javax.persistence.NamedQueries; ...@@ -20,10 +21,10 @@ import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; 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.TemporalType;
import javax.persistence.Version; import javax.persistence.Version;
import org.eclipse.persistence.annotations.Cache;
import org.eclipse.persistence.annotations.CacheType;
/** /**
...@@ -38,8 +39,7 @@ import org.eclipse.persistence.annotations.CacheType; ...@@ -38,8 +39,7 @@ import org.eclipse.persistence.annotations.CacheType;
@NamedQuery(name = "Place.findByMapX", query = "SELECT p FROM Place p WHERE p.mapX = :mapX"), @NamedQuery(name = "Place.findByMapX", query = "SELECT p FROM Place p WHERE p.mapX = :mapX"),
@NamedQuery(name = "Place.findByMapY", query = "SELECT p FROM Place p WHERE p.mapY = :mapY"), @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.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") }) @NamedQuery(name = "Place.findByCode", query = "SELECT p FROM Place p WHERE p.code = :code")})
public class Place implements EventChildInterface { public class Place implements EventChildInterface {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -58,37 +58,35 @@ public class Place implements EventChildInterface { ...@@ -58,37 +58,35 @@ public class Place implements EventChildInterface {
private Integer width; private Integer width;
@Column(name = "height") @Column(name = "height")
private Integer height; private Integer height;
@Column(name = "release_time")
@Temporal(TemporalType.TIMESTAMP)
private Calendar releaseTime;
@Column(name = "place_details") @Column(name = "place_details")
@Lob @Lob
private String details; private String details;
@Column(name = "place_code") @Column(name = "place_code")
private String code; private String code;
@OneToOne(mappedBy = "placeReservation") @OneToOne(mappedBy = "placeReservation")
private GroupMembership placeReserver; private GroupMembership placeReserver;
/** /**
* Which group has bought the place * Which group has bought the place
*/ */
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "group_id", referencedColumnName = "id", updatable = true, insertable = true), @JoinColumn(name = "group_id", referencedColumnName = "id", updatable = true, insertable = true),
@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 @ManyToOne
private PlaceGroup group; private PlaceGroup group;
@JoinColumns({ @JoinColumns({
@JoinColumn(name = "map_id", referencedColumnName = "id", nullable = false, updatable = true, insertable = true), @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) }) @JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false)})
@ManyToOne(optional = false) @ManyToOne(optional = false)
private EventMap map; private EventMap map;
/** /**
* Which ticket type is this place sold as * Which ticket type is this place sold as
*/ */
@JoinColumns({ @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) }) @JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false)})
@ManyToOne() @ManyToOne()
private Product product; private Product product;
/** /**
...@@ -209,11 +207,12 @@ public class Place implements EventChildInterface { ...@@ -209,11 +207,12 @@ public class Place implements EventChildInterface {
public boolean equals(Object object) { public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are // TODO: Warning - this method won't work in the case the id fields are
// not set // not set
if (object == null || !(object instanceof Place)) { if (!(object instanceof Place)) {
return false; return false;
} }
Place other = (Place) object; Place other = (Place) object;
if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.getId().equals(other.id))) { if ((this.getId() == null && other.getId() != null)
|| (this.getId() != null && !this.id.equals(other.id))) {
return false; return false;
} }
return true; return true;
...@@ -306,7 +305,6 @@ public class Place implements EventChildInterface { ...@@ -306,7 +305,6 @@ public class Place implements EventChildInterface {
return false; return false;
} }
private static final Color NORMAL_COLOR = Color.BLUE; private static final Color NORMAL_COLOR = Color.BLUE;
private static final Color RESERVED_COLOR = Color.RED; private static final Color RESERVED_COLOR = Color.RED;
private static final Color SELECTED_COLOR = Color.GREEN; private static final Color SELECTED_COLOR = Color.GREEN;
...@@ -315,7 +313,7 @@ public class Place implements EventChildInterface { ...@@ -315,7 +313,7 @@ public class Place implements EventChildInterface {
public void drawPlace(BufferedImage targetImage) { public void drawPlace(BufferedImage targetImage) {
Graphics2D g = targetImage.createGraphics(); Graphics2D g = targetImage.createGraphics();
if (group != null) { if (isReserved()) {
g.setColor(RESERVED_COLOR); g.setColor(RESERVED_COLOR);
g.fill(new Rectangle(mapX, mapY, width, height)); g.fill(new Rectangle(mapX, mapY, width, height));
} else { } else {
...@@ -337,4 +335,34 @@ public class Place implements EventChildInterface { ...@@ -337,4 +335,34 @@ public class Place implements EventChildInterface {
g.fill(new Rectangle(mapX, mapY, width, height)); g.fill(new Rectangle(mapX, mapY, width, height));
} }
public boolean isReserved() {
if (releaseTime != null) {
if (System.currentTimeMillis() > releaseTime.getTimeInMillis()) {
setReserved(false);
} else {
return true;
}
}
if(group != null) {
return true;
}
return false;
}
public static final long RESERVE_TIME = 1000*60*20; // 20min.
public void setReserved(boolean reserved) {
if(reserved) {
releaseTime = Calendar.getInstance();
releaseTime.setTimeInMillis(System.currentTimeMillis()+RESERVE_TIME);
} else {
releaseTime = null;
}
}
} }
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
<ul> <ul>
<li><h:commandLink action="generateTestData">Generate test data</h:commandLink></li> <li><h:commandLink action="generateTestData">Generate test data</h:commandLink></li>
<li><h:commandLink action="user/list">List users</h:commandLink></li> <li><h:commandLink action="user/list">List users</h:commandLink></li>
<li><h:commandLink action="user/create">Create user</h:commandLink></li>
<li><h:commandLink action="tests/placemap">Placemap test</h:commandLink></li>
<li><h:commandLink action="PlaceMap?mapid=1">Show map 1</h:commandLink></li>
</ul> </ul>
</h:form> </h:form>
</ui:define> </ui:define>
......
...@@ -68,9 +68,9 @@ public class PlaceMap extends HttpServlet { ...@@ -68,9 +68,9 @@ public class PlaceMap extends HttpServlet {
Integer userId = getIntegerParameter(request, PARAMETER_CURRENT_USER_ID); Integer userId = getIntegerParameter(request, PARAMETER_CURRENT_USER_ID);
response.setContentType("image/gif"); response.setContentType("image/jpeg");
placemapBean.printPlaceMapToStream(ostream, "gif", getEvent(request), mapId, userId, placeIds); placemapBean.printPlaceMapToStream(ostream, "jpeg", getEvent(request), mapId, userId, placeIds);
/* /*
* TODO output your page here out.println("<html>"); * TODO output your page here out.println("<html>");
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*/ */
package fi.insomnia.bortal.view; package fi.insomnia.bortal.view;
import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.PlaceMapBeanLocal; import fi.insomnia.bortal.beans.PlaceMapBeanLocal;
import fi.insomnia.bortal.handler.SessionHandler; import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
...@@ -30,8 +31,14 @@ import org.slf4j.LoggerFactory; ...@@ -30,8 +31,14 @@ import org.slf4j.LoggerFactory;
public class MapView { public class MapView {
private Logger logger = LoggerFactory.getLogger(MapView.class); private Logger logger = LoggerFactory.getLogger(MapView.class);
@EJB @EJB
private PlaceMapBeanLocal placeMapBean; private PlaceMapBeanLocal placeMapBean;
@EJB
private PlaceBeanLocal placeBean;
@ManagedProperty("#{sessionHandler}") @ManagedProperty("#{sessionHandler}")
private SessionHandler sessionHandler; private SessionHandler sessionHandler;
private EventMap activeMap = null; private EventMap activeMap = null;
...@@ -51,12 +58,17 @@ public class MapView { ...@@ -51,12 +58,17 @@ public class MapView {
Place place = getActiveMap().findPlace(x, y); Place place = getActiveMap().findPlace(x, y);
if (place != null) {
if (selectedPlaces.contains(place)) { if (selectedPlaces.contains(place)) {
selectedPlaces.remove(place); selectedPlaces.remove(place);
place.setReserved(false);
placeBean.mergeChanges(place);
} else { } else {
selectedPlaces.add(place); selectedPlaces.add(place);
place.setReserved(true);
placeBean.mergeChanges(place);
}
} }
} }
public String getSelectPlaceMapUrl() { public String getSelectPlaceMapUrl() {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!