Repository: wicket
Updated Branches:
  refs/heads/master 4d4a69062 -> 55ce67b3d


WICKET-6555 reuse code in AbstractChoice subclasses and

override getDefaultChoice() for RadioChoice, it does not
work with <option> tags


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/5c315857
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/5c315857
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/5c315857

Branch: refs/heads/master
Commit: 5c3158574646969430c89e49e2d6ea9bf7c43d40
Parents: 4d4a690
Author: Sven Meier <svenme...@apache.org>
Authored: Mon May 28 18:34:26 2018 +0200
Committer: Sven Meier <svenme...@apache.org>
Committed: Tue May 29 14:45:37 2018 +0200

----------------------------------------------------------------------
 .../wicket/markup/html/form/AbstractChoice.java | 109 +++++++--
 .../html/form/CheckBoxMultipleChoice.java       | 231 +++++--------------
 .../wicket/markup/html/form/RadioChoice.java    | 226 +++++-------------
 .../html/form/CheckBoxMultipleChoiceTest.java   |  12 +-
 .../markup/html/form/RadioChoiceTest.java       |   8 +-
 5 files changed, 225 insertions(+), 361 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/5c315857/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
index fd1cacf..c5d44c4 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
@@ -58,22 +58,84 @@ public abstract class AbstractChoice<T, E> extends 
FormComponent<T>
                /**
                 * will render the label before the choice
                 */
-               BEFORE,
+               BEFORE {
+                       @Override
+                       void before(AppendingStringBuffer buffer, String 
idAttr, StringBuilder extraLabelAttributes, CharSequence renderValue)
+                       {
+                               buffer.append("<label for=\"")
+                               .append(Strings.escapeMarkup(idAttr))
+                               .append('"')
+                               .append(extraLabelAttributes)
+                               .append('>')
+                               .append(renderValue)
+                               .append("</label>");
+                       }
+               },
 
                /**
                 * will render the label after the choice
                 */
-               AFTER,
+               AFTER {
+                       @Override
+                       void after(AppendingStringBuffer buffer, String idAttr, 
StringBuilder extraLabelAttributes, CharSequence renderValue)
+                       {
+                               buffer.append("<label for=\"")
+                               .append(Strings.escapeMarkup(idAttr))
+                               .append('"')
+                               .append(extraLabelAttributes)
+                               .append('>')
+                               .append(renderValue)
+                               .append("</label>");
+                       }
+               },
 
                /**
                 * render the label around and the text will be before the the 
choice
                 */
-               WRAP_BEFORE,
+               WRAP_BEFORE {
+                       @Override
+                       void before(AppendingStringBuffer buffer, String 
idAttr, StringBuilder extraLabelAttributes, CharSequence renderValue)
+                       {
+                               buffer.append("<label")
+                               .append(extraLabelAttributes)
+                               .append('>')
+                               .append(renderValue)
+                               .append(' ');
+                       }
+                       
+                       @Override
+                       void after(AppendingStringBuffer buffer, String idAttr, 
StringBuilder extraLabelAttributes, CharSequence renderValue)
+                       {
+                               buffer.append("</label>");
+                       }
+               },
 
                /**
                 * render the label around and the text will be after the the 
choice
                 */
-               WRAP_AFTER
+               WRAP_AFTER {
+                       @Override
+                       void before(AppendingStringBuffer buffer, String 
idAttr, StringBuilder extraLabelAttributes, CharSequence renderValue)
+                       {
+                               buffer.append("<label")
+                               .append(extraLabelAttributes)
+                               .append('>');
+                       }
+                       
+                       @Override
+                       void after(AppendingStringBuffer buffer, String idAttr, 
StringBuilder extraLabelAttributes, CharSequence renderValue)
+                       {
+                               buffer.append(' ')
+                               .append(renderValue)
+                               .append("</label>");
+                       }
+               };
+               
+               void before(AppendingStringBuffer buffer, String idAttr, 
StringBuilder extraLabelAttributes, CharSequence renderValue) {
+               }
+               
+               void after(AppendingStringBuffer buffer, String idAttr, 
StringBuilder extraLabelAttributes, CharSequence renderValue) {
+               }
        }
 
        /** The list of objects. */
