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.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    /**
030     * @author Marcellus Tavares
031     */
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    }