com.enonic.cms.store.dao.MenuItemEntityDao.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.store.dao.MenuItemEntityDao.java

Source

/*
 * 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);
    }
}