package fr.mch.mdo.restaurant.services.business.managers.users; import java.util.ArrayList; import java.util.List; import fr.mch.mdo.logs.ILogger; import fr.mch.mdo.restaurant.beans.IBeanLabelable; import fr.mch.mdo.restaurant.beans.IMdoDaoBean; import fr.mch.mdo.restaurant.beans.IMdoDtoBean; import fr.mch.mdo.restaurant.dao.beans.UserRole; import fr.mch.mdo.restaurant.dao.users.IUserRolesDao; import fr.mch.mdo.restaurant.dao.users.hibernate.DefaultUserRolesDao; import fr.mch.mdo.restaurant.dto.beans.IAdministrationManagerViewBean; import fr.mch.mdo.restaurant.dto.beans.LocaleDto; import fr.mch.mdo.restaurant.dto.beans.UserRoleDto; import fr.mch.mdo.restaurant.dto.beans.UserRolesManagerViewBean; import fr.mch.mdo.restaurant.exception.MdoBusinessException; import fr.mch.mdo.restaurant.exception.MdoException; import fr.mch.mdo.restaurant.services.business.managers.AbstractAdministrationManagerLabelable; import fr.mch.mdo.restaurant.services.business.managers.DefaultMdoTableAsEnumsManager; import fr.mch.mdo.restaurant.services.business.managers.assembler.DefaultUserRolesAssembler; import fr.mch.mdo.restaurant.services.business.managers.locales.DefaultLocalesManager; import fr.mch.mdo.restaurant.services.business.managers.locales.ILocalesManager; import fr.mch.mdo.restaurant.services.business.managers.products.IMdoTableAsEnumsManager; import fr.mch.mdo.restaurant.services.logs.LoggerServiceImpl; import fr.mch.mdo.utils.IManagerAssembler; public class DefaultUserRolesManager extends AbstractAdministrationManagerLabelable implements IUserRolesManager { private IMdoTableAsEnumsManager mdoTableAsEnumsManager; private ILocalesManager localesManager; private static class LazyHolder { private static IUserRolesManager instance = new DefaultUserRolesManager(LoggerServiceImpl.getInstance().getLogger(DefaultUserRolesManager.class.getName()), DefaultUserRolesDao.getInstance(), DefaultUserRolesAssembler.getInstance()); } private DefaultUserRolesManager(ILogger logger, IUserRolesDao dao, IManagerAssembler assembler) { super.logger = logger; super.dao = dao; super.assembler = assembler; this.mdoTableAsEnumsManager = DefaultMdoTableAsEnumsManager.getInstance(); this.localesManager = DefaultLocalesManager.getInstance(); } /** * This constructor is used by ioc */ public DefaultUserRolesManager() { } public static IUserRolesManager getInstance() { return LazyHolder.instance; } /** * @param localesManager the localesManager to set */ public void setLocalesManager(ILocalesManager localesManager) { this.localesManager = localesManager; } /** * @return the localesManager */ public ILocalesManager getLocalesManager() { return localesManager; } /** * @return the mdoTableAsEnumsManager */ public IMdoTableAsEnumsManager getMdoTableAsEnumsManager() { return mdoTableAsEnumsManager; } /** * @param mdoTableAsEnumsManager the mdoTableAsEnumsManager to set */ public void setMdoTableAsEnumsManager( IMdoTableAsEnumsManager mdoTableAsEnumsManager) { this.mdoTableAsEnumsManager = mdoTableAsEnumsManager; } @Override protected String getDefaultLabel(IBeanLabelable mdoBean) { String result = null; UserRole mdoBeanCasted = (UserRole) mdoBean; if (mdoBeanCasted != null && mdoBeanCasted.getCode() != null) { result = mdoBeanCasted.getCode().getLanguageKeyLabel(); } return result; } @Override public IMdoDtoBean save(IMdoDtoBean dtoBean) throws MdoBusinessException { UserRoleDto result = (UserRoleDto) super.save(dtoBean); /* The following code will be moved to caller method: if (result != null) { if (userContext != null && userContext.getUserRole() != null) { Long savedId = result.getId(); Long sessionId = (Long) userContext.getUserRole().getId(); if (savedId != null && savedId.equals(sessionId) && userContext.getUserAuthentication() != null) { try { userContext.getUserAuthentication().setUserRole((UserRoleDto) super.findByPrimaryKey(savedId)); } catch (MdoBusinessException e) { logger.error("message.error.administration.business.user.roles.not.found", new Object[] {dtoBean}, e); throw new MdoBusinessException("message.error.administration.business.user.roles.not.found", new Object[] {dtoBean}, e); } } } } */ return result; } @Override public void processList(IAdministrationManagerViewBean viewBean, LocaleDto locale, boolean... lazy) throws MdoBusinessException { super.processList(viewBean, lazy); UserRolesManagerViewBean userRolesManagerViewBean = (UserRolesManagerViewBean) viewBean; try { userRolesManagerViewBean.setLabels(this.getLabels(locale)); userRolesManagerViewBean.setLanguages(this.localesManager.getLanguages(locale.getLanguageCode())); userRolesManagerViewBean.setCodes(this.getRemainingList(mdoTableAsEnumsManager.getUserRoles())); } catch (Exception e) { logger.error("message.error.administration.business.find.all", e); throw new MdoBusinessException("message.error.administration.business.find.all", e); } } /** * Remove already existing bean from listAll. * @param listAll list of bean to be removed. * @return a restricted list. */ private List<IMdoDtoBean> getRemainingList(List<IMdoDtoBean> listAll) { List<IMdoDtoBean> result = new ArrayList<IMdoDtoBean>(listAll); List<IMdoDtoBean> excludedList = new ArrayList<IMdoDtoBean>(); try { excludedList = super.findAll(); } catch (MdoBusinessException e) { logger.warn("message.error.administration.business.find.all", e); } for (IMdoDtoBean exlcudedBean : excludedList) { UserRoleDto exlcudedBeanCasted = (UserRoleDto) exlcudedBean; for (IMdoDtoBean tableAsEnum : listAll) { if (tableAsEnum.getId() != null && exlcudedBeanCasted.getCode() != null && tableAsEnum.getId().equals(exlcudedBeanCasted.getCode().getId())) { result.remove(tableAsEnum); } } } return result; } @Override public IMdoDtoBean findByCode(String code) throws MdoException { try { return assembler.marshal((IMdoDaoBean) dao.findByUniqueKey(code)); } catch (MdoException e) { logger.error("message.error.administration.business.user.role.find.by.code", new Object[] {code}, e); throw new MdoBusinessException("message.error.administration.business.user.role.find.by.code", new Object[] {code}, e); } } }