1 /** 2 * Copyright 2005-2012 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.Set; 19 20 import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition; 21 import org.kuali.rice.krms.api.repository.agenda.AgendaItem; 22 23 /** 24 * This is the interface for accessing KRMS repository Agenda related 25 * business objects. 26 * 27 * @author Kuali Rice Team (rice.collab@kuali.org) 28 * 29 */ 30 public interface AgendaBoService { 31 32 /** 33 * This will create a {@link AgendaDefinition} exactly like the parameter passed in. 34 * 35 * @param agenda The Agenda to create 36 * @throws IllegalArgumentException if the Agenda is null 37 * @throws IllegalStateException if the Agenda already exists in the system 38 */ 39 public AgendaDefinition createAgenda(AgendaDefinition agenda); 40 41 /** 42 * This will update an existing {@link AgendaDefinition}. 43 * 44 * @param agenda The Agenda to update 45 * @throws IllegalArgumentException if the Agenda is null 46 * @throws IllegalStateException if the Agenda does not exists in the system 47 */ 48 public void updateAgenda(AgendaDefinition agenda); 49 50 /** 51 * Retrieves an Agenda from the repository based on the given agenda id. 52 * 53 * @param agendaId the id of the Agenda to retrieve 54 * @return an {@link AgendaDefinition} identified by the given agendaId. 55 * A null reference is returned if an invalid or non-existent id is supplied. 56 */ 57 public AgendaDefinition getAgendaByAgendaId(String agendaId); 58 59 /** 60 * Retrieves an Agenda from the repository based on the provided agenda name 61 * and context id. 62 * 63 * @param name the name of the Agenda to retrieve. 64 * @param contextId the id of the context that the agenda belongs to. 65 * @return an {@link AgendaDefinition} identified by the given name and namespace. 66 * A null reference is returned if an invalid or non-existent name and 67 * namespace combination is supplied. 68 */ 69 public AgendaDefinition getAgendaByNameAndContextId(String name, String contextId); 70 71 /** 72 * Retrieves a set of Agendas associated with a context. 73 * 74 * @param contextId the id of the context 75 * @return a set of {@link AgendaDefinition} associated with the given context. 76 * A null reference is returned if an invalid or contextId is supplied. 77 */ 78 public Set<AgendaDefinition> getAgendasByContextId(String contextId); 79 80 /** 81 * This will create an {@link AgendaItem} in the repository exactly like 82 * the parameter passed in. 83 * 84 * @param agendaItem The AgendaItem to create 85 * @throws IllegalArgumentException if the AgendaItem is null 86 * @throws IllegalStateException if the AgendaItem already exists in the system 87 */ 88 public AgendaItem createAgendaItem(AgendaItem agendaItem); 89 90 /** 91 * This will update an existing {@link AgendaItem}. 92 * 93 * @param agendaItem The AgendaItem to update 94 * @throws IllegalArgumentException if the AgendaItem is null 95 * @throws IllegalStateException if the AgendaItem does not exists in the system 96 */ 97 public void updateAgendaItem(AgendaItem agendaItem); 98 99 /** 100 * This will create an {@link AgendaItem} in the repository exactly like 101 * the parameter passed in. The AgendaItem will be linked to an existing 102 * AgendaItem in the relationship provided. Linking the AgendaItems effectively 103 * builds a tree of AgendaItems that may be traversed by the engine. 104 * 105 * @param agendaItem The AgendaItem to create 106 * @param parentId The id of the existing AgendaItem to be linked with the 107 * newly created AgendaItem 108 * @param position. A boolean used to specify the relationship between the 109 * linked AgendaItems. 110 * <p> If the position parameter is true, the new AgendaItem is linked as the next 111 * AgendaItem to be evaluated if the parent AgendaItem evaluates to TRUE. 112 * <p> If the position parameter is false, the new AgendaItem is linked as the next 113 * AgendaItem to be evaluated if the parent AgendaItem evaluates to FALSE. 114 * <p> If the position parameter is null, the new AgendaItem is linked as the next 115 * AgendaItem to be evaluated after any true or false branches of the tree have 116 * been traversed. 117 * @throws IllegalArgumentException if the AgendaItem is null 118 * @throws IllegalStateException if the parent AgendaItem does not already exists in the system 119 */ 120 public void addAgendaItem(AgendaItem agendaItem, String parentId, Boolean position); 121 122 /** 123 * Retrieves an AgendaItem from the repository based on the given agenda id. 124 * 125 * @param id the id of the AgendaItem to retrieve 126 * @return an {@link AgendaItem} identified by the given id. 127 * A null reference is returned if an invalid or non-existent id is supplied. 128 */ 129 public AgendaItem getAgendaItemById(String id); 130 131 /** 132 * Converts a mutable bo to it's immutable counterpart 133 * @param bo the mutable business object 134 * @return the immutable object 135 */ 136 public AgendaDefinition to(AgendaBo bo); 137 138 /** 139 * Converts a immutable object to it's mutable bo counterpart 140 * @param im immutable object 141 * @return the mutable bo 142 */ 143 public AgendaBo from(AgendaDefinition im); 144 }