You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2011/07/10 21:01:58 UTC
svn commit: r1144934 -
/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
Author: ivaynberg
Date: Sun Jul 10 19:01:57 2011
New Revision: 1144934
URL: http://svn.apache.org/viewvc?rev=1144934&view=rev
Log:
wicket:for tweaks to allow it to work with any ILabelProvider
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java?rev=1144934&r1=1144933&r2=1144934&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java Sun Jul 10 19:01:57 2011
@@ -100,17 +100,17 @@ public class AutoLabelResolver implement
final String id = tag.getAttribute(WICKET_FOR).trim();
- FormComponent<?> component = findRelatedComponent(container, id);
+ Component component = findRelatedComponent(container, id);
if (component == null)
{
throw new WicketRuntimeException("Could not find form component with id '" + id +
"' while trying to resolve wicket:for attribute");
}
- if (!(component instanceof FormComponent<?>))
+ if (!(component instanceof ILabelProvider))
{
throw new WicketRuntimeException("Component pointed to by wicket:for attribute '" + id +
- "' is not a form component");
+ "' does not implement " + ILabelProvider.class.getName());
}
if (!component.getOutputMarkupId())
@@ -119,29 +119,28 @@ public class AutoLabelResolver implement
if (!component.hasBeenRendered())
{
logger.warn(
- "Form component: {} is referenced via a wicket:for attribute but does not have its outputMarkupId property set to true",
+ "Component: {} is referenced via a wicket:for attribute but does not have its outputMarkupId property set to true",
component.toString(false));
}
}
- FormComponent<?> fc = component;
- return new AutoLabel("label" + container.getPage().getAutoIndex(), fc);
+ return new AutoLabel("label" + container.getPage().getAutoIndex(), component);
}
/**
*
* @param container
* @param id
- * @return FormComponent
+ * @return Component
*/
- protected FormComponent<?> findRelatedComponent(MarkupContainer container, final String id)
+ protected Component findRelatedComponent(MarkupContainer container, final String id)
{
// try the quick and easy route first
Component component = container.get(id);
- if (component != null && (component instanceof FormComponent<?>))
+ if (component != null)
{
- return (FormComponent<?>)component;
+ return component;
}
// try the long way, search the hierarchy from the closest container up to the page
@@ -160,7 +159,7 @@ public class AutoLabelResolver implement
visit.dontGoDeeper();
return;
}
- if (id.equals(child.getId()) && (child instanceof FormComponent))
+ if (id.equals(child.getId()))
{
visit.stop(child);
return;
@@ -168,9 +167,9 @@ public class AutoLabelResolver implement
}
});
- if (component != null && (component instanceof FormComponent))
+ if (component != null)
{
- return (FormComponent<?>)component;
+ return component;
}
// remember the container so we dont search it again, and search the parent
@@ -191,36 +190,36 @@ public class AutoLabelResolver implement
{
private static final long serialVersionUID = 1L;
- private static final String WICKET_UNKNOWN = "wicket:unknown";
- private static final String CLASS = "class";
+ private final Component component;
- private final FormComponent<?> fc;
-
- public AutoLabel(final String id, final FormComponent<?> fc)
+ public AutoLabel(String id, Component fc)
{
super(id);
- this.fc = fc;
+ component = fc;
}
@Override
- protected void onComponentTag(final ComponentTag tag)
+ protected void onComponentTag(ComponentTag tag)
{
super.onComponentTag(tag);
+ tag.put("for", component.getMarkupId());
- tag.put("for", fc.getMarkupId());
- if (fc.isRequired())
+ if (component instanceof FormComponent)
{
- tag.append(CLASS, "required", " ");
- }
-
- if (!fc.isValid())
- {
- tag.append(CLASS, "error", " ");
+ FormComponent<?> fc = (FormComponent<?>)component;
+ if (fc.isRequired())
+ {
+ tag.append("class", "required", " ");
+ }
+ if (!fc.isValid())
+ {
+ tag.append("class", "error", " ");
+ }
}
}
@Override
- public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag)
+ public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag)
{
if (!(markupStream.get() instanceof RawMarkup))
{
@@ -248,7 +247,8 @@ public class AutoLabelResolver implement
// based on whether or not the form component has a label set read or write it into the
// markup
- String label = getFormComponentLabelText(fc);
+ String label = getLabelText();
+
if (label != null)
{
// if label is set write it into the markup
@@ -260,9 +260,13 @@ public class AutoLabelResolver implement
{
// if label is not set, read it from the markup into the form component
- String markupLabel = markup.substring(start, end);
- fc.setLabel(Model.of(markupLabel));
- super.onComponentTagBody(markupStream, openTag);
+ if (component instanceof FormComponent)
+ {
+ FormComponent<?> fc = (FormComponent<?>)component;
+ String markupLabel = markup.substring(start, end);
+ fc.setLabel(Model.of(markupLabel));
+ super.onComponentTagBody(markupStream, openTag);
+ }
}
}
@@ -271,9 +275,9 @@ public class AutoLabelResolver implement
* the {@code <span class='text'></span>} tag
*
* @param markup
- * @return Start and end index of text in the label
+ * @return start und end index of text in the label
*/
- protected int[] findLabelTextRange(final AppendingStringBuffer markup)
+ protected int[] findLabelTextRange(AppendingStringBuffer markup)
{
int[] range = new int[] { -1, -1 };
@@ -320,7 +324,7 @@ public class AutoLabelResolver implement
{
throw new WicketRuntimeException(
"Could not parse markup while processing an auto label for component: " +
- fc.toString(false), e);
+ component.toString(false), e);
}
if (opening != null)
@@ -333,12 +337,7 @@ public class AutoLabelResolver implement
return range;
}
- /**
- *
- * @param markupStream
- * @return buffer
- */
- protected AppendingStringBuffer readBodyMarkup(final MarkupStream markupStream)
+ protected AppendingStringBuffer readBodyMarkup(MarkupStream markupStream)
{
int streamIndex = markupStream.getCurrentIndex();
@@ -355,18 +354,26 @@ public class AutoLabelResolver implement
return markup;
}
- /**
- *
- * @param fc
- * @return ??
- */
- protected String getFormComponentLabelText(final FormComponent<?> fc)
+ protected String getLabelText()
{
- String label = fc.getLabel() != null ? fc.getLabel().getObject() : null;
- if (label == null)
+ String label = null;
+ if (component instanceof ILabelProvider)
{
- label = fc.getDefaultLabel(WICKET_UNKNOWN);
- if (WICKET_UNKNOWN.equals(label))
+ ILabelProvider<?> provider = (ILabelProvider<?>)component;
+ if (provider.getLabel() != null)
+ {
+ Object value = provider.getLabel().getObject();
+ if (value != null)
+ {
+ label = value.toString();
+ }
+ }
+ }
+
+ if (label == null && component instanceof FormComponent)
+ {
+ label = ((FormComponent<?>)component).getDefaultLabel("wicket:unknown");
+ if ("wicket:unknown".equals(label))
{
label = null;
}
@@ -374,28 +381,17 @@ public class AutoLabelResolver implement
return label;
}
- /**
- *
- * @param tag
- * @return true, if ???
- */
- protected final boolean isTextSpan(final XmlTag tag)
+ protected final boolean isTextSpan(XmlTag tag)
{
if (!tag.isOpen())
- {
return false;
- }
if (!"span".equalsIgnoreCase(tag.getName()) || tag.getNamespace() != null)
- {
return false;
- }
- String classNames = tag.getAttributes().getString(CLASS);
+ String classNames = tag.getAttributes().getString("class");
if (Strings.isEmpty(classNames))
- {
return false;
- }
boolean textClassFound = false;
for (String className : classNames.split(" "))
@@ -406,13 +402,12 @@ public class AutoLabelResolver implement
break;
}
}
-
if (!textClassFound)
- {
return false;
- }
+
return true;
}
+
}
}