/** * 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.lists.form.web.internal.portlet; import com.liferay.dynamic.data.lists.form.web.configuration.DDLFormWebConfigurationActivator; import com.liferay.dynamic.data.lists.form.web.constants.DDLFormPortletKeys; import com.liferay.dynamic.data.lists.form.web.internal.converter.DDMFormRuleToDDLFormRuleConverter; import com.liferay.dynamic.data.lists.form.web.internal.display.context.DDLFormAdminDisplayContext; import com.liferay.dynamic.data.lists.model.DDLRecordSet; import com.liferay.dynamic.data.lists.model.DDLRecordSetSettings; import com.liferay.dynamic.data.lists.service.DDLRecordLocalService; import com.liferay.dynamic.data.lists.service.DDLRecordSetLocalService; import com.liferay.dynamic.data.lists.service.DDLRecordSetService; import com.liferay.dynamic.data.mapping.constants.DDMWebKeys; import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldTypeServicesTracker; import com.liferay.dynamic.data.mapping.form.renderer.DDMFormRenderer; import com.liferay.dynamic.data.mapping.form.renderer.DDMFormRenderingContext; import com.liferay.dynamic.data.mapping.form.values.factory.DDMFormValuesFactory; import com.liferay.dynamic.data.mapping.io.DDMFormFieldTypesJSONSerializer; import com.liferay.dynamic.data.mapping.io.DDMFormJSONSerializer; import com.liferay.dynamic.data.mapping.io.DDMFormLayoutJSONSerializer; import com.liferay.dynamic.data.mapping.model.DDMForm; import com.liferay.dynamic.data.mapping.model.DDMFormField; import com.liferay.dynamic.data.mapping.model.DDMFormLayout; import com.liferay.dynamic.data.mapping.service.DDMStructureLocalService; import com.liferay.dynamic.data.mapping.storage.DDMFormValues; import com.liferay.dynamic.data.mapping.storage.StorageEngine; import com.liferay.dynamic.data.mapping.util.DDMFormFactory; import com.liferay.dynamic.data.mapping.util.DDMFormLayoutFactory; import com.liferay.dynamic.data.mapping.util.DDMFormValuesMerger; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.json.JSONFactory; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Portal; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.kernel.workflow.WorkflowEngineManager; import java.io.IOException; import java.util.Map; import javax.portlet.Portlet; import javax.portlet.PortletException; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.servlet.Servlet; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.osgi.service.component.annotations.ReferencePolicy; import org.osgi.service.component.annotations.ReferencePolicyOption; /** * @author Bruno Basto */ @Component( immediate = true, property = { "com.liferay.portlet.css-class-wrapper=portlet-forms-admin", "com.liferay.portlet.display-category=category.hidden", "com.liferay.portlet.header-portlet-css=/admin/css/main.css", "com.liferay.portlet.icon=/admin/icons/form.png", "com.liferay.portlet.instanceable=false", "com.liferay.portlet.preferences-owned-by-group=true", "com.liferay.portlet.private-request-attributes=false", "com.liferay.portlet.private-session-attributes=false", "com.liferay.portlet.render-weight=50", "com.liferay.portlet.use-default-template=true", "javax.portlet.display-name=Forms", "javax.portlet.expiration-cache=0", "javax.portlet.init-param.template-path=/admin/", "javax.portlet.init-param.view-template=/admin/view.jsp", "javax.portlet.name=" + DDLFormPortletKeys.DYNAMIC_DATA_LISTS_FORM_ADMIN, "javax.portlet.resource-bundle=content.Language", "javax.portlet.security-role-ref=power-user,user", "javax.portlet.supports.mime-type=text/html" }, service = Portlet.class ) public class DDLFormAdminPortlet extends MVCPortlet { @Override public void render( RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { try { setRenderRequestAttributes(renderRequest, renderResponse); } catch (Exception e) { if (isSessionErrorException(e)) { if (_log.isWarnEnabled()) { _log.warn(e, e); } hideDefaultErrorMessage(renderRequest); SessionErrors.add(renderRequest, e.getClass()); } else { throw new PortletException(e); } } super.render(renderRequest, renderResponse); } protected DDMFormRenderingContext createDDMFormRenderingContext( RenderRequest renderRequest, RenderResponse renderResponse) { String languageId = ParamUtil.getString(renderRequest, "languageId"); DDMFormRenderingContext ddmFormRenderingContext = new DDMFormRenderingContext(); ddmFormRenderingContext.setHttpServletRequest( _portal.getHttpServletRequest(renderRequest)); ddmFormRenderingContext.setHttpServletResponse( _portal.getHttpServletResponse(renderResponse)); ddmFormRenderingContext.setContainerId("settings"); ddmFormRenderingContext.setLocale( LocaleUtil.fromLanguageId(languageId)); ddmFormRenderingContext.setPortletNamespace( renderResponse.getNamespace()); return ddmFormRenderingContext; } protected DDMForm createSettingsDDMForm( long recordSetId, ThemeDisplay themeDisplay) throws PortalException { DDMForm ddmForm = DDMFormFactory.create(DDLRecordSetSettings.class); ddmForm.addAvailableLocale(themeDisplay.getLocale()); ddmForm.setDefaultLocale(themeDisplay.getLocale()); Map<String, DDMFormField> ddmFormFieldsMap = ddmForm.getDDMFormFieldsMap(false); // Storage type DDMFormField ddmFormField = ddmFormFieldsMap.get("storageType"); if (recordSetId > 0) { ddmFormField.setReadOnly(true); } return ddmForm; } @Reference( cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY ) protected void setDDLFormWebConfigurationActivator( DDLFormWebConfigurationActivator ddlFormWebConfigurationActivator) { _ddlFormWebConfigurationActivator = ddlFormWebConfigurationActivator; } @Reference(unbind = "-") protected void setDDLRecordLocalService( DDLRecordLocalService ddlRecordLocalService) { _ddlRecordLocalService = ddlRecordLocalService; } @Reference(unbind = "-") protected void setDDLRecordSetLocalService( DDLRecordSetLocalService ddlRecordSetLocalService) { _ddlRecordSetLocalService = ddlRecordSetLocalService; } @Reference(unbind = "-") protected void setDDLRecordSetService( DDLRecordSetService ddlRecordSetService) { _ddlRecordSetService = ddlRecordSetService; } @Reference( target = "(osgi.http.whiteboard.servlet.name=com.liferay.dynamic.data.mapping.form.renderer.internal.servlet.DDMFormContextProviderServlet)", unbind = "-" ) protected void setDDMFormContextProviderServlet( Servlet ddmFormContextProviderServlet) { _ddmFormContextProviderServlet = ddmFormContextProviderServlet; } @Reference(unbind = "-") protected void setDDMFormFieldTypeServicesTracker( DDMFormFieldTypeServicesTracker ddmFormFieldTypeServicesTracker) { _ddmFormFieldTypeServicesTracker = ddmFormFieldTypeServicesTracker; } @Reference(unbind = "-") protected void setDDMFormFieldTypesJSONSerializer( DDMFormFieldTypesJSONSerializer ddmFormFieldTypesJSONSerializer) { _ddmFormFieldTypesJSONSerializer = ddmFormFieldTypesJSONSerializer; } @Reference(unbind = "-") protected void setDDMFormJSONSerializer( DDMFormJSONSerializer ddmFormJSONSerializer) { _ddmFormJSONSerializer = ddmFormJSONSerializer; } @Reference(unbind = "-") protected void setDDMFormLayoutJSONSerializer( DDMFormLayoutJSONSerializer ddmFormLayoutJSONSerializer) { _ddmFormLayoutJSONSerializer = ddmFormLayoutJSONSerializer; } @Reference(unbind = "-") protected void setDDMFormRenderer(DDMFormRenderer ddmFormRenderer) { _ddmFormRenderer = ddmFormRenderer; } protected void setDDMFormRenderingContextDDMFormValues( DDMFormRenderingContext ddmFormRenderingContext, DDMForm ddmForm, long recordSetId) throws PortalException { DDLRecordSet recordSet = _ddlRecordSetLocalService.fetchRecordSet( recordSetId); if (recordSet == null) { return; } DDMFormValues ddmFormValues = recordSet.getSettingsDDMFormValues(); ddmFormRenderingContext.setDDMFormValues(ddmFormValues); } @Reference(unbind = "-") protected void setDDMFormRulesToDDLFormRulesConverter( DDMFormRuleToDDLFormRuleConverter ddmFormRulesToDDLFormRulesConverter) { _ddmFormRulesToDDLFormRulesConverter = ddmFormRulesToDDLFormRulesConverter; } @Reference(unbind = "-") protected void setDDMFormValuesFactory( DDMFormValuesFactory ddmFormValuesFactory) { _ddmFormValuesFactory = ddmFormValuesFactory; } @Reference(unbind = "-") protected void setDDMFormValuesMerger( DDMFormValuesMerger ddmFormValuesMerger) { _ddmFormValuesMerger = ddmFormValuesMerger; } @Reference(unbind = "-") protected void setDDMStructureLocalService( DDMStructureLocalService ddmStructureLocalService) { _ddmStructureLocalService = ddmStructureLocalService; } @Reference(unbind = "-") protected void setJSONFactory(JSONFactory jsonFactory) { _jsonFactory = jsonFactory; } protected void setRenderRequestAttributes( RenderRequest renderRequest, RenderResponse renderResponse) throws PortalException { ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute( WebKeys.THEME_DISPLAY); long recordSetId = ParamUtil.getLong(renderRequest, "recordSetId"); DDMForm ddmForm = createSettingsDDMForm(recordSetId, themeDisplay); DDMFormRenderingContext ddmFormRenderingContext = createDDMFormRenderingContext(renderRequest, renderResponse); setDDMFormRenderingContextDDMFormValues( ddmFormRenderingContext, ddmForm, recordSetId); DDMFormLayout ddmFormLayout = DDMFormLayoutFactory.create( DDLRecordSetSettings.class); ddmFormLayout.setPaginationMode(DDMFormLayout.TABBED_MODE); String ddmFormHTML = _ddmFormRenderer.render( ddmForm, ddmFormLayout, ddmFormRenderingContext); renderRequest.setAttribute( DDMWebKeys.DYNAMIC_DATA_MAPPING_FORM_HTML, ddmFormHTML); DDLFormAdminDisplayContext ddlFormAdminDisplayContext = new DDLFormAdminDisplayContext( renderRequest, renderResponse, _ddlFormWebConfigurationActivator.getDDLFormWebConfiguration(), _ddlRecordLocalService, _ddlRecordSetService, _ddmFormContextProviderServlet, _ddmFormFieldTypeServicesTracker, _ddmFormFieldTypesJSONSerializer, _ddmFormJSONSerializer, _ddmFormLayoutJSONSerializer, _ddmFormRenderer, _ddmFormRulesToDDLFormRulesConverter, _ddmFormValuesFactory, _ddmFormValuesMerger, _ddmStructureLocalService, _jsonFactory, _storageEngine, _workflowEngineManager); renderRequest.setAttribute( WebKeys.PORTLET_DISPLAY_CONTEXT, ddlFormAdminDisplayContext); } @Reference(unbind = "-") protected void setStorageEngine(StorageEngine storageEngine) { _storageEngine = storageEngine; } @Reference(unbind = "-") protected void setWorkflowEngineManager( WorkflowEngineManager workflowEngineManager) { _workflowEngineManager = workflowEngineManager; } protected void unsetDDLFormWebConfigurationActivator( DDLFormWebConfigurationActivator ddlFormWebConfigurationActivator) { _ddlFormWebConfigurationActivator = null; } private static final Log _log = LogFactoryUtil.getLog( DDLFormAdminPortlet.class); private DDLFormWebConfigurationActivator _ddlFormWebConfigurationActivator; private DDLRecordLocalService _ddlRecordLocalService; private DDLRecordSetLocalService _ddlRecordSetLocalService; private DDLRecordSetService _ddlRecordSetService; private Servlet _ddmFormContextProviderServlet; private DDMFormFieldTypeServicesTracker _ddmFormFieldTypeServicesTracker; private DDMFormFieldTypesJSONSerializer _ddmFormFieldTypesJSONSerializer; private DDMFormJSONSerializer _ddmFormJSONSerializer; private DDMFormLayoutJSONSerializer _ddmFormLayoutJSONSerializer; private DDMFormRenderer _ddmFormRenderer; private DDMFormRuleToDDLFormRuleConverter _ddmFormRulesToDDLFormRulesConverter; private DDMFormValuesFactory _ddmFormValuesFactory; private DDMFormValuesMerger _ddmFormValuesMerger; private DDMStructureLocalService _ddmStructureLocalService; private JSONFactory _jsonFactory; @Reference private Portal _portal; private StorageEngine _storageEngine; private WorkflowEngineManager _workflowEngineManager; }