001/**
002 * Copyright 2005-2015 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.docsearch.dao.impl;
017
018import org.kuali.rice.core.api.criteria.QueryByCriteria;
019import org.kuali.rice.kew.docsearch.SearchableAttributeDateTimeValue;
020import org.kuali.rice.kew.docsearch.SearchableAttributeFloatValue;
021import org.kuali.rice.kew.docsearch.SearchableAttributeLongValue;
022import org.kuali.rice.kew.docsearch.SearchableAttributeStringValue;
023import org.kuali.rice.kew.docsearch.dao.SearchableAttributeDAO;
024import org.kuali.rice.krad.data.DataObjectService;
025import org.springframework.beans.factory.annotation.Required;
026
027import javax.persistence.EntityManager;
028import java.math.BigDecimal;
029import java.sql.Timestamp;
030import java.util.ArrayList;
031import java.util.List;
032
033import 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 */
041public 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}