Author: ivaynberg
Date: Sat Oct 1 16:41:48 2011
New Revision: 1178042
URL: http://svn.apache.org/viewvc?rev=1178042&view=rev
Log:
Issue: WICKET-4102
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_de.properties
(with props)
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_fr.properties
(with props)
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelTextResolver.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.html
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.properties
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelTextResolver.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelTextResolver.java?rev=1178042&r1=1178041&r2=1178042&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelTextResolver.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelTextResolver.java
Sat Oct 1 16:41:48 2011
@@ -28,7 +28,10 @@ import org.apache.wicket.markup.html.int
import org.apache.wicket.markup.parser.XmlTag;
import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
import org.apache.wicket.markup.resolver.IComponentResolver;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.util.string.Strings;
@@ -130,76 +133,95 @@ public class AutoLabelTextResolver imple
@Override
public void onComponentTagBody(final MarkupStream markupStream,
final ComponentTag openTag)
{
- boolean storeLabelText = false;
// try and find some form of label content...
- String labelText = null;
+ IModel<String> labelModel =
findLabelContent(markupStream, openTag);
+ // print the label text
+ replaceComponentTagBody(markupStream, openTag,
+ labelModel != null ? labelModel.getObject() :
"");
- // check if the labeled component is a label provider
+ // store the label text in FormComponent's label model
so its available to errors
+ if (labelModel != null)
+ {
+ if (labeled instanceof FormComponent)
+ {
+ FormComponent<?> fc =
(FormComponent<?>)labeled;
+ fc.setLabel(labelModel);
+ }
+ else
+ {
+ // if we can't hand off the labelmodel
to a component, we have to detach it
+ labelModel.detach();
+ }
+ }
+ }
+ private IModel<String> findLabelContent(final MarkupStream
markupStream,
+ final ComponentTag tag)
+ {
if (labeled instanceof ILabelProvider)
{
+ // check if the labeled component is a label
provider
ILabelProvider<String> provider =
(ILabelProvider<String>)labeled;
if (provider.getLabel() != null)
{
- String text =
provider.getLabel().getObject();
- if (!Strings.isEmpty(text))
+ if
(!Strings.isEmpty(provider.getLabel().getObject()))
+
{
- labelText = text;
+ return provider.getLabel();
}
}
}
// check if the labeled component is a form component
-
- if (labelText == null && labeled instanceof
FormComponent)
+ if (labeled instanceof FormComponent)
{
- String text =
((FormComponent<?>)labeled).getDefaultLabel("wicket:unknown");
+ final FormComponent<?> formComponent =
(FormComponent<?>)labeled;
+ String text =
formComponent.getDefaultLabel("wicket:unknown");
if (!"wicket:unknown".equals(text) &&
!Strings.isEmpty(text))
{
- labelText = text;
+ return new
LoadableDetachableModel<String>()
+ {
+ @Override
+ protected String load()
+ {
+ return
formComponent.getDefaultLabel("wicket:unknown");
+ }
+ };
}
}
// check if wicket:label tag has a message key
- if (labelText == null && openTag.getAttribute("key") !=
null)
{
- String text =
labeled.getString(openTag.getAttribute("key"));
- if (!Strings.isEmpty(text))
+ String resourceKey = tag.getAttribute("key");
+ if (resourceKey != null)
{
- labelText = text;
- storeLabelText = true;
+ String text =
labeled.getString(resourceKey);
+ if (!Strings.isEmpty(text))
+ {
+ return new
StringResourceModel(resourceKey, labeled, null);
+ }
}
}
// as last resort use the tag body
- if (labelText == null)
{
String text = new
ResponseBufferZone(RequestCycle.get(), markupStream)
{
@Override
protected void
executeInsideBufferedZone()
{
-
TextLabel.super.onComponentTagBody(markupStream, openTag);
+
TextLabel.super.onComponentTagBody(markupStream, tag);
}
}.execute().toString();
if (!Strings.isEmpty(text))
{
- labelText = text;
- storeLabelText = true;
+ return Model.of(text);
}
}
- // print the label text
- replaceComponentTagBody(markupStream, openTag,
labelText);
-
- // store the label text in FormComponent's label model
so its available to errors
- if (labeled instanceof FormComponent)
- {
- FormComponent<?> fc = (FormComponent<?>)labeled;
- fc.setLabel(Model.of(labelText));
- }
+ return null;
}
}
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.html
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest%24PickUpLabelPage.html?rev=1178042&r1=1178041&r2=1178042&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.html
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.html
Sat Oct 1 16:41:48 2011
@@ -7,6 +7,8 @@
<input type="text" wicket:id="inputPropertiesLabel"/>
<label><wicket:label for="inputWithoutAutolabel">label from markup
without autolabel</wicket:label></label>
<input type="text" wicket:id="inputWithoutAutolabel"/>
+ <label wicket:for="inputWithDefaultLabel"><wicket:label/></label>
+ <input type="text" wicket:id="inputWithDefaultLabel"/>
</form>
</body>
</html>
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.properties
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest%24PickUpLabelPage.properties?rev=1178042&r1=1178041&r2=1178042&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.properties
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage.properties
Sat Oct 1 16:41:48 2011
@@ -1 +1,2 @@
msg=label from properties
+inputWithDefaultLabel=propertiesDefaultLabel
\ No newline at end of file
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_de.properties
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest%24PickUpLabelPage_de.properties?rev=1178042&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_de.properties
(added)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_de.properties
Sat Oct 1 16:41:48 2011
@@ -0,0 +1,2 @@
+msg=label from properties DE
+inputWithDefaultLabel=propertiesDefaultLabel DE
\ No newline at end of file
Propchange:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_de.properties
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_fr.properties
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest%24PickUpLabelPage_fr.properties?rev=1178042&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_fr.properties
(added)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_fr.properties
Sat Oct 1 16:41:48 2011
@@ -0,0 +1,2 @@
+msg=label from properties FR
+inputWithDefaultLabel=propertiesDefaultLabel FR
Propchange:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest$PickUpLabelPage_fr.properties
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest.java?rev=1178042&r1=1178041&r2=1178042&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoFormLabelPickupTest.java
Sat Oct 1 16:41:48 2011
@@ -16,11 +16,16 @@
*/
package org.apache.wicket.markup.html.form;
+import java.util.Locale;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.Session;
import org.apache.wicket.WicketTestCase;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Before;
+import org.junit.Test;
@SuppressWarnings({ "rawtypes", "serial", "unchecked" })
public class AutoFormLabelPickupTest extends WicketTestCase
@@ -43,27 +48,35 @@ public class AutoFormLabelPickupTest ext
form.add(new TextField("inputMarkupLabel",
Model.of("")).setLabel(labelModel));
form.add(new TextField("inputPropertiesLabel",
Model.of("")).setLabel(labelModel));
form.add(new TextField("inputWithoutAutolabel",
Model.of("")).setLabel(labelModel));
+ form.add(new TextField("inputWithDefaultLabel",
Model.of("")));
}
}
+ @Override
+ @Before
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ Session.get().setLocale(Locale.US);
+ }
+ @Test
public void testLabelIsPrintedFromModel() throws Exception
{
- WicketTester tester = new WicketTester();
tester.startPage(new PrintLabelPage(Model.of("label from
model")));
tester.assertContains("<label wicket:for=\"input\"
for=\"input2\">\\|label from model\\|</label>");
}
+ @Test
public void testLabelIsPrintedFromProperties() throws Exception
{
- WicketTester tester = new WicketTester();
tester.startPage(new PrintLabelPage(Model.of((String)null)));
tester.assertContains("<label wicket:for=\"input\"
for=\"input2\">\\|label from properties\\|</label>");
}
+ @Test
public void testLabelIsPickedUpFromMarkup() throws Exception
{
- WicketTester tester = new WicketTester();
tester.startPage(new PickUpLabelPage(null));
assertEquals(
"label from markup",
@@ -71,9 +84,9 @@ public class AutoFormLabelPickupTest ext
.getObject());
}
+ @Test
public void testLabelIsPickedUpFromProperties() throws Exception
{
- WicketTester tester = new WicketTester();
tester.startPage(new PickUpLabelPage(null));
assertEquals(
"label from properties",
@@ -83,7 +96,6 @@ public class AutoFormLabelPickupTest ext
public void testWithoutAutolabel() throws Exception
{
- WicketTester tester = new WicketTester();
tester.startPage(new PickUpLabelPage(null));
tester.assertContains("<label>label from markup without
autolabel</label>");
assertEquals(
@@ -91,4 +103,58 @@ public class AutoFormLabelPickupTest ext
((FormComponent)tester.getComponentFromLastRenderedPage("form:inputWithoutAutolabel")).getLabel()
.getObject());
}
-}
+
+ @Test
+ public void testLocaleChangesAreDetectedWithExplicitMessageKeys()
throws Exception
+ {
+ Session.get().setLocale(Locale.GERMAN);
+ tester.startPage(new PickUpLabelPage(null));
+ assertEquals(
+ "label from properties DE",
+
((FormComponent)tester.getComponentFromLastRenderedPage("form:inputPropertiesLabel")).getLabel()
+ .getObject());
+ tester.assertContains("label from properties DE");
+
+ Session.get().setLocale(Locale.FRENCH); // change locale to see
whether it picks it up
+ Page page = tester.getLastRenderedPage();
+ page.detach(); // make sure everything is detached after we
just talked to that label model
+ tester.startPage(page); // just re-render the same page
instance with the new locale
+ assertEquals(
+ "label from properties FR",
+
((FormComponent)tester.getComponentFromLastRenderedPage("form:inputPropertiesLabel")).getLabel()
+ .getObject());
+ tester.assertContains("label from properties FR");
+ }
+
+ @Test
+ public void testLocaleChangesAreDetectedWithDefaultLabels() throws
Exception
+ {
+ Session.get().setLocale(Locale.GERMAN);
+ tester.startPage(new PickUpLabelPage(null));
+ assertEquals(
+ "propertiesDefaultLabel DE",
+
((FormComponent)tester.getComponentFromLastRenderedPage("form:inputWithDefaultLabel")).getLabel()
+ .getObject());
+ tester.assertContains("propertiesDefaultLabel DE");
+
+ Session.get().setLocale(Locale.FRENCH); // change locale to see
whether it picks it up
+ Page page = tester.getLastRenderedPage();
+ page.detach(); // make sure everything is detached after we
just talked to that label model
+ tester.startPage(page); // just re-render the same page
instance with the new locale
+ assertEquals(
+ "propertiesDefaultLabel FR",
+
((FormComponent)tester.getComponentFromLastRenderedPage("form:inputWithDefaultLabel")).getLabel()
+ .getObject());
+ tester.assertContains("propertiesDefaultLabel FR");
+ }
+
+ @Test
+ public void testDefaultLabelIsPickedUpFromProperties() throws Exception
+ {
+ tester.startPage(new PickUpLabelPage(null));
+ assertEquals(
+ "propertiesDefaultLabel",
+
((FormComponent)tester.getComponentFromLastRenderedPage("form:inputWithDefaultLabel")).getLabel()
+ .getObject());
+ }
+}
\ No newline at end of file