@@ -403,9 +465,19 @@ public abstract class AbstractChoice<T, E> extends 
FormComponent<T>
         * @param selected
         *            The currently selected string value
         */
-       @SuppressWarnings("unchecked")
-       protected void appendOptionHtml(AppendingStringBuffer buffer, E choice, 
int index,
-               String selected)
+       protected void appendOptionHtml(AppendingStringBuffer buffer, E choice, 
int index, String selected)
+       {
+               CharSequence renderValue = renderValue(choice);
+
+               buffer.append("\n<option ");
+               setOptionAttributes(buffer, choice, index, selected);
+               buffer.append('>');
+               buffer.append(renderValue);
+               buffer.append("</option>");
+       }
+
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       CharSequence renderValue(E choice)
        {
                Object objectValue = renderer.getDisplayValue(choice);
                Class<?> objectClass = (objectValue == null ? null : 
objectValue.getClass());
@@ -413,7 +485,6 @@ public abstract class AbstractChoice<T, E> extends 
FormComponent<T>
                String displayValue = "";
                if (objectClass != null && objectClass != String.class)
                {
-                       @SuppressWarnings("rawtypes")
                        IConverter converter = getConverter(objectClass);
                        displayValue = converter.convertToString(objectValue, 
getLocale());
                }
@@ -421,25 +492,21 @@ public abstract class AbstractChoice<T, E> extends 
FormComponent<T>
                {
                        displayValue = objectValue.toString();
                }
-
-               buffer.append("\n<option ");
-               setOptionAttributes(buffer, choice, index, selected);
-               buffer.append('>');
-
-               String display = displayValue;
+               
                if (localizeDisplayValues())
                {
-                       display = getLocalizer().getString(displayValue, this, 
displayValue);
+                       displayValue = getLocalizer().getString(getId() + "." + 
displayValue, this, "");
+                       if (Strings.isEmpty(displayValue)) {
+                               displayValue = 
getLocalizer().getString(displayValue, this, displayValue);
+                       }
                }
-
-               CharSequence escaped = display;
+               
                if (getEscapeModelStrings())
                {
-                       escaped = escapeOptionHtml(display);
+                       return escapeOptionHtml(displayValue);
                }
-
-               buffer.append(escaped);
-               buffer.append("</option>");
+               
+               return displayValue;
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/5c315857/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java
index f1c3520..4ba0fad 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoice.java
@@ -22,10 +22,8 @@ import java.util.Map;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.settings.DebugSettings;
-import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
@@ -340,34 +338,6 @@ public class CheckBoxMultipleChoice<T> extends 
ListMultipleChoice<T>
        }
 
        /**
-        * @see 
org.apache.wicket.Component#onComponentTagBody(org.apache.wicket.markup.MarkupStream,
-        *      org.apache.wicket.markup.ComponentTag)
-        */
-       @Override
-       public final void onComponentTagBody(final MarkupStream markupStream, 
final ComponentTag openTag)
-       {
-               // Iterate through choices
-               final List<? extends T> choices = getChoices();
-
-               // Buffer to hold generated body
-               final AppendingStringBuffer buffer = new 
AppendingStringBuffer(70 * (choices.size() + 1));
-
-               // Value of this choice
-               final String selected = getValue();
-
-               // Loop through choices
-               for (int index = 0; index < choices.size(); index++)
-               {
-                       // Get next choice
-                       final T choice = choices.get(index);
-                       appendOptionHtml(buffer, choice, index, selected);
-               }
-
-               // Replace body
-               replaceComponentTagBody(markupStream, openTag, buffer);
-       }
-
-       /**
         * Generates and appends html for a single choice into the provided 
buffer
         * 
         * @param buffer
@@ -379,163 +349,90 @@ public class CheckBoxMultipleChoice<T> extends 
ListMultipleChoice<T>
         * @param selected
         *            The currently selected string value
         */
