package org.appfuse.persistence.hibernate;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.appfuse.model.ResumeSkill;
import org.appfuse.persistence.DAOException;
import org.appfuse.persistence.SkillDAO;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;


public class SkillDAOHibernate extends HibernateDaoSupport implements SkillDAO {
    private Log log = LogFactory.getLog(SkillDAOHibernate.class);
    
    /**
     * @see org.appfuse.persistence.SkillDAO#getResumeSkill(java.lang.Long)
     */
    public ResumeSkill getResumeSkill(Long skillId) throws DAOException {
        return (ResumeSkill) getHibernateTemplate().
                                get(ResumeSkill.class, skillId);
    }
    
    /**
     * @see org.appfuse.persistence.SkillDAO#getResumeSkills(java.lang.Long)
     */
    public List getResumeSkills(Long resumeId) throws DAOException {
        return getHibernateTemplate().
            find("from ResumeSkill rs where rs.resumeId=? order by upper(rs.name)", 
                    resumeId);
    }
   
    /**
     * @see org.appfuse.persistence.SkillDAO#removeResumeSkill(org.appfuse.model.ResumeSkill)
     */
    public void removeResumeSkill(ResumeSkill skill) throws DAOException {
        // load before deleting - Spring doesn't like that not-null properties
        // are blank.  When we're deleting, all that's passed in is the id.
        ResumeSkill as = 
            (ResumeSkill) getHibernateTemplate()
                            .get(ResumeSkill.class, skill.getId());
        if (as != null) {
            getHibernateTemplate().delete(as);
        }
    }
    
    /**
     * @see org.appfuse.persistence.SkillDAO#saveResumeSkill(org.appfuse.model.ResumeSkill)
     */
    public ResumeSkill saveResumeSkill(ResumeSkill skill)
            throws DAOException {
        getHibernateTemplate().saveOrUpdate(skill);
        return skill;
    }
}