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}