-       @SuppressWarnings("unchecked")
        @Override
        protected void appendOptionHtml(final AppendingStringBuffer buffer, 
final T choice, int index,
                final String selected)
        {
-               Object displayValue = 
getChoiceRenderer().getDisplayValue(choice);
-               Class<?> objectClass = displayValue == null ? null : 
displayValue.getClass();
-               // Get label for choice
-               String label = "";
-               if (objectClass != null && objectClass != String.class)
-               {
-                       @SuppressWarnings("rawtypes")
-                       IConverter converter = getConverter(objectClass);
-                       label = converter.convertToString(displayValue, 
getLocale());
-               }
-               else if (displayValue != null)
-               {
-                       label = displayValue.toString();
-               }
+               // Append option suffix
+               buffer.append(getPrefix(index, choice));
 
-               // If there is a display value for the choice, then we know 
that the
-               // choice is automatic in some way. If label is /null/ then we 
know
-               // that the choice is a manually created checkbox tag at some 
random
-               // location in the page markup!
-               if (label != null)
-               {
-                       // Append option suffix
-                       buffer.append(getPrefix(index, choice));
+               String id = getChoiceRenderer().getIdValue(choice, index);
+               final String idAttr = getCheckBoxMarkupId(id);
 
-                       String id = getChoiceRenderer().getIdValue(choice, 
index);
-                       final String idAttr = getCheckBoxMarkupId(id);
+               CharSequence renderValue = renderValue(choice);
 
-                       // Add label for checkbox
-                       String display = label;
-                       if (localizeDisplayValues())
-                       {
-                               display = getLocalizer().getString(label, this, 
label);
-                       }
-
-                       final CharSequence escaped = (getEscapeModelStrings() ? 
Strings.escapeMarkup(display)
-                                       : display);
-
-                       // Allows user to add attributes to the <label..> tag
-                       IValueMap labelAttrs = 
getAdditionalAttributesForLabel(index, choice);
-                       StringBuilder extraLabelAttributes = new 
StringBuilder();
-                       if (labelAttrs != null)
+               // Allows user to add attributes to the <label..> tag
+               IValueMap labelAttrs = getAdditionalAttributesForLabel(index, 
choice);
+               StringBuilder extraLabelAttributes = new StringBuilder();
+               if (labelAttrs != null)
+               {
+                       for (Map.Entry<String, Object> attr : 
labelAttrs.entrySet())
                        {
-                               for (Map.Entry<String, Object> attr : 
labelAttrs.entrySet())
-                               {
-                                       extraLabelAttributes.append(' ')
-                                                       
.append(Strings.escapeMarkup(attr.getKey()))
-                                                       .append("=\"")
-                                                       
.append(Strings.escapeMarkup(attr.getValue().toString()))
-                                                       .append('"');
-                               }
+                               extraLabelAttributes.append(' ')
+                                               
.append(Strings.escapeMarkup(attr.getKey()))
+                                               .append("=\"")
+                                               
.append(Strings.escapeMarkup(attr.getValue().toString()))
+                                               .append('"');
                        }
+               }
 
-                       switch (labelPosition)
-                       {
-                               case BEFORE:
-                                       buffer.append("<label for=\"")
-                                       .append(Strings.escapeMarkup(idAttr))
-                                       .append('"')
-                                       .append(extraLabelAttributes)
-                                       .append('>')
-                                       .append(escaped)
-                                       .append("</label>");
-                                       break;
-                               case WRAP_BEFORE:
-                                       buffer.append("<label")
-                                       .append(extraLabelAttributes)
-                                       .append('>')
-                                       .append(escaped)
-                                       .append(' ');
-                                       break;
-                               case WRAP_AFTER:
-                                       buffer.append("<label")
-                                       .append(extraLabelAttributes)
-                                       .append('>');
-                                       break;
-                       }
+               labelPosition.before(buffer, idAttr, extraLabelAttributes, 
renderValue);
 
-                       // Add checkbox element
-                       buffer.append("<input name=\"");
-                       buffer.append(getInputName());
-                       buffer.append('"');
-                       buffer.append(" type=\"checkbox\"");
-                       if (isSelected(choice, index, selected))
-                       {
-                               buffer.append(" checked=\"checked\"");
-                       }
-                       if (isDisabled(choice, index, selected) || 
!isEnabledInHierarchy())
-                       {
-                               buffer.append(" disabled=\"disabled\"");
-                       }
-                       buffer.append(" value=\"");
-                       buffer.append(Strings.escapeMarkup(id));
-                       buffer.append("\" id=\"");
-                       buffer.append(Strings.escapeMarkup(idAttr));
-                       buffer.append('"');
+               // Add checkbox element
+               buffer.append("<input name=\"");
+               buffer.append(getInputName());
+               buffer.append('"');
+               buffer.append(" type=\"checkbox\"");
+               if (isSelected(choice, index, selected))
+               {
+                       buffer.append(" checked=\"checked\"");
+               }
+               if (isDisabled(choice, index, selected) || 
!isEnabledInHierarchy())
+               {
+                       buffer.append(" disabled=\"disabled\"");
+               }
+               buffer.append(" value=\"");
+               buffer.append(Strings.escapeMarkup(id));
+               buffer.append("\" id=\"");
+               buffer.append(Strings.escapeMarkup(idAttr));
+               buffer.append('"');
 
-                       // Allows user to add attributes to the <input..> tag
+               // Allows user to add attributes to the <input..> tag
+               {
+                       IValueMap attrs = getAdditionalAttributes(index, 
choice);
+                       if (attrs != null)
                        {
-                               IValueMap attrs = 
getAdditionalAttributes(index, choice);
-                               if (attrs != null)
+                               for (Map.Entry<String, Object> attr : 
attrs.entrySet())
                                {
-                                       for (Map.Entry<String, Object> attr : 
attrs.entrySet())
-                                       {
-                                               buffer.append(' ')
-                                                       
.append(Strings.escapeMarkup(attr.getKey()))
-                                                       .append("=\"")
-                                                       
.append(Strings.escapeMarkup(attr.getValue().toString()))
-                                                       .append('"');
-                                       }
+                                       buffer.append(' ')
+                                               
.append(Strings.escapeMarkup(attr.getKey()))
+                                               .append("=\"")
+                                               
.append(Strings.escapeMarkup(attr.getValue().toString()))
+                                               .append('"');
                                }
                        }
+               }
 
-                       DebugSettings debugSettings = 
getApplication().getDebugSettings();
-                       String componentPathAttributeName = 
debugSettings.getComponentPathAttributeName();
-                       if (Strings.isEmpty(componentPathAttributeName) == 
false)
-                       {
-                               CharSequence path = getPageRelativePath();
-                               path = Strings.replaceAll(path, "_", "__");
-                               path = Strings.replaceAll(path, ":", "_");
-                               buffer.append(' 
').append(componentPathAttributeName).append("=\"")
-                                       .append(path)
-                                       .append("_input_")
-                                       .append(index)
-                                       .append('"');
-                       }
+               DebugSettings debugSettings = 
getApplication().getDebugSettings();
+               String componentPathAttributeName = 
debugSettings.getComponentPathAttributeName();
+               if (Strings.isEmpty(componentPathAttributeName) == false)
+               {
+                       CharSequence path = getPageRelativePath();
+                       path = Strings.replaceAll(path, "_", "__");
+                       path = Strings.replaceAll(path, ":", "_");
+                       buffer.append(' 
').append(componentPathAttributeName).append("=\"")
+                               .append(path)
+                               .append("_input_")
+                               .append(index)
+                               .append('"');
+               }
 
-                       buffer.append("/>");
+               buffer.append("/>");
 
-                       switch (labelPosition)
-                       {
-                               case WRAP_BEFORE:
-                                       buffer.append("</label>");
-                                       break;
-                               case WRAP_AFTER:
-                                       buffer.append(' ')
-                                               .append(escaped)
-                                               .append("</label>");
-                                       break;
-                               case AFTER:
-                                       buffer.append("<label for=\"")
-                                               
.append(Strings.escapeMarkup(idAttr))
-                                               .append('"')
-                                               .append(extraLabelAttributes)
-                                               .append('>')
-                                               .append(escaped)
-                                               .append("</label>");
-                                       break;
-                       }
+               labelPosition.after(buffer, idAttr, extraLabelAttributes, 
renderValue);
 
-                       // Append option suffix
-                       buffer.append(getSuffix(index, choice));
-               }
+               // Append option suffix
+               buffer.append(getSuffix(index, choice));
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/5c315857/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
index 3994204..60b6b27 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
@@ -20,10 +20,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.settings.DebugSettings;
-import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
@@ -321,31 +319,12 @@ public class RadioChoice<T> extends 
AbstractSingleSelectChoice<T>
        }
 
        /**
-        * @see org.apache.wicket.Component#onComponentTagBody(MarkupStream, 
ComponentTag)
+        * Not supported - does nothing.
         */
        @Override
-       public final void onComponentTagBody(final MarkupStream markupStream, 
final ComponentTag openTag)
+       protected CharSequence getDefaultChoice(String selectedValue)
        {
-               // Iterate through choices
-               final List<? extends T> choices = getChoices();
-
-               // Buffer to hold generated body
-               final AppendingStringBuffer buffer = new 
AppendingStringBuffer((choices.size() + 1) * 70);
-
-               // The selected value
-               final String selected = getValue();
-
-               // Loop through choices
-               for (int index = 0; index < choices.size(); index++)
-               {
-                       // Get next choice
-                       final T choice = choices.get(index);
-
-                       appendOptionHtml(buffer, choice, index, selected);
-               }
-
-               // Replace body
-               replaceComponentTagBody(markupStream, openTag, buffer);
+               return "";
        }
 
        /**
@@ -360,165 +339,86 @@ public class RadioChoice<T> extends 
AbstractSingleSelectChoice<T>
         * @param selected
         *            The currently selected string value
         */
-       @SuppressWarnings("unchecked")
        @Override
        protected void appendOptionHtml(final AppendingStringBuffer buffer, 
final T choice, int index,
                final String selected)
        {
-               Object displayValue = 
getChoiceRenderer().getDisplayValue(choice);
-               Class<?> objectClass = (displayValue == null ? null : 
displayValue.getClass());
-
-               // Get label for choice
-               String label = "";
-
-               if (objectClass != null && objectClass != String.class)
-               {
-                       @SuppressWarnings("rawtypes")
-                       final IConverter converter = getConverter(objectClass);
-                       label = converter.convertToString(displayValue, 
getLocale());
-               }
-               else if (displayValue != null)
-               {
-                       label = displayValue.toString();
-               }
-
-               // If there is a display value for the choice, then we know 
that the
-               // choice is automatic in some way. If label is /null/ then we 
know
-               // that the choice is a manually created radio tag at some 
random
-               // location in the page markup!
-               if (label != null)
-               {
-                       // Append option suffix
-                       buffer.append(getPrefix(index, choice));
+               // Append option suffix
+               buffer.append(getPrefix(index, choice));
 
-                       String id = getChoiceRenderer().getIdValue(choice, 
index);
-                       final String idAttr = getMarkupId() + "-" + id;
+               String id = getChoiceRenderer().getIdValue(choice, index);
+               final String idAttr = getMarkupId() + "-" + id;
 
-                       boolean enabled = isEnabledInHierarchy() && 
!isDisabled(choice, index, selected);
+               boolean enabled = isEnabledInHierarchy() && !isDisabled(choice, 
index, selected);
 
-                       // Add label for radio button
-                       String display = label;
-                       if (localizeDisplayValues())
-                       {
-                               display = getLocalizer().getString(label, this, 
label);
-                       }
+               CharSequence renderValue = renderValue(choice);
 
-                       CharSequence escaped = display;
-                       if (getEscapeModelStrings())
+               // Allows user to add attributes to the <label..> tag
+               IValueMap labelAttrs = getAdditionalAttributesForLabel(index, 
choice);
+               StringBuilder extraLabelAttributes = new StringBuilder();
+               if (labelAttrs != null)
+               {
+                       for (Map.Entry<String, Object> attr : 
labelAttrs.entrySet())
                        {
-                               escaped = Strings.escapeMarkup(display);
+                               extraLabelAttributes.append(' ')
+                                               
.append(Strings.escapeMarkup(attr.getKey()))
+                                               .append("=\"")
+                                               
.append(Strings.escapeMarkup(attr.getValue().toString()))
+                                               .append('"');
                        }
+               }
 
-                       // Allows user to add attributes to the <label..> tag
-                       IValueMap labelAttrs = 
getAdditionalAttributesForLabel(index, choice);
-                       StringBuilder extraLabelAttributes = new 
StringBuilder();
-                       if (labelAttrs != null)
+               labelPosition.before(buffer, idAttr, extraLabelAttributes, 
renderValue);
+
+               // Add radio tag
+               buffer.append("<input name=\"")
+                       .append(getInputName())
+                       .append('"')
+                       .append(" type=\"radio\"")
+                       .append((isSelected(choice, index, selected) ? " 
checked=\"checked\"" : ""))
+                       .append((enabled ? "" : " disabled=\"disabled\""))
+                       .append(" value=\"")
+                       .append(Strings.escapeMarkup(id))
+                       .append("\" id=\"")
+                       .append(Strings.escapeMarkup(idAttr))
+                       .append('"');
+
+               // Allows user to add attributes to the <input..> tag
+               {
+                       IValueMap attrs = getAdditionalAttributes(index, 
choice);
+                       if (attrs != null)
                        {
-                               for (Map.Entry<String, Object> attr : 
labelAttrs.entrySet())
+                               for (Map.Entry<String, Object> attr : 
attrs.entrySet())
                                {
-                                       extraLabelAttributes.append(' ')
-                                                       
.append(Strings.escapeMarkup(attr.getKey()))
-                                                       .append("=\"")
-                                                       
.append(Strings.escapeMarkup(attr.getValue().toString()))
-                                                       .append('"');
+                                       buffer.append(' ')
+                                               
.append(Strings.escapeMarkup(attr.getKey()))
+                                               .append("=\"")
+                                               
.append(Strings.escapeMarkup(attr.getValue().toString()))
+                                               .append('"');
                                }
                        }
+               }
 
-                       switch (labelPosition)
-                       {
-                               case BEFORE:
-
-                                       buffer.append("<label for=\"")
-                                                       
.append(Strings.escapeMarkup(idAttr))
-                                                       .append('"')
-                                                       
.append(extraLabelAttributes)
-                                                       .append('>')
-                                                       .append(escaped)
-                                                       .append("</label>");
-                                       break;
-                               case WRAP_BEFORE:
-                                       buffer.append("<label")
-                                                       
.append(extraLabelAttributes)
-                                                       .append('>')
-                                                       .append(escaped)
-                                                       .append(' ');
-                                       break;
-                               case WRAP_AFTER:
-                                       buffer.append("<label")
-                                                       
.append(extraLabelAttributes)
-                                                       .append('>');
-                                       break;
-                       }
-
-                       // Add radio tag
-                       buffer.append("<input name=\"")
-                               .append(getInputName())
-                               .append('"')
-                               .append(" type=\"radio\"")
-                               .append((isSelected(choice, index, selected) ? 
" checked=\"checked\"" : ""))
-                               .append((enabled ? "" : " 
disabled=\"disabled\""))
-                               .append(" value=\"")
-                               .append(Strings.escapeMarkup(id))
-                               .append("\" id=\"")
-                               .append(Strings.escapeMarkup(idAttr))
+               DebugSettings debugSettings = 
getApplication().getDebugSettings();
+               String componentPathAttributeName = 
debugSettings.getComponentPathAttributeName();
+               if (Strings.isEmpty(componentPathAttributeName) == false)
+               {
+                       CharSequence path = getPageRelativePath();
+                       path = Strings.replaceAll(path, "_", "__");
+                       path = Strings.replaceAll(path, ":", "_");
+                       buffer.append(' 
').append(componentPathAttributeName).append("=\"")
+                               .append(path)
+                               .append("_input_")
+                               .append(index)
                                .append('"');
+               }
 
-                       // Allows user to add attributes to the <input..> tag
-                       {
-                               IValueMap attrs = 
getAdditionalAttributes(index, choice);
-                               if (attrs != null)
-                               {
-                                       for (Map.Entry<String, Object> attr : 
attrs.entrySet())
-                                       {
-                                               buffer.append(' ')
-                                                       
.append(Strings.escapeMarkup(attr.getKey()))
-                                                       .append("=\"")
-                                                       
.append(Strings.escapeMarkup(attr.getValue().toString()))
-                                                       .append('"');
-                                       }
-                               }
-                       }
-
-                       DebugSettings debugSettings = 
getApplication().getDebugSettings();
-                       String componentPathAttributeName = 
debugSettings.getComponentPathAttributeName();
-                       if (Strings.isEmpty(componentPathAttributeName) == 
false)
-                       {
-                               CharSequence path = getPageRelativePath();
-                               path = Strings.replaceAll(path, "_", "__");
-                               path = Strings.replaceAll(path, ":", "_");
-                               buffer.append(' 
').append(componentPathAttributeName).append("=\"")
-                                       .append(path)
-                                       .append("_input_")
-                                       .append(index)
-                                       .append('"');
-                       }
+               buffer.append("/>");
 
-                       buffer.append("/>");
+               labelPosition.after(buffer, idAttr, extraLabelAttributes, 
renderValue);
 
-                       switch (labelPosition)
-                       {
-                               case WRAP_BEFORE:
-                                       buffer.append("</label>");
-                                       break;
-                               case WRAP_AFTER:
-                                       buffer.append(' ')
-                                                       .append(escaped)
-                                                       .append("</label>");
-                                       break;
-                               case AFTER:
-                                       buffer.append("<label for=\"")
-                                                       
.append(Strings.escapeMarkup(idAttr))
-                                                       .append('"')
-                                                       
.append(extraLabelAttributes)
-                                                       .append('>')
-                                                       .append(escaped)
-                                                       .append("</label>");
-                                       break;
-                       }
-
-                       // Append option suffix
-                       buffer.append(getSuffix(index, choice));
-               }
+               // Append option suffix
+               buffer.append(getSuffix(index, choice));
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/5c315857/wicket-core/src/test/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoiceTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoiceTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoiceTest.java
index cbf9a93..095da3a 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoiceTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/CheckBoxMultipleChoiceTest.java
@@ -128,7 +128,7 @@ public class CheckBoxMultipleChoiceTest extends 
WicketTestCase
                tester.startPage(new TestPage(false, true, false, false));
                tester.assertContains("<div 
wicket:id=\"checkWithFixedPrefix\">pre<input name=\"checkWithFixedPrefix\"");
                tester.assertContains("</label>sufpre<input 
name=\"checkWithFixedPrefix\"");
-               tester.assertContains("</label>suf</div>");
+               tester.assertContains("</label>suf\n</div>");
        }
 
        /** */
@@ -138,7 +138,7 @@ public class CheckBoxMultipleChoiceTest extends 
WicketTestCase
                tester.startPage(new TestPage(false, false, true, false));
                tester.assertContains("<div 
wicket:id=\"checkWithDynamicPrefix\">pre0a<input 
name=\"checkWithDynamicPrefix\"");
                tester.assertContains("</label>suf0apre1b<input 
name=\"checkWithDynamicPrefix\"");
-               tester.assertContains("</label>suf2c</div>");
+               tester.assertContains("</label>suf2c\n</div>");
        }
 
        @Test
@@ -165,7 +165,7 @@ public class CheckBoxMultipleChoiceTest extends 
WicketTestCase
                };
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><input 
name=\"testid\" type=\"checkbox\" value=\"0\" id=\"testid1-testid_0\" 
class=\"input0\"/><label for=\"testid1-testid_0\" 
class=\"label0\">1</label></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><input 
name=\"testid\" type=\"checkbox\" value=\"0\" id=\"testid1-testid_0\" 
class=\"input0\"/><label for=\"testid1-testid_0\" 
class=\"label0\">1</label>\n</span>");
        }
 
        @Test
