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