mpo         2003/12/31 06:35:49

  Modified:    src/blocks/woody/java/org/apache/cocoon/woody/binding
                        ValueJXPathBinding.java
  Log:
  Establishing consistency between bindings in how they handle 'leniency'.
  More story at: 
http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=107287810417490&w=2
  
  Revision  Changes    Path
  1.9       +44 -55    
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBinding.java
  
  Index: ValueJXPathBinding.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBinding.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ValueJXPathBinding.java   18 Dec 2003 07:57:21 -0000      1.8
  +++ ValueJXPathBinding.java   31 Dec 2003 14:35:49 -0000      1.9
  @@ -113,25 +113,21 @@
        * context to the Woody-form-widget specified in this object.
        */
       public void doLoad(Widget frmModel, JXPathContext jxpc) {
  -        try {
  -            Widget widget = frmModel.getWidget(this.fieldId);
  -            Object value = jxpc.getValue(this.xpath);
  -
  -            if (value != null && convertor != null) {
  -                if (value instanceof String) {
  -                    value = convertor.convertFromString((String)value, 
convertorLocale, null);
  -                } else {
  -                    getLogger().warn("Convertor ignored on backend-value 
which isn't of type String.");   
  -                }                
  -            }
  -
  -            widget.setValue(value);
  +        Widget widget = frmModel.getWidget(this.fieldId);
  +        Object value = jxpc.getValue(this.xpath);
   
  -            if (getLogger().isDebugEnabled())
  -                getLogger().debug("done loading " + toString() + " -- value= 
" + value);
  -        } catch (Exception e) {
  -            getLogger().warn("JXPath failed to find value for " + 
this.xpath, e);
  +        if (value != null && convertor != null) {
  +            if (value instanceof String) {
  +                value = convertor.convertFromString((String)value, 
convertorLocale, null);
  +            } else {
  +                getLogger().warn("Convertor ignored on backend-value which 
isn't of type String.");   
  +            }                
           }
  +
  +        widget.setValue(value);
  +
  +        if (getLogger().isDebugEnabled())
  +            getLogger().debug("done loading " + toString() + " -- value= " + 
value);
       }
   
       /**
  @@ -139,50 +135,43 @@
        * wrapped in a jxpath context
        */
       public void doSave(Widget frmModel, JXPathContext jxpc) throws 
BindingException {
  -        try {
  -            Widget widget = frmModel.getWidget(this.fieldId);
  -            Object value = widget.getValue();
  -            if (value != null && convertor != null) {
  -                value = convertor.convertToString(value, convertorLocale, 
null);
  -            }
  +        Widget widget = frmModel.getWidget(this.fieldId);
  +        Object value = widget.getValue();
  +        if (value != null && convertor != null) {
  +            value = convertor.convertToString(value, convertorLocale, null);
  +        }
   
  -            Object oldValue = jxpc.getValue(this.xpath);
  -            if (getLogger().isDebugEnabled()) {
  -                getLogger().debug("value= " + value + "-- oldvalue=" + 
oldValue);
  -            }
  +        Object oldValue = jxpc.getValue(this.xpath);
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("value= " + value + "-- oldvalue=" + oldValue);
  +        }
   
  -            boolean update = false;
  +        boolean update = false;
   
  -            if ((value == null && oldValue != null) || value != null && 
!value.equals(oldValue)) {
  -                // first update the value itself
  -                jxpc.createPathAndSetValue(this.xpath, value);
  -
  -                // now perform any other bindings that need to be performed 
when the value is updated
  -                JXPathContext subContext = null;
  -                try {
  -                    subContext = 
jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
  -                } catch (JXPathException e) {
  -                    // if the value has been set to null and the underlying 
model is a bean, then
  -                    // JXPath will not be able to create a relative context
  -                    if (getLogger().isDebugEnabled()) {
  -                        getLogger().debug("(Ignorable) problem binding field 
" + widget.getFullyQualifiedId(), e);
  -                    }
  -                }
  -                if (subContext != null) {
  -                    this.updateBinding.saveFormToModel(frmModel, subContext);
  +        if ((value == null && oldValue != null) || value != null && 
!value.equals(oldValue)) {
  +            // first update the value itself
  +            jxpc.createPathAndSetValue(this.xpath, value);
  +
  +            // now perform any other bindings that need to be performed when 
the value is updated
  +            JXPathContext subContext = null;
  +            try {
  +                subContext = 
jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
  +            } catch (JXPathException e) {
  +                // if the value has been set to null and the underlying 
model is a bean, then
  +                // JXPath will not be able to create a relative context
  +                if (getLogger().isDebugEnabled()) {
  +                    getLogger().debug("(Ignorable) problem binding field " + 
widget.getFullyQualifiedId(), e);
                   }
  -
  -                update = true;
               }
  -
  -            if (getLogger().isDebugEnabled()) {
  -                getLogger().debug("done saving " + toString() + " -- value= 
" + value + " -- on-update == " + update);
  +            if (subContext != null) {
  +                this.updateBinding.saveFormToModel(frmModel, subContext);
               }
  -        } catch (Exception e) {
  -            throw new BindingException("Problem binding field " + 
this.fieldId +
  -                                       " (parent = \"" + 
frmModel.getFullyQualifiedId() + "\") to xpath " +
  -                                       this.xpath + " (context xpath = \"" + 
jxpc.getContextPointer().asPath() + "\")",
  -                                       e);
  +
  +            update = true;
  +        }
  +
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("done saving " + toString() + " -- value= " + 
value + " -- on-update == " + update);
           }
       }
   
  
  
  

Reply via email to