001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.kew.documentlink.dao.impl;
017
018import java.util.List;
019
020import org.apache.ojb.broker.query.Criteria;
021import org.apache.ojb.broker.query.QueryByCriteria;
022import org.kuali.rice.kew.documentlink.DocumentLink;
023import org.kuali.rice.kew.documentlink.dao.DocumentLinkDAO;
024import 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 */
032public 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}