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