Index: info/magnolia/module/form/engine/FormField.java =================================================================== --- info/magnolia/module/form/engine/FormField.java (revision 41218) +++ info/magnolia/module/form/engine/FormField.java (working copy) @@ -33,6 +33,9 @@ */ package info.magnolia.module.form.engine; +import java.util.ArrayList; +import java.util.List; + import org.apache.commons.lang.StringUtils; /** @@ -43,7 +46,10 @@ private String name; private Object value; private String errorMessage; + private boolean selectable = false; + private List selectedLabels = new ArrayList(); + public boolean isValid() { return StringUtils.isEmpty(errorMessage); } @@ -71,4 +77,30 @@ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } + /** + * + * @return true when this field represents either a select or a checkbox or a radio button. + */ + public boolean isSelectable() { + return selectable; + } + + public void setSelectable(boolean selectable) { + this.selectable = selectable; + } + + public void setSelectedLabels(List selectedLabels) { + this.selectedLabels = selectedLabels; + } + + public List getSelectedLabels() { + return selectedLabels; + } + /** + * + * @return a comma separated String holding the labels for the currently selected values in case {@link FormField#isSelectable()} is true. + */ + public String getSelectedLabelsAsString() { + return StringUtils.join(selectedLabels, ","); + } } Index: info/magnolia/module/form/engine/FormStepState.java =================================================================== --- info/magnolia/module/form/engine/FormStepState.java (revision 41218) +++ info/magnolia/module/form/engine/FormStepState.java (working copy) @@ -77,7 +77,7 @@ public Map getValues() { HashMap map = new HashMap(); for (FormField field : fields.values()) { - map.put(field.getName(), field.getValue()); + map.put(field.getName(), field.isSelectable() ? field.getSelectedLabelsAsString() : field.getValue()); } return map; } Index: info/magnolia/module/form/paragraphs/models/DefaultFormDataBinder.java =================================================================== --- info/magnolia/module/form/paragraphs/models/DefaultFormDataBinder.java (revision 41219) +++ info/magnolia/module/form/paragraphs/models/DefaultFormDataBinder.java (working copy) @@ -33,12 +33,17 @@ */ package info.magnolia.module.form.paragraphs.models; +import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; +import java.util.List; + import javax.jcr.RepositoryException; import org.apache.commons.lang.StringUtils; import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.NodeData; import info.magnolia.cms.i18n.I18nContentSupportFactory; import info.magnolia.cms.i18n.Messages; import info.magnolia.cms.i18n.MessagesManager; @@ -97,11 +102,18 @@ if (node.hasNodeData("controlName")) { final String controlName = node.getNodeData("controlName").getString(); - final String value = StringUtils.join(MgnlContext.getParameterValues(controlName), "__"); + final String[] parameterValues = MgnlContext.getParameterValues(controlName); + final String value = StringUtils.join(parameterValues, "__"); + final String type = node.getNodeData("type").getString(); + final boolean selectable = "radio".equals(type) || "select".equals(type) || "checkbox".equals(type); FormField field = new FormField(); field.setName(controlName); field.setValue(value); + if(selectable) { + field.setSelectedLabels(getLabelsFromValues(node, parameterValues)); + field.setSelectable(selectable); + } step.add(field); if (StringUtils.isEmpty(value) && isMandatory(node)) { @@ -133,4 +145,30 @@ String title = node.getNodeData("title").getString(); return title + ": " + errorMessage; } + + protected List getLabelsFromValues(Content node, String[] selectedValues){ + if(selectedValues == null || selectedValues.length == 0){ + return Collections.emptyList(); + } + + final NodeData labelsNode = node.getNodeData("labels"); + if(!labelsNode.isExist()){ + return Collections.emptyList(); + } + + final String[] labelsArray = labelsNode.getString().split("\\r?\\n"); + final List labels = new ArrayList(); + for(String value: labelsArray){ + String[] tmp = value.split(":"); + if(tmp.length == 2){ + for(String selectedValue : selectedValues) { + if(tmp[1].equals(selectedValue)){ + labels.add(tmp[0]); + break; + } + } + } + } + return labels; + } }