package org.hoteia.qalingo.core.dao; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import org.hibernate.Criteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hoteia.qalingo.core.domain.Dictionary; import org.hoteia.qalingo.core.domain.Tag; import org.hoteia.qalingo.core.fetchplan.FetchPlan; import org.hoteia.qalingo.core.fetchplan.common.FetchPlanGraphCommon; import org.hoteia.qalingo.core.util.CoreUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; @Repository("referentialDataDao") public class ReferentialDataDao extends AbstractGenericDao { private final Logger logger = LoggerFactory.getLogger(getClass()); // TAG public Tag getTagById(final Long tagId, Object... params) { Criteria criteria = createDefaultCriteria(Tag.class); FetchPlan fetchPlan = handleSpecificTagFetchMode(criteria, params); criteria.add(Restrictions.eq("id", tagId)); Tag tag = (Tag) criteria.uniqueResult(); if (tag != null) { tag.setFetchPlan(fetchPlan); } return tag; } public Tag getTagByCode(final String tagCode, Object... params) { Criteria criteria = createDefaultCriteria(Tag.class); FetchPlan fetchPlan = handleSpecificTagFetchMode(criteria, params); criteria.add(Restrictions.eq("code", handleCodeValue(tagCode))); Tag tag = (Tag) criteria.uniqueResult(); if (tag != null) { tag.setFetchPlan(fetchPlan); } return tag; } public Long getMaxTagId() { Criteria criteria = createDefaultCriteria(Tag.class); criteria.setProjection(Projections.max("id")); Long maxId = (Long) criteria.uniqueResult(); return (maxId == null) ? new Long(0) : maxId; } public List<Tag> findAllTags(Object... params) { Criteria criteria = createDefaultCriteria(Tag.class); handleSpecificTagFetchMode(criteria, params); criteria.addOrder(Order.asc("code")); @SuppressWarnings("unchecked") List<Tag> tags = criteria.list(); return tags; } public Tag saveOrUpdateTag(final Tag tag) { if (tag.getDateCreate() == null) { tag.setDateCreate(new Date()); } if (StringUtils.isEmpty(tag.getCode())) { tag.setCode(CoreUtil.generateEntityCode()); } tag.setDateUpdate(new Date()); if (tag.getId() != null) { if (em.contains(tag)) { em.refresh(tag); } Tag mergedTag = em.merge(tag); em.flush(); return mergedTag; } else { em.persist(tag); return tag; } } public void deleteTag(final Tag tag) { em.remove(em.contains(tag) ? tag : em.merge(tag)); } protected FetchPlan handleSpecificTagFetchMode(Criteria criteria, Object... params) { if (params != null && params.length > 0) { return super.handleSpecificFetchMode(criteria, params); } else { return super.handleSpecificFetchMode(criteria, FetchPlanGraphCommon.defaultTagFetchPlan()); } } // DICTIONARY public Dictionary getDictionaryById(final Long dictionaryId, Object... params) { Criteria criteria = createDefaultCriteria(Dictionary.class); criteria.add(Restrictions.eq("id", dictionaryId)); Dictionary dictionary = (Dictionary) criteria.uniqueResult(); return dictionary; } public Dictionary getDictionaryByCodeAndLocalizationId(final String dictionaryCode, final Long localizationId, Object... params) { Criteria criteria = createDefaultCriteria(Dictionary.class); criteria.add(Restrictions.eq("code", handleCodeValue(dictionaryCode))); criteria.add(Restrictions.eq("localization.id", localizationId)); Dictionary dictionary = (Dictionary) criteria.uniqueResult(); return dictionary; } public Long getMaxDictionaryId() { Criteria criteria = createDefaultCriteria(Dictionary.class); criteria.setProjection(Projections.max("id")); Long maxId = (Long) criteria.uniqueResult(); return (maxId == null) ? new Long(0) : maxId; } public List<Dictionary> findAllDictionarys(Object... params) { Criteria criteria = createDefaultCriteria(Dictionary.class); criteria.addOrder(Order.asc("code")); @SuppressWarnings("unchecked") List<Dictionary> dictionarys = criteria.list(); return dictionarys; } public Dictionary saveOrUpdateDictionary(final Dictionary dictionary) { if (dictionary.getDateCreate() == null) { dictionary.setDateCreate(new Date()); } if (StringUtils.isEmpty(dictionary.getCode())) { dictionary.setCode(CoreUtil.generateEntityCode()); } dictionary.setDateUpdate(new Date()); if (dictionary.getId() != null) { if (em.contains(dictionary)) { em.refresh(dictionary); } Dictionary mergedDictionary = em.merge(dictionary); em.flush(); return mergedDictionary; } else { em.persist(dictionary); return dictionary; } } public void deleteDictionary(final Dictionary dictionary) { em.remove(em.contains(dictionary) ? dictionary : em.merge(dictionary)); } }