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 */ 016/* 017 * To change this template, choose Tools | Templates 018 * and open the template in the editor. 019 */ 020package org.kuali.rice.krms.impl.repository; 021 022import java.util.ArrayList; 023import java.util.Arrays; 024import java.util.Collections; 025import java.util.List; 026import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 027import org.kuali.rice.core.api.exception.RiceIllegalStateException; 028import org.kuali.rice.krad.service.BusinessObjectService; 029import org.kuali.rice.krms.api.repository.type.KrmsAttributeDefinition; 030import org.kuali.rice.krms.api.repository.type.KrmsTypeBoService; 031import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition; 032import org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService; 033import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.AGENDA_SERVICE_NAME; 034import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.CONTEXT_SERVICE_NAME; 035import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.PROPOSITION_PARAMETER_SERVICE_NAMES; 036import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.PROPOSITION_SERVICE_NAMES; 037import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.RULE_SERVICE_NAME; 038import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.TERM_PARAMETER_SERVICE_NAME; 039import static org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService.TERM_PROPOSITION_PARAMETER_SERVICE_NAME; 040import org.kuali.rice.krms.api.repository.typerelation.RelationshipType; 041import org.kuali.rice.krms.api.repository.typerelation.TypeTypeRelation; 042 043/** 044 * 045 * @author nwright 046 */ 047public class KrmsTypeRepositoryServiceImpl implements KrmsTypeRepositoryService { 048 049 private KrmsTypeBoService krmsTypeBoService = new KrmsTypeBoServiceImpl(); 050 private TypeTypeRelationBoService typeTypeRelationBoService = new TypeTypeRelationBoServiceImpl(); 051 052 @Override 053 public KrmsTypeDefinition createKrmsType(KrmsTypeDefinition krmsType) throws RiceIllegalArgumentException, RiceIllegalStateException { 054 return krmsTypeBoService.createKrmsType(krmsType); 055 } 056 057 @Override 058 public KrmsTypeDefinition updateKrmsType(KrmsTypeDefinition krmsType) throws RiceIllegalArgumentException, RiceIllegalStateException { 059 return krmsTypeBoService.updateKrmsType(krmsType); 060 } 061 062 @Override 063 public KrmsTypeDefinition getTypeById(String id) throws RiceIllegalArgumentException { 064 return krmsTypeBoService.getTypeById(id); 065 } 066 067 @Override 068 public KrmsTypeDefinition getTypeByName(String namespaceCode, String name) throws RiceIllegalArgumentException, RiceIllegalStateException { 069 return krmsTypeBoService.getTypeByName(namespaceCode, name); 070 } 071 072 @Override 073 public List<KrmsTypeDefinition> findAllTypesByNamespace(String namespaceCode) throws RiceIllegalArgumentException { 074 return krmsTypeBoService.findAllTypesByNamespace(namespaceCode); 075 } 076 077 @Override 078 public List<KrmsTypeDefinition> findAllTypes() { 079 return krmsTypeBoService.findAllTypes(); 080 } 081 082 @Override 083 public List<KrmsTypeDefinition> findAllAgendaTypesByContextId(String contextId) throws RiceIllegalArgumentException { 084 return krmsTypeBoService.findAllAgendaTypesByContextId(contextId); 085 } 086 087 @Override 088 public KrmsTypeDefinition getAgendaTypeByAgendaTypeIdAndContextId(String agendaTypeId, String contextId) throws RiceIllegalArgumentException { 089 return krmsTypeBoService.getAgendaTypeByAgendaTypeIdAndContextId(agendaTypeId, contextId); 090 } 091 092 @Override 093 public List<KrmsTypeDefinition> findAllRuleTypesByContextId(String contextId) throws RiceIllegalArgumentException { 094 return krmsTypeBoService.findAllRuleTypesByContextId(contextId); 095 } 096 097 @Override 098 public KrmsTypeDefinition getRuleTypeByRuleTypeIdAndContextId(String ruleTypeId, String contextId) throws RiceIllegalArgumentException { 099 return krmsTypeBoService.getRuleTypeByRuleTypeIdAndContextId(ruleTypeId, contextId); 100 } 101 102 @Override 103 public List<KrmsTypeDefinition> findAllActionTypesByContextId(String contextId) throws RiceIllegalArgumentException { 104 return krmsTypeBoService.findAllActionTypesByContextId(contextId); 105 } 106 107 @Override 108 public KrmsTypeDefinition getActionTypeByActionTypeIdAndContextId(String actionTypeId, String contextId) throws RiceIllegalArgumentException { 109 return krmsTypeBoService.getActionTypeByActionTypeIdAndContextId(actionTypeId, contextId); 110 } 111 112 @Override 113 public KrmsAttributeDefinition getAttributeDefinitionById(String attributeDefinitionId) throws RiceIllegalArgumentException { 114 return krmsTypeBoService.getAttributeDefinitionById(attributeDefinitionId); 115 } 116 117 @Override 118 public KrmsAttributeDefinition getAttributeDefinitionByName(String namespaceCode, String name) throws RiceIllegalArgumentException { 119 return krmsTypeBoService.getAttributeDefinitionByName(namespaceCode, name); 120 } 121 122 //// 123 //// type type relation methods 124 //// 125 @Override 126 public TypeTypeRelation createTypeTypeRelation(TypeTypeRelation typeTypeRelation) { 127 return typeTypeRelationBoService.createTypeTypeRelation(typeTypeRelation); 128 } 129 130 @Override 131 public TypeTypeRelation getTypeTypeRelation(String typeTypeRelationId) { 132 return typeTypeRelationBoService.getTypeTypeRelation(typeTypeRelationId); 133 } 134 135 @Override 136 public void updateTypeTypeRelation(TypeTypeRelation typeTypeRelation) { 137 typeTypeRelationBoService.updateTypeTypeRelation(typeTypeRelation); 138 } 139 140 @Override 141 public void deleteTypeTypeRelation(String typeTypeRelationId) { 142 typeTypeRelationBoService.deleteTypeTypeRelation(typeTypeRelationId); 143 } 144 145 @Override 146 public List<TypeTypeRelation> findTypeTypeRelationsByFromType(String fromTypeId) { 147 return typeTypeRelationBoService.findTypeTypeRelationsByFromType(fromTypeId); 148 } 149 150 @Override 151 public List<TypeTypeRelation> findTypeTypeRelationsByToType(String toTypeId) { 152 return typeTypeRelationBoService.findTypeTypeRelationsByToType(toTypeId); 153 } 154 155 @Override 156 public List<TypeTypeRelation> findTypeTypeRelationsByRelationshipType(RelationshipType relationshipType) { 157 return typeTypeRelationBoService.findTypeTypeRelationsByRelationshipType(relationshipType); 158 } 159 160 /** 161 * Sets the businessObjectService property. 162 * 163 * @param businessObjectService The businessObjectService to set. 164 */ 165 public void setBusinessObjectService(final BusinessObjectService businessObjectService) { 166 if (krmsTypeBoService instanceof KrmsTypeBoServiceImpl) { 167 ((KrmsTypeBoServiceImpl) krmsTypeBoService).setBusinessObjectService(businessObjectService); 168 } 169 if (typeTypeRelationBoService instanceof TypeTypeRelationBoServiceImpl) { 170 ((TypeTypeRelationBoServiceImpl) typeTypeRelationBoService).setBusinessObjectService(businessObjectService); 171 } 172 } 173 174 @Override 175 public List<KrmsTypeDefinition> findAllTypesByServiceName(String serviceName) throws RiceIllegalArgumentException { 176 return krmsTypeBoService.findAllTypesByServiceName(serviceName); 177 } 178 179 @Override 180 public List<KrmsTypeDefinition> findAllContextTypes() throws RiceIllegalArgumentException { 181 return this.findAllTypesByServiceName(CONTEXT_SERVICE_NAME); 182 } 183 184 @Override 185 public List<KrmsTypeDefinition> findAllAgendaTypes() throws RiceIllegalArgumentException { 186 return this.findAllTypesByServiceName(AGENDA_SERVICE_NAME); 187 } 188 189 @Override 190 public List<KrmsTypeDefinition> findAllRuleTypes() throws RiceIllegalArgumentException { 191 return this.findAllTypesByServiceName(RULE_SERVICE_NAME); 192 } 193 194 @Override 195 public List<KrmsTypeDefinition> findAllPropositionTypes() throws RiceIllegalArgumentException { 196 List<KrmsTypeDefinition> list = new ArrayList<KrmsTypeDefinition> (); 197 for (String typeServiceName : PROPOSITION_SERVICE_NAMES) { 198 list.addAll (this.findAllTypesByServiceName(typeServiceName)); 199 } 200 return list; 201 } 202 203 @Override 204 public List<KrmsTypeDefinition> findAllPropositionParameterTypes() throws RiceIllegalArgumentException { 205 List<KrmsTypeDefinition> list = new ArrayList<KrmsTypeDefinition> (); 206 for (String typeServiceName : PROPOSITION_PARAMETER_SERVICE_NAMES) { 207 list.addAll (this.findAllTypesByServiceName(typeServiceName)); 208 } 209 return list; 210 } 211 212 @Override 213 public List<KrmsTypeDefinition> findAgendaTypesForContextType(String contextTypeId) throws RiceIllegalArgumentException { 214 return this._findTypesForType(contextTypeId, Arrays.asList(CONTEXT_SERVICE_NAME), Arrays.asList(AGENDA_SERVICE_NAME)); 215 } 216 217 private List<KrmsTypeDefinition> _findTypesForType(String typeId, List<String> fromServiceNames, List<String> toServiceNames) 218 throws RiceIllegalArgumentException { 219 KrmsTypeDefinition fromType = this.getTypeById(typeId); 220 if (fromType == null) { 221 throw new RiceIllegalArgumentException(typeId + " does not exist"); 222 } 223 if (!fromServiceNames.contains(fromType.getServiceName())) { 224 throw new RiceIllegalArgumentException(typeId + "'s serviceTypeName is " + fromType.getServiceName() + " expected " + fromServiceNames); 225 } 226 List<TypeTypeRelation> rels = this.findTypeTypeRelationsByFromType(typeId); 227 rels = new ArrayList (rels); 228 Collections.sort(rels, new TypeTypeRelationSequenceComparator ()); 229 List<KrmsTypeDefinition> list = new ArrayList<KrmsTypeDefinition>(rels.size()); 230 for (TypeTypeRelation rel : rels) { 231 KrmsTypeDefinition info = this.getTypeById(rel.getToTypeId()); 232 if (toServiceNames.contains(info.getServiceName())) { 233 list.add(info); 234 } 235 } 236 return list; 237 } 238 239 240 @Override 241 public List<KrmsTypeDefinition> findAgendaTypesForAgendaType(String agendaTypeId) throws RiceIllegalArgumentException { 242 return this._findTypesForType(agendaTypeId, Arrays.asList(AGENDA_SERVICE_NAME), Arrays.asList(AGENDA_SERVICE_NAME)); 243 } 244 245 @Override 246 public List<KrmsTypeDefinition> findRuleTypesForAgendaType(String agendaTypeId) throws RiceIllegalArgumentException { 247 return this._findTypesForType(agendaTypeId, Arrays.asList(AGENDA_SERVICE_NAME), Arrays.asList(RULE_SERVICE_NAME)); 248 } 249 250 @Override 251 public List<KrmsTypeDefinition> findPropositionTypesForRuleType(String ruleTypeId) throws RiceIllegalArgumentException { 252 return this._findTypesForType(ruleTypeId, Arrays.asList(RULE_SERVICE_NAME), Arrays.asList(PROPOSITION_SERVICE_NAMES)); 253 } 254 255 @Override 256 public List<KrmsTypeDefinition> findPropositionParameterTypesForPropositionType(String propositionTypeId) 257 throws RiceIllegalArgumentException { 258 return this._findTypesForType(propositionTypeId, Arrays.asList (PROPOSITION_SERVICE_NAMES), Arrays.asList(PROPOSITION_PARAMETER_SERVICE_NAMES)); 259 } 260 261 @Override 262 public List<KrmsTypeDefinition> findTermParameterTypesForTermPropositionParameterType(String termPropositionParameterTypeId) 263 throws RiceIllegalArgumentException { 264 return this._findTypesForType(termPropositionParameterTypeId, Arrays.asList (TERM_PROPOSITION_PARAMETER_SERVICE_NAME), Arrays.asList(TERM_PARAMETER_SERVICE_NAME)); 265 } 266}