org.sakaiproject.config.impl.HibernateConfigItemDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.config.impl.HibernateConfigItemDaoImpl.java

Source

/******************************************************************************
 * $URL: $
 * $Id: $
 ******************************************************************************
 *
 * Copyright (c) 2003-2014 The Apereo Foundation
 *
 * Licensed under the Educational Community License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *       http://opensource.org/licenses/ecl2
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************/

package org.sakaiproject.config.impl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.sakaiproject.config.api.HibernateConfigItem;
import org.sakaiproject.config.api.HibernateConfigItemDao;
import org.sakaiproject.db.api.SqlService;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * KNL-1063
 * HibernateConfigItemDaoImpl
 * Implementation for HibernateConfigItemDao
 *
 * @author Earle Nietzel
 *         Created on Mar 8, 2013
 */
public class HibernateConfigItemDaoImpl extends HibernateDaoSupport implements HibernateConfigItemDao {
    private final Log log = LogFactory.getLog(HibernateConfigItemDaoImpl.class);

    private static String SAKAI_CONFIG_ITEM_SQL = "sakai_config_item";
    private SqlService sqlService;

    private boolean autoDdl;

    public void init() {
        if (autoDdl) {
            log.info("init: autoDDL " + SAKAI_CONFIG_ITEM_SQL);
            sqlService.ddl(this.getClass().getClassLoader(), SAKAI_CONFIG_ITEM_SQL);
        }
    }

    public void setSqlService(SqlService sqlService) {
        this.sqlService = sqlService;
    }

    public void setAutoDdl(boolean autoDdl) {
        this.autoDdl = autoDdl;
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#create(org.sakaiproject.config.api.HibernateConfigItem)
     */
    @Override
    public void create(HibernateConfigItem item) {
        if (item != null) {
            getSession().save(item);
        }
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#read(java.lang.Long)
     */
    @Override
    public HibernateConfigItem read(Long id) {
        if (id == null) {
            return null;
        }

        return (HibernateConfigItem) getSession().get(HibernateConfigItem.class, id);
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#update(org.sakaiproject.config.api.HibernateConfigItem)
     */
    @Override
    public void update(HibernateConfigItem item) {
        if (item == null) {
            return;
        }

        getSession().update(item);
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#delete(org.sakaiproject.config.api.HibernateConfigItem)
     */
    @Override
    public void delete(HibernateConfigItem item) {
        if (item == null) {
            return;
        }

        getSession().delete(item);
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#countByNode(java.lang.String)
     */
    public int countByNode(String node) {
        if (node == null) {
            return -1;
        }
        Criteria criteria = getSession().createCriteria(HibernateConfigItem.class)
                .setProjection(Projections.rowCount()).add(Restrictions.eq("node", node));

        return (Integer) criteria.uniqueResult();
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#countByNodeAndName(java.lang.String, java.lang.String)
     */
    @Override
    public int countByNodeAndName(String node, String name) {
        if (node == null || name == null) {
            return -1;
        }
        Criteria criteria = getSession().createCriteria(HibernateConfigItem.class)
                .setProjection(Projections.rowCount()).add(Restrictions.eq("node", node))
                .add(Restrictions.eq("name", name));

        return (Integer) criteria.uniqueResult();
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#saveOrUpdateAll(java.util.List)
     */
    @Override
    public void saveOrUpdateAll(List<HibernateConfigItem> items) {
        if (items == null) {
            return;
        }

        for (HibernateConfigItem item : items) {
            if (item != null) {
                saveOrUpdate(item);
            }
        }
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#saveOrUpdate(org.sakaiproject.config.api.HibernateConfigItem)
     */
    @Override
    public void saveOrUpdate(HibernateConfigItem item) {
        if (item == null) {
            return;
        }

        getSession().saveOrUpdate(item);
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#findAllByCriteriaByNode(java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean)
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<HibernateConfigItem> findAllByCriteriaByNode(String node, String name, Boolean defaulted,
            Boolean registered, Boolean dynamic, Boolean secured) {
        if (node == null) { // TODO get the globals only
            return Collections.emptyList();
        }

        Criteria criteria = getSession().createCriteria(HibernateConfigItem.class);
        criteria.add(Restrictions.eq("node", node)); // TODO make this search by null also
        if (name != null && name.length() > 0) {
            criteria.add(Restrictions.eq("name", name));
        }
        if (defaulted != null) {
            criteria.add(Restrictions.eq("defaulted", defaulted));
        }
        if (registered != null) {
            criteria.add(Restrictions.eq("registered", registered));
        }
        if (dynamic != null) {
            criteria.add(Restrictions.eq("dynamic", dynamic));
        }
        if (secured != null) {
            criteria.add(Restrictions.eq("secured", secured));
        }
        // TODO throw away cases where node is null AND node is set (only keep node is set) - use order by name & node
        return criteria.list();
    }

    /* (non-Javadoc)
     * @see org.sakaiproject.config.api.HibernateConfigItemDao#findPollOnByNode(java.lang.String, java.util.Date, java.util.Date)
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<HibernateConfigItem> findPollOnByNode(String node, Date onOrAfter, Date before) {
        Criteria criteria = getSession().createCriteria(HibernateConfigItem.class)
                .add(Restrictions.eq("node", node));
        if (onOrAfter == null && before == null) {
            criteria.add(Restrictions.isNotNull("pollOn"));
        } else {
            if (onOrAfter != null) {
                criteria.add(Restrictions.ge("pollOn", onOrAfter));
            }
            if (before != null) {
                criteria.add(Restrictions.lt("pollOn", before));
            }
        }
        return criteria.list();
    }
}