You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/03/06 04:57:25 UTC

svn commit: r514973 - in /tapestry/tapestry4/trunk: tapestry-examples/TimeTracker/src/context/ tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/ tapestry-framework/src/java/org/apache/tapestry/components/ tapestry-framework/s...

Author: jkuhnert
Date: Mon Mar  5 19:57:24 2007
New Revision: 514973

URL: http://svn.apache.org/viewvc?view=rev&rev=514973
Log:
Added line precise error reporting for ForBean data squeezing of pk values.(Fixes TAPESTRY-415) 

If I had known it was this easy to do I would've done it a long time ago....umm..Good job Howard.. ;)

Modified:
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html?view=diff&rev=514973&r1=514972&r2=514973
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html Mon Mar  5 19:57:24 2007
@@ -80,7 +80,6 @@
 	</a>
 	
 </div>
-
 <br/>
 
 </span>

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java?view=diff&rev=514973&r1=514972&r2=514973
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java Mon Mar  5 19:57:24 2007
@@ -47,5 +47,4 @@
         setStatus(event.toString());
         getBuilder().updateComponent("status");
     }
-    
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java?view=diff&rev=514973&r1=514972&r2=514973
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java Mon Mar  5 19:57:24 2007
@@ -42,4 +42,9 @@
     {
         return _formatter.format("text-conversion-error", cause);
     }
+    
+    static String keySqueezeError(IComponent component, Object value, Throwable cause)
+    {
+        return _formatter.format("squeeze-primary-key-error", component.getExtendedId(), value, cause);
+    }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties?view=diff&rev=514973&r1=514972&r2=514973
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties Mon Mar  5 19:57:24 2007
@@ -15,3 +15,4 @@
 unable-to-format={0} unable to format value ''{1}'': {2}
 any-element-not-defined=The Any component is not used in a template and the 'element' property is not bound.
 text-conversion-error=Error converting text to lines (for Insert component): {0}
+squeeze-primary-key-error={0} error squeezing primary key value ''{1}'': {2} 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java?view=diff&rev=514973&r1=514972&r2=514973
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java Mon Mar  5 19:57:24 2007
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.HiveMind;
 import org.apache.tapestry.IBinding;
 import org.apache.tapestry.IForm;
@@ -437,6 +438,8 @@
         {
             Object value = _delegate.next();
 
+            
+            
             String rep = getStringRepFromValue(value);
 
             _form.addHiddenValue(_name, rep);
@@ -467,14 +470,20 @@
         
         Object pk = getPrimaryKeyFromValue(value);
         
-        if (pk != null) {
-            
-            // Primary key was extracted successfully.
-            rep = DESC_PRIMARY_KEY + squeezer.squeeze(pk);
-        } else {
+        try {
+
+            if (pk != null) {
+
+                // Primary key was extracted successfully.
+                rep = DESC_PRIMARY_KEY + squeezer.squeeze(pk);
+            } else {
+
+                // primary key could not be extracted. squeeze value.
+                rep = DESC_VALUE + squeezer.squeeze(value);
+            }
             
-            // primary key could not be extracted. squeeze value.
-            rep = DESC_VALUE + squeezer.squeeze(value);
+        } catch (Exception e) {
+            throw new ApplicationRuntimeException(ComponentMessages.keySqueezeError(this, value, e), this, getLocation(), e);
         }
         
         return rep;
@@ -561,12 +570,8 @@
         boolean match = getMatch();
         if (match)
         {
-            value = findValueWithStringRep(
-                    sourceIterator,
-                    fullSourceIterator,
-                    repToValueMap,
-                    rep,
-                    _completeRepSource);
+            value = findValueWithStringRep( sourceIterator, fullSourceIterator, repToValueMap,
+                    rep, _completeRepSource);
             
             if (value != null)
                 return value;

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java?view=diff&rev=514973&r1=514972&r2=514973
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java Mon Mar  5 19:57:24 2007
@@ -19,6 +19,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.tapestry.BaseComponentTestCase;
 import org.apache.tapestry.IBinding;
 import org.apache.tapestry.IForm;
@@ -30,6 +31,7 @@
 import org.apache.tapestry.services.ResponseBuilder;
 import org.apache.tapestry.spec.IComponentSpecification;
 import org.apache.tapestry.spec.IParameterSpecification;
+import org.apache.tapestry.util.io.DataSqueezerImpl;
 import org.testng.annotations.Test;
 
 
@@ -147,6 +149,88 @@
         bean.setBinding("source", source);
         
         bean.render(writer, cycle);
+        
+        verify();
+    }
+    
+    class NotSerializable {
+        
+        String _value;
+        
+        public NotSerializable(String value)
+        {
+            _value = value;
+        }
+        
+        public String toString()
+        {
+            return "NotSerializable[" + _value + "]";
+        }
+    }
+    
+    public void test_Render_Line_Precise_Error()
+    {
+        IRequestCycle cycle = newMock(IRequestCycle.class);
+        IMarkupWriter writer = newBufferWriter();
+        ValueConverter conv = newMock(ValueConverter.class);
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
+        IComponentSpecification spec = newSpec();
+        IParameterSpecification pspec = newMock(IParameterSpecification.class);
+        IForm form = newMock(IForm.class);
+        
+        List src = new ArrayList();
+        src.add(new NotSerializable("Test1"));
+        src.add(new NotSerializable("Test2"));
+        
+        IBinding source = newBinding(src);
+        
+        ForBean bean = newInstance(ForBean.class, new Object[] {
+            "valueConverter", conv,
+            "responseBuilder", resp,
+            "templateTagName", "div",
+            "renderTag", true,
+            "specification", spec,
+            "dataSqueezer", new DataSqueezerImpl()
+            });
+        
+        expect(cycle.renderStackPush(bean)).andReturn(bean);
+        
+        expect(cycle.isRewinding()).andReturn(false).anyTimes();
+        
+        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
+        
+        expect(form.getElementId(bean)).andReturn("For_1");
+        
+        expect(spec.getParameter("source")).andReturn(pspec).anyTimes();
+        
+        expect(conv.coerceValue(src, Iterator.class)).andReturn(src.iterator());
+        
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
+        
+        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
+        
+        IRender body = newMock(IRender.class);
+        
+        resp.render(writer, body, cycle);
+        expectLastCall().anyTimes();
+        
+        form.setFormFieldUpdating(true);
+        
+        expect(cycle.renderStackPop()).andReturn(bean);
+        
+        replay();
+        
+        bean.addBody(body);
+        bean.setBinding("source", source);
+        
+        try {
+            
+            bean.render(writer, cycle);
+            fail("Exception should have been thrown");
+        } catch (ApplicationRuntimeException ex) {
+            
+            assertExceptionSubstring(ex, "error squeezing primary key value");
+        }
         
         verify();
     }