001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.dynamicdatamapping.io;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.json.JSONArray;
019    import com.liferay.portal.kernel.json.JSONFactoryUtil;
020    import com.liferay.portal.kernel.json.JSONObject;
021    import com.liferay.portlet.dynamicdatamapping.model.DDMForm;
022    import com.liferay.portlet.dynamicdatamapping.registry.DDMFormFactory;
023    import com.liferay.portlet.dynamicdatamapping.registry.DDMFormFieldRenderer;
024    import com.liferay.portlet.dynamicdatamapping.registry.DDMFormFieldType;
025    import com.liferay.portlet.dynamicdatamapping.registry.DDMFormFieldTypeSettings;
026    
027    import java.util.List;
028    
029    /**
030     * @author Bruno Basto
031     */
032    public class DDMFormFieldTypesJSONSerializerImpl
033            implements DDMFormFieldTypesJSONSerializer {
034    
035            @Override
036            public String serialize(List<DDMFormFieldType> ddmFormFieldTypes)
037                    throws PortalException {
038    
039                    JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
040    
041                    for (DDMFormFieldType ddmFormFieldType : ddmFormFieldTypes) {
042                            jsonArray.put(toJSONObject(ddmFormFieldType));
043                    }
044    
045                    return jsonArray.toString();
046            }
047    
048            protected JSONObject toJSONObject(
049                            Class<? extends DDMFormFieldTypeSettings> ddmFormFieldTypeSettings)
050                    throws PortalException {
051    
052                    DDMForm ddmFormFieldTypeSettingsDDMForm = DDMFormFactory.create(
053                            ddmFormFieldTypeSettings);
054    
055                    String serializedDDMFormFieldTypeSettings =
056                            DDMFormJSONSerializerUtil.serialize(
057                                    ddmFormFieldTypeSettingsDDMForm);
058    
059                    return JSONFactoryUtil.createJSONObject(
060                            serializedDDMFormFieldTypeSettings);
061            }
062    
063            protected JSONObject toJSONObject(DDMFormFieldType ddmFormFieldType)
064                    throws PortalException {
065    
066                    JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
067    
068                    jsonObject.put("icon", ddmFormFieldType.getIcon());
069                    jsonObject.put(
070                            "javaScriptClass",
071                            ddmFormFieldType.getDDMFormFieldTypeJavaScriptClass());
072                    jsonObject.put(
073                            "javaScriptModule",
074                            ddmFormFieldType.getDDMFormFieldTypeJavaScriptModule());
075                    jsonObject.put("name", ddmFormFieldType.getName());
076                    jsonObject.put(
077                            "settings",
078                            toJSONObject(ddmFormFieldType.getDDMFormFieldTypeSettings()));
079    
080                    DDMFormFieldRenderer ddmFormFieldRenderer =
081                            ddmFormFieldType.getDDMFormFieldRenderer();
082    
083                    jsonObject.put(
084                            "templateNamespace", ddmFormFieldRenderer.getTemplateNamespace());
085    
086                    return jsonObject;
087            }
088    
089    }