@@ -186,7 +186,7 @@ public class CheckBoxMultipleChoiceTest extends 
WicketTestCase
                
radioChoice.setLabelPosition(AbstractChoice.LabelPosition.BEFORE);
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><label 
for=\"testid1-testid_0\" class=\"label0\">1</label><input name=\"testid\" 
type=\"checkbox\" value=\"0\" id=\"testid1-testid_0\" 
class=\"input0\"/></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><label 
for=\"testid1-testid_0\" class=\"label0\">1</label><input name=\"testid\" 
type=\"checkbox\" value=\"0\" id=\"testid1-testid_0\" 
class=\"input0\"/>\n</span>");
        }
 
        @Test
@@ -207,7 +207,7 @@ public class CheckBoxMultipleChoiceTest extends 
WicketTestCase
                
radioChoice.setLabelPosition(AbstractChoice.LabelPosition.WRAP_BEFORE);
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><label 
class=\"label0\">1 <input name=\"testid\" type=\"checkbox\" value=\"0\" 
id=\"testid1-testid_0\" class=\"input0\"/></label></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><label 
class=\"label0\">1 <input name=\"testid\" type=\"checkbox\" value=\"0\" 
id=\"testid1-testid_0\" class=\"input0\"/></label>\n</span>");
        }
 
        @Test
