PlaceGroupView.java 4.13 KB
package fi.insomnia.bortal.view;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.PlaceGroupBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;

@ManagedBean(name = "placeGroupView")
@SessionScoped
public class PlaceGroupView extends GenericView {

    private static final Logger logger = LoggerFactory.getLogger(PlaceGroupView.class);
    private User user;
    @EJB
    private UserBeanLocal userBean;
    @EJB
    private PlaceGroupBeanLocal placegroupBean;
    private ListDataModel<GroupMembership> memberlist;

    @EJB
    private PlaceBeanLocal placebean;
    private PlaceGroup group;

    private String token;
    private ListDataModel<Place> placelist;
    private Place place;

    public void editSelf() {
        userBean.fatalNotLoggedIn();
        setUser(userBean.getCurrentUser());
    }

    public void initPlacegroupsPlacelist() {
        setPlacelist(new ListDataModel<Place>(group.getPlaces()));

    }

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        userBean.fatalNotLoggedIn();
        if (user != null) {
            logger.debug("User {}", user.getPlaceGroups().size());
        }
        return user;
    }

    public ListDataModel<GroupMembership> getGroupMemberships() {
        userBean.fatalNotLoggedIn();
        memberlist = new ListDataModel<GroupMembership>(placegroupBean.getMembershipsAndCreations(user));
        return memberlist;
    }

    public String saveToken() {
        userBean.fatalNotLoggedIn();
        User thisuser = userBean.getCurrentUser();
        String ret = "myGroups";
        if (!placegroupBean.associateToToken(thisuser, getToken())) {
            this.addFaceMessage("placetoken.tokenNotFound");
            ret = null;
        }

        return ret;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getToken() {
        return token;
    }

    public boolean canModify(GroupMembership row) {
        boolean ret = false;
        if (row != null && (
                userBean.getCurrentUser().equals(row.getPlaceGroup().getCreator()) ||
                        userBean.hasPermission(Permission.MAP, RolePermission.WRITE))) {
            ret = true;
        }
        return ret;
    }

    public String releasePlace() {
        GroupMembership row = memberlist.getRowData();
        if (row != null && (userBean.getCurrentUser().equals(row.getPlaceGroup().getCreator()) ||
                userBean.hasPermission(Permission.MAP, RolePermission.WRITE))) {
            placegroupBean.releaseAndGenerateToken(row);
            this.addFaceMessage("placegroupview.placeReleased", row.getPlaceReservation().getName());
        } else {
            this.addFaceMessage("placegroupview.placeReleaseFailed", row.getPlaceReservation().getName());

        }
        return null;
    }

    public String removePlaceFromGroup() {
        userBean.fatalPermission(Permission.MAP, RolePermission.WRITE, "No right to release place ", place);
        place.getGroup().getPlaces().remove(place);
        place.setGroup(null);
        place = placebean.mergeChanges(place);
        return null;
    }

    public String editPlace() {
        place = placelist.getRowData();
        return null;
    }

    public void setGroup(PlaceGroup group) {
        this.group = group;
    }

    public PlaceGroup getGroup() {
        return group;
    }

    public void setPlacelist(ListDataModel<Place> placelist) {
        this.placelist = placelist;
    }

    public ListDataModel<Place> getPlacelist() {
        return placelist;
    }

    public void setPlace(Place place) {
        this.place = place;
    }

    public Place getPlace() {
        return place;
    }
}