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.json.JSONArray;
018    import com.liferay.portal.kernel.json.JSONFactoryUtil;
019    import com.liferay.portal.kernel.util.GetterUtil;
020    import com.liferay.portal.kernel.util.StringUtil;
021    import com.liferay.portal.kernel.util.Validator;
022    import com.liferay.portal.model.Layout;
023    import com.liferay.portal.service.LayoutLocalServiceUtil;
024    import com.liferay.taglib.ui.util.SessionTreeJSClicks;
025    import com.liferay.taglib.util.IncludeTag;
026    
027    import java.util.ArrayList;
028    import java.util.List;
029    
030    import javax.portlet.PortletURL;
031    
032    import javax.servlet.http.HttpServletRequest;
033    
034    /**
035     * @author Eudaldo Alonso
036     */
037    public class LayoutsTreeTag extends IncludeTag {
038    
039            @Override
040            public int doStartTag() {
041                    return EVAL_BODY_INCLUDE;
042            }
043    
044            public void setCheckContentDisplayPage(boolean checkContentDisplayPage) {
045                    _checkContentDisplayPage = checkContentDisplayPage;
046            }
047    
048            public void setDefaultStateChecked(boolean defaultStateChecked) {
049                    _defaultStateChecked = defaultStateChecked;
050            }
051    
052            public void setDraggableTree(boolean draggableTree) {
053                    _draggableTree = draggableTree;
054            }
055    
056            public void setExpandFirstNode(boolean expandFirstNode) {
057                    _expandFirstNode = expandFirstNode;
058            }
059    
060            public void setGroupId(long groupId) {
061                    _groupId = groupId;
062            }
063    
064            public void setIncomplete(boolean incomplete) {
065                    _incomplete = incomplete;
066            }
067    
068            public void setLinkTemplate(String linkTemplate) {
069                    _linkTemplate = linkTemplate;
070            }
071    
072            public void setPortletURL(PortletURL portletURL) {
073                    _portletURL = portletURL;
074            }
075    
076            public void setPrivateLayout(boolean privateLayout) {
077                    _privateLayout = privateLayout;
078            }
079    
080            public void setRootLinkTemplate(String rootLinkTemplate) {
081                    _rootLinkTemplate = rootLinkTemplate;
082            }
083    
084            public void setRootNodeName(String rootNodeName) {
085                    _rootNodeName = rootNodeName;
086            }
087    
088            public void setSaveState(boolean saveState) {
089                    _saveState = saveState;
090            }
091    
092            public void setSelectableTree(boolean selectableTree) {
093                    _selectableTree = selectableTree;
094            }
095    
096            public void setSelectedLayoutIds(String selectedLayoutIds) {
097                    _selectedLayoutIds = selectedLayoutIds;
098            }
099    
100            public void setSelPlid(long selPlid) {
101                    _selPlid = selPlid;
102            }
103    
104            public void setTreeId(String treeId) {
105                    _treeId = treeId;
106            }
107    
108            @Override
109            protected void cleanUp() {
110                    _checkContentDisplayPage = false;
111                    _defaultStateChecked = false;
112                    _draggableTree = true;
113                    _expandFirstNode = true;
114                    _groupId = 0;
115                    _incomplete = true;
116                    _linkTemplate = null;
117                    _portletURL = null;
118                    _privateLayout = false;
119                    _rootLinkTemplate = null;
120                    _rootNodeName = null;
121                    _saveState = true;
122                    _selectableTree = false;
123                    _selectedLayoutIds = null;
124                    _selPlid = 0;
125                    _treeId = null;
126            }
127    
128            protected String getCheckedNodes() {
129                    JSONArray checkedNodesJSONArray = JSONFactoryUtil.createJSONArray();
130    
131                    String checkedLayoutIds = GetterUtil.getString(
132                            _selectedLayoutIds,
133                            SessionTreeJSClicks.getOpenNodes(
134                                    request, _treeId + "SelectedNode"));
135    
136                    if (Validator.isNull(checkedLayoutIds)) {
137                            return checkedNodesJSONArray.toString();
138                    }
139    
140                    for (long checkedLayoutId : StringUtil.split(checkedLayoutIds, 0L)) {
141                            Layout checkedLayout = LayoutLocalServiceUtil.fetchLayout(
142                                    _groupId, _privateLayout, checkedLayoutId);
143    
144                            if (checkedLayout != null) {
145                                    checkedNodesJSONArray.put(
146                                            String.valueOf(checkedLayout.getPlid()));
147                            }
148                    }
149    
150                    return checkedNodesJSONArray.toString();
151            }
152    
153            protected String getModules() {
154                    List<String> modules = new ArrayList<>();
155    
156                    modules.add("liferay-layouts-tree");
157    
158                    if (_selectableTree) {
159                            modules.add("liferay-layouts-tree-selectable");
160                    }
161    
162                    if (_checkContentDisplayPage) {
163                            modules.add("liferay-layouts-tree-check-content-display-page");
164                    }
165    
166                    if (_saveState) {
167                            modules.add("liferay-layouts-tree-state");
168                    }
169    
170                    return StringUtil.merge(modules);
171            }
172    
173            @Override
174            protected String getPage() {
175                    return _PAGE;
176            }
177    
178            @Override
179            protected boolean isCleanUpSetAttributes() {
180                    return _CLEAN_UP_SET_ATTRIBUTES;
181            }
182    
183            @Override
184            protected void setAttributes(HttpServletRequest request) {
185                    request.setAttribute(
186                            "liferay-ui:layouts-tree:checkedNodes", getCheckedNodes());
187                    request.setAttribute(
188                            "liferay-ui:layouts-tree:checkContentDisplayPage",
189                            String.valueOf(_checkContentDisplayPage));
190                    request.setAttribute(
191                            "liferay-ui:layouts-tree:defaultStateChecked",
192                            String.valueOf(_defaultStateChecked));
193                    request.setAttribute(
194                            "liferay-ui:layouts-tree:draggableTree",
195                            String.valueOf(_draggableTree));
196                    request.setAttribute(
197                            "liferay-ui:layouts-tree:expandFirstNode",
198                            String.valueOf(_expandFirstNode));
199                    request.setAttribute(
200                            "liferay-ui:layouts-tree:groupId", String.valueOf(_groupId));
201                    request.setAttribute(
202                            "liferay-ui:layouts-tree:incomplete", String.valueOf(_incomplete));
203                    request.setAttribute(
204                            "liferay-ui:layouts-tree:linkTemplate",
205                            String.valueOf(_linkTemplate));
206                    request.setAttribute("liferay-ui:layouts-tree:modules", getModules());
207                    request.setAttribute("liferay-ui:layouts-tree:portletURL", _portletURL);
208                    request.setAttribute(
209                            "liferay-ui:layouts-tree:privateLayout",
210                            String.valueOf(_privateLayout));
211                    request.setAttribute(
212                            "liferay-ui:layouts-tree:rootLinkTemplate", _rootLinkTemplate);
213                    request.setAttribute(
214                            "liferay-ui:layouts-tree:rootNodeName", _rootNodeName);
215                    request.setAttribute(
216                            "liferay-ui:layouts-tree:saveState", String.valueOf(_saveState));
217                    request.setAttribute(
218                            "liferay-ui:layouts-tree:selectableTree",
219                            String.valueOf(_selectableTree));
220                    request.setAttribute(
221                            "liferay-ui:layouts-tree:selectedLayoutIds", _selectedLayoutIds);
222                    request.setAttribute(
223                            "liferay-ui:layouts-tree:selPlid", String.valueOf(_selPlid));
224                    request.setAttribute("liferay-ui:layouts-tree:treeId", _treeId);
225            }
226    
227            private static final boolean _CLEAN_UP_SET_ATTRIBUTES = true;
228    
229            private static final String _PAGE = "/html/taglib/ui/layouts_tree/page.jsp";
230    
231            private boolean _checkContentDisplayPage;
232            private boolean _defaultStateChecked;
233            private boolean _draggableTree = true;
234            private boolean _expandFirstNode = true;
235            private long _groupId;
236            private boolean _incomplete = true;
237            private String _linkTemplate;
238            private PortletURL _portletURL;
239            private boolean _privateLayout;
240            private String _rootLinkTemplate;
241            private String _rootNodeName;
242            private boolean _saveState = true;
243            private boolean _selectableTree;
244            private String _selectedLayoutIds;
245            private long _selPlid;
246            private String _treeId;
247    
248    }