Commit ac295b49 by Tuukka Kivilahti

Merge branch 'mapgenfix' into 'master'

Map fixes

- do not generate place pdf on map generation page init
- Do some additional checks on EventMap.enabled
- Add possibility to delete places from a map with wildcard

See merge request !370
2 parents a07c3b85 f57a20f9
......@@ -34,7 +34,7 @@ public interface EventMapBeanLocal {
EventMap find(Integer mapId);
EventMap clearPlaces(EventMap map);
EventMap clearPlaces(EventMap map, String placesToDelete);
void deletePlace(Place place);
......
......@@ -39,7 +39,7 @@ import fi.codecrew.moya.model.Place;
* Session Bean implementation class EventMapBean
*/
@Stateless
@DeclareRoles({ MapPermission.S_MANAGE_MAPS })
@DeclareRoles({MapPermission.S_MANAGE_MAPS})
public class EventMapBean implements EventMapBeanLocal {
@EJB
......@@ -97,10 +97,12 @@ public class EventMapBean implements EventMapBeanLocal {
@Override
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
public EventMap clearPlaces(EventMap map) {
EventMap leMap = eventmapfacade.reload(map);
leMap.getPlaces().clear();
return leMap;
public EventMap clearPlaces(EventMap map, String placesToDelete) {
map = eventmapfacade.reload(map);
if (!eventbean.getCurrentEvent().equals(map.getEvent())) {
throw new EJBAccessException("Deleting places for wrong event!");
}
return placefacade.deletePlaces(map, placesToDelete);
}
@Override
......@@ -109,7 +111,7 @@ public class EventMapBean implements EventMapBeanLocal {
place = placefacade.reload(place);
LanEvent currentEvent = eventbean.getCurrentEvent();
if (!currentEvent.equals(place.getMap().getEvent())) {
throw new EJBAccessException("Deleting placce for wrong event!");
throw new EJBAccessException("Deleting place for wrong event!");
}
placefacade.remove(place);
}
......
......@@ -646,7 +646,7 @@ public class PlaceBean implements PlaceBeanLocal {
@Override
public byte[] generatePlacesPdf(float width, float height, double font1, double font2) {
try {
List<Place> places = placeFacade.findAll();
List<Place> places = placeFacade.findAll(eventBean.getCurrentEvent());
Collections.sort(places);
logger.info("sorting places etc.");
......@@ -821,7 +821,7 @@ public class PlaceBean implements PlaceBeanLocal {
@Override
public List<Place> findAllForEvent() {
LanEvent event = eventBean.getCurrentEvent();
List<Place> ret = placeFacade.findAllForEvent(event);
List<Place> ret = placeFacade.findAll(event);
return ret;
}
......
......@@ -25,6 +25,7 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
......@@ -49,13 +50,12 @@ public class EventMapFacade extends IntegerPkGenericFacade<EventMap> {
@EJB
private PermissionBeanLocal permbean;
public List<EventMap> getMaps()
{
public List<EventMap> getMaps() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<EventMap> cq = cb.createQuery(EventMap.class);
Root<EventMap> root = cq.from(EventMap.class);
cq.where(cb.equal(root.get(EventMap_.event), eventbean.getCurrentEvent()),
cb.isTrue(root.get(EventMap_.active)));
cb.isTrue(root.get(EventMap_.active)));
return getEm().createQuery(cq).getResultList();
}
......@@ -77,7 +77,7 @@ public class EventMapFacade extends IntegerPkGenericFacade<EventMap> {
CriteriaQuery<EventMap> cq = cb.createQuery(EventMap.class);
Root<EventMap> root = cq.from(EventMap.class);
cq.where(cb.equal(root.get(EventMap_.event).get(LanEvent_.organiser), org),
cb.isTrue(root.get(EventMap_.active)));
cb.isTrue(root.get(EventMap_.active)));
return getEm().createQuery(cq).getResultList();
}
......
......@@ -19,7 +19,6 @@
package fi.codecrew.moya.facade;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import javax.ejb.EJB;
......@@ -35,7 +34,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.LoggingBeanLocal;
import fi.codecrew.moya.utilities.moyamessage.MoyaEventType;
@Stateless
@LocalBean
......@@ -57,19 +55,33 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
super(Place.class);
}
public EventMap deletePlaces(EventMap map, String nameLike) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaDelete<Place> del = cb.createCriteriaDelete(Place.class);
Root<Place> root = del.getRoot();
del.where(
cb.equal(root.get(Place_.map), map),
cb.like(root.get(Place_.name), nameLike)
);
int i = getEm().createQuery(del).executeUpdate();
logger.info("Deleted {} places from {} with string '{}'", i, map, nameLike);
getEm().getEntityManagerFactory().getCache().evict(EventMap.class, map.getId());
getEm().refresh(map);
return map;
}
public List<Place> findUsersReservations(LanEvent event, EventUser user) {
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).get(EventMap_.event), event),
cb.equal(root.get(Place_.currentUser), user)
));
cb.and(
cb.equal(root.get(Place_.map).get(EventMap_.event), event),
cb.equal(root.get(Place_.currentUser), user)
));
TypedQuery<Place> q = getEm().createQuery(cq);
return q.getResultList();
......@@ -83,11 +95,11 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
cq.select(root);
cq.where(
cb.and(
cb.equal(root.get(Place_.map).get(EventMap_.event), user.getEvent()),
cb.equal(root.get(Place_.currentUser), user),
cb.isNull(root.get(Place_.group))
));
cb.and(
cb.equal(root.get(Place_.map).get(EventMap_.event), user.getEvent()),
cb.equal(root.get(Place_.currentUser), user),
cb.isNull(root.get(Place_.group))
));
TypedQuery<Place> q = getEm().createQuery(cq);
return q.getResultList();
......@@ -98,9 +110,9 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class);
cq.where(
cb.like(root.get(Place_.name), like),
cb.equal(root.get(Place_.map), map)
);
cb.like(root.get(Place_.name), like),
cb.equal(root.get(Place_.map), map)
);
List<Place> list = getEm().createQuery(cq).getResultList();
for (Place p : list) {
......@@ -133,20 +145,25 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
Path<Integer> yObj = root.get(Place_.mapY);
cq.where(cb.equal(root.get(Place_.map), map),
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))
);
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(getEm().createQuery(cq));
}
public List<Place> findAll() {
public List<Place> findAll(LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class);
cq.where(cb.equal(root.get(Place_.map).get(EventMap_.event), eventBean.getCurrentEvent()));
Path<EventMap> map = root.get(Place_.map);
cq.where(
cb.isTrue(map.get(EventMap_.active)),
cb.equal(map.get(EventMap_.event), event)
);
cq.orderBy(cb.asc(root.get(Place_.name)));
return getEm().createQuery(cq).getResultList();
}
......@@ -158,12 +175,13 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
cq.select(cb.count(root));
cq.where(
cb.equal(root.get(Place_.product), product),
cb.isNull(root.get(Place_.reserveTime)),
cb.isNull(root.get(Place_.group)),
cb.isFalse(root.get(Place_.disabled)),
cb.isTrue(root.get(Place_.buyable))
);
cb.equal(root.get(Place_.product), product),
cb.isNull(root.get(Place_.reserveTime)),
cb.isNull(root.get(Place_.group)),
cb.isFalse(root.get(Place_.disabled)),
cb.isTrue(root.get(Place_.buyable)),
cb.isTrue(root.get(Place_.map).get(EventMap_.active))
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
......@@ -174,9 +192,10 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
cq.select(cb.count(root));
cq.where(
cb.equal(root.get(Place_.product), product),
cb.isFalse(root.get(Place_.disabled))
);
cb.equal(root.get(Place_.product), product),
cb.isFalse(root.get(Place_.disabled)),
cb.isTrue(root.get(Place_.map).get(EventMap_.active))
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
......@@ -189,12 +208,12 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
cq.select(cb.count(root));
cq.where(
cb.equal(root.get(Place_.map), map),
cb.isFalse(root.get(Place_.disabled)),
cb.equal(root.get(Place_.map), map),
cb.isFalse(root.get(Place_.disabled)),
// TKwtf lisäsi:
cb.isTrue(root.get(Place_.buyable))
);
// TKwtf lisäsi:
cb.isTrue(root.get(Place_.buyable))
);
return getSingleNullableResult(getEm().createQuery(cq));
......@@ -214,14 +233,14 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
cq.select(cb.count(root));
cq.where(
cb.equal(root.get(Place_.map), map),
cb.isNull(root.get(Place_.reserveTime)),
cb.isNull(root.get(Place_.group)),
cb.isFalse(root.get(Place_.disabled)),
// TKwtf lisäsi:
cb.isTrue(root.get(Place_.buyable))
cb.equal(root.get(Place_.map), map),
cb.isNull(root.get(Place_.reserveTime)),
cb.isNull(root.get(Place_.group)),
cb.isFalse(root.get(Place_.disabled)),
// TKwtf lisäsi:
cb.isTrue(root.get(Place_.buyable))
);
);
return getSingleNullableResult(getEm().createQuery(cq));
}
......@@ -258,19 +277,19 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
Join<Product, Place> placeJoin = subroot.join(Product_.places);
subq.where(
placeJoin.get(Place_.id).isNotNull(),
cb.equal(placeJoin.get(Place_.map).get(EventMap_.event), eventBean.getCurrentEvent())
);
placeJoin.get(Place_.id).isNotNull(),
cb.equal(placeJoin.get(Place_.map).get(EventMap_.event), eventBean.getCurrentEvent())
);
ProductFlag[] flags = { ProductFlag.CREATE_NEW_PLACE_WHEN_BOUGHT };
ProductFlag[] flags = {ProductFlag.CREATE_NEW_PLACE_WHEN_BOUGHT};
cq.where(
cb.or(
root.get(Product_.id).in(subq),
root.get(Product_.productFlags).in(Arrays.asList(flags))
),
cb.equal(root.get(Product_.event), eventBean.getCurrentEvent())
);
cb.or(
root.get(Product_.id).in(subq),
root.get(Product_.productFlags).in(Arrays.asList(flags))
),
cb.equal(root.get(Product_.event), eventBean.getCurrentEvent())
);
cq.orderBy(cb.asc(root.get(Product_.name)));
......@@ -282,17 +301,12 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class);
cq.where(cb.equal(root.get(Place_.product).get(Product_.event), event), cb.equal(root.get(Place_.code), code));
cq.where(
cb.equal(root.get(Place_.product).get(Product_.event), event),
cb.equal(root.get(Place_.code), code)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
public List<Place> findAllForEvent(LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
Root<Place> root = cq.from(Place.class);
cq.where(cb.equal(root.get(Place_.product).get(Product_.event), event));
return getEm().createQuery(cq).getResultList();
}
}
......@@ -30,18 +30,22 @@
</h:form>
<map:genplaces />
<hr />
<h:form>
<h:commandButton action="#{mapManageView.removeAllPlaces}" value="#{i18n['mapEdit.removePlaces']}" onclick="return confirm('Are you sure you want to REMOVE ALL PLACES!\nThis action is final')" />
<p:inputText value="#{mapManageView.placesToDelete}" />
<p:commandButton action="#{mapManageView.removeSelectedPlaces}" value="#{i18n['mapEdit.removeSelectedPlaces']}" onclick="return confirm('Are you sure you want to remove these\nThis action is final')" ajax="false"/>
</h:form>
<hr/>
<h:form enctype="multipart/form-data">
<p:fileUpload mode="simple" value="#{mapManageView.bgFile}" />
<h:commandButton action="#{mapManageView.submitBg}" value="#{i18n['map.submitMap']}" />
<p:commandButton action="#{mapManageView.submitBg}" value="#{i18n['map.submitMap']}" ajax="false"/>
</h:form>
<h:form>
<p:commandButton id="downloadLink" actionListener="mapManageView.generatePlacePdf" value="koodipdf" ajax="false">
<p:fileDownload value="#{mapManageView.streamedFile}" />
<p:commandButton id="downloadLink" actionListener="#{mapManageView.generatePlacePdf()}" value="koodipdf" ajax="false">
<p:fileDownload value="#{mapManageView.placePdf}" />
</p:commandButton>
</h:form>
</ui:define>
......
......@@ -54,7 +54,7 @@ import fi.codecrew.moya.web.cdiview.GenericCDIView;
public class MapManageView extends GenericCDIView {
/**
*
*
*/
private static final long serialVersionUID = -3276250982780044688L;
private static final Logger logger = LoggerFactory.getLogger(MapManageView.class);
......@@ -77,6 +77,7 @@ public class MapManageView extends GenericCDIView {
private String mapname;
private String buyableLike;
private String placesToDelete;
private boolean tablesHorizontal = false;
private boolean oneRowTable = false;
......@@ -94,10 +95,8 @@ public class MapManageView extends GenericCDIView {
private String namebase;
private Integer mapId;
private List<Product> productlist;
private StreamedContent streamedFile;
private EventMap sourceMap;
private DefaultStreamedContent placepdf;
public void initCreate() {
if (super.requirePermissions(MapPermission.MANAGE_MAPS)) {
......@@ -111,13 +110,11 @@ public class MapManageView extends GenericCDIView {
map = eventmapBean.find(getMapId());
setProductlist(productbean.getProducts());
super.beginConversation();
if (map != null && !map.getPlaces().isEmpty())
streamedFile = new DefaultStreamedContent(new ByteArrayInputStream(placebean.generatePlacesPdf(54, 17, 18, 15)), "application/pdf", "paikkakoodit");
}
}
public List<EventMap> getOldMaps() {
List<EventMap> ret = placebean.getOrganisationsMaps();
if (map != null) {
......@@ -131,12 +128,10 @@ public class MapManageView extends GenericCDIView {
return null;
}
public String submitBg()
{
public String submitBg() {
byte[] bytes = bgFile.getContents();
if (bytes == null && bgFile.getSize() > 0)
{
if (bytes == null && bgFile.getSize() > 0) {
bytes = new byte[(int) bgFile.getSize()];
try {
bgFile.getInputstream().read(bytes);
......@@ -206,9 +201,10 @@ public class MapManageView extends GenericCDIView {
startY = Integer.valueOf(requestParams.get(clientId + ".y")).intValue();
}
public String removeAllPlaces()
{
map = eventmapBean.clearPlaces(map);
public String removeSelectedPlaces() {
map = eventmapBean.clearPlaces(map, placesToDelete);
return null;
}
......@@ -235,8 +231,8 @@ public class MapManageView extends GenericCDIView {
Place place = new Place(map);
place.setHeight(Math.abs(height));
place.setWidth(Math.abs(width));
int xpos = startX + rowXStart + (tablesHorizontal ? (placeI -1) * width : 0);
int ypos = startY + rowYStart + (tablesHorizontal ? 0 : (placeI -1) * height);
int xpos = startX + rowXStart + (tablesHorizontal ? (placeI - 1) * width : 0);
int ypos = startY + rowYStart + (tablesHorizontal ? 0 : (placeI - 1) * height);
logger.debug("Creating map in {} {}", xpos, ypos);
place.setMapX(xpos);
place.setMapY(ypos);
......@@ -398,12 +394,14 @@ public class MapManageView extends GenericCDIView {
this.bgFile = bgFile;
}
//StreamedContent new DefaultStreamedContent(pdfstream)
public StreamedContent getStreamedFile() {
public void generatePlacesPdf() {
placepdf = new DefaultStreamedContent(new ByteArrayInputStream(placebean.generatePlacesPdf(54, 17, 18, 15)), "application/pdf", "paikkakoodit");
//DefaultStreamedContent(new ByteArrayInputStream(placebean.generatePlacesPdf(54, 17, 10, 6)));
}
return streamedFile;
//StreamedContent new DefaultStreamedContent(pdfstream)
public StreamedContent getPlacePdf() {
return placepdf;
}
public EventMap getSourceMap() {
......@@ -413,4 +411,12 @@ public class MapManageView extends GenericCDIView {
public void setSourceMap(EventMap sourceMap) {
this.sourceMap = sourceMap;
}
public String getPlacesToDelete() {
return placesToDelete;
}
public void setPlacesToDelete(String placesToDelete) {
this.placesToDelete = placesToDelete;
}
}
......@@ -1609,3 +1609,4 @@ product.dependency.multiplier=Multiplier
product.dependency.MAX_SUPPORTED_COUNT=Only up to same number of products can be bought
submenu.neomap.moveplaces=Change places
mapEdit.removeSelectedPlaces=Delete places
......@@ -1890,3 +1890,4 @@ placemove.alreadyTaken=Moving the places was cancelled because place {0} was alr
placegroupview.moveUsersPlaces=Move users places
submenu.neomap.moveplaces=Change places
mapEdit.removeSelectedPlaces=Delete places
......@@ -1876,3 +1876,4 @@ product.dependency.MAX_SUPPORTED_COUNT=Tuotteita voi ostaa enint\u00E4\u00E4n sa
placemove.alreadyTaken=Paikkojen siirto peruuntui koska paikka {0} oli jo varattu.
placegroupview.moveUsersPlaces=Siirr\u00E4 k\u00E4ytt\u00E4j\u00E4n paikkoja
submenu.neomap.moveplaces=Vaihda paikkoja
mapEdit.removeSelectedPlaces=Poista paikat
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!