[jboss-svn-commits] JBoss Common SVN: r3961 - 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 Jan 29 10:30:58 EST 2010


Author: alex.loubyansky at jboss.com
Date: 2010-01-29 10:30:58 -0500 (Fri, 29 Jan 2010)
New Revision: 3961

Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
Log:
refactoring in position.notSkippedParent()

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java	2010-01-29 11:00:22 UTC (rev 3960)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java	2010-01-29 15:30:58 UTC (rev 3961)
@@ -56,7 +56,7 @@
 
    protected AbstractPosition previous;
    protected AbstractPosition next;
-   private AbstractPosition notSkippedParent;
+   protected AbstractPosition notSkippedParent;
 
    protected boolean skip;
    
@@ -156,32 +156,9 @@
       }
    }
 
-   protected AbstractPosition notSkippedParent()
+   protected AbstractPosition getLastNotSkipped()
    {
-      if(notSkippedParent != null)
-         return notSkippedParent;
-      
-      AbstractPosition position = previous;
-      AbstractPosition wildcardPosition = null;
-      while(position != null)
-      {
-         if(!position.skip || position.repeatableParticleValue != null)
-         {
-            notSkippedParent = position;
-            return position;
-         }
-         else if(wildcardPosition != null)
-         {
-            notSkippedParent = wildcardPosition;
-            return wildcardPosition;
-         }
-
-         if(position.particle.getTerm().isWildcard())
-            wildcardPosition = position;
-         position = position.previous;
-      }
-      notSkippedParent = wildcardPosition;
-      return wildcardPosition;
+      return !skip || repeatableParticleValue != null ? this : notSkippedParent;
    }
 
    protected void setParent(AbstractPosition parentPosition, ParticleHandler handler)
@@ -193,28 +170,28 @@
       {
          repeatableHandler.addTermValue(repeatableParticleValue, o, qName, particle, parentPosition.particle, handler);
       }
-      else if(parentPosition.repeatableParticleValue != null && parentPosition.skip)
+      else if(parentPosition.repeatableParticleValue == null || !parentPosition.skip)
       {
-         parentPosition.repeatableHandler.addTermValue(
-               parentPosition.repeatableParticleValue,
-               o, qName, particle,
-               parentPosition.particle, handler);
-      }
-      else
-      {
          TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback();
          if (beforeSetParent != null)
          {
             UnmarshallingContextImpl ctx = stack.getContext();
             ctx.parent = parentPosition.o;
             ctx.particle = particle;
-            ctx.parentParticle = notSkippedParent().particle;
+            ctx.parentParticle = notSkippedParent.particle;
             o = beforeSetParent.beforeSetParent(o, ctx);
             ctx.clear();
          }
 
          handler.setParent(parentPosition.o, o, qName, particle, parentPosition.particle);
       }
+      else
+      {
+         parentPosition.repeatableHandler.addTermValue(
+               parentPosition.repeatableParticleValue,
+               o, qName, particle,
+               parentPosition.particle, handler);
+      }
    }
 
    protected abstract ParticleHandler getHandler();

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java	2010-01-29 11:00:22 UTC (rev 3960)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java	2010-01-29 15:30:58 UTC (rev 3961)
@@ -172,6 +172,7 @@
             next = new ElementPosition(startName, new ParticleBinding(xopInclude));
             next.stack = stack;
             next.previous = this;
+            next.notSkippedParent = getLastNotSkipped();
             return next;
          }
 
@@ -199,16 +200,16 @@
       if (next == null)
          throw new JBossXBRuntimeException(startName + " not found as a child of " + qName + " in " + modelGroup);
 
-      next.previous = this;
+      next.previous = this;      
       
       flushIgnorableCharacters();
 
       AbstractPosition nextPosition = next;
       while (nextPosition.next != null)
       {
+         nextPosition.notSkippedParent = nextPosition.previous.getLastNotSkipped();
          if (nextPosition.particle.isRepeatable())
             nextPosition.startRepeatableParticle();
-
          nextPosition.stack = stack;
          nextPosition.initValue(atts);
          nextPosition.parentType = parentType;
@@ -217,6 +218,7 @@
 
       nextPosition.stack = stack;
       nextPosition.parentType = parentType;
+      nextPosition.notSkippedParent = nextPosition.previous.getLastNotSkipped();
       return (ElementPosition) nextPosition;
    }
 
@@ -375,7 +377,7 @@
                      UnmarshallingContextImpl ctx = stack.getContext();
                      ctx.parent = o;
                      ctx.particle = particle;