@@ -228,6 +228,6 @@ public class CheckBoxMultipleChoiceTest extends 
WicketTestCase
                
radioChoice.setLabelPosition(AbstractChoice.LabelPosition.WRAP_AFTER);
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><label 
class=\"label0\"><input name=\"testid\" type=\"checkbox\" value=\"0\" 
id=\"testid1-testid_0\" class=\"input0\"/> 1</label></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><label 
class=\"label0\"><input name=\"testid\" type=\"checkbox\" value=\"0\" 
id=\"testid1-testid_0\" class=\"input0\"/> 1</label>\n</span>");
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/5c315857/wicket-core/src/test/java/org/apache/wicket/markup/html/form/RadioChoiceTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/RadioChoiceTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/RadioChoiceTest.java
index f47f043..c5e4897 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/RadioChoiceTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/RadioChoiceTest.java
@@ -29,7 +29,7 @@ public class RadioChoiceTest extends WicketTestCase
                RadioChoice<Integer> radioChoice = new 
RadioChoice<Integer>("testid", Arrays.asList(1));
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><input 
name=\"testid\" type=\"radio\" value=\"0\" id=\"testid1-0\"/><label 
for=\"testid1-0\">1</label></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><input 
name=\"testid\" type=\"radio\" value=\"0\" id=\"testid1-0\"/><label 
for=\"testid1-0\">1</label>\n</span>");
        }
 
        @Test
