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(
059 ddmFormFieldValue.getValue());
060 }
061 }
062
063 protected void traverse(
064 List<DDMFormField> ddmFormFields,
065 Map<String, List<DDMFormFieldValue>> ddmFormFieldValuesMap)
066 throws PortalException {
067
068 for (DDMFormField ddmFormField : ddmFormFields) {
069 List<DDMFormFieldValue> ddmFormFieldValues =
070 ddmFormFieldValuesMap.get(ddmFormField.getName());
071
072 if (ddmFormFieldValues == null) {
073 continue;
074 }
075
076 String fieldType = ddmFormField.getType();
077
078 if (_ddmFormFieldValueTransformersMap.containsKey(fieldType)) {
079 performTransformation(
080 ddmFormFieldValues,
081 _ddmFormFieldValueTransformersMap.get(fieldType));
082 }
083
084 for (DDMFormFieldValue ddmFormFieldValue : ddmFormFieldValues) {
085 traverse(
086 ddmFormField.getNestedDDMFormFields(),
087 ddmFormFieldValue.getNestedDDMFormFieldValuesMap());
088 }
089 }
090 }
091
092 private final Map<String, DDMFormFieldValueTransformer>
093 _ddmFormFieldValueTransformersMap =
094 new HashMap<String, DDMFormFieldValueTransformer>();
095 private final DDMFormValues _ddmFormValues;
096
097 }