Commit 615b85c4 by Tuomas Riihimäki Committed by Tuomas Riihimäki

Implement moving places

1 parent c402ca8c
...@@ -510,23 +510,50 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -510,23 +510,50 @@ public class PlaceBean implements PlaceBeanLocal {
} }
private PlaceSlot releasePlacePriv(Place place) { private PlaceSlot releasePlacePriv(Place place) {
EventUser user = permbean.getCurrentUser();
if (place.getGroup() != null || place.getCurrentUser() == null
|| (!permbean.hasPermission(MapPermission.MANAGE_OTHERS) && !place.getCurrentUser().equals(user))) {
return null;
}
if (place.getGroup() != null) {
place.getGroup().getPlaces().remove(place);
}
place.setGroup(null);
place.setCurrentUser(null); place.setCurrentUser(null);
place.setReserveTime(null); place.setReserveTime(null);
if (place.getPlaceReserver() != null) {
place.getPlaceReserver().setPlaceReservation(null);
place.setPlaceReserver(null);
}
PlaceSlot slot = placeSlotFacade.findSlotForPlace(place); PlaceSlot slot = placeSlotFacade.findSlotForPlace(place);
// remove also slot from place
if (slot != null) { if (slot != null) {
slot.setPlace(null); slot.setPlace(null);
slot.setUsed(null); slot.setUsed(null);
place.setReserverSlot(null);
} }
return slot; return slot;
} }
public GroupMembership removeGroupMembership(Place place) {
GroupMembership res = place.getPlaceReserver();
if (res != null) {
if (res.getPlaceGroup().getMembers() != null) {
res.getPlaceGroup().getMembers().remove(res);
}
if (res.getUser() != null && res.getUser().getGroupMemberships() != null) {
res.getUser().getGroupMemberships().remove(res);
}
place.setPlaceReserver(null);
gmemfacade.remove(res);
}
return res;
}
@Override @Override
@RolesAllowed(MapPermission.S_VIEW) @RolesAllowed(MapPermission.S_VIEW)
public Place find(int placeId) { public Place find(int placeId) {
...@@ -552,36 +579,9 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -552,36 +579,9 @@ public class PlaceBean implements PlaceBeanLocal {
@RolesAllowed(MapPermission.S_MANAGE_OTHERS) @RolesAllowed(MapPermission.S_MANAGE_OTHERS)
public Place unbuyPlace(Place place) { public Place unbuyPlace(Place place) {
place = placeFacade.reload(place); place = placeFacade.reload(place);
if (place.getGroup() != null) { removeGroupMembership(place);
place.getGroup().getPlaces().remove(place); releasePlacePriv(place);
}
place.setGroup(null);
place.setCurrentUser(null);
place.setReserveTime(null);
if (place.getPlaceReserver() != null) {
GroupMembership res = place.getPlaceReserver();
if (res.getPlaceGroup().getMembers() != null) {
res.getPlaceGroup().getMembers().remove(res);
}
if (res.getUser() != null && res.getUser().getGroupMemberships() != null) {
res.getUser().getGroupMemberships().remove(res);
}
place.setPlaceReserver(null);
gmemfacade.remove(res);
}
PlaceSlot slot = placeSlotFacade.findSlotForPlace(place);
// remove also slot from place
if (slot != null) {
slot.setPlace(null);
slot.setUsed(null);
place.setReserverSlot(null);
}
return place; return place;
} }
...@@ -858,24 +858,45 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -858,24 +858,45 @@ public class PlaceBean implements PlaceBeanLocal {
for (Entry<Place, Place> s : change.entrySet()) { for (Entry<Place, Place> s : change.entrySet()) {
Place src = placeFacade.reload(s.getKey()); Place src = placeFacade.reload(s.getKey());
Place dst = placeFacade.reload(s.getValue());
if (!src.getProduct().equals(dst.getProduct())) {
throw new EJBException("src and dst product types differ for {}, {}" + src + " " + dst);
}
if (!manageOthers && !user.equals(src.getCurrentUser()) if (!manageOthers && !user.equals(src.getCurrentUser())
&& (src.getGroup() == null || !user.equals(src.getGroup().getCreator()))) { && (src.getGroup() == null || !user.equals(src.getGroup().getCreator()))) {
throw new EJBAccessException("Trying to move places for another user without permissions!"); throw new EJBAccessException("Trying to move places for another user without permissions!");
} }
Place dst = placeFacade.reload(s.getValue());
if (!dst.isBuyable() || dst.isTaken()) { if (!dst.isBuyable() || dst.isTaken()) {
throw new EJBException("Place already taken!!"); throw new EJBException("Place already taken!!");
} }
// Store values we want to store to the destination place
PlaceGroup grp = src.getGroup();
GroupMembership gmem = src.getPlaceReserver();
EventUser currentUser = src.getCurrentUser();
PlaceSlot srcSlot = releasePlacePriv(src); PlaceSlot srcSlot = releasePlacePriv(src);
if (srcSlot != null) { if (srcSlot != null) {
// this place was reserved via a slot... // this place was reserved via a slot...
srcSlot.setPlace(dst); srcSlot.setPlace(dst);
dst.setReserverSlot(srcSlot);
srcSlot.setUsed(new Date()); srcSlot.setUsed(new Date());
} }
dst.setCurrentUser(user); dst.setCurrentUser(currentUser);
dst.setReserveTime(Calendar.getInstance());
if (gmem != null) {
dst.setPlaceReserver(gmem);
gmem.setPlaceReservation(dst);
}
dst.setGroup(grp);
if (grp != null) {
grp.getPlaces().add(dst);
}
} }
} }
......
...@@ -79,7 +79,9 @@ ...@@ -79,7 +79,9 @@
<p:commandButton <p:commandButton
rendered="#{ajaxMapView.canUserBuy()}" rendered="#{ajaxMapView.canUserBuy()}"
value="#{i18n['mapPlacechange.commitMove']}" value="#{i18n['mapPlacechange.commitMove']}"
action="#{mapPlacechangeView.commitMove()}" /> action="#{mapPlacechangeView.commitMove()}"
ajax="false"
/>
</h:form> </h:form>
......
...@@ -98,7 +98,7 @@ public class MapPlacechangeView extends GenericCDIView { ...@@ -98,7 +98,7 @@ public class MapPlacechangeView extends GenericCDIView {
} }
} }
public void commitMove(){ public String commitMove(){
HashMap<Place, Place> change = new HashMap<Place,Place>(); HashMap<Place, Place> change = new HashMap<Place,Place>();
for(MoveContainer s : slots){ for(MoveContainer s : slots){
...@@ -108,8 +108,9 @@ public class MapPlacechangeView extends GenericCDIView { ...@@ -108,8 +108,9 @@ public class MapPlacechangeView extends GenericCDIView {
} }
placebean.movePlaces(change); placebean.movePlaces(change);
slots = null; //slots = null;
initView(); //initView();
return "/place/myGroups?faces_redirect=true";
} }
public void toggleDstPlace() { public void toggleDstPlace() {
...@@ -117,14 +118,14 @@ public class MapPlacechangeView extends GenericCDIView { ...@@ -117,14 +118,14 @@ public class MapPlacechangeView extends GenericCDIView {
Integer placeId = new Integer(paramMap.get("placeId")); Integer placeId = new Integer(paramMap.get("placeId"));
Place place = placebean.find(placeId); Place place = placebean.find(placeId);
setToggleSuccess(false); toggleSuccess = false;
for (MoveContainer mc : getMoveContainers()) { for (MoveContainer mc : getMoveContainers()) {
if (place.equals(mc.getSrc().getPlace())) { if (place.equals(mc.getSrc().getPlace())) {
setSlotState(mc, !mc.isMoving()); setSlotState(mc, !mc.isMoving());
return; return;
} }
if (place.equals(mc.getDst())) { if (place.equals(mc.getDst())) {
setToggleSuccess(true); toggleSuccess = true;
mc.setDst(null); mc.setDst(null);
return; return;
} }
...@@ -135,7 +136,7 @@ public class MapPlacechangeView extends GenericCDIView { ...@@ -135,7 +136,7 @@ public class MapPlacechangeView extends GenericCDIView {
} }
for (MoveContainer mc : moveContainers) { for (MoveContainer mc : moveContainers) {
if (mc.isMoving() && mc.dst == null && mc.getSrc().getProduct().equals(place.getProduct())) { if (mc.isMoving() && mc.dst == null && mc.getSrc().getProduct().equals(place.getProduct())) {
setToggleSuccess(true); toggleSuccess = true;
mc.setDst(place); mc.setDst(place);
return; return;
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!