001/**
002 * Copyright 2005-2018 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 */
016package org.kuali.rice.krad.uif.element;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.krad.datadictionary.parse.BeanTag;
020import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
021import org.kuali.rice.krad.uif.container.Container;
022import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle;
023import org.kuali.rice.krad.uif.view.View;
024
025/**
026 * BreadcrumbOptions specific to page.  Render options are only available at the page level.
027 */
028@BeanTag(name = "pageBreadcrumbOptions", parent = "Uif-PageBreadcrumbOptions")
029public class PageBreadcrumbOptions extends BreadcrumbOptions {
030    private static final long serialVersionUID = -5666730356781875858L;
031
032    //render options
033    private boolean renderViewBreadcrumb;
034    private boolean renderHomewardPathBreadcrumbs;
035    private boolean renderPreViewBreadcrumbs;
036    private boolean renderPrePageBreadcrumbs;
037    private boolean renderParentLocations;
038
039    /**
040     * Setup the BreadcrumbOptions and BreadcrumbItem for a PageGroup.  To be called from performInitialization.
041     *
042     * @param model the model
043     */
044    @Override
045    public void setupBreadcrumbs(Object model) {
046        View view = ViewLifecycle.getView();
047        BreadcrumbOptions viewBreadcrumbOptions = view.getBreadcrumbOptions();
048
049        //inherit prePageBreadcrumbs, preViewBreadcrumbs, and overrides from the view if not set
050        if (this.getHomewardPathBreadcrumbs() == null
051                && viewBreadcrumbOptions != null
052                && viewBreadcrumbOptions.getHomewardPathBreadcrumbs() != null) {
053            this.setHomewardPathBreadcrumbs(viewBreadcrumbOptions.getHomewardPathBreadcrumbs());
054        }
055
056        if (this.getPrePageBreadcrumbs() == null
057                && viewBreadcrumbOptions != null
058                && viewBreadcrumbOptions.getPrePageBreadcrumbs() != null) {
059            this.setPrePageBreadcrumbs(viewBreadcrumbOptions.getPrePageBreadcrumbs());
060        }
061
062        if (this.getPreViewBreadcrumbs() == null
063                && viewBreadcrumbOptions != null
064                && viewBreadcrumbOptions.getPreViewBreadcrumbs() != null) {
065            this.setPreViewBreadcrumbs(viewBreadcrumbOptions.getPreViewBreadcrumbs());
066        }
067
068        if (this.getBreadcrumbOverrides() == null
069                && viewBreadcrumbOptions != null
070                && viewBreadcrumbOptions.getBreadcrumbOverrides() != null) {
071            this.setBreadcrumbOverrides(viewBreadcrumbOptions.getBreadcrumbOverrides());
072        }
073    }
074
075    /**
076     * Finalize the setup of the BreadcrumbOptions and the BreadcrumbItem for the PageGroup.  To be called from the
077     * performFinalize method.
078     *
079     * @param model the model
080     */
081    @Override
082    public void finalizeBreadcrumbs(Object model, Container parent, BreadcrumbItem breadcrumbItem) {
083        //set breadcrumbItem label same as the header, if not set
084        if (StringUtils.isBlank(breadcrumbItem.getLabel()) && parent.getHeader() != null && StringUtils.isNotBlank(
085                parent.getHeader().getHeaderText())) {
086            breadcrumbItem.setLabel(parent.getHeader().getHeaderText());
087        }
088
089        //if label still blank, dont render
090        if (StringUtils.isBlank(breadcrumbItem.getLabel())) {
091            breadcrumbItem.setRender(false);
092        }
093
094        // set breadcrumb url attributes
095        finalizeBreadcrumbsUrl(model, parent, breadcrumbItem);
096
097        if (breadcrumbItem.getUrl().getPageId() == null) {
098            breadcrumbItem.getUrl().setPageId(parent.getId());
099        }
100    }
101
102    /**
103     * Whether or not to render the view breadcrumb at this level
104     *
105     * @return true if rendering the view breadcrumb, false otherwise
106     */
107    @BeanTagAttribute(name = "renderViewBreadcrumb")
108    public boolean isRenderViewBreadcrumb() {
109        return renderViewBreadcrumb;
110    }
111
112    /**
113     * Set renderViewBreadcrumb
114     *
115     * @param renderViewBreadcrumb
116     */
117    public void setRenderViewBreadcrumb(boolean renderViewBreadcrumb) {
118        this.renderViewBreadcrumb = renderViewBreadcrumb;
119    }
120
121    /**
122     * If true, render the homewardPathBreadcrumbs (if any are set), otherwise do not render them
123     *
124     * @return true if rendering homewardPathBreadcrumbs, false otherwise
125     */
126    @BeanTagAttribute(name = "renderHomewardPathBreadcrumbs")
127    public boolean isRenderHomewardPathBreadcrumbs() {
128        return renderHomewardPathBreadcrumbs;
129    }
130
131    /**
132     * Set renderHomewardPathBreadcrumbs
133     *
134     * @param renderHomewardPathBreadcrumbs
135     */
136    public void setRenderHomewardPathBreadcrumbs(boolean renderHomewardPathBreadcrumbs) {
137        this.renderHomewardPathBreadcrumbs = renderHomewardPathBreadcrumbs;
138    }
139
140    /**
141     * If true, render the preViewBreadcrumbs (if any are set), otherwise do not render them
142     *
143     * @return true if rendering preViewBreadcrumbs, false otherwise
144     */
145    @BeanTagAttribute(name = "renderPreViewBreadcrumbs")
146    public boolean isRenderPreViewBreadcrumbs() {
147        return renderPreViewBreadcrumbs;
148    }
149
150    /**
151     * Set renderPreViewBreadcrumbs
152     *
153     * @param renderPreViewBreadcrumbs
154     */
155    public void setRenderPreViewBreadcrumbs(boolean renderPreViewBreadcrumbs) {
156        this.renderPreViewBreadcrumbs = renderPreViewBreadcrumbs;
157    }
158
159    /**
160     * If true, render the prePageBreadcrumbs (if any are set), otherwise do not render them
161     *
162     * @return true if rendering prePageBreadcrumbs, false otherwise
163     */
164    @BeanTagAttribute(name = "renderPrePageBreadcrumbs")
165    public boolean isRenderPrePageBreadcrumbs() {
166        return renderPrePageBreadcrumbs;
167    }
168
169    /**
170     * Set renderPrePageBreadcrumbs
171     *
172     * @param renderPrePageBreadcrumbs
173     */
174    public void setRenderPrePageBreadcrumbs(boolean renderPrePageBreadcrumbs) {
175        this.renderPrePageBreadcrumbs = renderPrePageBreadcrumbs;
176    }
177
178    /**
179     * If true, render the parent location breadcrumbs.  These BreadcrumbItems are automatically generated based on the
180     * view's parentLocation property settings by traversing parent views/pages or based on a history path.
181     *
182     * @return true if rendering the parent location breadcrumbs, false otherwise
183     */
184    @BeanTagAttribute(name = "renderParentLocations")
185    public boolean isRenderParentLocations() {
186        return renderParentLocations;
187    }
188
189    /**
190     * Set renderParentLocations
191     *
192     * @param renderParentLocations
193     */
194    public void setRenderParentLocations(boolean renderParentLocations) {
195        this.renderParentLocations = renderParentLocations;
196    }
197}