/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.dynamic.data.mapping.form.values.factory.internal;
import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldValueRequestParameterRetriever;
import com.liferay.dynamic.data.mapping.form.field.type.DefaultDDMFormFieldValueRequestParameterRetriever;
import com.liferay.dynamic.data.mapping.form.renderer.DDMFormRendererConstants;
import com.liferay.dynamic.data.mapping.form.values.factory.DDMFormValuesFactory;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.dynamic.data.mapping.model.UnlocalizedValue;
import com.liferay.dynamic.data.mapping.model.Value;
import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMap;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory;
import com.liferay.portal.kernel.servlet.DynamicServletRequest;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.LocaleThreadLocal;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.servlet.SharedSessionServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
import javax.portlet.PortletRequest;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.osgi.framework.BundleContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
/**
* @author Marcellus Tavares
*/
@Component(immediate = true, service = DDMFormValuesFactory.class)
public class DDMFormValuesFactoryImpl implements DDMFormValuesFactory {
@Override
public DDMFormValues create(
HttpServletRequest httpServletRequest, DDMForm ddmForm) {
HttpServletRequest httpServletRequestWrapped =
getHttpServletRequestWrapped(httpServletRequest);
boolean addPortletNamespace = false;
if (httpServletRequestWrapped != null) {
httpServletRequest = httpServletRequestWrapped;
addPortletNamespace = true;
}
setDDMFormFieldPrefix(httpServletRequest, addPortletNamespace);
DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);
setDDMFormValuesAvailableLocales(httpServletRequest, ddmFormValues);
setDDMFormValuesDefaultLocale(httpServletRequest, ddmFormValues);
setDDMFormFieldValues(httpServletRequest, ddmFormValues);
return ddmFormValues;
}
@Override
public DDMFormValues create(
PortletRequest portletRequest, DDMForm ddmForm) {
return create(_portal.getHttpServletRequest(portletRequest), ddmForm);
}
@Activate
protected void activate(BundleContext bundleContext) {
_serviceTrackerMap = ServiceTrackerMapFactory.openSingleValueMap(
bundleContext, DDMFormFieldValueRequestParameterRetriever.class,
"ddm.form.field.type.name");
}
protected void checkDDMFormFieldParameterNames(
DDMForm ddmForm, Set<String> ddmFormFieldParameterNames) {
if (ddmFormFieldParameterNames.isEmpty()) {
ddmFormFieldParameterNames.addAll(
createDefaultDDMFormFieldParameterNames(ddmForm));
return;
}
checkDDMFormFieldParameterNames(
ddmForm.getDDMFormFields(), StringPool.BLANK,
ddmFormFieldParameterNames);
}
protected void checkDDMFormFieldParameterNames(
List<DDMFormField> ddmFormFields,
String parentDDMFormFieldParameterName,
Set<String> ddmFormFieldParameterNames) {
for (DDMFormField ddmFormField : ddmFormFields) {
Set<String> filteredDDMFormFieldParameterNames =
filterDDMFormFieldParameterNames(
ddmFormField, ddmFormFieldParameterNames);
String ddmFormFieldParameterPrefix = getDDMFormFieldParameterPrefix(
ddmFormField, parentDDMFormFieldParameterName);
boolean containsDefaultDDMFormFieldParameterName =
containsDefaultDDMFormFieldParameterName(
filteredDDMFormFieldParameterNames,
ddmFormFieldParameterPrefix);
if (!ddmFormField.isTransient() &&
!containsDefaultDDMFormFieldParameterName) {
String defaultDDMFormFieldParameterName =
createDefaultDDMFormFieldParameterName(
ddmFormField, parentDDMFormFieldParameterName);
ddmFormFieldParameterNames.add(
defaultDDMFormFieldParameterName);
}
for (String filteredDDMFormFieldParameterName :
filteredDDMFormFieldParameterNames) {
checkDDMFormFieldParameterNames(
ddmFormField.getNestedDDMFormFields(),
filteredDDMFormFieldParameterName,
ddmFormFieldParameterNames);
}
}
}
protected boolean containsDefaultDDMFormFieldParameterName(
Set<String> filteredDDMFormFieldParameterNames,
String ddmFormFieldParameterPrefix) {
for (String filteredDDMFormFieldParameterName :
filteredDDMFormFieldParameterNames) {
if (filteredDDMFormFieldParameterName.startsWith(
ddmFormFieldParameterPrefix)) {
return true;
}
}
return false;
}
protected DDMFormFieldValue createDDMFormFieldValue(
HttpServletRequest httpServletRequest, String ddmFormFieldParameterName,
Map<String, DDMFormField> ddmFormFieldsMap) {
DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue();
String[] lastDDMFormFieldParameterNameParts =
getLastDDMFormFieldParameterNameParts(ddmFormFieldParameterName);
String fieldName = getFieldName(lastDDMFormFieldParameterNameParts);
ddmFormFieldValue.setName(fieldName);
ddmFormFieldValue.setInstanceId(
getFieldInstanceId(lastDDMFormFieldParameterNameParts));
DDMFormField ddmFormField = ddmFormFieldsMap.get(fieldName);
if (ddmFormField.isTransient()) {
return ddmFormFieldValue;
}
if (ddmFormField.isLocalizable()) {
setDDMFormFieldValueLocalizedValue(
httpServletRequest, ddmFormField.getType(),
ddmFormFieldParameterName, ddmFormField.getPredefinedValue(),
ddmFormFieldValue);
}
else {
setDDMFormFieldValueUnlocalizedValue(
httpServletRequest, ddmFormField.getType(),
ddmFormFieldParameterName, ddmFormField.getPredefinedValue(),
ddmFormFieldValue);
}
return ddmFormFieldValue;
}
protected Map<String, DDMFormFieldValue> createDDMFormFieldValuesMap(
HttpServletRequest httpServletRequest, DDMForm ddmForm) {
Map<String, DDMFormFieldValue> ddmFormFieldValuesMap = new HashMap<>();
Set<String> ddmFormFieldParameterNames = getDDMFormFieldParameterNames(
httpServletRequest, ddmForm);
Map<String, DDMFormField> ddmFormFieldsMap =
ddmForm.getDDMFormFieldsMap(true);
for (String ddmFormFieldParameterName : ddmFormFieldParameterNames) {
DDMFormFieldValue ddmFormFieldValue = createDDMFormFieldValue(
httpServletRequest, ddmFormFieldParameterName,
ddmFormFieldsMap);
ddmFormFieldValuesMap.put(
ddmFormFieldParameterName, ddmFormFieldValue);
}
return ddmFormFieldValuesMap;
}
protected String createDefaultDDMFormFieldParameterName(
DDMFormField ddmFormField,
String parentDefaultDDMFormFieldParameterName) {
StringBundler sb = new StringBundler(7);
if (Validator.isNotNull(parentDefaultDDMFormFieldParameterName)) {
sb.append(parentDefaultDDMFormFieldParameterName);
sb.append(DDMFormRendererConstants.DDM_FORM_FIELDS_SEPARATOR);
}
sb.append(ddmFormField.getName());
sb.append(DDMFormRendererConstants.DDM_FORM_FIELD_PARTS_SEPARATOR);
sb.append(StringUtil.randomString());
sb.append(DDMFormRendererConstants.DDM_FORM_FIELD_PARTS_SEPARATOR);
sb.append(0);
return sb.toString();
}
protected Set<String> createDefaultDDMFormFieldParameterNames(
DDMForm ddmForm) {
Set<String> defaultDDMFormFieldParameterNames = new TreeSet<>();
poupulateDefaultDDMFormFieldParameterNames(
ddmForm.getDDMFormFields(), StringPool.BLANK,
defaultDDMFormFieldParameterNames);
return defaultDDMFormFieldParameterNames;
}
@Deactivate
protected void deactivate() {
_serviceTrackerMap.close();
}
protected String extractPrefix(String ddmFormFieldParameterName) {
return StringUtil.extractLast(
ddmFormFieldParameterName, getDDMFormFieldPrefix());
}
protected String extractSuffix(String ddmFormFieldParameterName) {
int pos = ddmFormFieldParameterName.lastIndexOf(
DDMFormRendererConstants.DDM_FORM_FIELD_LANGUAGE_ID_SEPARATOR);
return ddmFormFieldParameterName.substring(0, pos);
}
protected Set<String> filterDDMFormFieldParameterNames(
DDMFormField ddmFormField, Set<String> ddmFormFieldParameterNames) {
Set<String> filteredDDMFormFieldParameterNames = new HashSet<>();
for (String ddmFormFieldParameterName : ddmFormFieldParameterNames) {
String[] ddmFormFieldParameterNameParts =
getLastDDMFormFieldParameterNameParts(
ddmFormFieldParameterName);
String fieldName = getFieldName(ddmFormFieldParameterNameParts);
if (fieldName.equals(ddmFormField.getName())) {
filteredDDMFormFieldParameterNames.add(
ddmFormFieldParameterName);
}
}
return filteredDDMFormFieldParameterNames;
}
protected Set<Locale> getAvailableLocales(
HttpServletRequest httpServletRequest) {
String[] availableLanguageIds = ParamUtil.getParameterValues(
httpServletRequest, "availableLanguageIds");
return getAvailableLocales(availableLanguageIds);
}
protected Set<Locale> getAvailableLocales(String[] availableLanguageIds) {
Set<Locale> availableLocales = new HashSet<>();
for (String availableLanguageId : availableLanguageIds) {
Locale availableLocale = LocaleUtil.fromLanguageId(
availableLanguageId);
availableLocales.add(availableLocale);
}
if (availableLocales.isEmpty()) {
availableLocales.add(LocaleThreadLocal.getSiteDefaultLocale());
}
return availableLocales;
}
protected String[] getDDMFormFieldParameterNameParts(
String ddmFormFieldParameterName) {
return StringUtil.split(ddmFormFieldParameterName, StringPool.DOLLAR);
}
protected Set<String> getDDMFormFieldParameterNames(
HttpServletRequest httpServletRequest, DDMForm ddmForm) {
Set<String> ddmFormFieldParameterNames = new TreeSet<>();
Map<String, String[]> parameterMap =
httpServletRequest.getParameterMap();
for (String parameterName : parameterMap.keySet()) {
if (!isDDMFormFieldParameter(parameterName)) {
continue;
}
ddmFormFieldParameterNames.addAll(
getDDMFormFieldParameterNames(parameterName));
}
checkDDMFormFieldParameterNames(ddmForm, ddmFormFieldParameterNames);
return ddmFormFieldParameterNames;
}
protected Set<String> getDDMFormFieldParameterNames(
String ddmFormFieldParameterName) {
Set<String> ddmFormFieldParameterNames = new TreeSet<>();
ddmFormFieldParameterName = extractPrefix(ddmFormFieldParameterName);
ddmFormFieldParameterName = extractSuffix(ddmFormFieldParameterName);
ddmFormFieldParameterNames.add(ddmFormFieldParameterName);
int pos = ddmFormFieldParameterName.indexOf(
DDMFormRendererConstants.DDM_FORM_FIELDS_SEPARATOR);
while (pos != -1) {
ddmFormFieldParameterNames.add(
ddmFormFieldParameterName.substring(0, pos));
pos = ddmFormFieldParameterName.indexOf(
DDMFormRendererConstants.DDM_FORM_FIELDS_SEPARATOR, pos + 1);
}
return ddmFormFieldParameterNames;
}
protected String getDDMFormFieldParameterPrefix(
DDMFormField ddmFormField, String parentDDMFormFieldParameterName) {
if (Validator.isNull(parentDDMFormFieldParameterName)) {
return ddmFormField.getName();
}
return parentDDMFormFieldParameterName.concat(
StringPool.POUND).concat(ddmFormField.getName());
}
protected String getDDMFormFieldParameterValue(
HttpServletRequest httpServletRequest, String fieldType,
String ddmFormFieldParameterName,
String defaultDDMFormFieldParameterValue, Locale locale) {
StringBundler sb = new StringBundler(4);
sb.append(getDDMFormFieldPrefix());
sb.append(ddmFormFieldParameterName);
sb.append(
DDMFormRendererConstants.DDM_FORM_FIELD_LANGUAGE_ID_SEPARATOR);
sb.append(LocaleUtil.toLanguageId(locale));
DDMFormFieldValueRequestParameterRetriever
ddmFormFieldValueRequestParameterRetriever =
getDDMFormFieldValueRequestParameterRetriever(fieldType);
return ddmFormFieldValueRequestParameterRetriever.get(
httpServletRequest, sb.toString(),
GetterUtil.getString(defaultDDMFormFieldParameterValue));
}
protected String getDDMFormFieldPrefix() {
return _ddmFormFieldPrefix;
}
protected int getDDMFormFieldValueIndex(String ddmFormFieldParameterName) {
String[] lastDDMFormFieldParameterNameParts =
getLastDDMFormFieldParameterNameParts(ddmFormFieldParameterName);
return getFieldIndex(lastDDMFormFieldParameterNameParts);
}
protected DDMFormFieldValueRequestParameterRetriever
getDDMFormFieldValueRequestParameterRetriever(String fieldType) {
if (!_serviceTrackerMap.containsKey(fieldType)) {
return _defaultDDMFormFieldValueRequestParameterRetriever;
}
return _serviceTrackerMap.getService(fieldType);
}
protected List<DDMFormFieldValue> getDDMFormFieldValues(
HttpServletRequest httpServletRequest, DDMForm ddmForm) {
Map<String, DDMFormFieldValue> ddmFormFieldValuesMap =
createDDMFormFieldValuesMap(httpServletRequest, ddmForm);
return getDDMFormFieldValues(
ddmFormFieldValuesMap, ddmForm.getDDMFormFields());
}
protected List<DDMFormFieldValue> getDDMFormFieldValues(
Map<String, DDMFormFieldValue> ddmFormFieldValuesMap,
List<DDMFormField> ddmFormFields) {
List<DDMFormFieldValue> ddmFormFieldValues = new ArrayList<>();
int i = 0;
for (DDMFormField ddmFormField : ddmFormFields) {
Set<String> entryKeys = getEntryKeys(
ddmFormFieldValuesMap, StringPool.BLANK,
ddmFormField.getName());
for (String entryKey : entryKeys) {
DDMFormFieldValue ddmFormFieldValue = ddmFormFieldValuesMap.get(
entryKey);
int index = i + getDDMFormFieldValueIndex(entryKey);
setNestedDDMFormFieldValues(
ddmFormFieldValuesMap,
ddmFormField.getNestedDDMFormFields(), ddmFormFieldValue,
entryKey);
setDDMFormFieldValueAtIndex(
ddmFormFieldValues, ddmFormFieldValue, index);
}
i = ddmFormFieldValues.size();
}
return ddmFormFieldValues;
}
protected Locale getDefaultLocale(HttpServletRequest httpServletRequest) {
String defaultLanguageId = ParamUtil.getString(
httpServletRequest, "defaultLanguageId");
if (Validator.isNull(defaultLanguageId)) {
return LocaleThreadLocal.getSiteDefaultLocale();
}
return LocaleUtil.fromLanguageId(defaultLanguageId);
}
protected String getEntryKeyPrefix(
String parentEntryKey, String fieldNameFilter) {
if (Validator.isNull(parentEntryKey)) {
return StringPool.BLANK;
}
return parentEntryKey.concat(
DDMFormRendererConstants.DDM_FORM_FIELDS_SEPARATOR).concat(
fieldNameFilter);
}
protected Set<String> getEntryKeys(
Map<String, DDMFormFieldValue> ddmFormFieldValuesMap,
String parentEntryKey, String fieldNameFilter) {
Set<String> entryKeys = new HashSet<>();
String entryKeyPrefix = getEntryKeyPrefix(
parentEntryKey, fieldNameFilter);
for (Map.Entry<String, DDMFormFieldValue> entry :
ddmFormFieldValuesMap.entrySet()) {
String key = entry.getKey();
DDMFormFieldValue ddmFormFieldValue = entry.getValue();
if (key.startsWith(entryKeyPrefix) &&
Objects.equals(ddmFormFieldValue.getName(), fieldNameFilter)) {
entryKeys.add(key);
}
}
return entryKeys;
}
protected int getFieldIndex(String[] ddmFormFieldParameterNameParts) {
return GetterUtil.getInteger(
ddmFormFieldParameterNameParts[_DDM_FORM_FIELD_INDEX_INDEX]);
}
protected String getFieldInstanceId(
String[] ddmFormFieldParameterNameParts) {
return
ddmFormFieldParameterNameParts[_DDM_FORM_FIELD_INSTANCE_ID_INDEX];
}
protected String getFieldName(String[] ddmFormFieldParameterNameParts) {
return ddmFormFieldParameterNameParts[_DDM_FORM_FIELD_NAME_INDEX];
}
protected HttpServletRequest getHttpServletRequestWrapped(
HttpServletRequest httpServletRequest) {
if (httpServletRequest instanceof DynamicServletRequest) {
DynamicServletRequest dynamicServletRequest =
(DynamicServletRequest)httpServletRequest;
ServletRequest wrappedServletRequest =
dynamicServletRequest.getRequest();
if (wrappedServletRequest instanceof SharedSessionServletRequest) {
SharedSessionServletRequest sharedSessionServletRequest =
(SharedSessionServletRequest)wrappedServletRequest;
return (HttpServletRequest)
sharedSessionServletRequest.getRequest();
}
}
return null;
}
protected String getLastDDMFormFieldParameterName(
String ddmFormFieldParameterName) {
String lastDDMFormFieldParameterName = StringUtil.extractLast(
ddmFormFieldParameterName,
DDMFormRendererConstants.DDM_FORM_FIELDS_SEPARATOR);
if (lastDDMFormFieldParameterName == null) {
return ddmFormFieldParameterName;
}
return lastDDMFormFieldParameterName;
}
protected String[] getLastDDMFormFieldParameterNameParts(
String ddmFormFieldParameterName) {
String lastDDMFormFieldParameterName = getLastDDMFormFieldParameterName(
ddmFormFieldParameterName);
return getDDMFormFieldParameterNameParts(lastDDMFormFieldParameterName);
}
protected String getPortletNamespace(
HttpServletRequest httpServletRequest) {
String portletId = _portal.getPortletId(httpServletRequest);
if (Validator.isNotNull(portletId)) {
return _portal.getPortletNamespace(portletId);
}
return StringPool.BLANK;
}
protected boolean isDDMFormFieldParameter(String parameterName) {
if (parameterName.startsWith(getDDMFormFieldPrefix())) {
return true;
}
return false;
}
protected void poupulateDefaultDDMFormFieldParameterNames(
List<DDMFormField> ddmFormFields,
String parentDefaultDDMFormFieldParameterName,
Set<String> defaultDDMFormFieldParameterNames) {
for (DDMFormField ddmFormField : ddmFormFields) {
String defaultDDMFormFieldParameterName =
createDefaultDDMFormFieldParameterName(
ddmFormField, parentDefaultDDMFormFieldParameterName);
defaultDDMFormFieldParameterNames.add(
defaultDDMFormFieldParameterName);
poupulateDefaultDDMFormFieldParameterNames(
ddmFormField.getNestedDDMFormFields(),
defaultDDMFormFieldParameterName,
defaultDDMFormFieldParameterNames);
}
}
protected void setDDMFormFieldPrefix(
HttpServletRequest httpServletRequest, boolean addPortletNamespace) {
if (addPortletNamespace) {
String portletNamespace = getPortletNamespace(httpServletRequest);
_ddmFormFieldPrefix =
portletNamespace +
DDMFormRendererConstants.DDM_FORM_FIELD_NAME_PREFIX;
}
else {
_ddmFormFieldPrefix =
DDMFormRendererConstants.DDM_FORM_FIELD_NAME_PREFIX;
}
}
protected void setDDMFormFieldValueAtIndex(
List<DDMFormFieldValue> ddmFormFieldValues,
DDMFormFieldValue ddmFormFieldValue, int index) {
if (ddmFormFieldValues.size() < (index + 1)) {
for (int i = ddmFormFieldValues.size(); i <= index; i++) {
ddmFormFieldValues.add(null);
}
}
ddmFormFieldValues.set(index, ddmFormFieldValue);
}
protected void setDDMFormFieldValueLocalizedValue(
HttpServletRequest httpServletRequest, String fieldType,
String ddmFormFieldParameterName, LocalizedValue predefinedValue,
DDMFormFieldValue ddmFormFieldValue) {
Locale defaultLocale = getDefaultLocale(httpServletRequest);
Value value = new LocalizedValue(defaultLocale);
Set<Locale> availableLocales = getAvailableLocales(httpServletRequest);
for (Locale availableLocale : availableLocales) {
String ddmFormFieldParameterValue = getDDMFormFieldParameterValue(
httpServletRequest, fieldType, ddmFormFieldParameterName,
predefinedValue.getString(availableLocale), availableLocale);
value.addString(availableLocale, ddmFormFieldParameterValue);
}
ddmFormFieldValue.setValue(value);
}
protected void setDDMFormFieldValues(
HttpServletRequest httpServletRequest, DDMFormValues ddmFormValues) {
List<DDMFormFieldValue> ddmFormFieldValues = getDDMFormFieldValues(
httpServletRequest, ddmFormValues.getDDMForm());
ddmFormValues.setDDMFormFieldValues(ddmFormFieldValues);
}
protected void setDDMFormFieldValueUnlocalizedValue(
HttpServletRequest httpServletRequest, String fieldType,
String ddmFormFieldParameterName, LocalizedValue predefinedValue,
DDMFormFieldValue ddmFormFieldValue) {
Locale defaultLocale = getDefaultLocale(httpServletRequest);
String ddmFormFieldParameterValue = getDDMFormFieldParameterValue(
httpServletRequest, fieldType, ddmFormFieldParameterName,
predefinedValue.getString(defaultLocale), defaultLocale);
Value value = new UnlocalizedValue(ddmFormFieldParameterValue);
ddmFormFieldValue.setValue(value);
}
protected void setDDMFormValuesAvailableLocales(
HttpServletRequest httpServletRequest, DDMFormValues ddmFormValues) {
Set<Locale> availableLocales = getAvailableLocales(httpServletRequest);
ddmFormValues.setAvailableLocales(availableLocales);
}
protected void setDDMFormValuesDefaultLocale(
HttpServletRequest httpServletRequest, DDMFormValues ddmFormValues) {
Locale defaultLocale = getDefaultLocale(httpServletRequest);
ddmFormValues.setDefaultLocale(defaultLocale);
}
protected void setNestedDDMFormFieldValues(
Map<String, DDMFormFieldValue> ddmFormFieldValuesMap,
List<DDMFormField> nestedDDMFormFields,
DDMFormFieldValue parentDDMFormFieldValue, String parentEntryKey) {
int i = 0;
for (DDMFormField nestedDDMFormField : nestedDDMFormFields) {
Set<String> entryKeys = getEntryKeys(
ddmFormFieldValuesMap, parentEntryKey,
nestedDDMFormField.getName());
for (String entryKey : entryKeys) {
DDMFormFieldValue ddmFormFieldValue = ddmFormFieldValuesMap.get(
entryKey);
int index = i + getDDMFormFieldValueIndex(entryKey);
setNestedDDMFormFieldValues(
ddmFormFieldValuesMap,
nestedDDMFormField.getNestedDDMFormFields(),
ddmFormFieldValue, entryKey);
setDDMFormFieldValueAtIndex(
parentDDMFormFieldValue.getNestedDDMFormFieldValues(),
ddmFormFieldValue, index);
}
List<DDMFormFieldValue> parentNestedDDMFormFieldValues =
parentDDMFormFieldValue.getNestedDDMFormFieldValues();
i = parentNestedDDMFormFieldValues.size();
}
}
private static final int _DDM_FORM_FIELD_INDEX_INDEX = 2;
private static final int _DDM_FORM_FIELD_INSTANCE_ID_INDEX = 1;
private static final int _DDM_FORM_FIELD_NAME_INDEX = 0;
private String _ddmFormFieldPrefix;
private final DDMFormFieldValueRequestParameterRetriever
_defaultDDMFormFieldValueRequestParameterRetriever =
new DefaultDDMFormFieldValueRequestParameterRetriever();
@Reference
private Portal _portal;
private ServiceTrackerMap
<String, DDMFormFieldValueRequestParameterRetriever> _serviceTrackerMap;
}