package fi.arcusys.koku.common.service.impl; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.ejb.EJB; import javax.ejb.Stateless; import fi.arcusys.koku.common.service.TargetPersonDAO; import fi.arcusys.koku.common.service.UserDAO; import fi.arcusys.koku.common.service.datamodel.TargetPerson; import fi.arcusys.koku.common.service.datamodel.User; /** * DAO implementation for CRUD operations with 'TargetPerson' Entity * * @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi) * Aug 22, 2011 */ @Stateless public class TargetPersonDAOImpl extends AbstractEntityDAOImpl<TargetPerson> implements TargetPersonDAO { @EJB private UserDAO userDAO; public TargetPersonDAOImpl() { super(TargetPerson.class); } private List<TargetPerson> getTargetPersonsByUid(final String uid) { final Map<String, Object> params = Collections.<String,Object>singletonMap("uid", uid); return getResultList("findTargetPersonByUid", params); } /** * @param targetPerson * @param receipients * @return */ @Override public TargetPerson getOrCreateTargetPerson(final String targetPersonUid, final List<String> receipients) { if (targetPersonUid == null) { return null; } List<TargetPerson> targetPersons = getTargetPersonsByUid(targetPersonUid); for (final TargetPerson targetPerson : targetPersons) { if (equalsByUids(receipients, targetPerson.getGuardians())) { return targetPerson; } } final TargetPerson targetPerson = new TargetPerson(); targetPerson.setTargetUser(userDAO.getOrCreateUser(targetPersonUid)); if (receipients != null) { for (final String userUid : receipients) { targetPerson.getGuardians().add(userDAO.getOrCreateUser(userUid)); } } return super.create(targetPerson); } private boolean equalsByUids(final List<String> userUids, final Set<User> users) { final Set<String> uids = new HashSet<String>(userUids); for (final User user : users) { if (!uids.contains(user.getUid())) { return false; } else { uids.remove(user.getUid()); } } return uids.isEmpty(); } }