001 /**
002 * Copyright 2005-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.krad.dao.impl;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import javax.persistence.EntityManager;
022 import javax.persistence.PersistenceContext;
023
024 import org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria;
025 import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria;
026 import org.kuali.rice.krad.bo.Attachment;
027 import org.kuali.rice.krad.bo.Note;
028 import org.kuali.rice.krad.dao.NoteDao;
029 import org.springframework.dao.DataAccessException;
030
031 /**
032 * This class is the JPA implementation of the NoteDao interface.
033 *
034 * @author Kuali Rice Team (rice.collab@kuali.org)
035 */
036 public class NoteDaoJpa implements NoteDao {
037
038 @PersistenceContext
039 private EntityManager entityManager;
040
041 /**
042 * Saves a note to the DB using JPA.
043 */
044 public void save(Note note) throws DataAccessException {
045 if (note != null && note.getNoteIdentifier() == null && note.getAttachment() != null) {
046 Attachment attachment = note.getAttachment();
047 note.setAttachment(null);
048 // store without attachment
049 entityManager.merge(note);
050 attachment.setNoteIdentifier(note.getNoteIdentifier());
051 // put attachment back
052 note.setAttachment(attachment);
053 }
054 entityManager.merge(note);
055
056 }
057
058 /**
059 * Deletes a note from the DB using JPA.
060 */
061 public void deleteNote(Note note) throws DataAccessException {
062 entityManager.remove(note.getAttachment());
063 note.setAttachment(null);
064 entityManager.remove(note);
065 }
066
067 /**
068 * Retrieves document associated with a given object using JPA.
069 */
070 public List<Note> findByremoteObjectId(String remoteObjectId) {
071 Criteria criteria = new Criteria(Note.class.getName());
072 // TODO: Notes - Chris move remoteObjectId string to constants
073 criteria.eq("remoteObjectIdentifier", remoteObjectId);
074 criteria.orderBy("notePostedTimestamp", true);
075 return new ArrayList<Note>(new QueryByCriteria(entityManager, criteria).toQuery().getResultList());
076 }
077
078 public Note getNoteByNoteId(Long noteId) {
079 Criteria criteria = new Criteria(Note.class.getName());
080 criteria.eq("noteIdentifier", noteId);
081 return (Note) new QueryByCriteria(entityManager, criteria).toQuery().getSingleResult();
082 }
083
084 /**
085 * @return the entityManager
086 */
087 public EntityManager getEntityManager() {
088 return this.entityManager;
089 }
090
091 /**
092 * @param entityManager the entityManager to set
093 */
094 public void setEntityManager(EntityManager entityManager) {
095 this.entityManager = entityManager;
096 }
097
098 }