[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