/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.dao;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.NonUniqueResultException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.sql.JoinType;
import org.hoteia.qalingo.core.domain.CmsContent;
import org.hoteia.qalingo.core.domain.CmsContentAsset;
import org.hoteia.qalingo.core.domain.CmsContentBlock;
import org.hoteia.qalingo.core.domain.CmsMenu;
import org.hoteia.qalingo.core.fetchplan.FetchPlan;
import org.hoteia.qalingo.core.fetchplan.FetchPlanGraphCmsContent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
@Repository("cmsContentDao")
public class CmsContentDao extends AbstractGenericDao {
private final Logger logger = LoggerFactory.getLogger(getClass());
public CmsContent getCmsContentById(final Long cmsContentId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
FetchPlan fetchPlan = handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", cmsContentId));
CmsContent cmsContent = (CmsContent) criteria.uniqueResult();
if(cmsContent != null){
cmsContent.setFetchPlan(fetchPlan);
}
return cmsContent;
}
public CmsContent getCmsContentByCode(final String cmsContentCode, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
FetchPlan fetchPlan = handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", cmsContentCode));
CmsContent cmsContent = (CmsContent) criteria.uniqueResult();
if(cmsContent != null){
cmsContent.setFetchPlan(fetchPlan);
}
return cmsContent;
}
public CmsContent getCmsContentByCode(final String cmsContentCode, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
FetchPlan fetchPlan = handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", cmsContentCode));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
CmsContent cmsContent = (CmsContent) criteria.uniqueResult();
if(cmsContent != null){
cmsContent.setFetchPlan(fetchPlan);
}
return cmsContent;
}
public CmsContent findCmsContentByType(final String app, final String type, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
FetchPlan fetchPlan = handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
CmsContent cmsContent = null;
try {
cmsContent = (CmsContent) criteria.uniqueResult();
if(cmsContent != null){
cmsContent.setFetchPlan(fetchPlan);
}
} catch (NonUniqueResultException e) {
logger.error("NonUniqueResultException: app='" + app + "', type: '" + type + "'" + "', marketAreaId: '" + marketAreaId + "'");
}
return cmsContent;
}
public List<Long> findAllCmsContentIds(final String type, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("type", type));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findAllCmsContentIds(final String type, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findAllCmsContentIds(final String type, final Long marketAreaId, final Long localizationId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.createAlias("localization", "localization", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("localization.id", localizationId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findAllCmsContentIdsByMasterContentId(final Long cmsContentId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.createAlias("masterCmsContent", "masterCmsContent", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("masterCmsContent.id", cmsContentId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findCmsContentIdByMasterContentIdAndMarketAreaId(final Long cmsContentId, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.createAlias("masterCmsContent", "masterCmsContent", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("masterCmsContent.id", cmsContentId));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findCmsContentIdByMasterContentIdAndMarketAreaIdAndLocalizationId(final Long cmsContentId, final Long marketAreaId, final Long localizationId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.createAlias("masterCmsContent", "masterCmsContent", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("masterCmsContent.id", cmsContentId));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.createAlias("localization", "localization", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("localization.id", localizationId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findAllCmsContentIdsBySeoKey(final String app, final String type, final String cmsContentSeoKey, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.add(Restrictions.eq("seoKey", cmsContentSeoKey));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<CmsContent> findAllCmsContentsBySeoKey(final String app, final String type, final String cmsContentSeoKey, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.add(Restrictions.eq("seoKey", cmsContentSeoKey));
@SuppressWarnings("unchecked")
List<CmsContent> cmsContents = criteria.list();
return cmsContents;
}
public List<CmsContent> findAllCmsContents(final String type, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.addOrder(Order.desc("dateCreate"));
@SuppressWarnings("unchecked")
List<CmsContent> cmsContents = criteria.list();
return cmsContents;
}
public List<CmsContent> findCmsContents(final String app, final String type, final Long marketAreaId, int maxResults, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
if(maxResults != 0){
criteria.setMaxResults(maxResults);
}
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.addOrder(Order.asc("dateCreate"));
@SuppressWarnings("unchecked")
List<CmsContent> cmsContents = criteria.list();
return cmsContents;
}
public List<Long> findLastCmsContentIds(final String app, final String type, final Long marketAreaId, final int maxResults, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
if(maxResults != 0){
criteria.setMaxResults(maxResults);
}
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findLastActiveCmsContentIds(final String app, final String type, final Long marketAreaId, final int maxResults, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.add(Restrictions.eq("active", true));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
if(maxResults != 0){
criteria.setMaxResults(maxResults);
}
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<Long> findLastActiveCmsContentIds(final String app, final String type, final Long marketAreaId, final Long localizationId, final int maxResults, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.createAlias("localization", "localization", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("localization.id", localizationId));
criteria.add(Restrictions.eq("active", true));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.desc("dateCreate"));
if(maxResults != 0){
criteria.setMaxResults(maxResults);
}
@SuppressWarnings("unchecked")
List<Long> cmsContentIds = criteria.list();
return cmsContentIds;
}
public List<CmsContent> findCmsContentsByProductSkuId(final String app, final String type, final Long marketAreaId, final Long localizationId, Long productSkuId, int maxResults, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContent.class);
handleSpecificCmsContentFetchMode(criteria, params);
if(maxResults != 0){
criteria.setMaxResults(maxResults);
}
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.createAlias("localization", "localization", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("localization.id", localizationId));
criteria.createAlias("productSkus", "productSku", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("productSku.id", productSkuId));
criteria.addOrder(Order.asc("dateCreate"));
@SuppressWarnings("unchecked")
List<CmsContent> cmsContents = criteria.list();
return cmsContents;
}
public CmsContent saveOrUpdateCmsContent(final CmsContent cmsContent) {
if(cmsContent.getDateCreate() == null){
cmsContent.setDateCreate(new Date());
}
cmsContent.setDateUpdate(new Date());
if (cmsContent.getId() != null) {
if(em.contains(cmsContent)){
em.refresh(cmsContent);
}
CmsContent mergedCmsContent = em.merge(cmsContent);
em.flush();
return mergedCmsContent;
} else {
em.persist(cmsContent);
return cmsContent;
}
}
public void deleteCmsContent(final CmsContent cmsContent) {
em.remove(em.contains(cmsContent) ? cmsContent : em.merge(cmsContent));
}
protected FetchPlan handleSpecificCmsContentFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphCmsContent.defaultCmsContentFetchPlan());
}
}
// CMS CONTENT BLOCK
public CmsContentBlock getCmsContentBlockById(final Long cmsContentBlockId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContentBlock.class);
FetchPlan fetchPlan = handleSpecificCmsContentBlockFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", cmsContentBlockId));
CmsContentBlock cmsContentBlock = (CmsContentBlock) criteria.uniqueResult();
if(cmsContentBlock != null){
cmsContentBlock.setFetchPlan(fetchPlan);
}
return cmsContentBlock;
}
public CmsContentBlock getCmsContentBlockByCode(final String cmsContentBlockCode, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContentBlock.class);
FetchPlan fetchPlan = handleSpecificCmsContentBlockFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", cmsContentBlockCode));
CmsContentBlock cmsContentBlock = (CmsContentBlock) criteria.uniqueResult();
if(cmsContentBlock != null){
cmsContentBlock.setFetchPlan(fetchPlan);
}
return cmsContentBlock;
}
public CmsContentBlock getCmsContentBlockByType(final String app, final String type, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContentBlock.class);
FetchPlan fetchPlan = handleSpecificCmsContentBlockFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("type", type));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
CmsContentBlock cmsContentBlock = null;
try {
cmsContentBlock = (CmsContentBlock) criteria.uniqueResult();
if(cmsContentBlock != null){
cmsContentBlock.setFetchPlan(fetchPlan);
}
} catch (NonUniqueResultException e) {
logger.error("NonUniqueResultException: app='" + app + "', type: '" + type + "'" + "', marketAreaId: '" + marketAreaId + "'");
}
return cmsContentBlock;
}
public CmsContentBlock saveOrUpdateCmsContentBlock(final CmsContentBlock cmsContentBlock) {
if(cmsContentBlock.getDateCreate() == null){
cmsContentBlock.setDateCreate(new Date());
}
cmsContentBlock.setDateUpdate(new Date());
if (cmsContentBlock.getId() != null) {
if(em.contains(cmsContentBlock)){
em.refresh(cmsContentBlock);
}
CmsContentBlock mergedCmsContentBlock = em.merge(cmsContentBlock);
em.flush();
return mergedCmsContentBlock;
} else {
em.persist(cmsContentBlock);
return cmsContentBlock;
}
}
public void deleteCmsContentBlock(final CmsContentBlock cmsContentBlock) {
em.remove(em.contains(cmsContentBlock) ? cmsContentBlock : em.merge(cmsContentBlock));
}
protected FetchPlan handleSpecificCmsContentBlockFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphCmsContent.defaultCmsContentBlockFetchPlan());
}
}
// CMS CONTENT ASSET
public CmsContentAsset getCmsContentAssetById(final Long cmsContentAssetId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContentAsset.class);
FetchPlan fetchPlan = handleSpecificCmsContentAssetFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", cmsContentAssetId));
CmsContentAsset cmsContentAsset = (CmsContentAsset) criteria.uniqueResult();
if(cmsContentAsset != null){
cmsContentAsset.setFetchPlan(fetchPlan);
}
return cmsContentAsset;
}
public CmsContentAsset getCmsContentAssetByCode(final String cmsContentAssetCode, Object... params) {
Criteria criteria = createDefaultCriteria(CmsContentAsset.class);
FetchPlan fetchPlan = handleSpecificCmsContentAssetFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", cmsContentAssetCode));
CmsContentAsset cmsContentAsset = (CmsContentAsset) criteria.uniqueResult();
if(cmsContentAsset != null){
cmsContentAsset.setFetchPlan(fetchPlan);
}
return cmsContentAsset;
}
public CmsContentAsset saveOrUpdateCmsContentAsset(final CmsContentAsset cmsContentAsset) {
if(cmsContentAsset.getDateCreate() == null){
cmsContentAsset.setDateCreate(new Date());
}
cmsContentAsset.setDateUpdate(new Date());
if (cmsContentAsset.getId() != null) {
if(em.contains(cmsContentAsset)){
em.refresh(cmsContentAsset);
}
CmsContentAsset mergedCmsContentAsset = em.merge(cmsContentAsset);
em.flush();
return mergedCmsContentAsset;
} else {
em.persist(cmsContentAsset);
return cmsContentAsset;
}
}
public void deleteCmsContentAsset(final CmsContentAsset cmsContentAsset) {
em.remove(em.contains(cmsContentAsset) ? cmsContentAsset : em.merge(cmsContentAsset));
}
protected FetchPlan handleSpecificCmsContentAssetFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphCmsContent.defaultCmsContentAssetFetchPlan());
}
}
// CMS MENU
public CmsMenu getCmsMenuById(final Long menuId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
FetchPlan fetchPlan = handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("id", menuId));
CmsMenu menu = (CmsMenu) criteria.uniqueResult();
if(menu != null){
menu.setFetchPlan(fetchPlan);
}
return menu;
}
public CmsMenu getCmsMenuById(final String rawMenuId, Object... params) {
long menuId = -1;
try {
menuId = Long.parseLong(rawMenuId);
} catch (NumberFormatException e) {
throw new IllegalArgumentException(e);
}
return getCmsMenuById(menuId, params);
}
public CmsMenu getCmsMenuByCode(final String menuCode, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
FetchPlan fetchPlan = handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("code", menuCode));
CmsMenu menu = (CmsMenu) criteria.uniqueResult();
if(menu != null){
menu.setFetchPlan(fetchPlan);
}
return menu;
}
public List<CmsMenu> findAllCmsMenus(final String app, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.addOrder(Order.asc("position"));
criteria.addOrder(Order.asc("ordering"));
@SuppressWarnings("unchecked")
List<CmsMenu> menus = criteria.list();
return menus;
}
public List<Long> findAllCmsMenuIds(final String app, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.asc("position"));
criteria.addOrder(Order.asc("ordering"));
@SuppressWarnings("unchecked")
List<Long> menuIds = criteria.list();
return menuIds;
}
public List<CmsMenu> findAllCmsMenus(final String app, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.addOrder(Order.asc("position"));
criteria.addOrder(Order.asc("ordering"));
@SuppressWarnings("unchecked")
List<CmsMenu> menus = criteria.list();
return menus;
}
public List<Long> findAllCmsMenuIds(final String app, final Long marketAreaId, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.asc("position"));
criteria.addOrder(Order.asc("ordering"));
@SuppressWarnings("unchecked")
List<Long> menuIds = criteria.list();
return menuIds;
}
public List<Long> findAllActiveRootCmsMenuIdsByPosition(final String app, final Long marketAreaId, final String position, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("position", position));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.add(Restrictions.eq("active", true));
criteria.add(Restrictions.isNull("menu"));
criteria.setProjection(Projections.property("id"));
criteria.addOrder(Order.asc("position"));
criteria.addOrder(Order.asc("ordering"));
@SuppressWarnings("unchecked")
List<Long> menuIds = criteria.list();
return menuIds;
}
public List<CmsMenu> findAllActiveRootCmsMenusByPosition(final String app, final Long marketAreaId, final String position, Object... params) {
Criteria criteria = createDefaultCriteria(CmsMenu.class);
handleSpecificCmsMenuFetchMode(criteria, params);
criteria.add(Restrictions.eq("app", app));
criteria.add(Restrictions.eq("position", position));
criteria.createAlias("marketArea", "marketArea", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("marketArea.id", marketAreaId));
criteria.add(Restrictions.eq("active", true));
criteria.add(Restrictions.isNull("menu"));
criteria.addOrder(Order.asc("position"));
criteria.addOrder(Order.asc("ordering"));
@SuppressWarnings("unchecked")
List<CmsMenu> menus = criteria.list();
return menus;
}
public CmsMenu saveOrUpdateCmsMenu(CmsMenu menu) {
if(menu.getDateCreate() == null){
menu.setDateCreate(new Date());
}
menu.setDateUpdate(new Date());
if (menu.getId() != null) {
if(em.contains(menu)){
em.refresh(menu);
}
CmsMenu mergedCmsMenu = em.merge(menu);
em.flush();
return mergedCmsMenu;
} else {
em.persist(menu);
return menu;
}
}
public void deleteCmsMenu(CmsMenu menu) {
em.remove(em.contains(menu) ? menu : em.merge(menu));
}
protected FetchPlan handleSpecificCmsMenuFetchMode(Criteria criteria, Object... params) {
if (params != null && params.length > 0) {
return super.handleSpecificFetchMode(criteria, params);
} else {
return super.handleSpecificFetchMode(criteria, FetchPlanGraphCmsContent.defaultCmsMenuFetchPlan());
}
}
}