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.document.service.impl;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    import java.util.HashMap;
021    import java.util.Map;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.kuali.kfs.module.endow.EndowPropertyConstants;
025    import org.kuali.kfs.module.endow.businessobject.HoldingHistory;
026    import org.kuali.kfs.module.endow.businessobject.Security;
027    
028    import org.kuali.kfs.module.endow.document.service.HoldingHistoryService;
029    import org.kuali.kfs.sys.context.SpringContext;
030    import org.kuali.rice.kns.service.BusinessObjectService;
031    import org.kuali.rice.kns.service.DataDictionaryService;
032    import org.kuali.rice.kns.util.KualiInteger;
033    
034    /**
035     * This class provides service for Security maintenance
036     */
037    public class HoldingHistoryServiceImpl implements HoldingHistoryService {
038    
039        protected BusinessObjectService businessObjectService;
040    
041        /**
042         * @see org.kuali.kfs.module.endow.document.service.PooledFundControlService#getHoldingHistoryBySecuritIdAndMonthEndId(java.lang.String, KualiInteger)
043         */
044        public Collection<HoldingHistory> getHoldingHistoryBySecuritIdAndMonthEndId(String securityId, KualiInteger monthEndId) {
045    
046            Collection<HoldingHistory> holdingHistory = new ArrayList();
047            
048            if (StringUtils.isNotBlank(securityId)) {
049                Map criteria = new HashMap();
050                
051                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(HoldingHistory.class, EndowPropertyConstants.HISTORY_VALUE_ADJUSTMENT_SECURITY_ID)) {
052                    securityId = securityId.toUpperCase();
053                }
054                
055                criteria.put(EndowPropertyConstants.HISTORY_VALUE_ADJUSTMENT_SECURITY_ID, securityId);
056                criteria.put(EndowPropertyConstants.MONTH_END_DATE_ID, monthEndId);            
057                holdingHistory = businessObjectService.findMatching(HoldingHistory.class, criteria);
058            }
059            
060            return holdingHistory;
061            
062        }
063        
064        /**
065         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#saveHoldingHistory(HoldingHistory)
066         */
067        public boolean saveHoldingHistory(HoldingHistory holdingHistoryRecord) {
068           boolean success = true;
069           
070           try {
071               businessObjectService.save(holdingHistoryRecord);
072           }
073           catch (Exception ex) {
074               success = false;
075           }
076           
077           return success;
078        }
079        
080        /**
081         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#getKemIdFromHoldingHistory(String)
082         */
083        public String getKemIdFromHoldingHistory(String securityId) {
084            String kemId = "";
085            
086            Collection<HoldingHistory> holdingHistory = new ArrayList();
087            
088            if (StringUtils.isNotBlank(securityId)) {
089                Map criteria = new HashMap();
090                
091                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(HoldingHistory.class, EndowPropertyConstants.HISTORY_VALUE_ADJUSTMENT_SECURITY_ID)) {
092                    securityId = securityId.toUpperCase();
093                }
094                
095                criteria.put(EndowPropertyConstants.HISTORY_VALUE_ADJUSTMENT_SECURITY_ID, securityId);
096    
097                holdingHistory = businessObjectService.findMatching(HoldingHistory.class, criteria);
098            }
099            
100            for (HoldingHistory holdingHistoryRecord : holdingHistory) {
101                kemId = holdingHistoryRecord.getKemid();
102            }
103            
104            return kemId;
105        }
106        
107        /**
108         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#getHoldingHistoryForMatchingSecurityClassCode(String)
109         * Get all securityIds for the given securityClassCode from END_SEC_T table.
110         */
111        public Collection<HoldingHistory> getHoldingHistoryForMatchingSecurityClassCode(String securityClassCode) {
112            Collection<HoldingHistory> holdingHistory = new ArrayList();
113            
114            Collection<Security> securities = new ArrayList();
115            
116            if (StringUtils.isNotBlank(securityClassCode)) {
117                Map criteria = new HashMap();
118                
119                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(Security.class, EndowPropertyConstants.SECURITY_CLASS_CODE)) {
120                    securityClassCode = securityClassCode.toUpperCase();
121                }
122                criteria.put(EndowPropertyConstants.SECURITY_CLASS_CODE, securityClassCode);
123    
124                securities = businessObjectService.findMatching(Security.class, criteria);
125                
126                for (Security security : securities) {
127                    criteria.clear();
128                    criteria.put(EndowPropertyConstants.HOLDING_HISTORY_SECURITY_ID, security.getId());
129                    
130                    holdingHistory.addAll(businessObjectService.findMatching(HoldingHistory.class, criteria)); 
131                }
132            }
133            
134            return holdingHistory;
135            
136        }
137        
138        /**
139         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#getHoldingHistoryBySecurityId(String)
140         */
141        public Collection<HoldingHistory> getHoldingHistoryBySecurityId(String securityId) {
142            Collection<HoldingHistory> holdingHistory = new ArrayList();
143            
144            if (StringUtils.isNotBlank(securityId)) {
145                Map criteria = new HashMap();
146                
147                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(HoldingHistory.class, EndowPropertyConstants.HOLDING_HISTORY_SECURITY_ID)) {
148                    securityId = securityId.toUpperCase();
149                }
150                
151                criteria.put(EndowPropertyConstants.HOLDING_HISTORY_SECURITY_ID, securityId);
152    
153                holdingHistory = businessObjectService.findMatching(HoldingHistory.class, criteria);
154            }
155            
156            return holdingHistory;
157        }
158        
159        /**
160         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#getHoldingHistoryForMatchingSecurityClassCodeAndSecurityId(String, String)
161         */
162        public Collection<HoldingHistory> getHoldingHistoryForMatchingSecurityClassCodeAndSecurityId(String securityClassCode, String securityId) {
163            Collection<HoldingHistory> holdingHistory = new ArrayList();
164            
165            holdingHistory = getHoldingHistoryForMatchingSecurityClassCode(securityClassCode);
166            
167            holdingHistory.addAll(getHoldingHistoryBySecurityId(securityId));
168            
169            return holdingHistory;
170        }
171        
172        /**
173         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#getHoldingHistoryByIncomePrincipalIndicator(String)
174         */
175        public Collection<HoldingHistory> getHoldingHistoryByIncomePrincipalIndicator(String incomePrincipalIndicator) {
176            Collection<HoldingHistory> holdingHistory = new ArrayList();
177            
178            if (StringUtils.isNotBlank(incomePrincipalIndicator)) {
179                Map criteria = new HashMap();
180                
181                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(HoldingHistory.class, EndowPropertyConstants.HOLDING_HISTORY_INCOME_PRINCIPAL_INDICATOR)) {
182                    incomePrincipalIndicator = incomePrincipalIndicator.toUpperCase();
183                }
184                
185                criteria.put(EndowPropertyConstants.HOLDING_HISTORY_INCOME_PRINCIPAL_INDICATOR, incomePrincipalIndicator);
186    
187                holdingHistory = businessObjectService.findMatching(HoldingHistory.class, criteria);
188            }
189            
190            return holdingHistory;
191        }
192    
193        /**
194         * @see org.kuali.kfs.module.endow.document.service.HoldingHistoryService#getAllHoldingHistory()
195         */
196        public Collection<HoldingHistory> getAllHoldingHistory() {
197           
198           Collection<HoldingHistory> holdingHistory = new ArrayList();
199           
200           holdingHistory = businessObjectService.findAll(HoldingHistory.class);
201           
202           return holdingHistory;
203        }
204        
205        
206        /**
207         * This method gets the businessObjectService.
208         * 
209         * @return businessObjectService
210         */
211        protected BusinessObjectService getBusinessObjectService() {
212            return businessObjectService;
213        }
214    
215        /**
216         * This method sets the businessObjectService
217         * 
218         * @param businessObjectService
219         */
220        public void setBusinessObjectService(BusinessObjectService businessObjectService) {
221            this.businessObjectService = businessObjectService;
222        }
223    }