/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.store.dao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.hibernate.Query; import org.springframework.stereotype.Repository; import com.enonic.cms.framework.hibernate.support.SelectBuilder; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import com.enonic.cms.core.structure.menuitem.MenuItemKey; import com.enonic.cms.core.structure.menuitem.MenuItemSpecification; import com.enonic.cms.core.structure.page.PageSpecification; import com.enonic.cms.core.structure.page.template.PageTemplateSpecification; import com.enonic.cms.store.support.EntityPageList; @Repository("menuItemDao") public final class MenuItemEntityDao extends AbstractBaseEntityDao<MenuItemEntity> implements MenuItemDao { public Collection<MenuItemEntity> findAll() { return findByNamedQuery( MenuItemEntity.class, "MenuItemEntity.findAll" ); } public List<MenuItemEntity> findBySpecification( MenuItemSpecification spec ) { String hql = buildHQL( spec ); Query compiled = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery( hql ); compiled.setCacheable( true ); return (List<MenuItemEntity>) compiled.list(); } @Deprecated public MenuItemEntity findByKey( int menuItemKey ) { return get( MenuItemEntity.class, new MenuItemKey( menuItemKey ) ); } public MenuItemEntity findByKey( MenuItemKey menuItemKey ) { return get( MenuItemEntity.class, menuItemKey ); } public List<MenuItemEntity> findByKeys( Collection<MenuItemKey> menuItemKeys ) { List<MenuItemEntity> menuItems = new ArrayList<MenuItemEntity>(); for ( MenuItemKey menuItemKey : menuItemKeys ) { MenuItemEntity menuItem = findByKey( menuItemKey ); if ( menuItem != null ) { menuItems.add( menuItem ); } } return menuItems; } public Collection<MenuItemEntity> findBySiteKey( int siteKey ) { return findByNamedQuery( MenuItemEntity.class, "MenuItemEntity.findBySiteKey", "siteKey", siteKey ); } @Override public Collection<MenuItemEntity> findByPageTemplate( final int pageTemplateKey ) { return findByNamedQuery( MenuItemEntity.class, "MenuItemEntity.findByPageTemplate", "pageTemplateKey", pageTemplateKey ); } public Collection<MenuItemEntity> findTopMenuItems( int siteKey ) { return findByNamedQuery( MenuItemEntity.class, "MenuItemEntity.findTopMenuItems", "siteKey", siteKey ); } public MenuItemEntity findContentPage( int siteKey, int contentKey ) { return findSingleByNamedQuery( MenuItemEntity.class, "MenuItemEntity.findContentPage", new String[]{"siteKey", "contentKey"}, new Object[]{siteKey, contentKey} ); } private String buildHQL( MenuItemSpecification spec ) { final SelectBuilder hqlQuery = new SelectBuilder( 0 ); hqlQuery.addFromTable( MenuItemEntity.class.getName(), "mei", SelectBuilder.NO_JOIN, null ); if ( spec.getMenuItemName() != null ) { hqlQuery.addFilter( "AND", "mei.name = '" + spec.getMenuItemName() + "'" ); } if ( spec.getParentKey() != null ) { hqlQuery.addFilter( "AND", "mei.parent = " + spec.getParentKey() ); } if ( spec.getRootLevelOnly() != null && spec.getRootLevelOnly() ) { hqlQuery.addFilter( "AND", "mei.parent is null" ); } if ( spec.getType() != null ) { hqlQuery.addFilter( "AND", "mei.menuItemType = " + spec.getType().getKey() ); } if ( spec.getSiteKey() != null ) { hqlQuery.addFilter( "AND", "mei.site.key = " + spec.getSiteKey() ); } if ( spec.getMenuItemShortcut() != null ) { hqlQuery.addFilter( "AND", "mei.menuItemShortcut = " + spec.getMenuItemShortcut().getKey().toInt() ); } if ( spec.getPageSpecification() != null ) { PageSpecification pageSpec = spec.getPageSpecification(); if ( pageSpec.getTemplateSpecification() != null ) { PageTemplateSpecification pageTemplateSpec = pageSpec.getTemplateSpecification(); if ( pageTemplateSpec.getType() != null ) { hqlQuery.addFilter( "AND", "mei.page.template.type = " + pageTemplateSpec.getType().getKey() ); } if ( pageTemplateSpec.getKey() != null ) { hqlQuery.addFilter( "AND", "mei.page.template.key = " + pageTemplateSpec.getKey().toInt() ); } } } return hqlQuery.toString(); } public EntityPageList<MenuItemEntity> findAll( int index, int count ) { return findPageList( MenuItemEntity.class, null, index, count ); } }