001
014
015 package com.liferay.portlet.dynamicdatamapping.io;
016
017 import com.liferay.portal.kernel.json.JSONArray;
018 import com.liferay.portal.kernel.json.JSONFactoryUtil;
019 import com.liferay.portal.kernel.json.JSONObject;
020 import com.liferay.portal.kernel.util.LocaleUtil;
021 import com.liferay.portlet.dynamicdatamapping.model.Value;
022 import com.liferay.portlet.dynamicdatamapping.storage.DDMFormFieldValue;
023 import com.liferay.portlet.dynamicdatamapping.storage.DDMFormValues;
024
025 import java.util.List;
026 import java.util.Locale;
027 import java.util.Set;
028
029
032 public class DDMFormValuesJSONSerializerImpl
033 implements DDMFormValuesJSONSerializer {
034
035 @Override
036 public String serialize(DDMFormValues ddmFormValues) {
037 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
038
039 addAvailableLanguageIds(
040 jsonObject, ddmFormValues.getAvailableLocales());
041 addDefaultLanguageId(jsonObject, ddmFormValues.getDefaultLocale());
042 addFieldValues(jsonObject, ddmFormValues.getDDMFormFieldValues());
043
044 return jsonObject.toString();
045 }
046
047 protected void addAvailableLanguageIds(
048 JSONObject jsonObject, Set<Locale> availableLocales) {
049
050 JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
051
052 for (Locale availableLocale : availableLocales) {
053 jsonArray.put(LocaleUtil.toLanguageId(availableLocale));
054 }
055
056 jsonObject.put("availableLanguageIds", jsonArray);
057 }
058
059 protected void addDefaultLanguageId(
060 JSONObject jsonObject, Locale defaultLocale) {
061
062 jsonObject.put(
063 "defaultLanguageId", LocaleUtil.toLanguageId(defaultLocale));
064 }
065
066 protected void addFieldValues(
067 JSONObject jsonObject, List<DDMFormFieldValue> ddmFormFieldValues) {
068
069 jsonObject.put("fieldValues", toJSONArray(ddmFormFieldValues));
070 }
071
072 protected void addNestedFieldValues(
073 JSONObject jsonObject,
074 List<DDMFormFieldValue> nestedDDMFormFieldValues) {
075
076 if (nestedDDMFormFieldValues.isEmpty()) {
077 return;
078 }
079
080 jsonObject.put(
081 "nestedFieldValues", toJSONArray(nestedDDMFormFieldValues));
082 }
083
084 protected void addValue(JSONObject jsonObject, Value value) {
085 if (value == null) {
086 return;
087 }
088
089 if (value.isLocalized()) {
090 jsonObject.put("value", toJSONObject(value));
091 }
092 else {
093 jsonObject.put("value", value.getString(LocaleUtil.ROOT));
094 }
095 }
096
097 protected JSONArray toJSONArray(
098 List<DDMFormFieldValue> ddmFormFieldValues) {
099
100 JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
101
102 for (DDMFormFieldValue ddmFormFieldValue : ddmFormFieldValues) {
103 jsonArray.put(toJSONObject(ddmFormFieldValue));
104 }
105
106 return jsonArray;
107 }
108
109 protected JSONObject toJSONObject(DDMFormFieldValue ddmFormFieldValue) {
110 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
111
112 jsonObject.put("instanceId", ddmFormFieldValue.getInstanceId());
113 jsonObject.put("name", ddmFormFieldValue.getName());
114
115 addNestedFieldValues(
116 jsonObject, ddmFormFieldValue.getNestedDDMFormFieldValues());
117 addValue(jsonObject, ddmFormFieldValue.getValue());
118
119 return jsonObject;
120 }
121
122 protected JSONObject toJSONObject(Value value) {
123 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
124
125 for (Locale availableLocale : value.getAvailableLocales()) {
126 jsonObject.put(
127 LocaleUtil.toLanguageId(availableLocale),
128 value.getString(availableLocale));
129 }
130
131 return jsonObject;
132 }
133
134 }