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.krms.impl.repository; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.core.api.criteria.CriteriaLookupService; 020import org.kuali.rice.core.api.criteria.GenericQueryResults; 021import org.kuali.rice.core.api.criteria.LookupCustomizer; 022import org.kuali.rice.core.api.criteria.QueryByCriteria; 023import org.kuali.rice.krad.service.BusinessObjectService; 024import org.kuali.rice.krms.api.repository.reference.ReferenceObjectBinding; 025import org.kuali.rice.krms.api.repository.reference.ReferenceObjectBindingQueryResults; 026import org.kuali.rice.krms.impl.AttributeTransform; 027import java.util.ArrayList; 028import java.util.Collection; 029import java.util.Collections; 030import java.util.HashMap; 031import java.util.LinkedList; 032import java.util.List; 033import java.util.Map; 034 035/** 036 * Implementation of the @{link ReferenceObjectBindingBoService} interface for accessing {@link ReferenceObjectBindingBo} related business objects. 037 * 038 * @author Kuali Rice Team (rice.collab@kuali.org) 039 * 040 */ 041public final class ReferenceObjectBindingBoServiceImpl 042 implements ReferenceObjectBindingBoService 043{ 044 045 private BusinessObjectService businessObjectService; 046 private KrmsAttributeDefinitionService attributeDefinitionService; 047 private CriteriaLookupService criteriaLookupService; 048 049 /** 050 * Sets the value of BusinessObjectService to the given value. 051 * 052 * @param businessObjectService the BusinessObjectService value to set. 053 * 054 */ 055 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 056 this.businessObjectService = businessObjectService; 057 } 058 059 public void setCriteriaLookupService(CriteriaLookupService criteriaLookupService) { 060 this.criteriaLookupService = criteriaLookupService; 061 } 062 063 public CriteriaLookupService getCriteriaLookupService() { 064 if ( criteriaLookupService == null ) { 065 criteriaLookupService = KrmsRepositoryServiceLocator.getCriteriaLookupService(); 066 } 067 return this.criteriaLookupService; 068 } 069 070 public void setAttributeDefinitionService(KrmsAttributeDefinitionService attributeDefinitionService) { 071 this.attributeDefinitionService = attributeDefinitionService; 072 } 073 074 public KrmsAttributeDefinitionService getAttributeDefinitionService() { 075 if (attributeDefinitionService == null) { 076 attributeDefinitionService = KrmsRepositoryServiceLocator.getKrmsAttributeDefinitionService(); 077 } 078 return attributeDefinitionService; 079 } 080 081 @Override 082 public ReferenceObjectBinding createReferenceObjectBinding(ReferenceObjectBinding referenceObjectBinding) { 083 incomingParamCheck(referenceObjectBinding , "referenceObjectBinding"); 084 final String referenceObjectBindingIdKey = referenceObjectBinding.getId(); 085 final ReferenceObjectBinding existing = getReferenceObjectBinding(referenceObjectBindingIdKey); 086 if (existing != null){ throw new IllegalStateException("the ReferenceObjectBinding to create already exists: " + referenceObjectBinding); } 087 ReferenceObjectBindingBo bo = (ReferenceObjectBindingBo)businessObjectService.save(from(referenceObjectBinding)); 088 return ReferenceObjectBindingBo.to(bo); 089 } 090 091 @Override 092 public ReferenceObjectBinding getReferenceObjectBinding(String referenceObjectBindingId) { 093 incomingParamCheck(referenceObjectBindingId , "referenceObjectBindingId"); 094 ReferenceObjectBindingBo bo = businessObjectService.findBySinglePrimaryKey(ReferenceObjectBindingBo.class, referenceObjectBindingId); 095 return ReferenceObjectBindingBo.to(bo); 096 } 097 098 @Override 099 public void updateReferenceObjectBinding(ReferenceObjectBinding referenceObjectBinding) { 100 incomingParamCheck(referenceObjectBinding , "referenceObjectBinding"); 101 final ReferenceObjectBinding existing = getReferenceObjectBinding(referenceObjectBinding.getId()); 102 if (existing == null){ throw new IllegalStateException("the ReferenceObjectBinding to update does not exists: " + referenceObjectBinding);} 103 final ReferenceObjectBinding toUpdate; 104 if (!existing.getId().equals(referenceObjectBinding.getId())){ 105 // if passed in id does not match existing id, correct it 106 final ReferenceObjectBinding.Builder builder = ReferenceObjectBinding.Builder.create(referenceObjectBinding); 107 builder.setId(existing.getId()); 108 toUpdate = builder.build(); 109 } else { 110 toUpdate = referenceObjectBinding; 111 } 112 113 // copy all updateable fields to bo 114 ReferenceObjectBindingBo boToUpdate = from(toUpdate); 115 116 // update the rule and create new attributes 117 businessObjectService.save(boToUpdate); 118 } 119 120 @Override 121 public void deleteReferenceObjectBinding(String referenceObjectBindingId) { 122 incomingParamCheck(referenceObjectBindingId , "referenceObjectBindingId"); 123 final ReferenceObjectBinding existing = getReferenceObjectBinding(referenceObjectBindingId); 124 if (existing == null){ throw new IllegalStateException("the ReferenceObjectBinding to delete does not exists: " + referenceObjectBindingId);} 125 businessObjectService.delete(from(existing)); 126 } 127 128 @Override 129 public List<ReferenceObjectBinding> findReferenceObjectBindingsByCollectionName(String collectionName) { 130 if (org.apache.commons.lang.StringUtils.isBlank(collectionName)) { 131 throw new IllegalArgumentException("collectionName is null or blank"); 132 } 133 final Map<String, Object> map = new HashMap<String, Object>(); 134 map.put("collectionName", collectionName); 135 List<ReferenceObjectBindingBo> bos = (List<ReferenceObjectBindingBo>) businessObjectService.findMatching(ReferenceObjectBindingBo.class, map); 136 return convertBosToImmutables(bos); 137 } 138 139 @Override 140 public List<ReferenceObjectBinding> findReferenceObjectBindingsByKrmsDiscriminatorType(String krmsDiscriminatorType) { 141 if (org.apache.commons.lang.StringUtils.isBlank(krmsDiscriminatorType)) { 142 throw new IllegalArgumentException("krmsDiscriminatorType is null or blank"); 143 } 144 final Map<String, Object> map = new HashMap<String, Object>(); 145 map.put("krmsDiscriminatorType", krmsDiscriminatorType); 146 List<ReferenceObjectBindingBo> bos = (List<ReferenceObjectBindingBo>) businessObjectService.findMatching(ReferenceObjectBindingBo.class, map); 147 return convertBosToImmutables(bos); 148 } 149 150 @Override 151 public List<ReferenceObjectBinding> findReferenceObjectBindingsByKrmsObject(String krmsObjectId) { 152 if (org.apache.commons.lang.StringUtils.isBlank(krmsObjectId)) { 153 throw new IllegalArgumentException("krmsObjectId is null or blank"); 154 } 155 final Map<String, Object> map = new HashMap<String, Object>(); 156 map.put("krmsObjectId", krmsObjectId); 157 List<ReferenceObjectBindingBo> bos = (List<ReferenceObjectBindingBo>) businessObjectService.findMatching(ReferenceObjectBindingBo.class, map); 158 return convertBosToImmutables(bos); 159 } 160 161 @Override 162 public List<ReferenceObjectBinding> findReferenceObjectBindingsByNamespace(String namespace) { 163 if (org.apache.commons.lang.StringUtils.isBlank(namespace)) { 164 throw new IllegalArgumentException("namespace is null or blank"); 165 } 166 final Map<String, Object> map = new HashMap<String, Object>(); 167 map.put("namespace", namespace); 168 List<ReferenceObjectBindingBo> bos = (List<ReferenceObjectBindingBo>) businessObjectService.findMatching(ReferenceObjectBindingBo.class, map); 169 return convertBosToImmutables(bos); 170 } 171 172 @Override 173 public List<ReferenceObjectBinding> findReferenceObjectBindingsByReferenceDiscriminatorType(String referenceDiscriminatorType) { 174 if (org.apache.commons.lang.StringUtils.isBlank(referenceDiscriminatorType)) { 175 throw new IllegalArgumentException("referenceDiscriminatorType is null or blank"); 176 } 177 final Map<String, Object> map = new HashMap<String, Object>(); 178 map.put("referenceDiscriminatorType", referenceDiscriminatorType); 179 List<ReferenceObjectBindingBo> bos = (List<ReferenceObjectBindingBo>) businessObjectService.findMatching(ReferenceObjectBindingBo.class, map); 180 return convertBosToImmutables(bos); 181 } 182 183 @Override 184 public List<ReferenceObjectBinding> findReferenceObjectBindingsByReferenceObject(String referenceObjectId) { 185 if (org.apache.commons.lang.StringUtils.isBlank(referenceObjectId)) { 186 throw new IllegalArgumentException("referenceObjectId is null or blank"); 187 } 188 final Map<String, Object> map = new HashMap<String, Object>(); 189 map.put("referenceObjectId", referenceObjectId); 190 List<ReferenceObjectBindingBo> bos = (List<ReferenceObjectBindingBo>) businessObjectService.findMatching(ReferenceObjectBindingBo.class, map); 191 return convertBosToImmutables(bos); 192 } 193 194 @Override 195 public List<String> findReferenceObjectBindingIds(final QueryByCriteria queryByCriteria) { 196 incomingParamCheck(queryByCriteria, "queryByCriteria"); 197 ReferenceObjectBindingQueryResults results = findReferenceObjectBindings(queryByCriteria); 198 List<String> result = new ArrayList<String>(); 199 for (ReferenceObjectBinding referenceObjectBinding: results.getResults()) { 200 result.add(referenceObjectBinding.getId()); 201 } 202 return Collections.unmodifiableList(result); 203 } 204 205 @Override 206 public ReferenceObjectBindingQueryResults findReferenceObjectBindings(final QueryByCriteria queryByCriteria) { 207 LookupCustomizer.Builder<ReferenceObjectBindingBo> lc = LookupCustomizer.Builder.create(); 208 lc.setPredicateTransform(AttributeTransform.getInstance()); 209 GenericQueryResults<ReferenceObjectBindingBo> results = getCriteriaLookupService().lookup(ReferenceObjectBindingBo.class, queryByCriteria, lc.build()); 210 ReferenceObjectBindingQueryResults.Builder builder = ReferenceObjectBindingQueryResults.Builder.create(); 211 builder.setMoreResultsAvailable(results.isMoreResultsAvailable()); 212 builder.setTotalRowCount(results.getTotalRowCount()); 213 final List<ReferenceObjectBinding.Builder> ims = new ArrayList<ReferenceObjectBinding.Builder>(); 214 for (ReferenceObjectBindingBo bo : results.getResults()) { 215 ims.add(ReferenceObjectBinding.Builder.create(bo)); 216 } 217 builder.setResults(ims); 218 return builder.build(); 219 } 220 221 public List<ReferenceObjectBinding> convertBosToImmutables(final Collection<ReferenceObjectBindingBo> referenceObjectBindingBos) { 222 List<ReferenceObjectBinding> immutables = new LinkedList<ReferenceObjectBinding>(); 223 if (referenceObjectBindingBos != null) { 224 ReferenceObjectBinding immutable = null; 225 for (ReferenceObjectBindingBo bo : referenceObjectBindingBos ) { 226 immutable = to(bo); 227 immutables.add(immutable); 228 } 229 } 230 return Collections.unmodifiableList(immutables); 231 } 232 233 @Override 234 public ReferenceObjectBinding to(ReferenceObjectBindingBo referenceObjectBindingBo) { 235 return ReferenceObjectBindingBo.to(referenceObjectBindingBo); 236 } 237 238 public ReferenceObjectBindingBo from(ReferenceObjectBinding referenceObjectBinding) { 239 return ReferenceObjectBindingBo.from(referenceObjectBinding); 240 } 241 242 private void incomingParamCheck(Object object, String name) { 243 if (object == null) { 244 throw new IllegalArgumentException(name + " was null"); 245 } else if (object instanceof String 246 && StringUtils.isBlank((String)object)) { 247 throw new IllegalArgumentException(name + " was blank"); 248 } 249 } 250 251}