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

import java.util.ArrayList;
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.LoggingBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.RoleBeanLocal;
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.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_old")
@SessionScoped
public class UserView extends GenericView {

	@EJB
	private UserBeanLocal userBean;
	@EJB
	private LoggingBeanLocal loggingbean;
	@EJB
	private RoleBeanLocal roleBean;
	@EJB
	private PermissionBeanLocal permbean;

	@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() {
		setUser(items.getRowData());
		return "adminSendImage";

	}

	public String setDefaultImage() {
		user.setCurrentImage(userImageList.getRowData());
		return null;
	}

	public String edit() {

		setUser(items.getRowData());

		return "userEdit";
	}

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

	public String shop() {
		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() {

		return roleBean.listRoles();
	}

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

	public void editSelf() {
		setUser(permbean.getCurrentUser());
	}

	public String createUser() {

		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 {
				loggingbean.logMessage(SecurityLogType.genericMessage, permbean.getCurrentUser(), "Created new user ", getUser().getLogin(), " with id: ", getUser().getId().toString());

				if (!permbean.isLoggedIn()) {
					ret = "created";
				} else {
					ret = "edit";
				}
			}
		}
		return ret;
	}

	public void initUserimagelist() {
		setUserImageList(new ListDataModel<UserImage>(user.getUserImageList()));
	}

	public String saveUser() throws PermissionDeniedException {

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

	public ListDataModel<User> getUsers() {

		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() {
		if (user == null) {
			user = permbean.getCurrentUser();
		}
		return user;
	}

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

	public String getPasswordcheck() {
		return passwordcheck;
	}

	public String changePassword() throws PermissionDeniedException {
		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() throws PermissionDeniedException {
		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;
	}

}