001 /** 002 * Copyright 2005-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.element; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.kuali.rice.krad.uif.component.Component; 020 import org.kuali.rice.krad.uif.container.Group; 021 import org.kuali.rice.krad.uif.view.View; 022 023 import java.util.ArrayList; 024 import java.util.List; 025 026 /** 027 * Content element that renders a header element and optionally a <code>Group</code> to 028 * present along with the header text 029 * 030 * <p> 031 * Generally the group is used to display content to the right of the header, 032 * such as links for the group or other information 033 * </p> 034 * 035 * @author Kuali Rice Team (rice.collab@kuali.org) 036 */ 037 public class Header extends ContentElementBase { 038 private static final long serialVersionUID = -6950408292923393244L; 039 040 private String headerText; 041 private String headerLevel; 042 043 private String headerTagStyle; 044 private List<String> headerTagCssClasses; 045 046 private Group upperGroup; 047 private Group rightGroup; 048 private Group lowerGroup; 049 050 public Header() { 051 super(); 052 053 headerTagCssClasses = new ArrayList<String>(); 054 } 055 056 /** 057 * The following finalization is performed: 058 * 059 * <ul> 060 * <li>Set render on header group to false if no items are configured</li> 061 * </ul> 062 * 063 * @see org.kuali.rice.krad.uif.component.ComponentBase#performFinalize(org.kuali.rice.krad.uif.view.View, 064 * java.lang.Object, org.kuali.rice.krad.uif.component.Component) 065 */ 066 @Override 067 public void performFinalize(View view, Object model, Component parent) { 068 super.performFinalize(view, model, parent); 069 070 // don't render header groups if no items were configured 071 if ((getUpperGroup() != null) && (getUpperGroup().getItems().isEmpty())) { 072 getUpperGroup().setRender(false); 073 } 074 075 if ((getRightGroup() != null) && (getRightGroup().getItems().isEmpty())) { 076 getRightGroup().setRender(false); 077 } 078 079 if ((getLowerGroup() != null) && (getLowerGroup().getItems().isEmpty())) { 080 getLowerGroup().setRender(false); 081 } 082 083 //add preset styles to header groups 084 if(getUpperGroup() != null){ 085 getUpperGroup().addStyleClass("uif-header-upperGroup"); 086 } 087 088 if(getRightGroup() != null){ 089 getRightGroup().addStyleClass("uif-header-rightGroup"); 090 } 091 092 if(getLowerGroup() != null){ 093 getLowerGroup().addStyleClass("uif-header-lowerGroup"); 094 } 095 } 096 097 /** 098 * @see org.kuali.rice.krad.uif.component.ComponentBase#getComponentsForLifecycle() 099 */ 100 @Override 101 public List<Component> getComponentsForLifecycle() { 102 List<Component> components = super.getComponentsForLifecycle(); 103 104 components.add(upperGroup); 105 components.add(rightGroup); 106 components.add(lowerGroup); 107 108 return components; 109 } 110 111 /** 112 * Text that should be displayed on the header 113 * 114 * @return String header text 115 */ 116 public String getHeaderText() { 117 return this.headerText; 118 } 119 120 /** 121 * Setter for the header text 122 * 123 * @param headerText 124 */ 125 public void setHeaderText(String headerText) { 126 this.headerText = headerText; 127 } 128 129 /** 130 * HTML header level (h1 ... h6) that should be applied to the header text 131 * 132 * @return String header level 133 */ 134 public String getHeaderLevel() { 135 return this.headerLevel; 136 } 137 138 /** 139 * Setter for the header level 140 * 141 * @param headerLevel 142 */ 143 public void setHeaderLevel(String headerLevel) { 144 this.headerLevel = headerLevel; 145 } 146 147 /** 148 * Style classes that should be applied to the header text (h tag) 149 * 150 * <p> 151 * Note the style class given here applies to only the header text. The 152 * style class property inherited from the <code>Component</code> interface 153 * can be used to set the class for the whole field div (which could 154 * include a nested <code>Group</code>) 155 * </p> 156 * 157 * @return List<String> list of style classes 158 * @see org.kuali.rice.krad.uif.component.Component#getCssClasses() 159 */ 160 public List<String> getHeaderTagCssClasses() { 161 return this.headerTagCssClasses; 162 } 163 164 /** 165 * Setter for the list of classes to apply to the header h tag 166 * 167 * @param headerTagCssClasses 168 */ 169 public void setHeaderTagCssClasses(List<String> headerTagCssClasses) { 170 this.headerTagCssClasses = headerTagCssClasses; 171 } 172 173 /** 174 * Builds the HTML class attribute string by combining the headerStyleClasses list 175 * with a space delimiter 176 * 177 * @return String class attribute string 178 */ 179 public String getHeaderStyleClassesAsString() { 180 if (headerTagCssClasses != null) { 181 return StringUtils.join(headerTagCssClasses, " "); 182 } 183 184 return ""; 185 } 186 187 /** 188 * Style that should be applied to the header h tag 189 * 190 * <p> 191 * Note the style given here applies to only the header text. The style 192 * property inherited from the <code>Component</code> interface can be used 193 * to set the style for the whole header div (which could include a nested 194 * <code>Group</code>) 195 * </p> 196 * 197 * @return String header style 198 * @see org.kuali.rice.krad.uif.component.Component#getStyle() 199 */ 200 public String getHeaderTagStyle() { 201 return this.headerTagStyle; 202 } 203 204 /** 205 * Setter for the header h tag style 206 * 207 * @param headerTagStyle 208 */ 209 public void setHeaderTagStyle(String headerTagStyle) { 210 this.headerTagStyle = headerTagStyle; 211 } 212 213 /** 214 * Nested group instance that can be used to render contents above the header text 215 * 216 * <p> 217 * The header group is useful for adding content such as links or actions that is presented with the header 218 * </p> 219 * 220 * @return Group instance 221 */ 222 public Group getUpperGroup() { 223 return upperGroup; 224 } 225 226 /** 227 * Setter for the header group instance that is rendered above the header text 228 * 229 * @param upperGroup 230 */ 231 public void setUpperGroup(Group upperGroup) { 232 this.upperGroup = upperGroup; 233 } 234 235 /** 236 * Nested group instance that can be used to render contents to the right of the header text 237 * 238 * <p> 239 * The header group is useful for adding content such as links or actions that is presented with the header 240 * </p> 241 * 242 * @return Group instance 243 */ 244 public Group getRightGroup() { 245 return rightGroup; 246 } 247 248 /** 249 * Setter for the header group instance that is rendered to the right of the header text 250 * 251 * @param rightGroup 252 */ 253 public void setRightGroup(Group rightGroup) { 254 this.rightGroup = rightGroup; 255 } 256 257 /** 258 * Nested group instance that can be used to render contents below the header text 259 * 260 * <p> 261 * The header group is useful for adding content such as links or actions that is presented with the header 262 * </p> 263 * 264 * @return Group instance 265 */ 266 public Group getLowerGroup() { 267 return lowerGroup; 268 } 269 270 /** 271 * Setter for the header group instance that is rendered below the header text 272 * 273 * @param lowerGroup 274 */ 275 public void setLowerGroup(Group lowerGroup) { 276 this.lowerGroup = lowerGroup; 277 } 278 279 /** 280 * List of <code>Component</code> instances contained in the lower header group 281 * 282 * <p> 283 * Convenience method for configuration to get the items List from the 284 * lower header group 285 * </p> 286 * 287 * @return List<? extends Component> items 288 */ 289 public List<? extends Component> getItems() { 290 if (lowerGroup != null) { 291 return lowerGroup.getItems(); 292 } 293 294 return null; 295 } 296 297 /** 298 * Setter for the lower group's items 299 * 300 * <p> 301 * Convenience method for configuration to set the items List for the 302 * lower header group 303 * </p> 304 * 305 * @param items 306 */ 307 public void setItems(List<? extends Component> items) { 308 if (lowerGroup != null) { 309 lowerGroup.setItems(items); 310 } 311 } 312 }