View Javadoc
1   /**
2    * Copyright 2005-2016 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.krms.impl.repository;
17  
18  import java.util.List;
19  import java.util.Set;
20  
21  import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
22  import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition;
23  import org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition;
24  import org.kuali.rice.krms.api.repository.agenda.AgendaTreeDefinition;
25  import org.kuali.rice.krms.api.repository.context.ContextDefinition;
26  import org.springframework.cache.annotation.CacheEvict;
27  import org.springframework.cache.annotation.Cacheable;
28  
29  /**
30   * This is the interface for accessing KRMS repository Agenda related
31   * business objects. 
32   * 
33   * @author Kuali Rice Team (rice.collab@kuali.org)
34   *
35   */
36  public interface AgendaBoService {
37  
38      /**
39       * This will create a {@link AgendaDefinition} exactly like the parameter passed in.
40       *
41       * @param agenda  The Agenda to create
42       * @throws IllegalArgumentException if the Agenda is null
43       * @throws IllegalStateException if the Agenda already exists in the system
44       */
45      @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
46  	public AgendaDefinition createAgenda(AgendaDefinition agenda);
47  	
48      /**
49       * This will update an existing {@link AgendaDefinition}.
50       *
51       * @param agenda  The Agenda to update
52       * @throws IllegalArgumentException if the Agenda is null
53       * @throws IllegalStateException if the Agenda does not exists in the system
54       */
55      @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
56  	public AgendaDefinition updateAgenda(AgendaDefinition agenda);
57  
58      /**
59       * Delete the {@link AgendaDefinition} with the given id.
60       *
61       * @param agendaId to delete.
62       * @throws IllegalArgumentException if the Agenda is null.
63       * @throws IllegalStateException if the Agenda does not exists in the system
64       *
65       */
66      @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
67      public void deleteAgenda(String agendaId);
68  
69      /**
70       * Retrieves an Agenda from the repository based on the given agenda id.
71       *
72       * @param agendaId the id of the Agenda to retrieve
73       * @return an {@link AgendaDefinition} identified by the given agendaId.  
74       * A null reference is returned if an invalid or non-existent id is supplied.
75       */
76      @Cacheable(value= AgendaDefinition.Cache.NAME, key="'agendaId=' + #p0")
77  	public AgendaDefinition getAgendaByAgendaId(String agendaId);
78  	
79      /**
80       * Retrieves an Agenda from the repository based on the provided agenda name
81       * and context id.
82       *
83       * @param name the name of the Agenda to retrieve.
84       * @param contextId the id of the context that the agenda belongs to.
85       * @return an {@link AgendaDefinition} identified by the given name and namespace.  
86       * A null reference is returned if an invalid or non-existent name and
87       * namespace combination is supplied.
88       */
89      @Cacheable(value= AgendaDefinition.Cache.NAME, key="'name=' + #p0 + '|' + 'contextId=' + #p1")
90  	public AgendaDefinition getAgendaByNameAndContextId(String name, String contextId);
91  	
92      /**
93       * Retrieves a set of Agendas associated with a context.
94       *
95       * @param contextId the id of the context
96       * @return a set of {@link AgendaDefinition} associated with the given context.  
97       * A null reference is returned if an invalid or contextId is supplied.
98       */
99      @Cacheable(value= AgendaDefinition.Cache.NAME, key="'contextId=' + #p0")
100 	public List<AgendaDefinition> getAgendasByContextId(String contextId);
101 	
102     /**
103      * This will create an {@link org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition} in the repository exactly like
104      * the parameter passed in.
105      *
106      * @param agendaItem  The AgendaItemDefinition to create
107      * @throws IllegalArgumentException if the AgendaItemDefinition is null
108      * @throws IllegalStateException if the AgendaItemDefinition already exists in the system
109      */
110     @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
111 	public AgendaItemDefinition createAgendaItem(AgendaItemDefinition agendaItem);
112 	
113     /**
114      * This will update an existing {@link org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition}.
115      *
116      * @param agendaItem  The AgendaItemDefinition to update
117      * @throws IllegalArgumentException if the AgendaItemDefinition is null
118      * @throws IllegalStateException if the AgendaItemDefinition does not exists in the system
119      */
120     @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
121 	public AgendaItemDefinition updateAgendaItem(AgendaItemDefinition agendaItem);
122 	
123     /**
124      * This will create an {@link org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition} in the repository exactly like
125      * the parameter passed in.  The AgendaItemDefinition will be linked to an existing
126      * AgendaItemDefinition in the relationship provided. Linking the AgendaItems effectively
127      * builds a tree of AgendaItems that may be traversed by the engine.
128      *
129      * @param agendaItem  The AgendaItemDefinition to create
130      * @param parentId  The id of the existing AgendaItemDefinition to be linked with the
131      *  newly created AgendaItemDefinition
132      * @param position A boolean used to specify the relationship between the
133      *  linked AgendaItems.
134      *  <p> If the position parameter is true, the new AgendaItemDefinition is linked as the next
135      *  AgendaItemDefinition to be evaluated if the parent AgendaItemDefinition evaluates to TRUE.
136      *  <p> If the position parameter is false, the new AgendaItemDefinition is linked as the next
137      *  AgendaItemDefinition to be evaluated if the parent AgendaItemDefinition evaluates to FALSE.
138      *  <p> If the position parameter is null,  the new AgendaItemDefinition is linked as the next
139      *  AgendaItemDefinition to be evaluated after any true or false branches of the tree have
140      *  been traversed.
141      * @throws IllegalArgumentException if the AgendaItemDefinition is null
142      * @throws IllegalStateException if the parent AgendaItemDefinition does not already exists in the system
143      */
144     @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
145 	public void addAgendaItem(AgendaItemDefinition agendaItem, String parentId, Boolean position);
146 	
147     /**
148      * Retrieves an AgendaItemDefinition from the repository based on the given agenda id.
149      *
150      * @param id the id of the AgendaItemDefinition to retrieve
151      * @return an {@link org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition} identified by the given id.
152      * A null reference is returned if an invalid or non-existent id is supplied.
153      */
154     @Cacheable(value= AgendaItemDefinition.Cache.NAME, key="'id=' + #p0")
155 	public AgendaItemDefinition getAgendaItemById(String id);
156 
157     // TODO: caching annotations
158     public List<AgendaItemDefinition> getAgendaItemsByAgendaId(String id);
159 
160     // TODO: caching annotations
161     public List<AgendaDefinition> getAgendasByType(String typeId) throws RiceIllegalArgumentException;
162 
163     // TODO: caching annotations
164     public List<AgendaDefinition> getAgendasByTypeAndContext(String typeId, String contextId)
165             throws RiceIllegalArgumentException;
166 
167     // TODO: caching annotations
168     public List<AgendaItemDefinition> getAgendaItemsByType(String typeId) throws RiceIllegalArgumentException;
169 
170     // TODO: caching annotations
171     public List<AgendaItemDefinition> getAgendaItemsByContext(String contextId) throws RiceIllegalArgumentException;
172 
173     // TODO: caching annotations
174     public List<AgendaItemDefinition> getAgendaItemsByTypeAndContext(String typeId, String contextId)
175             throws RiceIllegalArgumentException;
176 
177     @CacheEvict(value={AgendaTreeDefinition.Cache.NAME, AgendaDefinition.Cache.NAME, AgendaItemDefinition.Cache.NAME, ContextDefinition.Cache.NAME}, allEntries = true)
178     public void deleteAgendaItem(String id) throws RiceIllegalArgumentException;
179 
180 	/**
181 	* Converts a mutable bo to it's immutable counterpart
182 	* @param bo the mutable business object
183 	* @return the immutable object
184 	*/
185 	public AgendaDefinition to(AgendaBo bo);
186 
187    /**
188 	* Converts a immutable object to it's mutable bo counterpart
189 	* @param im immutable object
190 	* @return the mutable bo
191 	*/
192 	public AgendaBo from(AgendaDefinition im);
193 }