UserView.java 8.4 KB
package fi.insomnia.bortal.view;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;

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

import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.SecurityLogType;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.beans.UtilBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.utilities.I18n;

@ManagedBean(name = "userView")
@SessionScoped
public class UserView extends GenericView {

    @EJB
    private UserBeanLocal userBean;
    @EJB
    private SecurityBeanLocal securitybean;
    @EJB
    private RoleBeanLocal roleBean;

    @ManagedProperty(value = "#{placeGroupView}")
    private PlaceGroupView placegroupView;
    @ManagedProperty(value = "#{productShopView}")
    private ProductShopView shopview;

    private static final Logger logger = LoggerFactory.getLogger(UserView.class);
    private User user;
    private ListDataModel<User> items;

    private String password;
    private String passwordcheck;
    @EJB
    private UtilBeanLocal utilbean;
    private ListDataModel<UserImage> userImageList;

    public void initCreateuser() {
        user = new User();
    }

    public String showImage() {
        userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
        setUser(items.getRowData());
        return "adminSendImage";

    }

    public String setDefaultImage()
    {
        user.setCurrentImage(userImageList.getRowData());
        userBean.mergeChanges(user);
        return null;
    }
    public String edit() {
        userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);

        setUser(items.getRowData());

        return "userEdit";
    }

    public String reloadUser() {
        user = userBean.findById(user.getId());
        return null;
    }

    public String shop() {
        userBean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "no rights to shop to user without SHOP:EXECUTE");
        shopview.setShoppingUser(items.getRowData());
        // shopview.setUser(items.getRowData());

        return "/shop/shopToUser";
    }

    public ListDataModel<PlaceGroup> getPlacegroups() {
        List<PlaceGroup> retlist = new ArrayList<PlaceGroup>();
        retlist.addAll(user.getPlaceGroups());

        for (GroupMembership gm : user.getGroupMemberships()) {
            if (!retlist.contains(gm.getPlaceGroup())) {
                retlist.add(gm.getPlaceGroup());
            }
        }

        ListDataModel<PlaceGroup> ret = new ListDataModel<PlaceGroup>(retlist);
        return ret;
    }

    public List<Role> getUserRoles() {
        userBean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ, "does not have permission to view roles at userView!");

        return roleBean.listRoles();
    }

    public boolean canSave() {
        return userBean.getCurrentUser().equals(user) || userBean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
    }

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

    public String createUser() {
        userBean.fatalPermission(Permission.LOGIN, RolePermission.WRITE, "does not have permission to create user!");

        String ret = "editcreate";

        if (user == null || user.getLogin() == null || user.getLogin().trim().isEmpty() || user.getLogin().trim().length() < 2) {
            addFaceMessage("userview.loginstringFaulty");
        } else if (password.length() < 5) {
            addFaceMessage("userview.passwordTooShort");

        } else if (null != userBean.getUser(user.getLogin())) {
            addFaceMessage("userview.userExists");
        } else if (!password.equals(passwordcheck)) {
            addFaceMessage("userview.passwordsDontMatch");
            password = "";
            passwordcheck = "";
        } else {
            logger.debug("Creating new user: {}", user.getLogin());
            // Luodaan uusi käyttäjä UserBeanin funktiolla createNewUser jolle
            // annetaan parametrina pakolliset tiedot ( login ja salasana )
            // Paluuarvona saadaan uusi uljas käyttäjä-olio.
            setUser(userBean.createNewUser(user, password));

            password = "";
            passwordcheck = "";
            if (getUser() == null) {
                logger.warn("Could not create user. function returned null!");
            } else {
                securitybean.logMessage(SecurityLogType.genericMessage, userBean.getCurrentUser(), "Created new user ", getUser().getLogin(), " with id: ", getUser().getId().toString());

                if (!userBean.isLoggedIn()) {
                    ret = "created";
                } else {
                    ret = "edit";
                }
            }
        }
        return ret;
    }
    public void initUserimagelist()
    {
        setUserImageList(new ListDataModel<UserImage>(user.getUserImageList()));
    }

    public String saveUser() {

        logger.debug("Saving user at UserView mbean nick: {}", user.getNick());
        User thisusr = getUser();
        if (!userBean.isCurrentUser(thisusr)) {
            logger.debug("user {} is modifying user {}", userBean.getCurrentUser(), thisusr);
            userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
        }
        for (Role r : getUser().getRoles()) {
            logger.debug("Users roles: {}", r.getName());
        }
        setUser(userBean.mergeChanges(getUser()));
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("user.successfullySaved")));
        return "edit";
    }

    public ListDataModel<User> getUsers() {
        userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);

        List<User> users;
        users = userBean.getUsers();

        items = new ListDataModel<User>(users);
        logger.debug("Fetching users. Found {}", items.getRowCount());

        return items;

    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

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

    }

    public User getUser() {

        return user;
    }

    public void setPasswordcheck(String passwordcheck) {
        this.passwordcheck = passwordcheck;
    }

    public String getPasswordcheck() {
        return passwordcheck;
    }

    public String changePassword() {
        userBean.fatalNotLoggedIn();
        if (!password.equals(passwordcheck)) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("userview.passwordsDontMatch")));

            return "changePassword";
        }
        user.resetPassword(password);
        userBean.mergeChanges(user);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("userview.passwordsChanged")));
        password = "";
        passwordcheck = "";
        return "edit";
    }

    public String editGroup(PlaceGroup pg) {
        placegroupView.setGroup(pg);

        return "/place/editGroup";
    }

    public void setPlacegroupView(PlaceGroupView placegroupView) {
        this.placegroupView = placegroupView;
    }

    public PlaceGroupView getPlacegroupView() {
        return placegroupView;
    }

    public String recheckImagetype() {
        utilbean.convertImage(user);
        return null;
    }

    public String nothing() {
        return null;
    }

    public void setShopview(ProductShopView shopview) {
        this.shopview = shopview;
    }

    public ProductShopView getShopview() {
        return shopview;
    }

    public void setUserImageList(ListDataModel<UserImage> userImageList) {
        this.userImageList = userImageList;
    }

    public ListDataModel<UserImage> getUserImageList() {
        return userImageList;
    }

}