001    /*
002     * Copyright 2011 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.kfs.module.endow.dataaccess.impl;
017    
018    import java.util.ArrayList;
019    import java.util.Iterator;
020    import java.util.List;
021    
022    import org.apache.ojb.broker.query.Criteria;
023    import org.apache.ojb.broker.query.QueryByCriteria;
024    import org.apache.ojb.broker.query.QueryFactory;
025    import org.apache.ojb.broker.query.ReportQueryByCriteria;
026    import org.kuali.kfs.module.endow.EndowPropertyConstants;
027    import org.kuali.kfs.module.endow.businessobject.KEMID;
028    import org.kuali.kfs.module.endow.businessobject.TypeRestrictionCode;
029    import org.kuali.kfs.module.endow.dataaccess.KemidDao;
030    import org.kuali.kfs.sys.KFSConstants;
031    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
032    
033    public class KemidDaoOjb extends PlatformAwareDaoBaseOjb implements KemidDao {
034    
035        /**
036         * 
037         * @see org.kuali.kfs.module.endow.dataaccess.KemidDao#getKemidRecordsByIds(java.util.List, java.lang.String, java.sql.Date)
038         */
039        public List<KEMID> getKemidRecordsByIds(List<String> kemids, String endowmentOption, String closedIndicator) {
040            
041            // get valid type restriction codes
042            Criteria subCrit = new Criteria();
043            if (endowmentOption.equalsIgnoreCase(KFSConstants.ParameterValues.YES) || endowmentOption.equalsIgnoreCase(KFSConstants.ParameterValues.NO)) {
044                subCrit.addEqualTo(EndowPropertyConstants.TYPE_RESTR_PERM_IND, endowmentOption.equalsIgnoreCase(KFSConstants.ParameterValues.YES) ? true : false);
045            }
046            subCrit.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true); 
047            ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(TypeRestrictionCode.class, subCrit, true); 
048            subQuery.setAttributes(new String[] {EndowPropertyConstants.ENDOWCODEBASE_CODE});
049                    
050            // set criteria for kemid
051            Criteria criteria = new Criteria();
052            if (kemids != null) {
053                for (String kemid : kemids) {
054                    Criteria c = new Criteria();
055                    if (kemid.contains(KFSConstants.WILDCARD_CHARACTER)) {
056                        c.addLike(EndowPropertyConstants.KEMID, kemid.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
057                    } else {
058                        c.addEqualTo(EndowPropertyConstants.KEMID, kemid.trim());
059                    }
060                    criteria.addOrCriteria(c);
061                }
062            }
063            criteria.addIn(EndowPropertyConstants.KEMID_TYP_PRIN_RESTR_CD, subQuery);
064            if (closedIndicator.equalsIgnoreCase(KFSConstants.ParameterValues.YES)) {
065                criteria.addEqualTo(EndowPropertyConstants.KEMID_CLOSED_IND, true);
066            } else if (closedIndicator.equalsIgnoreCase(KFSConstants.ParameterValues.NO)) {
067                criteria.addEqualTo(EndowPropertyConstants.KEMID_CLOSED_IND, false);
068            }
069            QueryByCriteria qbc = QueryFactory.newQuery(KEMID.class, criteria);
070            qbc.addOrderByAscending(EndowPropertyConstants.KEMID);
071            
072            return (List<KEMID>) getPersistenceBrokerTemplate().getCollectionByQuery(qbc);
073        }
074       
075        /**
076         * 
077         * @see org.kuali.kfs.module.endow.dataaccess.KemidDao#getKemidsByAttributeWithEndowmentOption(java.lang.String, java.util.List, java.lang.String, java.lang.String)
078         */
079        public List<String> getKemidsByAttributeWithEndowmentOption(String attributeName, List<String> values, String endowmentOption, String closedIndicator) {
080            
081            // get valid type restriction codes
082            Criteria subCrit = new Criteria();
083            if (endowmentOption.equalsIgnoreCase(KFSConstants.ParameterValues.YES) || endowmentOption.equalsIgnoreCase(KFSConstants.ParameterValues.NO)) {
084                subCrit.addEqualTo(EndowPropertyConstants.TYPE_RESTR_PERM_IND, endowmentOption.equalsIgnoreCase(KFSConstants.ParameterValues.YES) ? true : false);
085            }
086            subCrit.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true);
087            ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(TypeRestrictionCode.class, subCrit, true); 
088            subQuery.setAttributes(new String[] {EndowPropertyConstants.ENDOWCODEBASE_CODE});
089            
090            // set criteria for kemid
091            Criteria criteria = new Criteria();
092            if (values != null) {
093                for (String value : values) {
094                    Criteria c = new Criteria();
095                    if (value.contains(KFSConstants.WILDCARD_CHARACTER)) {
096                        c.addLike(attributeName, value.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
097                    } else {
098                        c.addEqualTo(attributeName, value.trim());
099                    }            
100                    criteria.addOrCriteria(c);
101                }    
102            }
103            criteria.addIn(EndowPropertyConstants.KEMID_TYP_PRIN_RESTR_CD, subQuery);
104            if (closedIndicator.equalsIgnoreCase(KFSConstants.ParameterValues.YES)) {
105                criteria.addEqualTo(EndowPropertyConstants.KEMID_CLOSED_IND, true);
106            } else if (closedIndicator.equalsIgnoreCase(KFSConstants.ParameterValues.NO)) {
107                criteria.addEqualTo(EndowPropertyConstants.KEMID_CLOSED_IND, false);
108            }        
109            ReportQueryByCriteria query = new ReportQueryByCriteria(KEMID.class, criteria, true);
110            query.setAttributes(new String[] {EndowPropertyConstants.KEMID});
111            
112            Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query); 
113            
114            List<String> kemids = new ArrayList<String>();
115            while (result.hasNext()) {
116                Object[] data = (Object[]) result.next();
117                kemids.add(data[0].toString());
118            }
119            
120            return kemids;
121        }
122        
123        /**
124         * 
125         * @see org.kuali.kfs.module.endow.dataaccess.KemidDao#getKemidsByAttribute(java.lang.String, java.util.List)
126         */
127        public List<String> getKemidsByAttribute(String attributeName, List<String> values) {
128            
129            Criteria criteria = new Criteria();
130            if (values != null) {
131                for (String value : values) {
132                    Criteria c = new Criteria();
133                    if (value.contains(KFSConstants.WILDCARD_CHARACTER)) {
134                        c.addLike(attributeName, value.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
135                    } else {
136                        c.addEqualTo(attributeName, value.trim());
137                    }            
138                    criteria.addOrCriteria(c);
139                }        
140            }
141            
142            ReportQueryByCriteria query = new ReportQueryByCriteria(KEMID.class, criteria, true);
143            query.setAttributes(new String[] {EndowPropertyConstants.KEMID});
144            
145            Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query); 
146            
147            List<String> kemids = new ArrayList<String>();
148            while (result.hasNext()) {
149                Object[] data = (Object[]) result.next();
150                kemids.add(data[0].toString());
151            }
152            
153            return kemids;
154        }
155    
156        /**
157         * 
158         * @see org.kuali.kfs.module.endow.dataaccess.KemidDao#getAttributeValues(java.lang.String, java.util.List)
159         */
160        public List<String> getAttributeValues(String attributeName, List<String> values) {
161            
162            Criteria criteria = new Criteria();
163            if (values != null) {
164                for (String value : values) {
165                    Criteria c = new Criteria();
166                    if (value.contains(KFSConstants.WILDCARD_CHARACTER)) {
167                        c.addLike(attributeName, value.trim().replace(KFSConstants.WILDCARD_CHARACTER, KFSConstants.PERCENTAGE_SIGN));
168                    } else {
169                        c.addEqualTo(attributeName, value.trim());
170                    }            
171                    criteria.addOrCriteria(c);
172                }        
173            }
174            ReportQueryByCriteria query = new ReportQueryByCriteria(KEMID.class, criteria, true);
175            query.setAttributes(new String[] {attributeName});
176    
177            Iterator<Object> result = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query); 
178            
179            List<String> attributeValues = new ArrayList<String>();
180            while (result.hasNext()) {
181                Object[] data = (Object[]) result.next();
182                attributeValues.add(data[0].toString());
183            }
184            
185            return attributeValues;
186        }
187    }