[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