-                     ctx.parentParticle = notSkippedParent().particle;
+                     ctx.parentParticle = notSkippedParent.particle;
                      unmarshalled = beforeSetParent.beforeSetParent(unmarshalled, ctx);
                      ctx.clear();
                   }
@@ -427,43 +429,8 @@
       // setParent
       //
 
-      if(interceptorObjects == null)
+      if(interceptorObjects != null)
       {
-         AbstractPosition notSkippedParent = notSkippedParent();
-         if (notSkippedParent != null)
-         {
-            ParticleBinding parentParticle = notSkippedParent.particle;
-            TermBinding parentTerm = parentParticle.getTerm();
-
-            if (notSkippedParent.o != null)
-            {
-               ParticleHandler handler = this.handler;
-               if (parentTerm.isWildcard())
-               {
-                  ParticleHandler wh = ((WildcardBinding) parentTerm).getWildcardHandler();
-                  if (wh != null)
-                     handler = wh;
-               }
-               setParent(notSkippedParent, handler);
-            }
-            else if (parentTerm.isWildcard())
-            {
-               // the parent has anyType, so it gets the value of its child
-               AbstractPosition parentPos = previous;
-               parentPos.o = o;
-               while(!parentPos.isElement())
-               {
-                  parentPos = parentPos.getPrevious();
-                  parentPos.o = o;
-               }
-
-               if (trace)
-                  log.trace("Value of " + qName + " " + o + " is promoted as the value of its parent element.");
-            }
-         }
-      }
-      else
-      {
          int ioIndex = 0;
          for(int i = interceptors.size() - 1; i >= 0; --i)
          {
@@ -481,6 +448,37 @@
             o = parent;
          }
       }
+      else if (notSkippedParent != null)
+      {
+         ParticleBinding parentParticle = notSkippedParent.particle;
+         TermBinding parentTerm = parentParticle.getTerm();
+
+         if (notSkippedParent.o != null)
+         {
+            ParticleHandler handler = this.handler;
+            if (parentTerm.isWildcard())
+            {
+               ParticleHandler wh = ((WildcardBinding) parentTerm).getWildcardHandler();
+               if (wh != null)
+                  handler = wh;
+            }
+            setParent(notSkippedParent, handler);
+         }
+         else if (parentTerm.isWildcard())
+         {
+            // the parent has anyType, so it gets the value of its child
+            AbstractPosition parentPos = previous;
+            parentPos.o = o;
+            while(!parentPos.isElement())
+            {
+               parentPos = parentPos.getPrevious();
+               parentPos.o = o;
+            }
+
+            if (trace)
+               log.trace("Value of " + qName + " " + o + " is promoted as the value of its parent element.");
+         }
+      }
    }
    
    public ElementPosition startParticle(QName startName, Attributes atts)

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java	2010-01-29 11:00:22 UTC (rev 3960)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java	2010-01-29 15:30:58 UTC (rev 3961)
@@ -78,7 +78,7 @@
          o = handler.endParticle(o, qName, particle);
 
          // model group should always have parent particle
-         AbstractPosition parentPosition = notSkippedParent();
+         AbstractPosition parentPosition = notSkippedParent;
          if (parentPosition.o != null)
             setParent(parentPosition, handler);
       }
@@ -99,9 +99,9 @@
       AbstractPosition nextPosition = next;
       while (nextPosition.next != null)
       {
+         nextPosition.notSkippedParent = nextPosition.previous.getLastNotSkipped();
          if (nextPosition.particle.isRepeatable())
             nextPosition.startRepeatableParticle();
-
          nextPosition.stack = stack;
          nextPosition.initValue(atts);
          nextPosition.parentType = parentType;
@@ -110,6 +110,7 @@
 
       nextPosition.stack = stack;
       nextPosition.parentType = parentType;
+      nextPosition.notSkippedParent = nextPosition.previous.getLastNotSkipped();
       return (ElementPosition) nextPosition;
    }
 

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	2010-01-29 11:00:22 UTC (rev 3960)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java	2010-01-29 15:30:58 UTC (rev 3961)
@@ -335,5 +335,11 @@
       {
          return DefaultHandlers.UOE_PARTICLE_HANDLER;
       }
+      
+      @Override
+      protected AbstractPosition getLastNotSkipped()
+      {
+         return !skip || repeatableParticleValue != null || previous != notSkippedParent ? this : notSkippedParent;
+      }
    }
 }



More information about the jboss-svn-commits mailing list