1 /** 2 * Copyright 2005-2014 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.krad.uif.container; 17 18 import org.kuali.rice.krad.uif.component.Component; 19 import org.kuali.rice.krad.uif.element.Header; 20 import org.kuali.rice.krad.uif.element.Message; 21 import org.kuali.rice.krad.uif.element.ValidationMessages; 22 import org.kuali.rice.krad.uif.layout.LayoutManager; 23 import org.kuali.rice.krad.uif.widget.Helpable; 24 25 import java.util.List; 26 import java.util.Set; 27 28 /** 29 * Type of component that contains a collection of other components. All 30 * templates for {@code Container} components must use a 31 * {@code LayoutManager} to render the contained components. 32 * 33 * Each container has the following parts in addition to the contained components: 34 * <ul> 35 * <li>{@code HeaderField}</li> 36 * <li>Summary {@code Message}</li> 37 * <li>Help component</li> 38 * <li>Errors container</li> 39 * <li>Footer {@code Group}</li> 40 * </ul> 41 * Container implementations are free to add additional content as needed. 42 * 43 * @author Kuali Rice Team (rice.collab@kuali.org) 44 * @see org.kuali.rice.krad.uif.component.Component 45 */ 46 public interface Container extends Component, Helpable { 47 48 /** 49 * {@code List} of {@code Component} instances that are held by 50 * the container 51 * 52 * <p> 53 * Contained components are rendered within the section template by calling 54 * the associated {@code LayoutManager}. 55 * </p> 56 * 57 * @return List component instances 58 */ 59 List<? extends Component> getItems(); 60 61 /** 62 * Setter for the containers list of components 63 * 64 * @param items list of components to set in container 65 */ 66 void setItems(List<? extends Component> items); 67 68 /** 69 * {@code Set} of {@code Component} classes that may be placed 70 * into the container 71 * 72 * <p> 73 * If an empty or null list is returned, it is assumed the container 74 * supports all components. The returned set will be used by dictionary 75 * validators and allows renders to make assumptions about the contained 76 * components 77 * </p> 78 * 79 * @return Set component classes 80 */ 81 Set<Class<? extends Component>> getSupportedComponents(); 82 83 /** 84 * {@code LayoutManager} that should be used to layout the components 85 * in the container 86 * 87 * <p> 88 * The template associated with the layout manager will be invoked passing 89 * in the List of components from the container. This list is exported under 90 * the attribute name 'items' 91 * </p> 92 * 93 * @return LayoutManager instance 94 */ 95 LayoutManager getLayoutManager(); 96 97 /** 98 * @see #getLayoutManager() 99 */ 100 void setLayoutManager(LayoutManager layoutManager); 101 102 /** 103 * {@code HeaderField} associated with the container 104 * 105 * <p> 106 * Header fields are generally rendered at the beginning of the container to 107 * indicate a grouping, although this is determined by the template 108 * associated with the container. The actual rendering configuration (style 109 * and so on) is configured within the HeaderField instance 110 * </p> 111 * <p> 112 * Header is only rendered if {@code Container#isRenderHeader} is true 113 * and getHeader() is not null 114 * </p> 115 * 116 * @return HeaderField instance or Null 117 */ 118 Header getHeader(); 119 120 /** 121 * @see #getHeader() 122 */ 123 void setHeader(Header header); 124 125 /** 126 * Footer {@code Group} associated with the container 127 * 128 * <p> 129 * The footer is usually rendered at the end of the container. Often this is 130 * a place to put actions (buttons) for the container. 131 * </p> 132 * <p> 133 * Footer is only rendered if {@code Container#isRenderFooter} is true 134 * and getFooter is not null 135 * </p> 136 * 137 * @return Group footer instance or Null 138 */ 139 Group getFooter(); 140 141 /** 142 * @see #getFooter() 143 */ 144 void setFooter(Group footer); 145 146 /** 147 * Text for the container that provides a summary description or 148 * instructions 149 * 150 * <p> 151 * Text is encapsulated in a {@code Message} that contains 152 * rendering configuration. 153 * </p> 154 * <p> 155 * Summary {@code Message} only rendered if this methods does not 156 * return null 157 * </p> 158 * 159 * @return Message instance or Null 160 */ 161 Message getInstructionalMessage(); 162 163 /** 164 * @see #getInstructionalMessage() 165 */ 166 void setInstructionalMessage(Message instructionalMessage); 167 168 /** 169 * Field that contains the error messages for the container 170 * 171 * <p> 172 * Containers can collect the errors for the contained component and display 173 * either all the messages or counts. This {@code Field} is used to 174 * render those messages. Styling and other configuration is done through 175 * the {@code ValidationMessages} 176 * </p> 177 * 178 * @return ValidationMessages holding the container errors 179 */ 180 ValidationMessages getValidationMessages(); 181 182 /** 183 * @see #getValidationMessages() 184 */ 185 void setValidationMessages(ValidationMessages validationMessages); 186 187 /** 188 * Performs sorting of the container items based on the order property. 189 * 190 * <p> 191 * Note that the items may be modified by this method to assign order priority where it has not 192 * been previously assigned. 193 * </p> 194 */ 195 void sortItems(); 196 197 /** 198 * Determine if remote field holders should be processed for this container. 199 * 200 * @return True if remote field holders should be processed for this container. 201 */ 202 boolean isProcessRemoteFieldHolders(); 203 204 /** 205 * Get the key of the action item to invoke upon pressing the enter key. 206 * 207 * @return String enterKeyAction 208 */ 209 public String getEnterKeyAction(); 210 211 /** 212 * @see #getEnterKeyAction() 213 */ 214 public void setEnterKeyAction(String enterKeyAction); 215 216 }