You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by mp...@apache.org on 2003/08/26 15:10:12 UTC

cvs commit: cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding RepeaterJXPathBindingBuilder.java RepeaterJXPathBinding.java

mpo         2003/08/26 06:10:12

  Modified:    src/blocks/woody/java/org/apache/cocoon/woody/binding
                        RepeaterJXPathBindingBuilder.java
                        RepeaterJXPathBinding.java
  Log:
  Making sure the RepeaterBinding can be used without <on-insert-row> and <on-delete-row>
  
  Revision  Changes    Path
  1.4       +13 -6     cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBindingBuilder.java
  
  Index: RepeaterJXPathBindingBuilder.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBindingBuilder.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RepeaterJXPathBindingBuilder.java	30 Jul 2003 15:17:43 -0000	1.3
  +++ RepeaterJXPathBindingBuilder.java	26 Aug 2003 13:10:12 -0000	1.4
  @@ -111,24 +111,31 @@
                       bindingElm,
                       BindingManager.NAMESPACE,
                       "on-bind");
  -            JXPathBindingBase[] childBindings =
  -                assistant.makeChildBindings(childWrapElement);
  +
  +            if (childWrapElement == null) throw new BindingException("RepeaterBinding misses '<on-bind>' child definition. " + DomHelper.getLocation(bindingElm));
  +            
  +            JXPathBindingBase[] childBindings = assistant.makeChildBindings(childWrapElement);
   
               Element deleteWrapElement =
                   DomHelper.getChildElement(
                       bindingElm,
                       BindingManager.NAMESPACE,
                       "on-delete-row");
  -            JXPathBindingBase[] deleteBindings =
  -                assistant.makeChildBindings(deleteWrapElement);
  +            JXPathBindingBase[] deleteBindings = null;
  +            if(deleteWrapElement != null) {
  +                deleteBindings = assistant.makeChildBindings(deleteWrapElement);
  +            }
   
               Element insertWrapElement =
                   DomHelper.getChildElement(
                       bindingElm,
                       BindingManager.NAMESPACE,
                       "on-insert-row");
  -            JXPathBindingBase insertBinding =
  -                assistant.makeChildBindings(insertWrapElement)[0];
  +            JXPathBindingBase insertBinding = null;
  +            if (insertWrapElement != null) {
  +                insertBinding = assistant.makeChildBindings(insertWrapElement)[0];
  +                
  +            }
   
               RepeaterJXPathBinding repeaterBinding =
                   new RepeaterJXPathBinding(
  
  
  
  1.4       +34 -17    cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBinding.java
  
  Index: RepeaterJXPathBinding.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBinding.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RepeaterJXPathBinding.java	12 Aug 2003 12:56:32 -0000	1.3
  +++ RepeaterJXPathBinding.java	26 Aug 2003 13:10:12 -0000	1.4
  @@ -192,7 +192,12 @@
   
               // check if matchPath was in list of updates, if not --> bind for delete
               if (!updatedRowIds.contains(matchId)) {
  -                this.deleteRowBinding.saveFormToModel(frmModel, rowContext);
  +                if (this.deleteRowBinding != null) {
  +                    this.deleteRowBinding.saveFormToModel(frmModel, rowContext);                    
  +                } else {
  +                    getLogger().warn("RepeaterBinding has detected rows to delete, " +
  +                        "but misses the <on-delete-row> binding to do it.");
  +                }
               }
           }
   
  @@ -205,21 +210,29 @@
           }
   
           // end with rows to insert (to make sure they don't get deleted!)
  -        Iterator rowIterator = rowsToInsert.iterator();
  -        //register the factory!
  -        this.insertRowBinding.saveFormToModel(repeater, repeaterContext);
  -        while (rowIterator.hasNext()) {
  -            Repeater.RepeaterRow thisRow = (Repeater.RepeaterRow) rowIterator.next();
  -            // -->  create the path to let the context be created
  -            Pointer newRowContextPointer = repeaterContext.createPath(this.rowPath + "[" + indexCount + "]");
  -            JXPathContext newRowContext = repeaterContext.getRelativeContext(newRowContextPointer);
  -            if (getLogger().isDebugEnabled())
  -                getLogger().debug("inserted row at " + newRowContextPointer.asPath());
  -            //    + rebind to children for update
  -            this.rowBinding.saveFormToModel(thisRow, newRowContext);
  -            getLogger().debug("bound new row");
  -            indexCount++;
  +        if(rowsToInsert.size() > 0) {
  +            if (this.insertRowBinding != null) {
  +                Iterator rowIterator = rowsToInsert.iterator();
  +                //register the factory!
  +                this.insertRowBinding.saveFormToModel(repeater, repeaterContext);
  +                while (rowIterator.hasNext()) {
  +                    Repeater.RepeaterRow thisRow = (Repeater.RepeaterRow) rowIterator.next();
  +                    // -->  create the path to let the context be created
  +                    Pointer newRowContextPointer = repeaterContext.createPath(this.rowPath + "[" + indexCount + "]");
  +                    JXPathContext newRowContext = repeaterContext.getRelativeContext(newRowContextPointer);
  +                    if (getLogger().isDebugEnabled())
  +                        getLogger().debug("inserted row at " + newRowContextPointer.asPath());
  +                    //    + rebind to children for update
  +                    this.rowBinding.saveFormToModel(thisRow, newRowContext);
  +                    getLogger().debug("bound new row");
  +                    indexCount++;
  +                }                
  +            } else {
  +                getLogger().warn("RepeaterBinding has detected rows to insert, " +
  +                    "but misses the <on-insert-row> binding to do it.");
  +            }
           }
  +        
   
           if (getLogger().isDebugEnabled())
               getLogger().debug("done saving rows " + toString());
  @@ -232,8 +245,12 @@
       public void enableLogging(Logger logger) {
           super.enableLogging(logger);
           this.uniqueFieldBinding.enableLogging(logger);
  -        this.deleteRowBinding.enableLogging(logger);
  -        this.insertRowBinding.enableLogging(logger);
  +        if (this.deleteRowBinding != null) {
  +            this.deleteRowBinding.enableLogging(logger);
  +        }
  +        if (this.insertRowBinding != null) {
  +            this.insertRowBinding.enableLogging(logger);            
  +        }
           this.rowBinding.enableLogging(logger);
       }
   }