001 /**
002 * Copyright 2005-2013 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 org.apache.ojb.broker.query.Criteria;
021 import org.apache.ojb.broker.query.QueryByCriteria;
022 import org.kuali.rice.kew.documentlink.DocumentLink;
023 import org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO;
024 import org.springmodules.orm.ojb.support.PersistenceBrokerDaoSupport;
025
026 /**
027 * This is a description of what this class does - g1zhang don't forget to fill this in.
028 *
029 * @author Kuali Rice Team (kuali-rice@googlegroups.com)
030 *
031 */
032 public class DocumentLinkDAOOjbImpl extends PersistenceBrokerDaoSupport implements DocumentLinkDAO{
033
034 public void saveDocumentLink(DocumentLink link) {
035 DocumentLink linkedDocument = getLinkedDocument(link);
036 if(linkedDocument == null)
037 this.getPersistenceBrokerTemplate().store(link);
038 else
039 link.setDocLinkId(linkedDocument.getDocLinkId());
040 //if we want a 2-way linked pair
041 DocumentLink rLink = DocumentLinkDaoUtil.reverseLink(link);
042 if(getLinkedDocument(rLink) == null)
043 this.getPersistenceBrokerTemplate().store(rLink);
044 }
045
046 public void deleteDocumentLink(DocumentLink link) {
047 deleteSingleLinkFromOrgnDoc(link);
048 deleteSingleLinkFromOrgnDoc(DocumentLinkDaoUtil.reverseLink(link));
049 }
050
051 //double delete style
052 public void deleteDocmentLinksByDocId(String docId){
053 List<DocumentLink> links = getLinkedDocumentsByDocId(docId);
054 for(DocumentLink link: links){
055 deleteDocumentLink(link);
056 }
057
058 }
059
060 /**
061 * This overridden method ...
062 *
063 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#getLinkedDocumentByDocId(java.lang.Long)
064 */
065 public List<DocumentLink> getLinkedDocumentsByDocId(String docId) {
066 Criteria crit = new Criteria();
067 crit.addEqualTo("orgnDocId", docId);
068 QueryByCriteria query = new QueryByCriteria(DocumentLink.class, crit);
069 query.addOrderByAscending("orgnDocId");
070 return (List<DocumentLink>) this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
071 }
072
073 public List<DocumentLink> getOutgoingLinkedDocumentsByDocId(String docId) {
074 Criteria crit = new Criteria();
075 crit.addEqualTo("destDocId", docId);
076 QueryByCriteria query = new QueryByCriteria(DocumentLink.class, crit);
077 query.addOrderByAscending("destDocId");
078 return (List<DocumentLink>) this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
079 }
080
081 /**
082 * This overridden method ...
083 *
084 * @see org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO#getLinkedDocument(org.kuali.rice.kew.documentlink.DocumentLink)
085 */
086 public DocumentLink getLinkedDocument(DocumentLink link) {
087 Criteria crit = new Criteria();
088 crit.addEqualTo("orgnDocId", link.getOrgnDocId());
089 crit.addEqualTo("destDocId", link.getDestDocId());
090 QueryByCriteria query = new QueryByCriteria(DocumentLink.class, crit);
091 query.addOrderByAscending("orgnDocId");
092 return (DocumentLink) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
093 }
094
095 private void deleteSingleLinkFromOrgnDoc(DocumentLink link){
096 Criteria crit = new Criteria();
097 crit.addEqualTo("orgnDocId", link.getOrgnDocId());
098 crit.addEqualTo("destDocId", link.getDestDocId());
099 this.getPersistenceBrokerTemplate().deleteByQuery(new QueryByCriteria(DocumentLink.class, crit));
100 }
101
102 public void deleteSingleLinksByOrgnDocId(String docId){
103 Criteria crit = new Criteria();
104 crit.addEqualTo("orgnDocId", docId);
105 this.getPersistenceBrokerTemplate().deleteByQuery(new QueryByCriteria(DocumentLink.class, crit));
106 }
107
108 public DocumentLink getDocumentLink(Long documentLinkId) {
109 Criteria crit = new Criteria();
110 crit.addEqualTo("docLinkId", documentLinkId);
111 return (DocumentLink) this.getPersistenceBrokerTemplate().getObjectByQuery(new QueryByCriteria(DocumentLink.class, crit));
112 }
113 }