package fr.mch.mdo.restaurant.services.business.managers.users;
import java.util.HashSet;
import java.util.Set;
import fr.mch.mdo.logs.ILogger;
import fr.mch.mdo.restaurant.beans.IMdoDaoBean;
import fr.mch.mdo.restaurant.beans.IMdoDtoBean;
import fr.mch.mdo.restaurant.dao.beans.User;
import fr.mch.mdo.restaurant.dao.beans.UserRestaurant;
import fr.mch.mdo.restaurant.dao.users.IUsersDao;
import fr.mch.mdo.restaurant.dao.users.hibernate.DefaultUsersDao;
import fr.mch.mdo.restaurant.dto.beans.IAdministrationManagerViewBean;
import fr.mch.mdo.restaurant.dto.beans.UsersManagerViewBean;
import fr.mch.mdo.restaurant.exception.MdoBusinessException;
import fr.mch.mdo.restaurant.exception.MdoException;
import fr.mch.mdo.restaurant.services.business.managers.AbstractAdministrationManager;
import fr.mch.mdo.restaurant.services.business.managers.DefaultMdoTableAsEnumsManager;
import fr.mch.mdo.restaurant.services.business.managers.assembler.DefaultUsersAssembler;
import fr.mch.mdo.restaurant.services.business.managers.products.IMdoTableAsEnumsManager;
import fr.mch.mdo.restaurant.services.business.managers.restaurants.DefaultRestaurantsManager;
import fr.mch.mdo.restaurant.services.business.managers.restaurants.IRestaurantsManager;
import fr.mch.mdo.restaurant.services.logs.LoggerServiceImpl;
import fr.mch.mdo.utils.IManagerAssembler;
public class DefaultUsersManager extends AbstractAdministrationManager implements IUsersManager
{
private IRestaurantsManager restaurantsManager;
private IMdoTableAsEnumsManager mdoTableAsEnumsManager;
private static class LazyHolder {
private static IUsersManager instance = new DefaultUsersManager(LoggerServiceImpl.getInstance().getLogger(DefaultUsersManager.class.getName()),
DefaultUsersDao.getInstance(), DefaultUsersAssembler.getInstance());
}
private DefaultUsersManager(ILogger logger, IUsersDao dao, IManagerAssembler assembler) {
super.logger = logger;
super.dao = dao;
super.assembler = assembler;
this.restaurantsManager = DefaultRestaurantsManager.getInstance();
this.mdoTableAsEnumsManager = DefaultMdoTableAsEnumsManager.getInstance();
}
/**
* This constructor is used by ioc
*/
public DefaultUsersManager() {
}
public static IUsersManager getInstance() {
return LazyHolder.instance;
}
/**
* @param mdoTableAsEnumsManager the mdoTableAsEnumsManager to set
*/
public void setMdoTableAsEnumsManager(IMdoTableAsEnumsManager mdoTableAsEnumsManager) {
this.mdoTableAsEnumsManager = mdoTableAsEnumsManager;
}
/**
* @return the mdoTableAsEnumsManager
*/
public IMdoTableAsEnumsManager getMdoTableAsEnumsManager() {
return mdoTableAsEnumsManager;
}
/**
* @return the restaurantsManager
*/
public IRestaurantsManager getRestaurantsManager() {
return restaurantsManager;
}
/**
* @param restaurantsManager the restaurantsManager to set
*/
public void setRestaurantsManager(IRestaurantsManager restaurantsManager) {
this.restaurantsManager = restaurantsManager;
}
@Override
public void processList(IAdministrationManagerViewBean viewBean, boolean... lazy) throws MdoBusinessException {
super.processList(viewBean, lazy);
UsersManagerViewBean usersManagerViewBean = (UsersManagerViewBean) viewBean;
try {
//MdoUserContext userContext = viewBean.getUserContext();
usersManagerViewBean.setRestaurants(restaurantsManager.findAll());
usersManagerViewBean.setTitles(mdoTableAsEnumsManager.getUserTitles());
} catch (Exception e) {
logger.error("message.error.administration.business.find.all", e);
throw new MdoBusinessException("message.error.administration.business.find.all", e);
}
}
@Override
public IMdoDtoBean update(IMdoDtoBean dtoBean) throws MdoBusinessException {
User daoBean = (User) assembler.unmarshal(dtoBean);
try {
// Deleting daoBean.getRestaurants() before inserting new ones
Set<UserRestaurant> backup = new HashSet<UserRestaurant>(daoBean.getRestaurants());
// Removing
daoBean.getRestaurants().clear();
dao.update(daoBean);
// Restoring
daoBean.getRestaurants().addAll(backup);
return assembler.marshal((IMdoDaoBean) dao.update(daoBean));
} catch (MdoException e) {
logger.error("message.error.administration.business.save", e);
throw new MdoBusinessException("message.error.administration.business.save", e);
}
}
@Override
public IMdoDtoBean delete(IMdoDtoBean dtoBean) throws MdoBusinessException {
// No need to Delete Restaurants before Deleting user because of hibernate mapping all-delete-orphan in collection
return super.delete(dtoBean);
}
}