001
014
015 package com.liferay.portlet.dynamicdatamapping.util;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portlet.dynamicdatamapping.model.DDMForm;
019 import com.liferay.portlet.dynamicdatamapping.model.DDMFormField;
020 import com.liferay.portlet.dynamicdatamapping.storage.DDMFormFieldValue;
021 import com.liferay.portlet.dynamicdatamapping.storage.DDMFormValues;
022
023 import java.util.HashMap;
024 import java.util.List;
025 import java.util.Map;
026
027
030 public class DDMFormValuesTransformer {
031
032 public DDMFormValuesTransformer(DDMFormValues ddmFormValues) {
033 _ddmFormValues = ddmFormValues;
034 }
035
036 public void addTransformer(
037 DDMFormFieldValueTransformer ddmFormFieldValueTransformer) {
038
039 _ddmFormFieldValueTransformersMap.put(
040 ddmFormFieldValueTransformer.getFieldType(),
041 ddmFormFieldValueTransformer);
042 }
043
044 public void transform() throws PortalException {
045 DDMForm ddmForm = _ddmFormValues.getDDMForm();
046
047 traverse(
048 ddmForm.getDDMFormFields(),
049 _ddmFormValues.getDDMFormFieldValuesMap());
050 }
051
052 protected void performTransformation(
053 List<DDMFormFieldValue> ddmFormFieldValues,
054 DDMFormFieldValueTransformer ddmFormFieldValueTransformer)
055 throws PortalException {
056
057 for (DDMFormFieldValue ddmFormFieldValue : ddmFormFieldValues) {
058 ddmFormFieldValueTransformer.transform(ddmFormFieldValue);
059 }
060 }
061
062 protected void traverse(
063 List<DDMFormField> ddmFormFields,
064 Map<String, List<DDMFormFieldValue>> ddmFormFieldValuesMap)
065 throws PortalException {
066
067 for (DDMFormField ddmFormField : ddmFormFields) {
068 List<DDMFormFieldValue> ddmFormFieldValues =
069 ddmFormFieldValuesMap.get(ddmFormField.getName());
070
071 if (ddmFormFieldValues == null) {
072 continue;
073 }
074
075 String fieldType = ddmFormField.getType();
076
077 if (_ddmFormFieldValueTransformersMap.containsKey(fieldType)) {
078 performTransformation(
079 ddmFormFieldValues,
080 _ddmFormFieldValueTransformersMap.get(fieldType));
081 }
082
083 for (DDMFormFieldValue ddmFormFieldValue : ddmFormFieldValues) {
084 traverse(
085 ddmFormField.getNestedDDMFormFields(),
086 ddmFormFieldValue.getNestedDDMFormFieldValuesMap());
087 }
088 }
089 }
090
091 private final Map<String, DDMFormFieldValueTransformer>
092 _ddmFormFieldValueTransformersMap = new HashMap<>();
093 private final DDMFormValues _ddmFormValues;
094
095 }