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}