/** * 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.io.internal; import com.liferay.dynamic.data.mapping.form.field.type.BaseDDMFormFieldRenderer; import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldRenderer; import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldType; import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldTypeServicesTracker; import com.liferay.dynamic.data.mapping.io.DDMFormFieldTypesJSONSerializer; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.json.JSONArray; import com.liferay.portal.kernel.json.JSONFactory; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.util.LocaleThreadLocal; import com.liferay.portal.kernel.util.MapUtil; import com.liferay.portal.kernel.util.ResourceBundleUtil; import com.liferay.portal.kernel.util.Validator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Bruno Basto */ @Component(immediate = true) public class DDMFormFieldTypesJSONSerializerImpl implements DDMFormFieldTypesJSONSerializer { @Override public String serialize(List<DDMFormFieldType> ddmFormFieldTypes) throws PortalException { JSONArray jsonArray = _jsonFactory.createJSONArray(); for (DDMFormFieldType ddmFormFieldType : ddmFormFieldTypes) { jsonArray.put(toJSONObject(ddmFormFieldType)); } return jsonArray.toString(); } @Reference(unbind = "-") protected void setDDMFormFieldTypeServicesTracker( DDMFormFieldTypeServicesTracker ddmFormFieldTypeServicesTracker) { _ddmFormFieldTypeServicesTracker = ddmFormFieldTypeServicesTracker; } @Reference(unbind = "-") protected void setJSONFactory(JSONFactory jsonFactory) { _jsonFactory = jsonFactory; } protected JSONObject toJSONObject(DDMFormFieldType ddmFormFieldType) throws PortalException { JSONObject jsonObject = _jsonFactory.createJSONObject(); Map<String, Object> ddmFormFieldTypeProperties = _ddmFormFieldTypeServicesTracker.getDDMFormFieldTypeProperties( ddmFormFieldType.getName()); jsonObject.put( "icon", MapUtil.getString( ddmFormFieldTypeProperties, "ddm.form.field.type.icon", "icon-ok-circle")); jsonObject.put( "javaScriptClass", MapUtil.getString( ddmFormFieldTypeProperties, "ddm.form.field.type.js.class.name", "Liferay.DDM.Renderer.Field")); jsonObject.put( "javaScriptModule", MapUtil.getString( ddmFormFieldTypeProperties, "ddm.form.field.type.js.module", "liferay-ddm-form-renderer-field")); String label = MapUtil.getString( ddmFormFieldTypeProperties, "ddm.form.field.type.label"); if (Validator.isNotNull(label)) { Locale locale = LocaleThreadLocal.getThemeDisplayLocale(); ResourceBundle resourceBundle = ResourceBundleUtil.getBundle( "content.Language", locale, ddmFormFieldType.getClass()); jsonObject.put("label", LanguageUtil.get(resourceBundle, label)); } jsonObject.put("name", ddmFormFieldType.getName()); jsonObject.put( "system", MapUtil.getBoolean( ddmFormFieldTypeProperties, "ddm.form.field.type.system")); DDMFormFieldRenderer ddmFormFieldRenderer = _ddmFormFieldTypeServicesTracker.getDDMFormFieldRenderer( ddmFormFieldType.getName()); if (ddmFormFieldRenderer instanceof BaseDDMFormFieldRenderer) { BaseDDMFormFieldRenderer baseDDMFormFieldRenderer = (BaseDDMFormFieldRenderer)ddmFormFieldRenderer; jsonObject.put( "templateNamespace", baseDDMFormFieldRenderer.getTemplateNamespace()); } return jsonObject; } private DDMFormFieldTypeServicesTracker _ddmFormFieldTypeServicesTracker; private JSONFactory _jsonFactory; }