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();
}