View Javadoc

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.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 }