/**
* 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.dynamic.data.mapping.data.provider.web.internal.display.context;
import com.liferay.dynamic.data.mapping.constants.DDMActionKeys;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProvider;
import com.liferay.dynamic.data.mapping.data.provider.DDMDataProviderTracker;
import com.liferay.dynamic.data.mapping.data.provider.web.internal.display.context.util.DDMDataProviderRequestHelper;
import com.liferay.dynamic.data.mapping.data.provider.web.internal.search.DDMDataProviderSearchTerms;
import com.liferay.dynamic.data.mapping.form.renderer.DDMFormRenderer;
import com.liferay.dynamic.data.mapping.form.renderer.DDMFormRenderingContext;
import com.liferay.dynamic.data.mapping.io.DDMFormValuesJSONDeserializer;
import com.liferay.dynamic.data.mapping.model.DDMDataProviderInstance;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormLayout;
import com.liferay.dynamic.data.mapping.service.DDMDataProviderInstanceService;
import com.liferay.dynamic.data.mapping.service.permission.DDMDataProviderInstancePermission;
import com.liferay.dynamic.data.mapping.service.permission.DDMDataProviderPermission;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.util.DDMFormFactory;
import com.liferay.dynamic.data.mapping.util.DDMFormLayoutFactory;
import com.liferay.portal.kernel.bean.BeanParamUtil;
import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import java.util.List;
import java.util.Set;
import javax.portlet.PortletURL;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
/**
* @author Leonardo Barros
*/
public class DDMDataProviderDisplayContext {
public DDMDataProviderDisplayContext(
RenderRequest renderRequest, RenderResponse renderResponse,
DDMDataProviderInstanceService ddmDataProviderInstanceService,
DDMDataProviderTracker ddmDataProviderTracker,
DDMFormRenderer ddmFormRenderer,
DDMFormValuesJSONDeserializer ddmFormValuesJSONDeserializer,
UserLocalService userLocalService) {
_renderRequest = renderRequest;
_renderResponse = renderResponse;
_ddmDataProviderInstanceService = ddmDataProviderInstanceService;
_ddmDataProviderTracker = ddmDataProviderTracker;
_ddmFormRenderer = ddmFormRenderer;
_ddmFormValuesJSONDeserializer = ddmFormValuesJSONDeserializer;
_userLocalService = userLocalService;
_ddmDataProviderRequestHelper = new DDMDataProviderRequestHelper(
renderRequest);
}
public DDMDataProviderInstance fetchDataProviderInstance()
throws PortalException {
if (_ddmDataProviderInstance != null) {
return _ddmDataProviderInstance;
}
long dataProviderInstanceId = ParamUtil.getLong(
_renderRequest, "dataProviderInstanceId");
_ddmDataProviderInstance =
_ddmDataProviderInstanceService.fetchDataProviderInstance(
dataProviderInstanceId);
return _ddmDataProviderInstance;
}
public String getDataProviderInstanceDDMFormHTML() throws PortalException {
DDMDataProviderInstance ddmDataProviderInstance =
fetchDataProviderInstance();
String type = BeanParamUtil.getString(
ddmDataProviderInstance, _renderRequest, "type");
DDMDataProvider ddmDataProvider =
_ddmDataProviderTracker.getDDMDataProvider(type);
Class<?> clazz = ddmDataProvider.getSettings();
DDMForm ddmForm = DDMFormFactory.create(clazz);
DDMFormRenderingContext ddmFormRenderingContext =
createDDMFormRenderingContext();
if (_ddmDataProviderInstance != null) {
DDMFormValues ddmFormValues =
_ddmFormValuesJSONDeserializer.deserialize(
ddmForm, _ddmDataProviderInstance.getDefinition());
ddmFormRenderingContext.setDDMFormValues(ddmFormValues);
}
DDMFormLayout ddmFormLayout = DDMFormLayoutFactory.create(clazz);
ddmFormLayout.setPaginationMode(DDMFormLayout.SINGLE_PAGE_MODE);
return _ddmFormRenderer.render(
ddmForm, ddmFormLayout, ddmFormRenderingContext);
}
public String getDataProviderInstanceDescription() throws PortalException {
DDMDataProviderInstance ddmDataProviderInstance =
fetchDataProviderInstance();
if (ddmDataProviderInstance == null) {
return StringPool.BLANK;
}
return ddmDataProviderInstance.getDescription(
_renderRequest.getLocale());
}
public String getDataProviderInstanceName() throws PortalException {
DDMDataProviderInstance ddmDataProviderInstance =
fetchDataProviderInstance();
if (ddmDataProviderInstance == null) {
return StringPool.BLANK;
}
return ddmDataProviderInstance.getName(_renderRequest.getLocale());
}
public Set<String> getDDMDataProviderTypes() {
return _ddmDataProviderTracker.getDDMDataProviderTypes();
}
public String getOrderByCol() {
String orderByCol = ParamUtil.getString(
_renderRequest, "orderByCol", "modified-date");
return orderByCol;
}
public String getOrderByType() {
String orderByType = ParamUtil.getString(
_renderRequest, "orderByType", "asc");
return orderByType;
}
public PortletURL getPortletURL() {
PortletURL portletURL = _renderResponse.createRenderURL();
portletURL.setParameter("mvcPath", "/view.jsp");
portletURL.setParameter(
"groupId",
String.valueOf(_ddmDataProviderRequestHelper.getScopeGroupId()));
return portletURL;
}
public List<DDMDataProviderInstance> getSearchContainerResults(
SearchContainer<DDMDataProviderInstance> searchContainer)
throws PortalException {
DDMDataProviderSearchTerms searchTerms =
(DDMDataProviderSearchTerms)searchContainer.getSearchTerms();
if (searchTerms.isAdvancedSearch()) {
return _ddmDataProviderInstanceService.search(
_ddmDataProviderRequestHelper.getCompanyId(),
new long[] {_ddmDataProviderRequestHelper.getScopeGroupId()},
searchTerms.getName(), searchTerms.getDescription(),
searchTerms.isAndOperator(), searchContainer.getStart(),
searchContainer.getEnd(),
searchContainer.getOrderByComparator());
}
else {
return _ddmDataProviderInstanceService.search(
_ddmDataProviderRequestHelper.getCompanyId(),
new long[] {_ddmDataProviderRequestHelper.getScopeGroupId()},
searchTerms.getKeywords(), searchContainer.getStart(),
searchContainer.getEnd(),
searchContainer.getOrderByComparator());
}
}
public int getSearchContainerTotal(
SearchContainer<DDMDataProviderInstance> searchContainer)
throws PortalException {
DDMDataProviderSearchTerms searchTerms =
(DDMDataProviderSearchTerms)searchContainer.getSearchTerms();
if (searchTerms.isAdvancedSearch()) {
return _ddmDataProviderInstanceService.searchCount(
_ddmDataProviderRequestHelper.getCompanyId(),
new long[] {_ddmDataProviderRequestHelper.getScopeGroupId()},
searchTerms.getName(), searchTerms.getDescription(),
searchTerms.isAndOperator());
}
else {
return _ddmDataProviderInstanceService.searchCount(
_ddmDataProviderRequestHelper.getCompanyId(),
new long[] {_ddmDataProviderRequestHelper.getScopeGroupId()},
searchTerms.getKeywords());
}
}
public String getUserPortraitURL(long userId) throws PortalException {
User user = _userLocalService.getUser(userId);
return user.getPortraitURL(
_ddmDataProviderRequestHelper.getThemeDisplay());
}
public boolean isShowAddDataProviderButton() {
return DDMDataProviderPermission.contains(
_ddmDataProviderRequestHelper.getPermissionChecker(),
_ddmDataProviderRequestHelper.getScopeGroupId(),
DDMActionKeys.ADD_DATA_PROVIDER_INSTANCE);
}
public boolean isShowDeleteDataProviderIcon(
DDMDataProviderInstance dataProviderInstance)
throws PortalException {
return DDMDataProviderInstancePermission.contains(
_ddmDataProviderRequestHelper.getPermissionChecker(),
dataProviderInstance, ActionKeys.DELETE);
}
public boolean isShowEditDataProviderIcon(
DDMDataProviderInstance dataProviderInstance)
throws PortalException {
return DDMDataProviderInstancePermission.contains(
_ddmDataProviderRequestHelper.getPermissionChecker(),
dataProviderInstance, ActionKeys.UPDATE);
}
public boolean isShowPermissionsIcon(
DDMDataProviderInstance dataProviderInstance) {
return DDMDataProviderInstancePermission.contains(
_ddmDataProviderRequestHelper.getPermissionChecker(),
dataProviderInstance, ActionKeys.PERMISSIONS);
}
protected DDMFormRenderingContext createDDMFormRenderingContext() {
DDMFormRenderingContext ddmFormRenderingContext =
new DDMFormRenderingContext();
ddmFormRenderingContext.setHttpServletRequest(
PortalUtil.getHttpServletRequest(_renderRequest));
ddmFormRenderingContext.setHttpServletResponse(
PortalUtil.getHttpServletResponse(_renderResponse));
ddmFormRenderingContext.setLocale(
_ddmDataProviderRequestHelper.getLocale());
ddmFormRenderingContext.setPortletNamespace(
_renderResponse.getNamespace());
ddmFormRenderingContext.setShowRequiredFieldsWarning(false);
return ddmFormRenderingContext;
}
private DDMDataProviderInstance _ddmDataProviderInstance;
private final DDMDataProviderInstanceService
_ddmDataProviderInstanceService;
private final DDMDataProviderRequestHelper _ddmDataProviderRequestHelper;
private final DDMDataProviderTracker _ddmDataProviderTracker;
private final DDMFormRenderer _ddmFormRenderer;
private final DDMFormValuesJSONDeserializer _ddmFormValuesJSONDeserializer;
private final RenderRequest _renderRequest;
private final RenderResponse _renderResponse;
private final UserLocalService _userLocalService;
}