001    /**
002     * Copyright 2005-2014 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.docsearch.dao.impl;
017    
018    import org.kuali.rice.core.api.criteria.QueryByCriteria;
019    import org.kuali.rice.kew.docsearch.SearchableAttributeDateTimeValue;
020    import org.kuali.rice.kew.docsearch.SearchableAttributeFloatValue;
021    import org.kuali.rice.kew.docsearch.SearchableAttributeLongValue;
022    import org.kuali.rice.kew.docsearch.SearchableAttributeStringValue;
023    import org.kuali.rice.kew.docsearch.dao.SearchableAttributeDAO;
024    import org.kuali.rice.krad.data.DataObjectService;
025    import org.springframework.beans.factory.annotation.Required;
026    
027    import javax.persistence.EntityManager;
028    import java.math.BigDecimal;
029    import java.sql.Timestamp;
030    import java.util.ArrayList;
031    import java.util.List;
032    
033    import static org.kuali.rice.core.api.criteria.PredicateFactory.equal;
034    
035    /**
036     * JPA implementation of SearchableAttributeDAO
037     *
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     *
040     */
041    public class SearchableAttributeDAOJpa implements SearchableAttributeDAO {
042    
043            private EntityManager entityManager;
044        private DataObjectService dataObjectService;
045    
046            /**
047             * This overridden method queries the SearchableAttributeDateTimeValue persistence class
048             *
049             * @see org.kuali.rice.kew.docsearch.dao.SearchableAttributeDAO#getSearchableAttributeDateTimeValuesByKey(
050         * java.lang.String,java.lang.String)
051             */
052            public List<Timestamp> getSearchableAttributeDateTimeValuesByKey(
053                            String documentId, String key) {
054    
055                    List<Timestamp> lRet = null;
056            QueryByCriteria.Builder builder = QueryByCriteria.Builder.create();
057            builder.setPredicates(equal("documentId",documentId),
058                                   equal("searchableAttributeKey",key));
059    
060    
061            List<SearchableAttributeDateTimeValue> results = getDataObjectService().findMatching(
062                                SearchableAttributeDateTimeValue.class,builder.build()).getResults();
063            if (!results.isEmpty()) {
064                    lRet = new ArrayList<Timestamp>();
065                for (SearchableAttributeDateTimeValue attribute: results) {
066                    lRet.add(attribute.getSearchableAttributeValue());
067                }
068            }
069                    return lRet;
070            }
071    
072            /**
073             * This overridden method queries the SearchableAttributeFloatValue persistence class
074             *
075             * @see org.kuali.rice.kew.docsearch.dao.SearchableAttributeDAO#getSearchableAttributeFloatValuesByKey(
076         * java.lang.String,java.lang.String)
077             */
078            public List<BigDecimal> getSearchableAttributeFloatValuesByKey(
079                            String documentId, String key) {
080                    List<BigDecimal> lRet = null;
081            QueryByCriteria.Builder builder = QueryByCriteria.Builder.create();
082            builder.setPredicates(equal("documentId",documentId),
083                    equal("searchableAttributeKey",key));
084            List<SearchableAttributeFloatValue> results = getDataObjectService().findMatching(
085                    SearchableAttributeFloatValue.class,builder.build()).getResults();
086            if (!results.isEmpty()) {
087                    lRet = new ArrayList<BigDecimal>();
088                for (SearchableAttributeFloatValue attribute: results) {
089                    lRet.add(attribute.getSearchableAttributeValue());
090                }
091            }
092                    return lRet;
093            }
094    
095            /**
096             * This overridden method queries the searchableAttributeKey persistence class
097             *
098             * @see org.kuali.rice.kew.docsearch.dao.SearchableAttributeDAO#getSearchableAttributeLongValuesByKey(
099         * java.lang.String,java.lang.String)
100             */
101            public List<Long> getSearchableAttributeLongValuesByKey(String documentId,
102                            String key) {
103                    List<Long> lRet = null;
104            QueryByCriteria.Builder builder = QueryByCriteria.Builder.create();
105            builder.setPredicates(equal("documentId",documentId),
106                    equal("searchableAttributeKey",key));
107            List<SearchableAttributeLongValue> results = getDataObjectService().findMatching(
108                    SearchableAttributeLongValue.class,builder.build()).getResults();
109            if (!results.isEmpty()) {
110                    lRet = new ArrayList<Long>();
111                for (SearchableAttributeLongValue attribute: results) {
112                    lRet.add(attribute.getSearchableAttributeValue());
113                }
114            }
115                    return lRet;
116            }
117    
118            /**
119             * This overridden method queries the SearchableAttributeStringValue persistence class
120             *
121             * @see org.kuali.rice.kew.docsearch.dao.SearchableAttributeDAO#getSearchableAttributeStringValuesByKey(
122         * java.lang.String,java.lang.String)
123             */
124            public List<String> getSearchableAttributeStringValuesByKey(
125                            String documentId, String key) {
126                    List<String> lRet = null;
127            QueryByCriteria.Builder builder = QueryByCriteria.Builder.create();
128            builder.setPredicates(equal("documentId",documentId),
129                    equal("searchableAttributeKey",key));
130            List<SearchableAttributeStringValue> results = getDataObjectService().findMatching(
131                    SearchableAttributeStringValue.class,builder.build()).getResults();
132            if (!results.isEmpty()) {
133                    lRet = new ArrayList<String>();
134                for (SearchableAttributeStringValue attribute: results) {
135                    lRet.add(attribute.getSearchableAttributeValue());
136                }
137            }
138                    return lRet;
139            }
140    
141        public EntityManager getEntityManager() {
142            return this.entityManager;
143        }
144    
145        public void setEntityManager(EntityManager entityManager) {
146            this.entityManager = entityManager;
147        }
148    
149    
150        public DataObjectService getDataObjectService() {
151            return dataObjectService;
152        }
153    
154        @Required
155        public void setDataObjectService(DataObjectService dataObjectService) {
156            this.dataObjectService = dataObjectService;
157        }
158    
159    
160    }