/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.layout.taglib.servlet.taglib;
import com.liferay.layout.taglib.servlet.ServletContextUtil;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.MapUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.taglib.ui.util.SessionTreeJSClicks;
import com.liferay.taglib.util.IncludeTag;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.portlet.PortletURL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;
/**
* @author Eudaldo Alonso
*/
public class LayoutsTreeTag extends IncludeTag {
@Override
public int doStartTag() {
return EVAL_BODY_INCLUDE;
}
public void setCheckContentDisplayPage(boolean checkContentDisplayPage) {
_checkContentDisplayPage = checkContentDisplayPage;
}
public void setDefaultStateChecked(boolean defaultStateChecked) {
_defaultStateChecked = defaultStateChecked;
}
public void setDraggableTree(boolean draggableTree) {
_draggableTree = draggableTree;
}
public void setExpandFirstNode(boolean expandFirstNode) {
_expandFirstNode = expandFirstNode;
}
public void setGroupId(long groupId) {
_groupId = groupId;
}
public void setIncomplete(boolean incomplete) {
_incomplete = incomplete;
}
public void setLinkTemplate(String linkTemplate) {
_linkTemplate = linkTemplate;
}
@Override
public void setPageContext(PageContext pageContext) {
super.setPageContext(pageContext);
servletContext = ServletContextUtil.getServletContext();
}
public void setPortletURL(PortletURL portletURL) {
_portletURL = portletURL;
}
public void setPortletURLs(Map<String, PortletURL> portletURLs) {
_portletURLs = portletURLs;
}
public void setPrivateLayout(boolean privateLayout) {
_privateLayout = privateLayout;
}
public void setRootLinkTemplate(String rootLinkTemplate) {
_rootLinkTemplate = rootLinkTemplate;
}
public void setRootNodeName(String rootNodeName) {
_rootNodeName = rootNodeName;
}
public void setSaveState(boolean saveState) {
_saveState = saveState;
}
public void setSelectableTree(boolean selectableTree) {
_selectableTree = selectableTree;
}
public void setSelectedLayoutIds(String selectedLayoutIds) {
_selectedLayoutIds = selectedLayoutIds;
}
public void setSelPlid(Long selPlid) {
_selPlid = selPlid;
}
public void setTreeId(String treeId) {
_treeId = treeId;
}
@Override
protected void cleanUp() {
_checkContentDisplayPage = false;
_defaultStateChecked = false;
_draggableTree = true;
_expandFirstNode = true;
_groupId = 0;
_incomplete = true;
_linkTemplate = null;
_portletURL = null;
_portletURLs = null;
_privateLayout = false;
_rootLinkTemplate = null;
_rootNodeName = null;
_saveState = true;
_selectableTree = false;
_selectedLayoutIds = null;
_selPlid = null;
_treeId = null;
}
protected String getCheckedNodes() {
JSONArray checkedNodesJSONArray = JSONFactoryUtil.createJSONArray();
String checkedLayoutIds = GetterUtil.getString(
_selectedLayoutIds,
SessionTreeJSClicks.getOpenNodes(
request, _treeId + "SelectedNode"));
if (Validator.isNull(checkedLayoutIds)) {
return checkedNodesJSONArray.toString();
}
for (long checkedLayoutId : StringUtil.split(checkedLayoutIds, 0L)) {
Layout checkedLayout = LayoutLocalServiceUtil.fetchLayout(
_groupId, _privateLayout, checkedLayoutId);
if (checkedLayout != null) {
checkedNodesJSONArray.put(
String.valueOf(checkedLayout.getPlid()));
}
}
return checkedNodesJSONArray.toString();
}
protected String getModules() {
List<String> modules = new ArrayList<>();
modules.add("liferay-layouts-tree");
if (_selectableTree) {
modules.add("liferay-layouts-tree-selectable");
}
if (_checkContentDisplayPage) {
modules.add("liferay-layouts-tree-check-content-display-page");
}
if (_saveState) {
modules.add("liferay-layouts-tree-state");
}
return StringUtil.merge(modules);
}
@Override
protected String getPage() {
return _PAGE;
}
protected JSONArray getPortletURLsJSONArray(
Map<String, PortletURL> portletURLs) {
JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
if (MapUtil.isEmpty(portletURLs)) {
return jsonArray;
}
for (Map.Entry<String, PortletURL> entry : portletURLs.entrySet()) {
JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
jsonObject.put("name", entry.getKey());
PortletURL portletURL = entry.getValue();
portletURL.setParameter("selPlid", "{selPlid}");
jsonObject.put(
"value",
StringUtil.replace(
portletURL.toString(), HttpUtil.encodePath("{selPlid}"),
"{selPlid}"));
jsonArray.put(jsonObject);
}
return jsonArray;
}
@Override
protected boolean isCleanUpSetAttributes() {
return _CLEAN_UP_SET_ATTRIBUTES;
}
@Override
protected void setAttributes(HttpServletRequest request) {
request.setAttribute(
"liferay-layout:layouts-tree:checkContentDisplayPage",
String.valueOf(_checkContentDisplayPage));
request.setAttribute(
"liferay-layout:layouts-tree:checkedNodes", getCheckedNodes());
request.setAttribute(
"liferay-layout:layouts-tree:defaultStateChecked",
String.valueOf(_defaultStateChecked));
request.setAttribute(
"liferay-layout:layouts-tree:draggableTree",
String.valueOf(_draggableTree));
request.setAttribute(
"liferay-layout:layouts-tree:expandFirstNode",
String.valueOf(_expandFirstNode));
request.setAttribute(
"liferay-layout:layouts-tree:groupId", String.valueOf(_groupId));
request.setAttribute(
"liferay-layout:layouts-tree:incomplete",
String.valueOf(_incomplete));
request.setAttribute(
"liferay-layout:layouts-tree:linkTemplate",
String.valueOf(_linkTemplate));
request.setAttribute(
"liferay-layout:layouts-tree:modules", getModules());
Map<String, PortletURL> portletURLs = _portletURLs;
if (_portletURL != null) {
if (portletURLs == null) {
portletURLs = new HashMap<>();
}
portletURLs.put("layoutURL", _portletURL);
}
request.setAttribute(
"liferay-layout:layouts-tree:portletURLs", portletURLs);
request.setAttribute(
"liferay-layout:layouts-tree:portletURLsJSONArray",
getPortletURLsJSONArray(portletURLs));
request.setAttribute(
"liferay-layout:layouts-tree:privateLayout",
String.valueOf(_privateLayout));
request.setAttribute(
"liferay-layout:layouts-tree:rootLinkTemplate", _rootLinkTemplate);
request.setAttribute(
"liferay-layout:layouts-tree:rootNodeName", _rootNodeName);
request.setAttribute(
"liferay-layout:layouts-tree:saveState",
String.valueOf(_saveState));
request.setAttribute(
"liferay-layout:layouts-tree:selectableTree",
String.valueOf(_selectableTree));
request.setAttribute(
"liferay-layout:layouts-tree:selectedLayoutIds",
_selectedLayoutIds);
request.setAttribute("liferay-layout:layouts-tree:selPlid", _selPlid);
request.setAttribute("liferay-layout:layouts-tree:treeId", _treeId);
}
private static final boolean _CLEAN_UP_SET_ATTRIBUTES = true;
private static final String _PAGE = "/layouts_tree/page.jsp";
private boolean _checkContentDisplayPage;
private boolean _defaultStateChecked;
private boolean _draggableTree = true;
private boolean _expandFirstNode = true;
private long _groupId;
private boolean _incomplete = true;
private String _linkTemplate;
private PortletURL _portletURL;
private Map<String, PortletURL> _portletURLs;
private boolean _privateLayout;
private String _rootLinkTemplate;
private String _rootNodeName;
private boolean _saveState = true;
private boolean _selectableTree;
private String _selectedLayoutIds;
private Long _selPlid;
private String _treeId;
}