001    /**
002     * Copyright 2005-2013 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    package org.kuali.rice.krms.api.repository;
017    
018    import org.kuali.rice.core.api.criteria.QueryByCriteria;
019    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
020    import org.kuali.rice.krms.api.KrmsConstants;
021    import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition;
022    import org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition;
023    import org.kuali.rice.krms.api.repository.language.NaturalLanguageUsage;
024    import org.kuali.rice.krms.api.repository.proposition.PropositionDefinition;
025    import org.kuali.rice.krms.api.repository.reference.ReferenceObjectBinding;
026    import org.kuali.rice.krms.api.repository.rule.RuleDefinition;
027    import org.springframework.cache.annotation.Cacheable;
028    
029    import javax.jws.WebMethod;
030    import javax.jws.WebParam;
031    import javax.jws.WebResult;
032    import javax.jws.WebService;
033    import javax.jws.soap.SOAPBinding;
034    import javax.xml.bind.annotation.XmlElement;
035    import javax.xml.bind.annotation.XmlElementWrapper;
036    import java.util.List;
037    import java.util.Set;
038    
039    /**
040     * The rule maintenance service operations facilitate management of rules and
041     * associated information.
042     *
043     * @author Kuali Rice Team (rice.collab@kuali.org)
044     */
045    @WebService(name = "ruleManagementService", targetNamespace = KrmsConstants.Namespaces.KRMS_NAMESPACE_2_0)
046    @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL,
047            parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
048    public interface RuleManagementService extends RuleRepositoryService {
049    
050        /**
051         * Create RefObject-KRMS object binding
052         *
053         * @param referenceObjectDefinition  data for the new ReferenceObjectBinding to be created
054         * @return newly created ReferenceObjectBinding
055         * @throws RiceIllegalArgumentException if the given referenceObjectDefinition
056         *                                      is null or invalid
057         */
058        @WebMethod(operationName = "createReferenceObjectBinding")
059        @WebResult(name = "referenceObjectBinding")
060        public ReferenceObjectBinding createReferenceObjectBinding(@WebParam(
061                name = "referenceObjectDefinition") ReferenceObjectBinding referenceObjectDefinition) throws RiceIllegalArgumentException;
062    
063        /**
064         * Retrieve referenceObjectBinding  given a specific id
065         *
066         * @param id identifier of the ReferenceObjectBinding to be retrieved
067         * @return a ReferenceObjectBinding with the given id value
068         * @throws RiceIllegalArgumentException if the given  id is blank or
069         *                                      invalid
070         */
071        @WebMethod(operationName = "getReferenceObjectBinding")
072        @WebResult(name = "referenceObjectBinding")
073        public ReferenceObjectBinding getReferenceObjectBinding(@WebParam(
074                name = "id") String id) throws RiceIllegalArgumentException;
075    
076        /**
077         * Retrieve list of ReferenceObjectBinding objects given ids
078         *
079         * @param ids identifiers of the ReferenceObjectBinding to be retrieved
080         * @return list of ReferenceObjectBinding objects for the given ids
081         * @throws RiceIllegalArgumentException if one or more ids in the give list
082         *                                      is blank or invalid
083         */
084        @WebMethod(operationName = "getReferenceObjectBindings")
085        @XmlElementWrapper(name = "referenceObjectBindings", required = true)
086        @XmlElement(name = "referenceObjectBinding", required = false)
087        @WebResult(name = "referenceObjectBindings")
088        List<ReferenceObjectBinding> getReferenceObjectBindings(@WebParam(
089                name = "ids") List<String> ids) throws RiceIllegalArgumentException;
090    
091        /**
092         * Retrieves list of ReferenceObjectBinding objects for the given ref obj
093         * discriminator type
094         *
095         * @param referenceObjectReferenceDiscriminatorType  reference object type
096         * @return list of ReferenceObjectBinding objects for the given discriminator
097         *         type
098         * @throws RiceIllegalArgumentException if the given  referenceObjectReferenceDiscriminatorType is
099         *                                      blank or invalid
100         */
101        @WebMethod(operationName = "findReferenceObjectBindingsByReferenceDiscriminatorType")
102        @XmlElementWrapper(name = "referenceObjectBindings", required = true)
103        @XmlElement(name = "referenceObjectBinding", required = false)
104        @WebResult(name = "referenceObjectBindings")
105        public List<ReferenceObjectBinding> findReferenceObjectBindingsByReferenceDiscriminatorType(
106                @WebParam(name = "referenceObjectReferenceDiscriminatorType") String referenceObjectReferenceDiscriminatorType) throws RiceIllegalArgumentException;
107    
108        /**
109         * Retrieves list of ReferenceObjectBinding objects for the given krms obj
110         * discriminator type
111         *
112         * @param referenceObjectKrmsDiscriminatorType  reference object type
113         * @return list of ReferenceObjectBinding objects for the given discriminator
114         *         type
115         * @throws RiceIllegalArgumentException if the given  referenceObjectKrmsDiscriminatorType is
116         *                                      blank or invalid
117         */
118        @WebMethod(operationName = "findReferenceObjectBindingsByKrmsDiscriminatorType")
119        @XmlElementWrapper(name = "referenceObjectBindings", required = true)
120        @XmlElement(name = "referenceObjectBinding", required = false)
121        @WebResult(name = "referenceObjectBindings")
122        public List<ReferenceObjectBinding> findReferenceObjectBindingsByKrmsDiscriminatorType(
123                @WebParam(name = "referenceObjectKrmsDiscriminatorType") String referenceObjectKrmsDiscriminatorType) throws RiceIllegalArgumentException;
124    
125    
126        /**
127         * Retrieves list of ReferenceObjectBinding objects for the given KRMS obj
128         * id.
129         *
130         * @param krmsObjectId identifier of the KRMS obj
131         * @return list of ReferenceObjectBinding objects for the given KRMS obj
132         * @throws RiceIllegalArgumentException if the given krmsObjectId is blank or
133         *                                      invalid
134         */
135        @WebMethod(operationName = "findReferenceObjectBindingsByKrmsObjectId")
136        @XmlElementWrapper(name = "referenceObjectBindings", required = true)
137        @XmlElement(name = "referenceObjectBinding", required = false)
138        @WebResult(name = "referenceObjectBindings")
139        public List<ReferenceObjectBinding> findReferenceObjectBindingsByKrmsObject(
140                @WebParam(name = "krmsObjectId") String krmsObjectId) throws RiceIllegalArgumentException;
141    
142        /**
143         * Update the ReferenceObjectBinding object specified by the identifier in the
144         * given DTO
145         *
146         * @param referenceObjectBindingDefinition DTO with updated info and id of the object to be updated
147         * @throws RiceIllegalArgumentException if the given  referenceObjectBindingDefinition
148         *                                      is null or invalid
149         */
150        @WebMethod(operationName = "updateReferenceObjectBinding")
151        public void updateReferenceObjectBinding(ReferenceObjectBinding referenceObjectBindingDefinition) throws RiceIllegalArgumentException;
152    
153        /**
154         * Delete the specified ReferenceObjectBinding object
155         *
156         * @param id identifier of the object to be deleted
157         * @throws RiceIllegalArgumentException if the given  id is null or invalid
158         */
159        @WebMethod(operationName = "deleteReferenceObjectBinding")
160        public void deleteReferenceObjectBinding(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
161    
162    
163        /**
164         * Query for ReferenceObjectBinding ids based on the given search criteria
165         * which is a Map of ReferenceObjectBinding field names to values. <p/> <p>
166         * This method returns it's results as a List of ReferenceObjectBinding ids
167         * that match the given search criteria. </p>
168         *
169         * @param queryByCriteria the criteria.  Cannot be null.
170         * @return a list of ids matching the given criteria properties.  An empty
171         *         list is returned if an invalid or non-existent criteria is
172         *         supplied.
173         * @throws RiceIllegalArgumentException if the queryByCriteria is null
174         */
175        @WebMethod(operationName = "findReferenceObjectBindingIds")
176        @XmlElementWrapper(name = "referenceObjectBindingIds", required = true)
177        @XmlElement(name = "referenceObjectBindingId", required = false)
178        @WebResult(name = "referenceObjectBindingIds")
179        List<String> findReferenceObjectBindingIds(@WebParam(name = "query") QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException;
180    
181        /**
182         * Create Agenda
183         *
184         * @param agendaDefinition data for the new Agenda to be created
185         * @return newly created Agenda
186         * @throws RiceIllegalArgumentException if the given agendaDefinition is
187         *                                      null or invalid
188         */
189        @WebMethod(operationName = "createAgenda")
190        @WebResult(name = "agenda")
191        public AgendaDefinition createAgenda(@WebParam(name = "AgendaDefinition") AgendaDefinition agendaDefinition) throws RiceIllegalArgumentException;
192    
193        /**
194         * Retrieve Agenda for the specified id
195         *
196         * @param id identifier for the Agenda
197         * @return specified Agenda
198         * @throws RiceIllegalArgumentException if the given id is null or invalid
199         */
200        @WebMethod(operationName = "getAgenda")
201        @WebResult(name = "agenda")
202        public AgendaDefinition getAgenda(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
203    
204        /**
205         * Retrieve Agendas of the specified type
206         *
207         * @param typeId type of the Agenda
208         * @return list of Agendas of the specified type
209         * @throws RiceIllegalArgumentException if the given typeId is null or
210         *                                      invalid
211         */
212        @WebMethod(operationName = "getAgendasByType")
213        @XmlElementWrapper(name = "agendas", required = true)
214        @XmlElement(name = "agenda", required = false)
215        @WebResult(name = "agendas")
216        public List<AgendaDefinition> getAgendasByType(@WebParam(name = "typeId") String typeId) throws RiceIllegalArgumentException;
217    
218        /**
219         * Retrieve Agendas associated with the specified context
220         *
221         * @param contextId  context of interest
222         * @return list of Agendas associated with the context
223         * @throws RiceIllegalArgumentException if the given contextId is null or
224         *                                      invalid
225         */
226        @WebMethod(operationName = "getAgendasByContext")
227        @XmlElementWrapper(name = "agendas", required = true)
228        @XmlElement(name = "agenda", required = false)
229        @WebResult(name = "agendas")
230        public List<AgendaDefinition> getAgendasByContext(@WebParam(name = "contextId") String contextId) throws RiceIllegalArgumentException;
231    
232        /**
233         * Retrieve Agendas of the specified type and context
234         *
235         * @param typeId  type of the Agenda
236         * @param contextId  context of interest
237         * @return list of Agendas associated with the specified type and context
238         * @throws RiceIllegalArgumentException if the given typeId or contextId
239         *                                      null or invalid
240         */
241        @WebMethod(operationName = "getAgendasByTypeAndContext")
242        @XmlElementWrapper(name = "agendas", required = true)
243        @XmlElement(name = "agenda", required = false)
244        @WebResult(name = "agendas")
245        public List<AgendaDefinition> getAgendasByTypeAndContext(@WebParam(name = "typeId") String typeId,
246                @WebParam(name = "contextId") String contextId) throws RiceIllegalArgumentException;
247    
248        /**
249         * Update the Agenda specified by the identifier in the input DTO
250         *
251         * @param agendaDefinition DTO with updated info and identifier of the object to be updated
252         * @throws RiceIllegalArgumentException if the given agendaDefinition is
253         *                                      null or invalid
254         */
255        @WebMethod(operationName = "updateAgenda")
256        public void updateAgenda(@WebParam(name = "agendaDefinition") AgendaDefinition agendaDefinition) throws RiceIllegalArgumentException;
257    
258        /**
259         * Delete the specified Agenda
260         *
261         * @param id identifier of the object to be deleted
262         * @throws RiceIllegalArgumentException if the given id is null or invalid
263         */
264        @WebMethod(operationName = "deleteAgenda")
265        public void deleteAgenda(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
266    
267        /**
268         * Create AgendaItem
269         *
270         * @param agendaItemDefinition  data for the new AgendaItem to be created
271         * @return newly created AgendaItem
272         * @throws RiceIllegalArgumentException if the given agendaItemDefinition is
273         *                                      null or invalid
274         */
275        @WebMethod(operationName = "createAgendaItem")
276        @WebResult(name = "agendaItem")
277        public AgendaItemDefinition createAgendaItem(@WebParam(name = "AgendaItemDefinition") AgendaItemDefinition agendaItemDefinition) throws RiceIllegalArgumentException;
278    
279        /**
280         * Retrieve AgendaItem by the specified identifier
281         *
282         * @param id identifier of the AgendaItem
283         * @return AgendaItem specified by the identifier
284         * @throws RiceIllegalArgumentException if the given id is null or invalid
285         */
286        @WebMethod(operationName = "getAgendaItem")
287        @WebResult(name = "agendaItem")
288        public AgendaItemDefinition getAgendaItem(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
289    
290        /**
291         * Retrieve AgendaItems by specified type
292         *
293         * @param typeId type of the AgendaItems
294         * @return list of AgendaItems of the specified type
295         * @throws RiceIllegalArgumentException if the given typeId is null or
296         *                                      invalid
297         */
298        @WebMethod(operationName = "getAgendaItemsByType")
299        @XmlElementWrapper(name = "agendaItems", required = true)
300        @XmlElement(name = "agendaItem", required = false)
301        @WebResult(name = "agendaItems")
302        public List<AgendaItemDefinition> getAgendaItemsByType(@WebParam(name = "typeId") String typeId) throws RiceIllegalArgumentException;
303    
304        /**
305         * Retrieve AgendaItems associated with a context
306         *
307         * @param contextId context identifier
308         * @return list of AgendaItems associated with a context
309         * @throws RiceIllegalArgumentException if the given  contextId is null or
310         *                                      invalid
311         */
312        @WebMethod(operationName = "getAgendaItemsByContext")
313        @XmlElementWrapper(name = "agendaItems", required = true)
314        @XmlElement(name = "agendaItem", required = false)
315        @WebResult(name = "agendaItems")
316        public List<AgendaItemDefinition> getAgendaItemsByContext(@WebParam(name = "contextId") String contextId) throws RiceIllegalArgumentException;
317    
318        /**
319         * Retrieve AgendaItems by type and context
320         *
321         * @param typeId type of the Agendas
322         * @param contextId context with which the Agendas are associated
323         * @return list of AgendaItems of the specified type and context
324         * @throws RiceIllegalArgumentException if the given  typeId or contextId
325         *                                      null or invalid
326         */
327        @WebMethod(operationName = "getAgendaItemsByTypeAndContext")
328        @XmlElementWrapper(name = "agendaItems", required = true)
329        @XmlElement(name = "agendaItem", required = false)
330        @WebResult(name = "agendaItems")
331        public List<AgendaItemDefinition> getAgendaItemsByTypeAndContext(@WebParam(name = "typeId") String typeId,
332                @WebParam(name = "contextId") String contextId) throws RiceIllegalArgumentException;
333    
334        /**
335         * Update an AgendaItem
336         *
337         * @param agendaItemDefinition  updated data for the AgendaItem, with id of the object to be updated
338         * @throws RiceIllegalArgumentException if the given  agendaItemDefinition
339         *                                      is null or invalid
340         */
341        @WebMethod(operationName = "updateAgendaItem")
342        public void updateAgendaItem(@WebParam(name = "agendaItemDefinition") AgendaItemDefinition agendaItemDefinition) throws RiceIllegalArgumentException;
343    
344        /**
345         * Delete the specified AgendaItem
346         *
347         * @param id identifier of the AgendaItem to be deleted
348         * @throws RiceIllegalArgumentException if the given id is null or invalid
349         */
350        @WebMethod(operationName = "deleteAgendaItem")
351        public void deleteAgendaItem(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
352    
353    
354        /**
355         * Create Rule
356         *
357         * @param ruleDefinition data for the new Rule to be created
358         * @return newly created Rule
359         * @throws RiceIllegalArgumentException if the given ruleDefinition is null
360         *                                      or invalid
361         */
362        @WebMethod(operationName = "createRule")
363        @WebResult(name = "rule")
364        public RuleDefinition createRule(@WebParam(name = "ruleDefinition") RuleDefinition ruleDefinition) throws RiceIllegalArgumentException;
365    
366        /**
367         * Retrieves the rule for the given ruleId.  The rule includes the
368         * propositions which define the condition that is to be evaluated on the
369         * rule.  It also defines a collection of actions which will be invoked if
370         * the rule succeeds.
371         *
372         * @param ruleId the id of the rule to retrieve
373         * @return the rule definition, or null if no rule could be located for the
374         *         given ruleId
375         * @throws IllegalArgumentException if the given ruleId is null
376         */
377        @WebMethod(operationName = "getRule")
378        @WebResult(name = "rule")
379        @Cacheable(value = RuleDefinition.Cache.NAME, key = "'ruleId=' + #p0")
380        public RuleDefinition getRule(@WebParam(name = "ruleId") String ruleId);
381    
382        /**
383         * Retrieves all of the rules for the given list of ruleIds.  The rule
384         * includes the propositions which define the condition that is to be
385         * evaluated on the rule.  It also defines a collection of actions which
386         * will be invoked if the rule succeeds.
387         * <p/>
388         * <p>The list which is returned from this operation may not be the same
389         * size as the list which is passed to this method.  If a rule doesn't exist
390         * for a given rule id then no result for that id will be returned in the
391         * list.  As a result of this, the returned list can be empty, but it will
392         * never be null.
393         *
394         * @param ruleIds the list of rule ids for which to retrieve the rules
395         * @return the list of rules for the given ids, this list will only contain
396         *         rules for the ids that were resolved successfully, it will never
397         *         return null but could return an empty list if no rules could be
398         *         loaded for the given set of ids
399         * @throws IllegalArgumentException if the given list of ruleIds is null
400         */
401        @WebMethod(operationName = "getRules")
402        @XmlElementWrapper(name = "rules", required = true)
403        @XmlElement(name = "rule", required = false)
404        @WebResult(name = "rules")
405        public List<RuleDefinition> getRules(@WebParam(name = "ruleIds") List<String> ruleIds);
406    
407        /**
408         * Update the Rule specified by the identifier in the DTO
409         *
410         * @param ruleDefinition updated Rule information, object specified by the id
411         * @throws RiceIllegalArgumentException if the given ruleDefinition is null
412         *                                      or invalid
413         */
414        @WebMethod(operationName = "updateRule")
415        public void updateRule(@WebParam(name = "ruleDefinition") RuleDefinition ruleDefinition) throws RiceIllegalArgumentException;
416    
417        /**
418         * Delete the specified Rule
419         *
420         * @param id identifier of the Rule to be deleted
421         * @throws RiceIllegalArgumentException if the given id is null or invalid
422         */
423        @WebMethod(operationName = "deleteRule")
424        public void deleteRule(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
425    
426        /**
427         * Create a Proposition
428         *
429         * @param propositionDefinition data for the new Proposition to be created
430         * @return newly created Proposition
431         * @throws RiceIllegalArgumentException if the given propositionDefinition
432         *                                      is null or invalid
433         */
434        @WebMethod(operationName = "createProposition")
435        @WebResult(name = "proposition")
436        public PropositionDefinition createProposition(@WebParam(name = "propositionDefinition") PropositionDefinition propositionDefinition) throws RiceIllegalArgumentException;
437    
438        /**
439         * Retrieve Proposition specified by the identifier
440         *
441         * @param id identifier of the Proposition to be retrieved
442         * @return specified Proposition
443         * @throws RiceIllegalArgumentException if the given id is null or invalid
444         */
445        @WebMethod(operationName = "getProposition")
446        @WebResult(name = "proposition")
447        public PropositionDefinition getProposition(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
448    
449        /**
450         * Retrieve Propositions of the specified type
451         *
452         * @param typeId type of the Propositions to be retrieved
453         * @return list of Propositions of the specified type
454         * @throws RiceIllegalArgumentException if the given typeId is null or
455         *                                      invalid
456         */
457        @WebMethod(operationName = "getPropositionsByType")
458        @XmlElementWrapper(name = "propositions", required = true)
459        @XmlElement(name = "proposition", required = false)
460        @WebResult(name = "propositions")
461        public Set<PropositionDefinition> getPropositionsByType(@WebParam(name = "typeId") String typeId) throws RiceIllegalArgumentException;
462    
463        /**
464         * Retrieve Propositions associated with the specified Rule
465         *
466         * @param ruleId identifier of the Rule to which the Propositions are associated with
467         * @return list of Propositions associated with the Rule
468         * @throws RiceIllegalArgumentException if the given ruleId is null or
469         *                                      invalid
470         */
471        @WebMethod(operationName = "getPropositionsByRule")
472        @XmlElementWrapper(name = "propositions", required = true)
473        @XmlElement(name = "proposition", required = false)
474        @WebResult(name = "propositions")
475        public Set<PropositionDefinition> getPropositionsByRule(@WebParam(name = "ruleId") String ruleId) throws RiceIllegalArgumentException;
476    
477        /**
478         * Update the Proposition
479         *
480         * @param propositionDefinition updated data for the Proposition, id specifies the object to be updated
481         * @throws RiceIllegalArgumentException if the given propositionDefinition
482         *                                      is null or invalid
483         */
484        @WebMethod(operationName = "updateProposition")
485        public void updateProposition(
486                @WebParam(name = "propositionDefinition") PropositionDefinition propositionDefinition) throws RiceIllegalArgumentException;
487    
488        /**
489         * Delete the Proposition
490         *
491         * @param id identifier of the Proposition to be deleted
492         * @throws RiceIllegalArgumentException if the given id is null or invalid
493         */
494        @WebMethod(operationName = "deleteProposition")
495        public void deleteProposition(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
496    
497        /**
498         * Create NaturalLanguageUsage
499         *
500         * @param naturalLanguageUsage data for the new NaturalLanguageUsage to be created
501         * @return newly created NaturalLanguageUsage
502         * @throws RiceIllegalArgumentException if the given naturalLanguageUsage is
503         *                                      null or invalid
504         */
505        @WebMethod(operationName = "createNaturalLanguageUsage")
506        @WebResult(name = "naturalLanguageUsage")
507        public NaturalLanguageUsage createNaturalLanguageUsage(@WebParam(name = "naturalLanguageUsage") NaturalLanguageUsage naturalLanguageUsage) throws RiceIllegalArgumentException;
508    
509        /**
510         * Retrieve NaturalLanguageUsage specified by the identifier
511         *
512         * @param id identifier of the NaturalLanguageUsage to be retrieved
513         * @return NaturalLanguageUsage specified by the identifier
514         * @throws RiceIllegalArgumentException if the given id is null or invalid
515         */
516        @WebMethod(operationName = "getNaturalLanguageUsage")
517        @WebResult(name = "naturalLanguageUsage")
518        public NaturalLanguageUsage getNaturalLanguageUsage(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
519    
520        /**
521         * Update NaturalLanguageUsage
522         *
523         * @param naturalLanguageUsage updated data for the NaturalLanguageUsage object specified by the id
524         * @throws RiceIllegalArgumentException if the given naturalLanguageUsage is
525         *                                      null or invalid
526         */
527        @WebMethod(operationName = "updateNaturalLanguageUsage")
528        public void updateNaturalLanguageUsage(@WebParam(name = "naturalLanguageUsage") NaturalLanguageUsage naturalLanguageUsage) throws RiceIllegalArgumentException;
529    
530        /**
531         * Delete NaturalLanguageUsage
532         *
533         * @param naturalLanguageUsageId  identifier of the NaturalLanguageUsage to be deleted
534         * @throws RiceIllegalArgumentException  if the given naturalLanguageUsageId is null or invalid
535         */
536        @WebMethod(operationName = "deleteNaturalLanguageUsageType")
537        public void deleteNaturalLanguageUsageType(@WebParam(name = "naturalLanguageUsageId") String naturalLanguageUsageId) throws RiceIllegalArgumentException;
538    
539        /**
540         * Translates and retrieves a NaturalLanguage for a given KRMS object (e.g, proposition
541         * or agenda), NaturalLanguage usage type (context) and language into natural language
542         * TODO: Add appropriate caching annotation
543         *
544         * @param naturalLanguageUsageId Natural language usage information
545         * @param typeId    KRMS object type id (for example, could refer to agenda
546         *                  or proposition)
547         * @param krmsObjectId KRMS object identifier
548         * @param languageCode  desired
549         * @return natural language corresponding to the NaturalLanguage usage, KRMS object id, KRMS object type and desired language
550         * @throws RiceIllegalArgumentException if the given naturalLanguageUsageId, typeId,
551         *                                      krmsObjectId or language is null or
552         *                                      invalid
553         */
554        @WebMethod(operationName = "getNaturalLanguageForType")
555        @WebResult(name = "naturalLanguage")
556        public String getNaturalLanguageForType(@WebParam(name = "naturalLanguageUsageId") String naturalLanguageUsageId, @WebParam(name = "typeId") String typeId, @WebParam(name = "krmsObjectId") String krmsObjectId,
557                @WebParam(name = "languageCode") String languageCode) throws RiceIllegalArgumentException;
558    
559        /**
560         * Retrieve all the NaturalLanguageUsages
561         *
562         * @return list of NaturalLanguageUsages
563         */
564        @WebMethod(operationName = "getNaturalLanguageUsages")
565        @XmlElementWrapper(name = "naturalLanguageUsages", required = true)
566        @XmlElement(name = "naturalLanguageUsage", required = false)
567        @WebResult(name = "naturalLanguageUsages")
568        public Set<NaturalLanguageUsage> getNaturalLanguageUsages();
569    }