001 /*
002 * Copyright 2007-2010 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.kew.documentlink.dao.impl;
017
018 import java.util.List;
019
020 import javax.persistence.EntityManager;
021 import javax.persistence.PersistenceContext;
022
023 import org.kuali.rice.core.jpa.criteria.Criteria;
024 import org.kuali.rice.core.jpa.criteria.QueryByCriteria;
025 import org.kuali.rice.kew.doctype.bo.DocumentType;
026 import org.kuali.rice.kew.documentlink.DocumentLink;
027 import org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO;
028
029 /**
030 * This is a description of what this class does - g1zhang don't forget to fill this in.
031 *
032 * @author Kuali Rice Team (rice.collab@kuali.org)
033 *
034 */
035 public class DocumentLinkDAOJpaImpl implements DocumentLinkDAO {
036
037
038 @PersistenceContext(unitName = "kew-unit")
039 private EntityManager entityManager;
040
041 public EntityManager getEntityManager() {
042 return this.entityManager;
043 }
044
045 public void setEntityManager(EntityManager entityManager) {
046 this.entityManager = entityManager;
047 }
048
049 /**
050 * double delete all links from orgn doc
051 *
052 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#deleteDocmentLinksByDocId(java.lang.Long)
053 */
054 public void deleteDocmentLinksByDocId(Long docId) {
055 List<DocumentLink> links = getLinkedDocumentsByDocId(docId);
056 for(DocumentLink link: links){
057 deleteDocumentLink(link);
058 }
059 }
060
061 /**
062 * double delete a link
063 *
064 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#deleteDocumentLink(org.kuali.rice.kew.documentlink.DocumentLink)
065 */
066 public void deleteDocumentLink(DocumentLink link) {
067 deleteSingleLinkFromOrgnDoc(link);
068 deleteSingleLinkFromOrgnDoc(DocumentLinkDaoUtil.reverseLink(link));
069 }
070
071 /**
072 * get a link from orgn doc
073 *
074 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#getLinkedDocument(org.kuali.rice.kew.documentlink.DocumentLink)
075 */
076 public DocumentLink getLinkedDocument(DocumentLink link) {
077 Criteria crit = new Criteria(DocumentLink.class.getName());
078 crit.eq("orgnDocId", link.getOrgnDocId());
079 crit.eq("destDocId", link.getDestDocId());
080 return (DocumentLink) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
081 }
082
083 /**
084 * get all links from orgn doc
085 *
086 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#getLinkedDocumentsByDocId(java.lang.Long)
087 */
088 public List<DocumentLink> getLinkedDocumentsByDocId(Long docId) {
089 Criteria crit = new Criteria(DocumentLink.class.getName());
090 crit.eq("orgnDocId", docId);
091 return (List<DocumentLink>) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
092
093 }
094
095 /**
096 * add double link
097 *
098 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#saveDocumentLink(org.kuali.rice.kew.documentlink.DocumentLink)
099 */
100 public void saveDocumentLink(DocumentLink link) {
101 if(getLinkedDocument(link) == null)
102 entityManager.persist(link);
103 // //if we want a 2-way linked pair
104 DocumentLink rLink = DocumentLinkDaoUtil.reverseLink(link);
105 if(getLinkedDocument(rLink) == null)
106 entityManager.persist(link);
107
108 }
109
110 private void deleteSingleLinkFromOrgnDoc(DocumentLink link){
111 DocumentLink cur = getLinkedDocument(link);
112 entityManager.remove(cur) ;
113 }
114
115 }