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 setRootPortletURL(String rootPortletURL) {
089                    _rootPortletURL = rootPortletURL;
090            }
091    
092            public void setSaveState(boolean saveState) {
093                    _saveState = saveState;
094            }
095    
096            public void setSelectableTree(boolean selectableTree) {
097                    _selectableTree = selectableTree;
098            }
099    
100            public void setSelectedLayoutIds(String selectedLayoutIds) {
101                    _selectedLayoutIds = selectedLayoutIds;
102            }
103    
104            public void setSelPlid(Long selPlid) {
105                    _selPlid = selPlid;
106            }
107    
108            public void setTreeId(String treeId) {
109                    _treeId = treeId;
110            }
111    
112            @Override
113            protected void cleanUp() {
114                    _checkContentDisplayPage = false;
115                    _defaultStateChecked = false;
116                    _draggableTree = true;
117                    _expandFirstNode = true;
118                    _groupId = 0;
119                    _incomplete = true;
120                    _linkTemplate = null;
121                    _portletURL = null;
122                    _privateLayout = false;
123                    _rootLinkTemplate = null;
124                    _rootNodeName = null;
125                    _rootPortletURL = null;
126                    _saveState = true;
127                    _selectableTree = false;
128                    _selectedLayoutIds = null;
129                    _selPlid = null;
130                    _treeId = null;
131            }
132    
133            protected String getCheckedNodes() {
134                    JSONArray checkedNodesJSONArray = JSONFactoryUtil.createJSONArray();
135    
136                    String checkedLayoutIds = GetterUtil.getString(
137                            _selectedLayoutIds,
138                            SessionTreeJSClicks.getOpenNodes(
139                                    request, _treeId + "SelectedNode"));
140    
141                    if (Validator.isNull(checkedLayoutIds)) {
142                            return checkedNodesJSONArray.toString();
143                    }
144    
145                    for (long checkedLayoutId : StringUtil.split(checkedLayoutIds, 0L)) {
146                            Layout checkedLayout = LayoutLocalServiceUtil.fetchLayout(
147                                    _groupId, _privateLayout, checkedLayoutId);
148    
149                            if (checkedLayout != null) {
150                                    checkedNodesJSONArray.put(
151                                            String.valueOf(checkedLayout.getPlid()));
152                            }
153                    }
154    
155                    return checkedNodesJSONArray.toString();
156            }
157    
158            protected String getModules() {
159                    List<String> modules = new ArrayList<>();
160    
161                    modules.add("liferay-layouts-tree");
162    
163                    if (_selectableTree) {
164                            modules.add("liferay-layouts-tree-selectable");
165                    }
166    
167                    if (_checkContentDisplayPage) {
168                            modules.add("liferay-layouts-tree-check-content-display-page");
169                    }
170    
171                    if (_saveState) {
172                            modules.add("liferay-layouts-tree-state");
173                    }
174    
175                    return StringUtil.merge(modules);
176            }
177    
178            @Override
179            protected String getPage() {
180                    return _PAGE;
181            }
182    
183            @Override
184            protected boolean isCleanUpSetAttributes() {
185                    return _CLEAN_UP_SET_ATTRIBUTES;
186            }
187    
188            @Override
189            protected void setAttributes(HttpServletRequest request) {
190                    request.setAttribute(
191                            "liferay-ui:layouts-tree:checkedNodes", getCheckedNodes());
192                    request.setAttribute(
193                            "liferay-ui:layouts-tree:checkContentDisplayPage",
194                            String.valueOf(_checkContentDisplayPage));
195                    request.setAttribute(
196                            "liferay-ui:layouts-tree:defaultStateChecked",
197                            String.valueOf(_defaultStateChecked));
198                    request.setAttribute(
199                            "liferay-ui:layouts-tree:draggableTree",
200                            String.valueOf(_draggableTree));
201                    request.setAttribute(
202                            "liferay-ui:layouts-tree:expandFirstNode",
203                            String.valueOf(_expandFirstNode));
204                    request.setAttribute(
205                            "liferay-ui:layouts-tree:groupId", String.valueOf(_groupId));
206                    request.setAttribute(
207                            "liferay-ui:layouts-tree:incomplete", String.valueOf(_incomplete));
208                    request.setAttribute(
209                            "liferay-ui:layouts-tree:linkTemplate",
210                            String.valueOf(_linkTemplate));
211                    request.setAttribute("liferay-ui:layouts-tree:modules", getModules());
212                    request.setAttribute("liferay-ui:layouts-tree:portletURL", _portletURL);
213                    request.setAttribute(
214                            "liferay-ui:layouts-tree:privateLayout",
215                            String.valueOf(_privateLayout));
216                    request.setAttribute(
217                            "liferay-ui:layouts-tree:rootLinkTemplate", _rootLinkTemplate);
218                    request.setAttribute(
219                            "liferay-ui:layouts-tree:rootNodeName", _rootNodeName);
220                    request.setAttribute(
221                            "liferay-ui:layouts-tree:rootPortletURL", _rootPortletURL);
222                    request.setAttribute(
223                            "liferay-ui:layouts-tree:saveState", String.valueOf(_saveState));
224                    request.setAttribute(
225                            "liferay-ui:layouts-tree:selectableTree",
226                            String.valueOf(_selectableTree));
227                    request.setAttribute(
228                            "liferay-ui:layouts-tree:selectedLayoutIds", _selectedLayoutIds);
229                    request.setAttribute("liferay-ui:layouts-tree:selPlid", _selPlid);
230                    request.setAttribute("liferay-ui:layouts-tree:treeId", _treeId);
231            }
232    
233            private static final boolean _CLEAN_UP_SET_ATTRIBUTES = true;
234    
235            private static final String _PAGE = "/html/taglib/ui/layouts_tree/page.jsp";
236    
237            private boolean _checkContentDisplayPage;
238            private boolean _defaultStateChecked;
239            private boolean _draggableTree = true;
240            private boolean _expandFirstNode = true;
241            private long _groupId;
242            private boolean _incomplete = true;
243            private String _linkTemplate;
244            private PortletURL _portletURL;
245            private boolean _privateLayout;
246            private String _rootLinkTemplate;
247            private String _rootNodeName;
248            private String _rootPortletURL;
249            private boolean _saveState = true;
250            private boolean _selectableTree;
251            private String _selectedLayoutIds;
252            private Long _selPlid;
253            private String _treeId;
254    
255    }