Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
BoxLayoutManager |
|
| 1.8181818181818181;1.818 |
1 | /** | |
2 | * Copyright 2005-2011 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 org.apache.commons.lang.StringUtils; | |
19 | import org.kuali.rice.krad.uif.CssConstants; | |
20 | import org.kuali.rice.krad.uif.CssConstants.Padding; | |
21 | import org.kuali.rice.krad.uif.UifConstants.Orientation; | |
22 | import org.kuali.rice.krad.uif.container.Container; | |
23 | import org.kuali.rice.krad.uif.field.InputField; | |
24 | import org.kuali.rice.krad.uif.view.View; | |
25 | import org.kuali.rice.krad.uif.component.Component; | |
26 | ||
27 | /** | |
28 | * Layout manager that organizes components in a single row (horizontal) or | |
29 | * column (vertical) | |
30 | * | |
31 | * <p> | |
32 | * Although a table based template could be used, setup is done to also support | |
33 | * a CSS based template. The items in the <code>Container</code> instance are | |
34 | * rendered sequentially wrapping each one with a span element. The padding | |
35 | * property can be configured to space the elements as needed. To achieve a | |
36 | * vertical orientation, the span style is set to block. Additional styling can | |
37 | * be set for the items by using the itemSpanStyle property. | |
38 | * </p> | |
39 | * | |
40 | * @author Kuali Rice Team (rice.collab@kuali.org) | |
41 | */ | |
42 | public class BoxLayoutManager extends LayoutManagerBase { | |
43 | private static final long serialVersionUID = 4467342272983290044L; | |
44 | ||
45 | private Orientation orientation; | |
46 | private String padding; | |
47 | ||
48 | private String itemStyle; | |
49 | private boolean layoutFieldErrors; | |
50 | ||
51 | public BoxLayoutManager() { | |
52 | 0 | super(); |
53 | ||
54 | 0 | orientation = Orientation.HORIZONTAL; |
55 | 0 | } |
56 | ||
57 | /** | |
58 | * The following initialization is performed: | |
59 | * | |
60 | * <ul> | |
61 | * <li>Set the itemSpanStyle</li> | |
62 | * </ul> | |
63 | * | |
64 | * @see org.kuali.rice.krad.uif.component.ComponentBase#performInitialization(org.kuali.rice.krad.uif.view.View, | |
65 | * java.lang.Object,org.kuali.rice.krad.uif.container.Container) | |
66 | */ | |
67 | @Override | |
68 | public void performInitialization(View view, Object model, Container container) { | |
69 | 0 | super.performInitialization(view, model, container); |
70 | ||
71 | 0 | if(StringUtils.isBlank(itemStyle)){ |
72 | 0 | itemStyle = ""; |
73 | } | |
74 | ||
75 | 0 | if(StringUtils.isNotEmpty(padding)) { |
76 | 0 | if (orientation.equals(Orientation.VERTICAL)) { |
77 | // set item to block which will cause a line break and margin | |
78 | // bottom for padding | |
79 | 0 | itemStyle += CssConstants.getCssStyle(Padding.PADDING_BOTTOM, padding); |
80 | } | |
81 | else { | |
82 | // set margin right for padding | |
83 | 0 | itemStyle += CssConstants.getCssStyle(Padding.PADDING_RIGHT, padding); |
84 | } | |
85 | } | |
86 | ||
87 | //classes to identify this layout in jQuery and to clear the float correctly in all browsers | |
88 | 0 | this.addStyleClass("fieldLine"); |
89 | 0 | this.addStyleClass("clearfix"); |
90 | ||
91 | 0 | for (Component c : container.getItems()) { |
92 | 0 | if (c != null) { |
93 | 0 | if (orientation.equals(Orientation.HORIZONTAL)) { |
94 | // in a horizontal box layout errors are placed in a div next to all fields, | |
95 | // set the errorsField to know that we are using an alternate container for them | |
96 | 0 | if (c instanceof InputField) { |
97 | 0 | ((InputField) c).getErrorsField().setAlternateContainer(true); |
98 | 0 | layoutFieldErrors = true; |
99 | } | |
100 | } | |
101 | ||
102 | 0 | if (container.isFieldContainer()) { |
103 | 0 | if (c instanceof InputField) { |
104 | 0 | ((InputField) c).getErrorsField().setAlternateContainer(true); |
105 | 0 | layoutFieldErrors = true; |
106 | } | |
107 | } | |
108 | } | |
109 | } | |
110 | 0 | } |
111 | ||
112 | /** | |
113 | * @see org.kuali.rice.krad.uif.layout.LayoutManagerBase#performFinalize(org.kuali.rice.krad.uif.view.View, | |
114 | * java.lang.Object, org.kuali.rice.krad.uif.container.Container) | |
115 | */ | |
116 | @Override | |
117 | public void performFinalize(View view, Object model, Container container) { | |
118 | 0 | super.performFinalize(view, model, container); |
119 | 0 | } |
120 | ||
121 | /** | |
122 | * Indicates whether the components should be rendered in a horizontal or | |
123 | * vertical column | |
124 | * | |
125 | * @return Orientation orientation configured for layout | |
126 | */ | |
127 | public Orientation getOrientation() { | |
128 | 0 | return this.orientation; |
129 | } | |
130 | ||
131 | /** | |
132 | * Setter for the orientation for layout | |
133 | * | |
134 | * @param orientation | |
135 | */ | |
136 | public void setOrientation(Orientation orientation) { | |
137 | 0 | this.orientation = orientation; |
138 | 0 | } |
139 | ||
140 | /** | |
141 | * Amount of separation between each item | |
142 | * | |
143 | * <p> | |
144 | * For horizontal orientation, this will be the right padding for each item. | |
145 | * For vertical, it will be the bottom padding for each item. The value can | |
146 | * be a fixed length (like px) or percentage | |
147 | * </p> | |
148 | * | |
149 | * @return | |
150 | */ | |
151 | public String getPadding() { | |
152 | 0 | return this.padding; |
153 | } | |
154 | ||
155 | /** | |
156 | * Setter for the item padding | |
157 | * | |
158 | * @param padding | |
159 | */ | |
160 | public void setPadding(String padding) { | |
161 | 0 | this.padding = padding; |
162 | 0 | } |
163 | ||
164 | /** | |
165 | * Used by the render to set the style on the span element that wraps the | |
166 | * item. By using a wrapping span the items can be aligned based on the | |
167 | * orientation and given the correct padding | |
168 | * | |
169 | * @return String css style string | |
170 | */ | |
171 | public String getItemStyle() { | |
172 | 0 | return this.itemStyle; |
173 | } | |
174 | ||
175 | /** | |
176 | * Setter for the span style | |
177 | * | |
178 | * @param itemSpanStyle | |
179 | */ | |
180 | public void setItemStyle(String itemStyle) { | |
181 | 0 | this.itemStyle = itemStyle; |
182 | 0 | } |
183 | ||
184 | /** | |
185 | * @return the layoutFieldErrors | |
186 | */ | |
187 | public boolean isLayoutFieldErrors() { | |
188 | 0 | return this.layoutFieldErrors; |
189 | } | |
190 | ||
191 | /** | |
192 | * @param layoutFieldErrors the layoutFieldErrors to set | |
193 | */ | |
194 | public void setLayoutFieldErrors(boolean layoutFieldErrors) { | |
195 | 0 | this.layoutFieldErrors = layoutFieldErrors; |
196 | 0 | } |
197 | ||
198 | } |