Project: BookmarksPortlet
/**
 * Licensed to Jasig under one or more contributor license 
 * agreements. See the NOTICE file distributed with this work 
 * for additional information regarding copyright ownership. 
 * Jasig licenses this file to you under the Apache 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://www.apache.org/licenses/LICENSE-2.0 
 * 
 * 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 edu.wisc.my.portlets.bookmarks.dao.hibernate; 
 
import java.util.Date; 
 
import org.hibernate.Criteria; 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.criterion.Criterion; 
import org.hibernate.criterion.Restrictions; 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
 
import edu.wisc.my.portlets.bookmarks.dao.BookmarkStore; 
import edu.wisc.my.portlets.bookmarks.domain.BookmarkSet; 
 
/**
 * Persists and retrieves BookmarkSet objects via Hibernate. 
 *  
 * @author Eric Dalquist <a href="mailto:[email protected]">[email protected]</a> 
 * @version $Revision: 12173 $ 
 */
 
public class HibernateBookmarkStore extends HibernateDaoSupport implements BookmarkStore { 
    private static final String PARAM_OWNER = "owner"
    private static final String PARAM_NAME = "name"
 
    /**
     * @see edu.wisc.my.portlets.bookmarks.dao.BookmarkStore#getBookmarkSet(java.lang.String, java.lang.String) 
     */
 
    public BookmarkSet getBookmarkSet(String owner, String name) { 
        try { 
            final Session session = this.getSession(false); 
             
            final Criteria c = session.createCriteria(BookmarkSet.class); 
            c.add(Restrictions.and(this.smartEqual(PARAM_NAME, name), 
                                   this.smartEqual(PARAM_OWNER, owner))); 
            c.setCacheable(true); 
             
            final BookmarkSet bs = (BookmarkSet)c.uniqueResult(); 
             
            return bs; 
        } 
        catch (HibernateException ex) { 
            throw convertHibernateAccessException(ex); 
        } 
    } 
 
    /**
     * @see edu.wisc.my.portlets.bookmarks.dao.BookmarkStore#storeBookmarkSet(edu.wisc.my.portlets.bookmarks.domain.BookmarkSet) 
     */
 
    public void storeBookmarkSet(BookmarkSet bookmarkSet) { 
        try { 
            final Session session = this.getSession(false); 
             
            //If the BookmarkSet is new it must be saved first 
            if (bookmarkSet.getId() == -1) { 
                //Ensure there won't be duplicate entries with this owner & name 
                this.removeBookmarkSet(bookmarkSet.getOwner(), bookmarkSet.getName()); 
                session.save(bookmarkSet); 
            } 
             
            session.update(bookmarkSet); 
            session.flush(); 
        } 
        catch (HibernateException ex) { 
            throw convertHibernateAccessException(ex); 
        } 
    } 
 
    /**
     * @see edu.wisc.my.portlets.bookmarks.dao.BookmarkStore#removeBookmarkSet(java.lang.String, java.lang.String) 
     */
 
    public void removeBookmarkSet(String owner, String name) { 
        try { 
            final Session session = this.getSession(false); 
             
            final BookmarkSet set = this.getBookmarkSet(owner, name); 
            if (set != null) { 
                session.delete(set); 
            } 
             
            session.flush(); 
        } 
        catch (HibernateException ex) { 
            throw convertHibernateAccessException(ex); 
        } 
    } 
     
 
    /**
     * @see edu.wisc.my.portlets.bookmarks.dao.BookmarkStore#createBookmarkSet(java.lang.String, java.lang.String) 
     */
 
    public BookmarkSet createBookmarkSet(String owner, String name) { 
        final BookmarkSet bookmarkSet = new BookmarkSet(); 
        bookmarkSet.setOwner(owner); 
        bookmarkSet.setName(name); 
        bookmarkSet.setCreated(new Date()); 
        bookmarkSet.setModified(bookmarkSet.getCreated()); 
 
        this.storeBookmarkSet(bookmarkSet); 
         
        return bookmarkSet; 
    } 
 
    /**
     * There are two different Criterion for if a property is null or checking equality. This is a 
     * convience method to return the one based on if value is null or not. 
     */
 
    private Criterion smartEqual(String property, Object value) { 
        if (value == null) { 
            return Restrictions.isNull(property); 
        } 
        else { 
            return Restrictions.eq(property, value); 
        } 
    } 
}