@@ -39,7 +39,7 @@ public class RadioChoiceTest extends WicketTestCase
                
radioChoice.setLabelPosition(AbstractChoice.LabelPosition.BEFORE);
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><label 
for=\"testid1-0\">1</label><input name=\"testid\" type=\"radio\" value=\"0\" 
id=\"testid1-0\"/></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><label 
for=\"testid1-0\">1</label><input name=\"testid\" type=\"radio\" value=\"0\" 
id=\"testid1-0\"/>\n</span>");
        }
 
        @Test
@@ -49,7 +49,7 @@ public class RadioChoiceTest extends WicketTestCase
                
radioChoice.setLabelPosition(AbstractChoice.LabelPosition.WRAP_BEFORE);
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span wicket:id=\"testid\"><label>1 
<input name=\"testid\" type=\"radio\" value=\"0\" 
id=\"testid1-0\"/></label></span>");
+               tester.assertResultPage("<span wicket:id=\"testid\"><label>1 
<input name=\"testid\" type=\"radio\" value=\"0\" 
id=\"testid1-0\"/></label>\n</span>");
        }
 
        @Test
@@ -59,6 +59,6 @@ public class RadioChoiceTest extends WicketTestCase
                
radioChoice.setLabelPosition(AbstractChoice.LabelPosition.WRAP_AFTER);
                tester.startComponentInPage(radioChoice);
 
-               tester.assertResultPage("<span 
wicket:id=\"testid\"><label><input name=\"testid\" type=\"radio\" value=\"0\" 
id=\"testid1-0\"/> 1</label></span>");
+               tester.assertResultPage("<span 
wicket:id=\"testid\"><label><input name=\"testid\" type=\"radio\" value=\"0\" 
id=\"testid1-0\"/> 1</label>\n</span>");
        }
 }

Reply via email to