[jboss-svn-commits] JBoss Common SVN: r3850 - in jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling: position and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 14 10:51:07 EST 2009


Author: alex.loubyansky at jboss.com
Date: 2009-12-14 10:51:06 -0500 (Mon, 14 Dec 2009)
New Revision: 3850

Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ParticleBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java
Log:
minor clean-up is checking whether the next occurrence is allowed and setParent()

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -107,7 +107,7 @@
             log.trace(sb.toString());
          }
 
-         if (particle.getMaxOccursUnbounded() || occurrence < particle.getMinOccurs() || occurrence < particle.getMaxOccurs())
+         if (particle.isOccurrenceAllowed(occurrence + 1))
          {
             for (int i = 0; i < choices.size(); ++i)
             {
@@ -115,7 +115,6 @@
                TermBinding term = choice.getTerm();
                next = term.newPosition(qName, atts, choice);
 
-
                if (next != null)
                {
                   next.setPrevious(this);

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ParticleBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ParticleBinding.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ParticleBinding.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -92,12 +92,12 @@
 
    public boolean isRequired()
    {
-      return isRequired(0);
+      return minOccurs > 0 && (!term.isModelGroup() || ((ModelGroupBinding)term).hasRequiredParticle());
    }
 
-   public boolean isRequired(int occurs)
+   public boolean isOccurrenceAllowed(int occurrence)
    {
-      return minOccurs > occurs && (!term.isModelGroup() || ((ModelGroupBinding)term).hasRequiredParticle());
+      return maxOccursUnbounded || occurrence <= maxOccurs;
    }
    
    public String toString()

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -140,9 +140,7 @@
             }
          }
 
-         if(particle.getMaxOccursUnbounded() ||
-               occurrence < particle.getMinOccurs() ||
-               occurrence < particle.getMaxOccurs())
+         if(particle.isOccurrenceAllowed(occurrence + 1))
          {
             for(pos = 0; pos < sequence.size(); ++pos)
             {

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -306,8 +306,7 @@
 
       public Position nextPosition(QName name, Attributes atts)
       {
-         if (particle.getMaxOccursUnbounded() || occurrence < particle.getMinOccurs()
-               || occurrence < particle.getMaxOccurs())
+         if (particle.isOccurrenceAllowed(occurrence + 1))
          {
             ElementBinding wildcardContent = getElement(name, atts);
             if (wildcardContent != null)

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -32,8 +32,10 @@
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.PositionStack;
 import org.jboss.xb.binding.sunday.unmarshalling.RepeatableParticleHandler;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBeforeSetParentCallback;
 import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler.UnmarshallingContextImpl;
 import org.xml.sax.Attributes;
 
 /**
@@ -208,6 +210,34 @@
       return wildcardPosition;
    }
 
+   protected void setParent(Position parentPosition, ParticleHandler handler)
+   {
+      if(repeatableParticleValue != null)
+      {
+         repeatableHandler.addTermValue(repeatableParticleValue, o, qName, particle, parentPosition.getParticle(), handler);
+      }
+      else if(parentPosition.getRepeatableParticleValue() == null || !parentPosition.getParticle().getTerm().isSkip())
+      {
+         TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback();
+         if(beforeSetParent != null)
+         {
+            UnmarshallingContextImpl ctx = stack.getContext();
+            ctx.parent = parentPosition.getValue();
+            ctx.particle = particle;
+            ctx.parentParticle = notSkippedParent().getParticle();
+            o = beforeSetParent.beforeSetParent(o, ctx);
+            ctx.clear();
+         }
+         
+         handler.setParent(parentPosition.getValue(), o, qName, particle, parentPosition.getParticle());
+      }
+      else
+         parentPosition.getRepeatableHandler().addTermValue(
+               parentPosition.getRepeatableParticleValue(),
+               o, qName, particle,
+               parentPosition.getParticle(), handler);
+   }
+
    private ParticleHandler getHandler(TermBinding term)
    {
       ParticleHandler handler = null;

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -137,8 +137,7 @@
 
          if (particle.isRepeatable())
          {
-            if (particle.getMaxOccursUnbounded() || occurrence < particle.getMinOccurs()
-                  || occurrence < particle.getMaxOccurs())
+            if (particle.isOccurrenceAllowed(occurrence + 1))
             {
                reset();
                ++occurrence;
@@ -152,8 +151,13 @@
          // it's not repeatable but it re-appeared
          // it probably has a repeatable parent
          reset();
-         occurrence = 0;
          endRepeatableParent();
+         occurrence = 1;
+         if(next != null)
+         {
+            next.setPrevious(null);
+            next = null;
+         }
          return this;
       }
       
@@ -197,8 +201,7 @@
 
       if (next != null)
       {
-         if (particle.getMaxOccursUnbounded() || occurrence < particle.getMinOccurs()
-               || occurrence < particle.getMaxOccurs())
+         if (particle.isOccurrenceAllowed(occurrence + 1))
          {
             // this increase is actually ahead of its time, it may fail to locate the element
             // but in the current impl it doesn't matter
@@ -337,7 +340,6 @@
                if(!type.isSimple() &&
                   schema != null &&
                   schema.isStrictSchema()
-                  // todo this isSkip() doesn't look nice here
                   && !element.isSkip())
                {
                   throw new JBossXBRuntimeException("Element " +
@@ -454,33 +456,7 @@
                   if (wh != null)
                      handler = wh;
                }
-               
-               if(repeatableParticleValue != null)
-               {
-                  repeatableHandler.addTermValue(repeatableParticleValue, o, qName, particle, notSkippedParent.getParticle(), handler);
-               }
-               else if(notSkippedParent.getRepeatableParticleValue() == null || !notSkippedParent.getParticle().getTerm().isSkip())
-               {
-                  TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback();
-                  if(beforeSetParent != null)
-                  {
-                     UnmarshallingContextImpl ctx = stack.getContext();
-                     ctx.parent = notSkippedParent.getValue();
-                     ctx.particle = particle;
-                     ctx.parentParticle = notSkippedParent().getParticle();
-                     o = beforeSetParent.beforeSetParent(o, ctx);
-                     ctx.clear();
-                  }
-
-                  handler.setParent(notSkippedParent.getValue(), o, qName, particle, notSkippedParent.getParticle());
-               }
-               else
-               {
-                  notSkippedParent.getRepeatableHandler().addTermValue(
-                        notSkippedParent.getRepeatableParticleValue(),
-                        o, qName, particle,
-                        notSkippedParent.getParticle(), handler);
-               }
+               setParent(notSkippedParent, handler);
             }
             else if (parentTerm.isWildcard())
             {
@@ -500,7 +476,7 @@
       }
       else
       {
-         Position popped = stack.pop();
+         stack.pop(); // which is this
 
          for(int i = interceptors.size() - 1; i >= 0; --i)
          {
@@ -519,8 +495,8 @@
          }
 
          previous = stack.head();
-         previous.setNext(popped);
-         stack.push(popped);
+         previous.setNext(this);
+         stack.push(this);
       }
       
       ended = true;
@@ -533,31 +509,20 @@
    
    private void endRepeatableParent()
    {
-      Position position = previous;
-      while(true)
+      Position position = this;
+      do
       {
+         position = position.getPrevious();
          if(position.isElement())
-         {
             throw new JBossXBRuntimeException(
                "Failed to start " + qName +
                ": the element is not repeatable, repeatable parent expected to be a model group but got element " +
                position.getParticle().getTerm().getQName()
             );
-         }
-
          ((NonElementPosition)position).endParticleWithNotSkippedParent();
-
-         if(position.getParticle().isRepeatable())
-         {
-            position.reset();
-            position.initValue(null);
-            break;
-         }
-
-         position = position.getPrevious();
       }
+      while(!position.getParticle().isRepeatable());
 
-      position = position.getNext();
       while(position != this)
       {
          position.reset();
@@ -653,13 +618,8 @@
          }
 
          if (repeated)
-            stack.push(this);
-         
-/*         if(interceptors.size() > 1)
-            throw new IllegalStateException("" + interceptors.size());
-         if(localInterceptors.size() > 1)
-            throw new IllegalStateException("" + localInterceptors.size());
-*/      }
+            stack.push(this);         
+      }
 
       if (!repeated)
          stack.push(this);

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java	2009-12-13 21:05:57 UTC (rev 3849)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java	2009-12-14 15:51:06 UTC (rev 3850)
@@ -25,8 +25,6 @@
 
 import org.jboss.xb.binding.JBossXBRuntimeException;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.TermBeforeSetParentCallback;
-import org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler.UnmarshallingContextImpl;
 import org.xml.sax.Attributes;
 
 /**
@@ -61,7 +59,7 @@
       ended = true;
       
       if(previous.getValue() != null)
-         setParent(previous);
+         setParent(previous, handler);
    }
    
    public void endParticleWithNotSkippedParent()
@@ -75,37 +73,9 @@
       // model group should always have parent particle
       Position parentPosition = notSkippedParent();
       if(parentPosition.getValue() != null)
-         setParent(parentPosition);
+         setParent(parentPosition, handler);
    }
 
-   private void setParent(Position parentPosition)
-   {
-      if(repeatableParticleValue != null)
-      {
-         repeatableHandler.addTermValue(repeatableParticleValue, o, qName, particle, parentPosition.getParticle(), handler);
-      }
-      else if(parentPosition.getRepeatableParticleValue() == null || !parentPosition.getParticle().getTerm().isSkip())
-      {
-         TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback();
-         if(beforeSetParent != null)
-         {
-            UnmarshallingContextImpl ctx = stack.getContext();
-            ctx.parent = parentPosition.getValue();
-            ctx.particle = particle;
-            ctx.parentParticle = notSkippedParent().getParticle();
-            o = beforeSetParent.beforeSetParent(o, ctx);
-            ctx.clear();
-         }
-         
-         handler.setParent(parentPosition.getValue(), o, qName, particle, parentPosition.getParticle());
-      }
-      else
-         parentPosition.getRepeatableHandler().addTermValue(
-               parentPosition.getRepeatableParticleValue(),
-               o, qName, particle,
-               parentPosition.getParticle(), handler);
-   }
-   
    public ElementPosition startParticle(QName startName, Attributes atts)
    {
       if (nextPosition(startName, atts) == null)



More information about the jboss-svn-commits mailing list