View Javadoc
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.element;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.rice.krad.datadictionary.parse.BeanTag;
20  import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
21  import org.kuali.rice.krad.uif.CssConstants;
22  import org.kuali.rice.krad.uif.UifConstants;
23  import org.kuali.rice.krad.uif.component.Component;
24  import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle;
25  import org.kuali.rice.krad.uif.util.LifecycleElement;
26  import org.kuali.rice.krad.uif.view.View;
27  
28  /**
29   * The ViewHeader component represents the header for the view.
30   *
31   * <p>This header has support for a "Unified" header in
32   * which both the page title and view title appear in its content.  An "area title" and "metadata" can also be set
33   * to provide context. </p>
34   *
35   * @author Kuali Rice Team (rice.collab@kuali.org)
36   */
37  @BeanTag(name = "viewHeader", parent = "Uif-ViewHeader")
38  public class ViewHeader extends Header {
39      private static final long serialVersionUID = -974112303431464467L;
40  
41      private Message areaTitleMessage;
42      private Message supportTitleMessage;
43      private Message metadataMessage;
44      private boolean sticky;
45  
46      /**
47       * Sets the supportTitleMessage if one has not been set and unified header is being used, based on the value
48       * of page title
49       *
50       * {@inheritDoc}
51       */
52      @Override
53      public void performFinalize(Object model, LifecycleElement parent) {
54          super.performFinalize(model, parent);
55  
56          View view = ViewLifecycle.getView();
57          if (supportTitleMessage != null &&
58                  view.getCurrentPage() != null && view.getCurrentPage().getHeader() != null &&
59                  view.isUnifiedHeader()) {
60              Header pageHeader = view.getCurrentPage().getHeader();
61  
62              // hide page header text
63              pageHeader.addStyleClass(CssConstants.Classes.HIDE_HEADER_TEXT_STYLE_CLASS);
64  
65              Message pageHeaderMessage = pageHeader.getRichHeaderMessage();
66  
67              if (pageHeaderMessage != null && StringUtils.isBlank(supportTitleMessage.getMessageText())) {
68                  pageHeaderMessage.addStyleClass(CssConstants.Classes.SUPPORT_TITLE_STYLE_CLASS);
69  
70                  // use page header rich content
71                  supportTitleMessage = pageHeaderMessage;
72              } else if (StringUtils.isNotBlank(pageHeader.getHeaderText()) && StringUtils.isBlank(
73                      supportTitleMessage.getMessageText())) {
74                  // use set page header text
75                  supportTitleMessage.setMessageText(pageHeader.getHeaderText().trim());
76              }
77          }
78  
79          // Add content container classes
80          this.getCssClasses().addAll(0, view.getContentContainerCssClasses());
81  
82          // Add sticky data attribute marker
83          if (this.isSticky()) {
84              this.addDataAttribute(UifConstants.DataAttributes.STICKY, "true");
85          }
86      }
87  
88      /**
89       * Represents the area in which this view and page exist (conceptially in the site);
90       * this title appears above the view title.
91       *
92       * @return the areaTitle text
93       */
94      @BeanTagAttribute
95      public String getAreaTitleText() {
96          return areaTitleMessage.getMessageText();
97      }
98  
99      /**
100      * Set the areaTitle
101      *
102      * @param areaTitle
103      */
104     public void setAreaTitleText(String areaTitle) {
105         areaTitleMessage.setMessageText(areaTitle);
106     }
107 
108     /**
109      * Message object backing areaTitleText
110      *
111      * @return the areaTitle Message object
112      */
113     @BeanTagAttribute
114     public Message getAreaTitleMessage() {
115         return areaTitleMessage;
116     }
117 
118     /**
119      * Set the areaTitleMessage object
120      *
121      * @param areaTitleMessage
122      */
123     public void setAreaTitleMessage(Message areaTitleMessage) {
124         this.areaTitleMessage = areaTitleMessage;
125     }
126 
127     /**
128      * The supportTitleText represents the sub-area of this view that explains what the page is displaying; this is
129      * the text used in supportTitleMessage
130      *
131      * <p>This title appears below the view title and will be automatically set to the page title if not set.</p>
132      *
133      * @return the supportTitle text
134      */
135     @BeanTagAttribute
136     public String getSupportTitleText() {
137         return supportTitleMessage.getMessageText();
138     }
139 
140     /**
141      * Set the supportTitleText
142      *
143      * @param supportTitle
144      */
145     public void setSupportTitleText(String supportTitle) {
146         supportTitleMessage.setMessageText(supportTitle);
147     }
148 
149     /**
150      * The supportTitleMessage represents the sub-area of this view that supports what the page is displaying, this is
151      * the Message component
152      *
153      * <p>This title appears below the view title and will be automatically set to the page title if not messageText is
154      * not set.</p>
155      *
156      * @return the supportTitle Message object
157      */
158     @BeanTagAttribute
159     public Message getSupportTitleMessage() {
160         return supportTitleMessage;
161     }
162 
163     /**
164      * Set the supportTitleMessage
165      *
166      * @param supportTitleMessage
167      */
168     public void setSupportTitleMessage(Message supportTitleMessage) {
169         this.supportTitleMessage = supportTitleMessage;
170     }
171 
172     /**
173      * The metadataText represents any relevant metadata about the view (last saved, etc).
174      * This message will appear in the bottom right of the ViewHeader container.
175      *
176      * @return the metadataText string
177      */
178     @BeanTagAttribute
179     public String getMetadataText() {
180         return metadataMessage.getMessageText();
181     }
182 
183     /**
184      * Set the metadataText
185      *
186      * @param metadataText
187      */
188     public void setMetadataText(String metadataText) {
189         metadataMessage.setMessageText(metadataText);
190     }
191 
192     /**
193      * The metadataMessage represents any relevant metadata about the view (last saved, etc).
194      * This message will appear in the bottom right of the ViewHeader container.
195      *
196      * @return the metadataMessage object
197      */
198     @BeanTagAttribute
199     public Message getMetadataMessage() {
200         return metadataMessage;
201     }
202 
203     /**
204      * Set the metadataMessage
205      *
206      * @param metadataMessage
207      */
208     public void setMetadataMessage(Message metadataMessage) {
209         this.metadataMessage = metadataMessage;
210     }
211 
212     /**
213      * If true, this ViewHeader will be sticky (fixed to top of window, stays at top during scrolling)
214      *
215      * @return true if sticky, false otherwise
216      */
217     @BeanTagAttribute
218     public boolean isSticky() {
219         return sticky;
220     }
221 
222     /**
223      * Set to true to make this ViewHeader sticky
224      *
225      * @param sticky
226      */
227     public void setSticky(boolean sticky) {
228         this.sticky = sticky;
229     }
230 }