001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.taglib.ui;
016    
017    import com.liferay.portal.kernel.portletdisplaytemplate.PortletDisplayTemplateManagerUtil;
018    import com.liferay.portal.kernel.servlet.taglib.ui.BreadcrumbEntry;
019    import com.liferay.portal.kernel.servlet.taglib.ui.BreadcrumbUtil;
020    import com.liferay.portal.kernel.util.ArrayUtil;
021    import com.liferay.portal.kernel.util.Validator;
022    import com.liferay.portal.kernel.util.WebKeys;
023    import com.liferay.portal.theme.ThemeDisplay;
024    import com.liferay.taglib.util.IncludeTag;
025    
026    import java.util.ArrayList;
027    import java.util.Collections;
028    import java.util.List;
029    
030    import javax.servlet.http.HttpServletRequest;
031    
032    /**
033     * @author Brian Wing Shun Chan
034     */
035    public class BreadcrumbTag extends IncludeTag {
036    
037            public void setDdmTemplateGroupId(long ddmTemplateGroupId) {
038                    _ddmTemplateGroupId = ddmTemplateGroupId;
039            }
040    
041            public void setDdmTemplateKey(String ddmTemplateKey) {
042                    _ddmTemplateKey = ddmTemplateKey;
043            }
044    
045            public void setShowCurrentGroup(boolean showCurrentGroup) {
046                    _showCurrentGroup = showCurrentGroup;
047            }
048    
049            public void setShowGuestGroup(boolean showGuestGroup) {
050                    _showGuestGroup = showGuestGroup;
051            }
052    
053            public void setShowLayout(boolean showLayout) {
054                    _showLayout = showLayout;
055            }
056    
057            public void setShowParentGroups(boolean showParentGroups) {
058                    _showParentGroups = showParentGroups;
059            }
060    
061            public void setShowPortletBreadcrumb(boolean showPortletBreadcrumb) {
062                    _showPortletBreadcrumb = showPortletBreadcrumb;
063            }
064    
065            @Override
066            protected void cleanUp() {
067                    _ddmTemplateGroupId = 0;
068                    _ddmTemplateKey = null;
069                    _showCurrentGroup = true;
070                    _showGuestGroup = false;
071                    _showLayout = true;
072                    _showParentGroups = true;
073                    _showPortletBreadcrumb = true;
074            }
075    
076            protected List<BreadcrumbEntry> getBreadcrumbEntries(
077                    HttpServletRequest request) {
078    
079                    List<BreadcrumbEntry> breadcrumbEntries = Collections.emptyList();
080    
081                    List<Integer> breadcrumbEntryTypes = new ArrayList<>();
082    
083                    if (_showCurrentGroup) {
084                            breadcrumbEntryTypes.add(BreadcrumbUtil.ENTRY_TYPE_CURRENT_GROUP);
085                    }
086    
087                    if (_showGuestGroup) {
088                            breadcrumbEntryTypes.add(BreadcrumbUtil.ENTRY_TYPE_GUEST_GROUP);
089                    }
090    
091                    if (_showLayout) {
092                            breadcrumbEntryTypes.add(BreadcrumbUtil.ENTRY_TYPE_LAYOUT);
093                    }
094    
095                    if (_showParentGroups) {
096                            breadcrumbEntryTypes.add(BreadcrumbUtil.ENTRY_TYPE_PARENT_GROUP);
097                    }
098    
099                    if (_showPortletBreadcrumb) {
100                            breadcrumbEntryTypes.add(BreadcrumbUtil.ENTRY_TYPE_PORTLET);
101                    }
102    
103                    try {
104                            breadcrumbEntries = BreadcrumbUtil.getBreadcrumbEntries(
105                                    request, ArrayUtil.toIntArray(breadcrumbEntryTypes));
106                    }
107                    catch (Exception e) {
108                    }
109    
110                    return breadcrumbEntries;
111            }
112    
113            protected String getDisplayStyle() {
114                    if (Validator.isNotNull(_ddmTemplateKey)) {
115                            return PortletDisplayTemplateManagerUtil.getDisplayStyle(
116                                    _ddmTemplateKey);
117                    }
118    
119                    return null;
120            }
121    
122            protected long getDisplayStyleGroupId() {
123                    if (_ddmTemplateGroupId > 0) {
124                            return _ddmTemplateGroupId;
125                    }
126    
127                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
128                            WebKeys.THEME_DISPLAY);
129    
130                    return themeDisplay.getScopeGroupId();
131            }
132    
133            @Override
134            protected String getPage() {
135                    return _PAGE;
136            }
137    
138            @Override
139            protected void setAttributes(HttpServletRequest request) {
140                    request.setAttribute(
141                            "liferay-ui:breadcrumb:breadcrumbEntries",
142                            getBreadcrumbEntries(request));
143                    request.setAttribute(
144                            "liferay-ui:breadcrumb:displayStyle", getDisplayStyle());
145                    request.setAttribute(
146                            "liferay-ui:breadcrumb:displayStyleGroupId",
147                            getDisplayStyleGroupId());
148            }
149    
150            private static final String _PAGE = "/html/taglib/ui/breadcrumb/page.jsp";
151    
152            private long _ddmTemplateGroupId;
153            private String _ddmTemplateKey;
154            private boolean _showCurrentGroup = true;
155            private boolean _showGuestGroup;
156            private boolean _showLayout = true;
157            private boolean _showParentGroups = true;
158            private boolean _showPortletBreadcrumb = true;
159    
160    }