Package com.castronu.joomlajavaapi.dao

Source Code of com.castronu.joomlajavaapi.dao.MenuDao

package com.castronu.joomlajavaapi.dao;

import java.io.File;
import java.sql.Timestamp;
import java.util.List;

import com.castronu.joomlajavaapi.app.Converter;
import com.castronu.joomlajavaapi.builder.MenuBuilder;
import com.castronu.joomlajavaapi.domain.Category;
import com.castronu.joomlajavaapi.exception.GenericErrorException;
import com.sun.tools.javac.util.Convert;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Property;
import org.joda.time.DateMidnight;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.castronu.joomlajavaapi.domain.Menu;

public class MenuDao extends HibernateDaoSupport {

    public static final Logger LOGGER = LoggerFactory.getLogger(CategoryDao.class);
   
    @SuppressWarnings("unchecked")
    public List<Menu> getMenuWithThisPath(final String menuPath) {
        DetachedCriteria query = DetachedCriteria.forClass(Menu.class);
        query.add(Property.forName("path").eq(menuPath));
        return getHibernateTemplate().findByCriteria(query);
    }

    public void createMenuCategory(String title,String alias,String path,int categoryId) throws GenericErrorException {
        List<Menu> menuWithThisPath = getMenuWithThisPath(path);
        if (menuWithThisPath.size()!=0) {
            throw new GenericErrorException("There is already a menu with this path " + path);
        }
        int parentId = computeParentId(path);
        Menu menu = MenuBuilder.aMenuCategory(title, alias, path, categoryId, parentId);
        getHibernateTemplate().save(menu);
        LOGGER.info("Menu "+ path + " created");
    }

    public int computeParentId(String path) throws GenericErrorException {
        File file = new File(path);
        String parent = file.getParent();
        if (parent==null) {return 1;}
        else {
            List<Menu> menuWithThisPath = getMenuWithThisPath(Converter.getPath(parent));
            if (menuWithThisPath.size()==0) {
                throw new GenericErrorException("No parent category menu found for parent "+parent);
            }
            return menuWithThisPath.get(0).getId();
        }

    }
    //TODO These private methods should be refactored in a Generic Rebuilder class...
    public void rebuildMenuTree() {

        List<Menu> menus = getHibernateTemplate().loadAll(Menu.class);
        for (Menu menu : menus) {
            menu.setRgt(-1);
            menu.setLft(-1);
            persist(menu);
        }

        DetachedCriteria query = DetachedCriteria.forClass(Menu.class);
        query.add(Property.forName("parentId").eq(1));
        query.addOrder(Order.asc("id"));
        List<Menu> firstLevelMenus = getHibernateTemplate().findByCriteria(query);
        Integer counter = 1;
        counter = rebuildBranch(firstLevelMenus, counter);
        //Get the ROOT
        List<Menu> menuFromId = getMenuWithThisPath("");
        Menu rootMenu = menuFromId.get(0);
        rootMenu.setLft(0);
        rootMenu.setRgt(counter);
        persist(rootMenu);


    }

    private int rebuildBranch(List<Menu> menuToAnalyse, Integer counter) {
        for (Menu menu : menuToAnalyse) {
            menu.setLft(counter++);
            if (isLeaf(menu)) {
                menu.setRgt(counter++);
            } else {
                DetachedCriteria query = DetachedCriteria.forClass(Menu.class);
                query.add(Property.forName("parentId").eq(menu.getId()));
                query.addOrder(Order.asc("id"));
                List<Menu> subMenu = getHibernateTemplate().findByCriteria(query);
                counter=rebuildBranch(subMenu, counter);
                menu.setRgt(counter++);

            }
            persist(menu);

        }
        return counter;
    }

    private void persist(Menu menu) {
        Timestamp time = new Timestamp(new DateMidnight().getMillis());
        menu.setCheckedOutTime(time);
        getHibernateTemplate().update(menu);
    }

    private boolean isLeaf(Menu menu) {
        DetachedCriteria query = DetachedCriteria.forClass(Menu.class);
        query.add(Property.forName("parentId").eq(menu.getId()));
        List<Menu> menus = getHibernateTemplate().findByCriteria(query);
        if (menus.size() == 0) {
            return true;
        } else {
            return false;
        }
    }

    public void createMenuArticle(String title,String alias,String path,int articleId,int categoryId){
        //TODO Parent ID
        Menu menu = MenuBuilder.aMenuArticle(title,alias, path, articleId,categoryId);
        getHibernateTemplate().save(menu);
        LOGGER.info("Menu for the article "+ path + " created");
    }
}
TOP

Related Classes of com.castronu.joomlajavaapi.dao.MenuDao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.