1 /**
2 * Copyright 2005-2013 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.field.ErrorsField;
20 import org.kuali.rice.krad.uif.field.HeaderField;
21 import org.kuali.rice.krad.uif.field.MessageField;
22 import org.kuali.rice.krad.uif.layout.LayoutManager;
23 import org.kuali.rice.krad.uif.widget.Help;
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</code> components must use a
31 * <code>LayoutManager</code> 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</code></li>
36 * <li>Summary <code>MessageField</code></li>
37 * <li>Help component</li>
38 * <li>Errors container</li>
39 * <li>Footer <code>Group</code></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 *
45 * @see org.kuali.rice.krad.uif.component.Component
46 */
47 public interface Container extends Component {
48
49 /**
50 * <code>List</code> of <code>Component</code> instances that are held by
51 * the container
52 *
53 * <p>
54 * Contained components are rendered within the section template by calling
55 * the associated <code>LayoutManager</code>
56 * </p>
57 *
58 * @return List component instances
59 */
60 public List<? extends Component> getItems();
61
62 /**
63 * Setter for the containers list of components
64 *
65 * @param items - list of components to set in container
66 */
67 public void setItems(List<? extends Component> items);
68
69 /**
70 * <code>Set</code> of <code>Component</code> classes that may be placed
71 * into the container
72 *
73 * <p>
74 * If an empty or null list is returned, it is assumed the container
75 * supports all components. The returned set will be used by dictionary
76 * validators and allows renders to make assumptions about the contained
77 * components
78 * </p>
79 *
80 * @return Set component classes
81 */
82 public Set<Class<? extends Component>> getSupportedComponents();
83
84 /**
85 * <code>LayoutManager</code> that should be used to layout the components
86 * in the container
87 *
88 * <p>
89 * The template associated with the layout manager will be invoked passing
90 * in the List of components from the container. This list is exported under
91 * the attribute name 'items'
92 * </p>
93 *
94 * @return LayoutManager instance
95 */
96 public LayoutManager getLayoutManager();
97
98 /**
99 * Setter for the containers layout manager
100 *
101 * @param layoutManager
102 */
103 public void setLayoutManager(LayoutManager layoutManager);
104
105 /**
106 * <code>HeaderField</code> associated with the container
107 *
108 * <p>
109 * Header fields are generally rendered at the beginning of the container to
110 * indicate a grouping, although this is determined by the template
111 * associated with the container. The actual rendering configuration (style
112 * and so on) is configured within the HeaderField instance
113 * </p>
114 * <p>
115 * Header is only rendered if <code>Container#isRenderHeader</code> is true
116 * and getHeader() is not null
117 * </p>
118 *
119 * @return HeaderField instance or Null
120 */
121 public HeaderField getHeader();
122
123 /**
124 * Setter for the containers header field
125 *
126 * @param header
127 */
128 public void setHeader(HeaderField header);
129
130 /**
131 * Footer <code>Group</code> associated with the container
132 *
133 * <p>
134 * The footer is usually rendered at the end of the container. Often this is
135 * a place to put actions (buttons) for the container.
136 * </p>
137 * <p>
138 * Footer is only rendered if <code>Container#isRenderFooter</code> is true
139 * and getFooter is not null
140 * </p>
141 *
142 * @return Group footer instance or Null
143 */
144 public Group getFooter();
145
146 /**
147 * Setter for the containers footer
148 *
149 * @param footer
150 */
151 public void setFooter(Group footer);
152
153 /**
154 * Text for the container that provides a summary description or
155 * instructions
156 *
157 * <p>
158 * Text is encapsulated in a <code>MessageField</code> that contains
159 * rendering configuration.
160 * </p>
161 * <p>
162 * Summary <code>MessageField</code> only rendered if this methods does not
163 * return null
164 * </p>
165 *
166 * @return MessageField instance or Null
167 */
168 public MessageField getInstructionalMessageField();
169
170 /**
171 * Setter for the containers summary message field
172 *
173 * @param summaryMessageField
174 */
175 public void setInstructionalMessageField(MessageField summaryMessageField);
176
177 /**
178 * Field that contains the error messages for the container
179 *
180 * <p>
181 * Containers can collect the errors for the contained component and display
182 * either all the messages or counts. This <code>Field</code> is used to
183 * render those messages. Styling and other configuration is done through
184 * the <code>ErrorsField</code>
185 * </p>
186 *
187 * @return ErrorsField holding the container errors
188 */
189 public ErrorsField getErrorsField();
190
191 /**
192 * Setter for the containers errors field
193 *
194 * @param errorsField
195 */
196 public void setErrorsField(ErrorsField errorsField);
197
198 /**
199 * Help configuration object for the container
200 *
201 * <p>
202 * External help information can be configured for the container. The
203 * <code>Help</code> object can the configuration for rendering a link to
204 * that help information.
205 * </p>
206 *
207 * @return Help for container
208 */
209 public Help getHelp();
210
211 /**
212 * Setter for the containers help content
213 *
214 * @param help
215 */
216 public void setHelp(Help help);
217
218 /**
219 * This property is true if the container is used to display a group of fields that is visually a single
220 * field - this has an effect on where errors will show up for these fields.
221 * @return the fieldContainer
222 */
223 public boolean isFieldContainer();
224
225 /**
226 * @param fieldContainer the fieldContainer to set
227 */
228 public void setFieldContainer(boolean fieldContainer);
229
230 }