001
014
015 package com.liferay.portlet.dynamicdatamapping.action;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
019 import com.liferay.portal.kernel.util.ContentTypes;
020 import com.liferay.portal.kernel.util.ParamUtil;
021 import com.liferay.portal.theme.ThemeDisplay;
022 import com.liferay.portal.util.PortalUtil;
023 import com.liferay.portal.util.WebKeys;
024 import com.liferay.portlet.dynamicdatamapping.io.DDMFormJSONDeserializerUtil;
025 import com.liferay.portlet.dynamicdatamapping.model.DDMForm;
026 import com.liferay.portlet.dynamicdatamapping.model.DDMFormField;
027 import com.liferay.portlet.dynamicdatamapping.render.DDMFormFieldRenderer;
028 import com.liferay.portlet.dynamicdatamapping.render.DDMFormFieldRendererRegistryUtil;
029 import com.liferay.portlet.dynamicdatamapping.render.DDMFormFieldRenderingContext;
030
031 import java.util.Map;
032
033 import javax.servlet.http.HttpServletRequest;
034 import javax.servlet.http.HttpServletResponse;
035
036 import org.apache.struts.action.Action;
037 import org.apache.struts.action.ActionForm;
038 import org.apache.struts.action.ActionForward;
039 import org.apache.struts.action.ActionMapping;
040
041
044 public class RenderStructureFieldAction extends Action {
045
046 @Override
047 public ActionForward execute(
048 ActionMapping actionMapping, ActionForm actionForm,
049 HttpServletRequest request, HttpServletResponse response)
050 throws Exception {
051
052 try {
053 DDMFormField ddmFormField = getDDMFormField(request);
054
055 DDMFormFieldRenderer ddmFormFieldRenderer =
056 DDMFormFieldRendererRegistryUtil.getDDMFormFieldRenderer(
057 ddmFormField.getType());
058
059 DDMFormFieldRenderingContext ddmFormFieldRenderingContext =
060 createDDMFormFieldRenderingContext(request, response);
061
062 String ddmFormFieldHTML = ddmFormFieldRenderer.render(
063 ddmFormField, ddmFormFieldRenderingContext);
064
065 response.setContentType(ContentTypes.TEXT_HTML);
066
067 ServletResponseUtil.write(response, ddmFormFieldHTML);
068
069 return null;
070 }
071 catch (Exception e) {
072 PortalUtil.sendError(e, request, response);
073
074 return null;
075 }
076 }
077
078 protected DDMFormFieldRenderingContext createDDMFormFieldRenderingContext(
079 HttpServletRequest request, HttpServletResponse response) {
080
081 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
082 WebKeys.THEME_DISPLAY);
083
084 String mode = ParamUtil.getString(request, "mode");
085 String namespace = ParamUtil.getString(request, "namespace");
086 String portletNamespace = ParamUtil.getString(
087 request, "portletNamespace");
088 boolean readOnly = ParamUtil.getBoolean(request, "readOnly");
089
090 DDMFormFieldRenderingContext ddmFormFieldRenderingContext =
091 new DDMFormFieldRenderingContext();
092
093 request.setAttribute("aui:form:portletNamespace", portletNamespace);
094
095 ddmFormFieldRenderingContext.setHttpServletRequest(request);
096 ddmFormFieldRenderingContext.setHttpServletResponse(response);
097 ddmFormFieldRenderingContext.setLocale(themeDisplay.getLocale());
098 ddmFormFieldRenderingContext.setMode(mode);
099 ddmFormFieldRenderingContext.setNamespace(namespace);
100 ddmFormFieldRenderingContext.setPortletNamespace(portletNamespace);
101 ddmFormFieldRenderingContext.setReadOnly(readOnly);
102
103 return ddmFormFieldRenderingContext;
104 }
105
106 protected DDMFormField getDDMFormField(HttpServletRequest request)
107 throws PortalException {
108
109 String definition = ParamUtil.getString(request, "definition");
110 String fieldName = ParamUtil.getString(request, "fieldName");
111
112 DDMForm ddmForm = DDMFormJSONDeserializerUtil.deserialize(definition);
113
114 Map<String, DDMFormField> ddmFormFieldsMap =
115 ddmForm.getDDMFormFieldsMap(true);
116
117 return ddmFormFieldsMap.get(fieldName);
118 }
119
120 }