[jboss-svn-commits] JBoss Common SVN: r1971 - trunk/jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 25 08:57:16 EDT 2006


Author: alex.loubyansky at jboss.com
Date: 2006-08-25 08:57:14 -0400 (Fri, 25 Aug 2006)
New Revision: 1971

Modified:
   trunk/jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/JBXB76ContentHandler.java
Log:
complete calls to start/end-RepeatableParticle for modelgroups

Modified: trunk/jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/JBXB76ContentHandler.java
===================================================================
--- trunk/jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/JBXB76ContentHandler.java	2006-08-25 10:01:06 UTC (rev 1970)
+++ trunk/jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/JBXB76ContentHandler.java	2006-08-25 12:57:14 UTC (rev 1971)
@@ -115,6 +115,10 @@
          else
          {
             endParticle(item, endName, 1);
+            if(item.cursor.getParticle().isRepeatable())
+            {
+               endRepeatableParticle(item.cursor.getParticle());
+            }
             pop();
          }
       }
@@ -259,7 +263,8 @@
                   continue;
                }
 
-               int currentOccurence = cursor.getOccurence();
+               int prevOccurence = cursor.getOccurence();
+               ParticleBinding prevParticle = cursor.isPositioned() ? cursor.getCurrentParticle() : null;
                List newCursors = cursor.startElement(startName, atts);
                if(newCursors.isEmpty())
                {
@@ -268,8 +273,22 @@
                }
                else
                {
-                  if(cursor.getOccurence() - currentOccurence > 0 || item.ended)
+                  ParticleBinding curParticle = cursor.getCurrentParticle();
+                  if(curParticle != prevParticle)
                   {
+                     if(prevParticle != null && prevParticle.isRepeatable() && prevParticle.getTerm().isModelGroup())
+                     {
+                        endRepeatableParticle(prevParticle);
+                     }
+
+                     if(curParticle.isRepeatable())
+                     {
+                        startRepeatableParticle(curParticle);
+                     }
+                  }
+
+                  if(cursor.getOccurence() - prevOccurence > 0 || item.ended)
+                  {
                      endParticle(item, startName, 1);
 
                      ParticleBinding modelGroupParticle = cursor.getParticle();
@@ -545,12 +564,12 @@
 
    private void startRepeatableParticle(ParticleBinding particle)
    {
-      //System.out.println("start repeatable particle: " + particle.getTerm());
+      //System.out.println(" start repeatable particle: " + particle.getTerm());
    }
 
    private void endRepeatableParticle(ParticleBinding particle)
    {
-      //System.out.println("end repeatable particle: " + particle.getTerm());
+      //System.out.println(" end repeatable particle: " + particle.getTerm());
    }
 
    private void endParticle(StackItem item, QName qName, int parentStackPos)
@@ -898,7 +917,7 @@
       }
    }
 
-   private StackItem push(ModelGroupBinding.Cursor cursor, Object o)
+   private void push(ModelGroupBinding.Cursor cursor, Object o)
    {
       StackItem item = new StackItem(cursor, o);
       stack.push(item);
@@ -906,8 +925,6 @@
       {
          log.trace("pushed cursor " + cursor + ", o=" + o);
       }
-
-      return item;
    }
 
    private StackItem pop()
@@ -928,7 +945,6 @@
             log.trace("poped null");
          }
       }
-
       return item;
    }
 




More information about the jboss-svn-commits mailing list