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(
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    }