1 /**
2 * Copyright 2005-2015 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.layout;
17
18 import java.util.List;
19
20 import org.kuali.rice.krad.uif.container.Group;
21
22 /**
23 * Layout manager interface for stacked collections.
24 *
25 * @author Kuali Rice Team (rice.collab@kuali.org)
26 */
27 public interface StackedLayoutManager extends CollectionLayoutManager {
28
29 /**
30 * Text to appears in the header for each collection lines Group. Used in
31 * conjunction with {@link #getSummaryFields()} to build up the final header
32 * text
33 *
34 * @return summary title text
35 */
36 String getSummaryTitle();
37
38 /**
39 * Setter for the summary title text
40 *
41 * @param summaryTitle
42 */
43 void setSummaryTitle(String summaryTitle);
44
45 /**
46 * List of attribute names from the collection line class that should be
47 * used to build the line summary. To build the summary the value for each
48 * attribute is retrieved from the line instance. All the values are then
49 * placed together with a separator.
50 *
51 * @return summary field names
52 * @see StackedLayoutManagerBase#buildLineHeaderText(Object, org.kuali.rice.krad.uif.container.Group)
53 */
54 List<String> getSummaryFields();
55
56 /**
57 * Setter for the summary field name list
58 *
59 * @param summaryFields
60 */
61 void setSummaryFields(List<String> summaryFields);
62
63 /**
64 * Group instance that is used as a prototype for creating the collection
65 * line groups. For each line a copy of the prototype is made and then
66 * adjusted as necessary
67 *
68 * @return Group instance to use as prototype
69 */
70 Group getLineGroupPrototype();
71
72 /**
73 * Setter for the line group prototype
74 *
75 * @param lineGroupPrototype
76 */
77 void setLineGroupPrototype(Group lineGroupPrototype);
78
79 /**
80 * Group that will 'wrap' the generated collection lines so that they have a different layout from the general
81 * stacked layout
82 *
83 * <p>
84 * By default (when the wrapper group is null), each collection line will become a group and the groups are
85 * rendered one after another. If the wrapper group is configured, the generated groups will be inserted as the
86 * items for the wrapper group, and the layout manager configured for the wrapper group will determine how they
87 * are rendered. For example, the layout manager could be a grid layout configured for three columns, which would
88 * layout the first three lines horizontally then break to a new row.
89 * </p>
90 *
91 * @return Group instance whose items list should be populated with the generated groups, or null to use the
92 * default layout
93 */
94 Group getWrapperGroup();
95
96 /**
97 * Setter for the wrapper group that will receive the generated line groups
98 *
99 * @param wrapperGroup
100 */
101 void setWrapperGroup(Group wrapperGroup);
102
103 /**
104 * Final {@code List} of Groups to render for the collection
105 *
106 * @return collection groups
107 */
108 List<Group> getStackedGroups();
109
110 /**
111 * Used by reflection during the lifecycle to get groups for the lifecycle when not using a wrapper group
112 *
113 * <p>There are no references to this method in the code, this is intentional. DO NOT REMOVE.</p>
114 *
115 * @return the stacked groups, if any
116 */
117 List<Group> getStackedGroupsNoWrapper();
118
119 /**
120 * Setter for the collection groups
121 *
122 * @param stackedGroups
123 */
124 void setStackedGroups(List<Group> stackedGroups);
125
126 /**
127 * Flag that indicates whether actions will be added in the same group as the line items instead of in the
128 * footer of the line group
129 *
130 * @return boolean
131 */
132 boolean isRenderLineActionsInLineGroup();
133
134 /**
135 * Set flag to add actions in the same group as the line items
136 *
137 * @param actionsInLineGroup
138 */
139 void setRenderLineActionsInLineGroup(boolean actionsInLineGroup);
140
141 /**
142 * When true, actions specified in lineActions will appear to the very right of the header
143 * (appears in the corner of the stacked item) by placing the actions in the Header's rightGroup.
144 *
145 * @return true if rendering actions at the header level, false otherwise
146 */
147 public boolean isRenderLineActionsInHeader();
148
149 /**
150 * @see StackedLayoutManager#isRenderLineActionsInHeader()
151 */
152 public void setRenderLineActionsInHeader(boolean renderLineActionsInHeader);
153
154 /**
155 * Get a string representation of all style classes defined by this layout manager.
156 *
157 * @return string representing CSS classes
158 */
159 String getStyleClassesAsString();
160
161 }