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}