001
014
015 package com.liferay.taglib.ui;
016
017 import com.liferay.portal.kernel.servlet.taglib.TagSupport;
018 import com.liferay.portal.kernel.util.GetterUtil;
019 import com.liferay.portal.kernel.util.ListUtil;
020 import com.liferay.portal.kernel.util.ServerDetector;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.UnicodeProperties;
023 import com.liferay.portal.kernel.util.Validator;
024 import com.liferay.portal.kernel.util.WebKeys;
025 import com.liferay.portal.security.permission.ActionKeys;
026 import com.liferay.portal.security.permission.PermissionChecker;
027 import com.liferay.portal.theme.ThemeDisplay;
028 import com.liferay.portlet.expando.model.ExpandoBridge;
029 import com.liferay.portlet.expando.model.ExpandoColumnConstants;
030 import com.liferay.portlet.expando.model.ExpandoTableConstants;
031 import com.liferay.portlet.expando.service.permission.ExpandoColumnPermissionUtil;
032 import com.liferay.portlet.expando.util.ExpandoBridgeFactoryUtil;
033
034 import java.io.Serializable;
035
036 import java.util.Collections;
037 import java.util.List;
038
039 import javax.servlet.http.HttpServletRequest;
040 import javax.servlet.jsp.JspException;
041
042
045 public class CustomAttributesAvailableTag extends TagSupport {
046
047 @Override
048 public int doStartTag() throws JspException {
049 try {
050 HttpServletRequest request =
051 (HttpServletRequest)pageContext.getRequest();
052
053 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
054 WebKeys.THEME_DISPLAY);
055
056 long companyId = _companyId;
057
058 if (companyId == 0) {
059 companyId = themeDisplay.getCompanyId();
060 }
061
062 ExpandoBridge expandoBridge = null;
063
064 if (_classPK == 0) {
065 expandoBridge = ExpandoBridgeFactoryUtil.getExpandoBridge(
066 companyId, _className);
067 }
068 else {
069 expandoBridge = ExpandoBridgeFactoryUtil.getExpandoBridge(
070 companyId, _className, _classPK);
071 }
072
073 List<String> attributeNames = ListUtil.remove(
074 Collections.list(expandoBridge.getAttributeNames()),
075 ListUtil.fromString(_ignoreAttributeNames, StringPool.COMMA));
076
077 if (attributeNames.isEmpty()) {
078 return SKIP_BODY;
079 }
080
081 if (_classPK == 0) {
082 return EVAL_BODY_INCLUDE;
083 }
084
085 PermissionChecker permissionChecker =
086 themeDisplay.getPermissionChecker();
087
088 for (String attributeName : attributeNames) {
089 Serializable value = expandoBridge.getAttribute(attributeName);
090
091 if (Validator.isNull(value)) {
092 continue;
093 }
094
095 UnicodeProperties properties =
096 expandoBridge.getAttributeProperties(attributeName);
097
098 boolean propertyHidden = GetterUtil.getBoolean(
099 properties.get(ExpandoColumnConstants.PROPERTY_HIDDEN));
100 boolean propertyVisibleWithUpdatePermission =
101 GetterUtil.getBoolean(
102 properties.get(
103 ExpandoColumnConstants.
104 PROPERTY_VISIBLE_WITH_UPDATE_PERMISSION));
105
106 if (_editable && propertyVisibleWithUpdatePermission) {
107 if (ExpandoColumnPermissionUtil.contains(
108 permissionChecker, companyId, _className,
109 ExpandoTableConstants.DEFAULT_TABLE_NAME,
110 attributeName, ActionKeys.UPDATE)) {
111
112 propertyHidden = false;
113 }
114 else {
115 propertyHidden = true;
116 }
117 }
118
119 if (!propertyHidden &&
120 ExpandoColumnPermissionUtil.contains(
121 permissionChecker, companyId, _className,
122 ExpandoTableConstants.DEFAULT_TABLE_NAME, attributeName,
123 ActionKeys.VIEW)) {
124
125 return EVAL_BODY_INCLUDE;
126 }
127 }
128
129 return SKIP_BODY;
130 }
131 catch (Exception e) {
132 throw new JspException(e);
133 }
134 finally {
135 if (!ServerDetector.isResin()) {
136 _className = null;
137 _classPK = 0;
138 _companyId = 0;
139 _editable = false;
140 _ignoreAttributeNames = null;
141 }
142 }
143 }
144
145 public void setClassName(String className) {
146 _className = className;
147 }
148
149 public void setClassPK(long classPK) {
150 _classPK = classPK;
151 }
152
153 public void setCompanyId(long companyId) {
154 _companyId = companyId;
155 }
156
157 public void setEditable(boolean editable) {
158 _editable = editable;
159 }
160
161 public void setIgnoreAttributeNames(String ignoreAttributeNames) {
162 _ignoreAttributeNames = ignoreAttributeNames;
163 }
164
165 private String _className;
166 private long _classPK;
167 private long _companyId;
168 private boolean _editable;
169 private String _ignoreAttributeNames;
170
171 }