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


Reply via email to