package fi.arcusys.koku.common.service.impl;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import fi.arcusys.koku.common.service.MessageRefDAO;
import fi.arcusys.koku.common.service.datamodel.FolderType;
import fi.arcusys.koku.common.service.datamodel.MessageRef;
import fi.arcusys.koku.common.service.datamodel.User;
/**
* DAO implementation for CRUD operations with 'MessageRef' Entity
*
* @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi)
* May 20, 2011
*/
@Stateless
public class MessageRefDAOImpl extends AbstractEntityDAOImpl<MessageRef> implements MessageRefDAO{
public MessageRefDAOImpl() {
super(MessageRef.class);
}
/**
* @param msgRef
* @return
*/
@Override
public MessageRef create(final MessageRef msgRef) {
// workaround: each DAO maintains its separate PesistenceContext - Folder from FolderDAO is not managed in MessageRefDAO's EntityManager
msgRef.setFolder(em.merge(msgRef.getFolder()));
msgRef.setMessage(em.merge(msgRef.getMessage()));
return super.create(msgRef);
}
@Override
protected String getListByIdsQueryName() {
return MessageRef.GET_MESSAGE_REFS_BY_IDS;
}
/**
* @param messageRefs
*/
@Override
public void updateAll(List<MessageRef> messageRefs) {
for (final MessageRef messageRef : messageRefs) {
super.update(messageRef);
}
}
protected String getDeleteByIdsQueryName() {
return MessageRef.DELETE_MESSAGE_REFS_BY_IDS;
}
/**
* @param olderThen
*/
@Override
public int deleteOldMessages(Date olderThen) {
return super.executeBulkOperation("deleteOldMessages", Collections.singletonMap("olderThen", olderThen));
}
/**
* @param asList
* @param time
* @return
*/
@Override
public List<MessageRef> getMessagesByFolderTypeAndCreateDate(Collection<FolderType> folderTypes, Date time) {
final Map<String, Object> params = new HashMap<String, Object>();
params.put("folderTypes", folderTypes);
params.put("olderThen", time);
return super.getResultList("findOldMessagesByFolderType", params);
}
/**
* @param userUid
* @param singleton
* @param time
* @return
*/
@Override
public List<MessageRef> getMessagesByUserAndFolderTypeAndCreateDate(User user, Collection<FolderType> folderTypes, Date time) {
final Map<String, Object> params = new HashMap<String, Object>();
params.put("user", user);
params.put("folderTypes", folderTypes);
params.put("olderThen", time);
return super.getResultList("findOldMessagesByUserAndFolderType", params);
}
}