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.model;
016    
017    import com.liferay.portal.kernel.util.MapUtil;
018    import com.liferay.portal.kernel.util.Validator;
019    
020    import java.io.Serializable;
021    
022    import java.util.ArrayList;
023    import java.util.LinkedHashMap;
024    import java.util.List;
025    import java.util.Map;
026    
027    /**
028     * @author Pablo Carvalho
029     * @author Marcellus Tavares
030     */
031    public class DDMFormField implements Serializable {
032    
033            public DDMFormField(DDMFormField ddmFormField) {
034                    _properties = new LinkedHashMap<>(ddmFormField._properties);
035    
036                    setDDMFormFieldOptions(
037                            new DDMFormFieldOptions(ddmFormField.getDDMFormFieldOptions()));
038                    setLabel(new LocalizedValue(ddmFormField.getLabel()));
039                    setPredefinedValue(
040                            new LocalizedValue(ddmFormField.getPredefinedValue()));
041                    setStyle(new LocalizedValue(ddmFormField.getStyle()));
042                    setTip(new LocalizedValue(ddmFormField.getTip()));
043    
044                    for (DDMFormField nestedDDMFormField :
045                                    ddmFormField._nestedDDMFormFields) {
046    
047                            addNestedDDMFormField(nestedDDMFormField);
048                    }
049            }
050    
051            public DDMFormField(String name, String type) {
052                    _properties = new LinkedHashMap<>();
053    
054                    setName(name);
055                    setType(type);
056    
057                    setDDMFormFieldOptions(new DDMFormFieldOptions());
058                    setLabel(new LocalizedValue());
059                    setPredefinedValue(new LocalizedValue());
060                    setStyle(new LocalizedValue());
061                    setTip(new LocalizedValue());
062            }
063    
064            public void addNestedDDMFormField(DDMFormField nestedDDMFormField) {
065                    nestedDDMFormField.setDDMForm(_ddmForm);
066    
067                    _nestedDDMFormFields.add(nestedDDMFormField);
068            }
069    
070            public String getDataType() {
071                    return MapUtil.getString(_properties, "dataType");
072            }
073    
074            public DDMForm getDDMForm() {
075                    return _ddmForm;
076            }
077    
078            public DDMFormFieldOptions getDDMFormFieldOptions() {
079                    return (DDMFormFieldOptions)_properties.get("options");
080            }
081    
082            public String getFieldNamespace() {
083                    return MapUtil.getString(_properties, "fieldNamespace");
084            }
085    
086            public String getIndexType() {
087                    return MapUtil.getString(_properties, "indexType");
088            }
089    
090            public LocalizedValue getLabel() {
091                    return (LocalizedValue)_properties.get("label");
092            }
093    
094            public String getName() {
095                    return MapUtil.getString(_properties, "name");
096            }
097    
098            public List<DDMFormField> getNestedDDMFormFields() {
099                    return _nestedDDMFormFields;
100            }
101    
102            public Map<String, DDMFormField> getNestedDDMFormFieldsMap() {
103                    Map<String, DDMFormField> nestedDDMFormFieldsMap =
104                            new LinkedHashMap<>();
105    
106                    for (DDMFormField nestedDDMFormField : _nestedDDMFormFields) {
107                            nestedDDMFormFieldsMap.put(
108                                    nestedDDMFormField.getName(), nestedDDMFormField);
109    
110                            nestedDDMFormFieldsMap.putAll(
111                                    nestedDDMFormField.getNestedDDMFormFieldsMap());
112                    }
113    
114                    return nestedDDMFormFieldsMap;
115            }
116    
117            public LocalizedValue getPredefinedValue() {
118                    return (LocalizedValue)_properties.get("predefinedValue");
119            }
120    
121            public Object getProperty(String name) {
122                    return _properties.get(name);
123            }
124    
125            public LocalizedValue getStyle() {
126                    return (LocalizedValue)_properties.get("style");
127            }
128    
129            public LocalizedValue getTip() {
130                    return (LocalizedValue)_properties.get("tip");
131            }
132    
133            public String getType() {
134                    return MapUtil.getString(_properties, "type");
135            }
136    
137            public String getVisibilityExpression() {
138                    return MapUtil.getString(_properties, "visibilityExpression");
139            }
140    
141            public boolean isLocalizable() {
142                    return MapUtil.getBoolean(_properties, "localizable");
143            }
144    
145            public boolean isMultiple() {
146                    return MapUtil.getBoolean(_properties, "multiple");
147            }
148    
149            public boolean isReadOnly() {
150                    return MapUtil.getBoolean(_properties, "readOnly");
151            }
152    
153            public boolean isRepeatable() {
154                    return MapUtil.getBoolean(_properties, "repeatable");
155            }
156    
157            public boolean isRequired() {
158                    return MapUtil.getBoolean(_properties, "required");
159            }
160    
161            public boolean isShowLabel() {
162                    return MapUtil.getBoolean(_properties, "showLabel");
163            }
164    
165            public boolean isTransient() {
166                    if (Validator.isNull(getDataType())) {
167                            return true;
168                    }
169    
170                    return false;
171            }
172    
173            public void setDataType(String dataType) {
174                    _properties.put("dataType", dataType);
175            }
176    
177            public void setDDMForm(DDMForm ddmForm) {
178                    for (DDMFormField nestedDDMFormField : _nestedDDMFormFields) {
179                            nestedDDMFormField.setDDMForm(ddmForm);
180                    }
181    
182                    _ddmForm = ddmForm;
183            }
184    
185            public void setDDMFormFieldOptions(
186                    DDMFormFieldOptions ddmFormFieldOptions) {
187    
188                    _properties.put("options", ddmFormFieldOptions);
189            }
190    
191            public void setFieldNamespace(String fieldNamespace) {
192                    _properties.put("fieldNamespace", fieldNamespace);
193            }
194    
195            public void setIndexType(String indexType) {
196                    _properties.put("indexType", indexType);
197            }
198    
199            public void setLabel(LocalizedValue label) {
200                    _properties.put("label", label);
201            }
202    
203            public void setLocalizable(boolean localizable) {
204                    _properties.put("localizable", localizable);
205            }
206    
207            public void setMultiple(boolean multiple) {
208                    _properties.put("multiple", multiple);
209            }
210    
211            public void setName(String name) {
212                    _properties.put("name", name);
213            }
214    
215            public void setNestedDDMFormFields(List<DDMFormField> nestedDDMFormFields) {
216                    _nestedDDMFormFields = nestedDDMFormFields;
217            }
218    
219            public void setPredefinedValue(LocalizedValue predefinedValue) {
220                    _properties.put("predefinedValue", predefinedValue);
221            }
222    
223            public void setProperty(String name, Object value) {
224                    _properties.put(name, value);
225            }
226    
227            public void setReadOnly(boolean readOnly) {
228                    _properties.put("readOnly", readOnly);
229            }
230    
231            public void setRepeatable(boolean repeatable) {
232                    _properties.put("repeatable", repeatable);
233            }
234    
235            public void setRequired(boolean required) {
236                    _properties.put("required", required);
237            }
238    
239            public void setShowLabel(boolean showLabel) {
240                    _properties.put("showLabel", showLabel);
241            }
242    
243            public void setStyle(LocalizedValue style) {
244                    _properties.put("style", style);
245            }
246    
247            public void setTip(LocalizedValue tip) {
248                    _properties.put("tip", tip);
249            }
250    
251            public void setType(String type) {
252                    _properties.put("type", type);
253            }
254    
255            public void setVisibilityExpression(String visibilityExpression) {
256                    _properties.put("visibilityExpression", visibilityExpression);
257            }
258    
259            private DDMForm _ddmForm;
260            private List<DDMFormField> _nestedDDMFormFields = new ArrayList<>();
261            private final Map<String, Object> _properties;
262    
263    }