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 018 019import java.util.HashMap; 020import java.util.List; 021import java.util.Map; 022 023import org.apache.commons.lang.StringUtils; 024import org.kuali.rice.krad.service.BusinessObjectService; 025import org.kuali.rice.krms.api.repository.proposition.PropositionDefinition; 026import org.kuali.rice.krms.api.repository.proposition.PropositionParameter; 027 028/** 029 * Implementation of the interface for accessing KRMS repository Proposition related 030 * business objects. 031 * 032 * @author Kuali Rice Team (rice.collab@kuali.org) 033 * 034 */ 035public final class PropositionBoServiceImpl implements PropositionBoService { 036 037 private BusinessObjectService businessObjectService; 038 039 /** 040 * This overridden method creates a Proposition if it does not 041 * already exist in the repository. 042 * 043 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#createProposition(org.kuali.rice.krms.api.repository.proposition.PropositionDefinition) 044 */ 045 @Override 046 public PropositionDefinition createProposition(PropositionDefinition prop) { 047 if (prop == null){ 048 throw new IllegalArgumentException("proposition is null"); 049 } 050 if (null != prop.getId()) { 051 throw new IllegalStateException("for creation, PropositionDefinition.id must be null"); 052 } 053 054 PropositionBo propositionBo = PropositionBo.from(prop); 055 businessObjectService.save(propositionBo); 056 return PropositionBo.to(propositionBo); 057 } 058 059 /** 060 * This overridden method updates an existing proposition 061 * 062 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#updateProposition(org.kuali.rice.krms.api.repository.proposition.PropositionDefinition) 063 */ 064 @Override 065 public void updateProposition(PropositionDefinition prop) { 066 if (prop == null) { 067 throw new IllegalArgumentException("proposition is null"); 068 } 069 final String propIdKey = prop.getId(); 070 final PropositionDefinition existing = getPropositionById(propIdKey); 071 if (existing == null) { 072 throw new IllegalStateException("the proposition does not exist: " + prop); 073 } 074 final PropositionDefinition toUpdate; 075 if (!existing.getId().equals(prop.getId())){ 076 final PropositionDefinition.Builder builder = PropositionDefinition.Builder.create(prop); 077 builder.setId(existing.getId()); 078 toUpdate = builder.build(); 079 } else { 080 toUpdate = prop; 081 } 082 083 businessObjectService.save(PropositionBo.from(toUpdate)); 084 } 085 086 /** 087 * This overridden method retrieves a proposition by the give proposition id. 088 * 089 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#getPropositionById(java.lang.String) 090 */ 091 @Override 092 public PropositionDefinition getPropositionById(String propId) { 093 if (StringUtils.isBlank(propId)){ 094 throw new IllegalArgumentException("propId is null or blank"); 095 } 096 PropositionBo bo = businessObjectService.findBySinglePrimaryKey(PropositionBo.class, propId); 097 return PropositionBo.to(bo); 098 } 099 100 /** 101 * This overridden method creates a PropositionParameter if it does not 102 * already exist in the repository. 103 * 104 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#createParameter(org.kuali.rice.krms.api.repository.proposition.PropositionParameter) 105 */ 106 @Override 107 public void createParameter(PropositionParameter parameter) { 108 if (parameter == null){ 109 throw new IllegalArgumentException("parameter is null"); 110 } 111 final String propIdKey = parameter.getPropId(); 112 final Integer seqNoKey = parameter.getSequenceNumber(); 113 final PropositionParameter existing = getParameterByPropIdAndSequenceNumber(propIdKey, seqNoKey); 114 if (existing != null && existing.getPropId().equals(propIdKey) && existing.getSequenceNumber().equals(seqNoKey)){ 115 throw new IllegalStateException("the parameter to create already exists: " + parameter); 116 } 117 118 businessObjectService.save(PropositionParameterBo.from(parameter)); 119 } 120 121 /** 122 * This overridden method updates an existing proposition parameter 123 * 124 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#updateParameter(org.kuali.rice.krms.api.repository.proposition.PropositionParameter) 125 */ 126 @Override 127 public void updateParameter(PropositionParameter parameter) { 128 if (parameter == null) { 129 throw new IllegalArgumentException("parameter is null"); 130 } 131 final String propIdKey = parameter.getPropId(); 132 final Integer seqNoKey = parameter.getSequenceNumber(); 133 final PropositionParameter existing = getParameterByPropIdAndSequenceNumber(propIdKey, seqNoKey); 134 if (existing == null) { 135 throw new IllegalStateException("the parameter does not exist: " + parameter); 136 } 137 final PropositionParameter toUpdate; 138 if (!existing.getId().equals(parameter.getId())){ 139 final PropositionParameter.Builder builder = PropositionParameter.Builder.create(parameter); 140 builder.setId(existing.getId()); 141 toUpdate = builder.build(); 142 } else { 143 toUpdate = parameter; 144 } 145 146 businessObjectService.save(PropositionParameterBo.from(toUpdate)); 147 } 148 149 /** 150 * This overridden method retrieves a list of parameters for a given proposition 151 * 152 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#getParameters(java.lang.Long) 153 */ 154 @Override 155 public List<PropositionParameter> getParameters(String propId) { 156 if (StringUtils.isBlank(propId)) { 157 throw new IllegalArgumentException("propId is null or blank"); 158 } 159 final Map<String, Object> map = new HashMap<String, Object>(); 160 map.put("propId", propId); 161 List<PropositionParameterBo> bos = (List<PropositionParameterBo>) businessObjectService.findMatchingOrderBy(PropositionParameterBo.class, map, "sequenceNumber", true); 162 return PropositionParameterBo.to(bos); 163 } 164 165 /** 166 * This overridden method gets a parameter by the parameter id 167 * 168 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#getParameterById(java.lang.String) 169 */ 170 @Override 171 public PropositionParameter getParameterById(String id) { 172 if (StringUtils.isBlank(id)) { 173 throw new IllegalArgumentException("id is null or blank"); 174 } 175 PropositionParameterBo bo = businessObjectService.findBySinglePrimaryKey(PropositionParameterBo.class, id); 176 return PropositionParameterBo.to(bo); 177 } 178 179 /** 180 * This overridden method gets a parameter by the Proposition Id and Sequence Number 181 * 182 * @see org.kuali.rice.krms.impl.repository.PropositionBoService#getParameterByPropIdAndSequenceNumber(java.lang.String, java.lang.String) 183 */ 184 @Override 185 public PropositionParameter getParameterByPropIdAndSequenceNumber( 186 String propId, Integer sequenceNumber) { 187 if (StringUtils.isBlank(propId)) { 188 throw new IllegalArgumentException("propId is null or blank"); 189 } 190 if (sequenceNumber == null) { 191 throw new IllegalArgumentException("sequenceNumber is null"); 192 } 193 final Map<String, Object> map = new HashMap<String, Object>(); 194 map.put("propId", propId); 195 map.put("sequenceNumber", sequenceNumber); 196 PropositionParameterBo bo = businessObjectService.findByPrimaryKey(PropositionParameterBo.class, map); 197 return PropositionParameterBo.to(bo); 198 } 199 200 /** 201 * Sets the businessObjectService attribute value. 202 * 203 * @param businessObjectService The businessObjectService to set. 204 */ 205 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 206 this.businessObjectService = businessObjectService; 207 } 208 209}