[jboss-svn-commits] JBoss Common SVN: r3814 - 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
Mon Nov 30 13:57:35 EST 2009
Author: alex.loubyansky at jboss.com
Date: 2009-11-30 13:57:34 -0500 (Mon, 30 Nov 2009)
New Revision: 3814
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.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/SundayContentHandler.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
Log:
actually make use of ElementBinding's newPosition() implementation
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java 2009-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -83,8 +83,9 @@
ParticleBinding particle = elements.get(qName);
if(particle != null)
{
- return new AllPosition(qName, allParticle, particle);
- }
+ Position next = particle.getTerm().newPosition(qName, attrs, particle);
+ return new AllPosition(qName, allParticle, particle, next);
+ }
return null;
}
@@ -97,9 +98,9 @@
private final class AllPosition extends NonElementPosition
{
- private AllPosition(QName name, ParticleBinding particle, ParticleBinding currentParticle)
+ private AllPosition(QName name, ParticleBinding particle, ParticleBinding currentParticle, Position next)
{
- super(name, particle, currentParticle);
+ super(name, particle, currentParticle, next);
}
protected Position startElement(QName qName, Attributes atts, boolean required)
@@ -107,11 +108,13 @@
if(currentParticle != null && repeatTerm(qName, atts))
throw new IllegalStateException("maxOccurs in all model group can only be 1: " + qName);
+ next = null;
ParticleBinding particle = elements.get(qName);
if(particle != null)
{
+ next = particle.getTerm().newPosition(qName, atts, particle);
currentParticle = particle;
- occurrence = 1;
+ occurrence = 1;
return this;
}
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-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -76,19 +76,9 @@
for(int i = 0; i < choices.size(); ++i)
{
ParticleBinding particle = (ParticleBinding)choices.get(i);
- TermBinding term = particle.getTerm();
- if(term.isElement())
- {
- ElementBinding element = (ElementBinding)term;
- if(qName.equals(element.getQName()))
- return new ChoicePosition(qName, choiceParticle, particle);
- }
- else
- {
- Position next = term.newPosition(qName, attrs, particle);
- if(next != null)
- return new ChoicePosition(qName, choiceParticle, particle, next);
- }
+ Position next = particle.getTerm().newPosition(qName, attrs, particle);
+ if(next != null)
+ return new ChoicePosition(qName, choiceParticle, particle, next);
}
return null;
@@ -122,7 +112,7 @@
}
next = null;
-
+
if(currentParticle != null)
{
if(repeatTerm(qName, atts))
@@ -133,23 +123,12 @@
for(int i = 0; i < choices.size(); ++i)
{
- boolean found = false;
ParticleBinding particle = (ParticleBinding)choices.get(i);
TermBinding term = particle.getTerm();
- if(term.isElement())
+ next = term.newPosition(qName, atts, particle);
+
+ if(next != null)
{
- ElementBinding element = (ElementBinding)term;
- if(qName.equals(element.getQName()))
- found = true;
- }
- else
- {
- next = term.newPosition(qName, atts, particle);
- found = next != null;
- }
-
- if(found)
- {
occurrence = 1;
currentParticle = particle;
if(trace)
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java 2009-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -207,11 +207,14 @@
public String toString()
{
- return super.toString() + "(" + qName + ", type=" + typeBinding.getQName() + ")";
+ return "element(" + qName + ", type=" + typeBinding.getQName() + ")";
}
public Position newPosition(QName name, Attributes attrs, ParticleBinding particle)
{
- return null;
+ if(!qName.equals(name))
+ return null;
+
+ return new Position(name, particle);
}
}
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-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -85,19 +85,9 @@
for(int i = 0; i < sequence.size(); ++i)
{
ParticleBinding particle = sequence.get(i);
- TermBinding term = particle.getTerm();
- if(term.isElement())
- {
- ElementBinding element = (ElementBinding)term;
- if(qName.equals(element.getQName()))
- return new SequencePosition(qName, seqParticle, i, particle);
- }
- else
- {
- Position next = term.newPosition(qName, attrs, particle);
- if(next != null)
- return new SequencePosition(qName, seqParticle, i, particle, next);
- }
+ Position next = particle.getTerm().newPosition(qName, attrs, particle);
+ if(next != null)
+ return new SequencePosition(qName, seqParticle, i, particle, next);
if(particle.isRequired())
{
@@ -155,60 +145,27 @@
while(i < sequence.size() - 1)
{
ParticleBinding particle = sequence.get(++i);
- TermBinding term = particle.getTerm();
- if(term.isElement())
- {
- ElementBinding element = (ElementBinding)term;
- if(qName.equals(element.getQName()))
- {
- pos = i;
- occurrence = 1;
- currentParticle = particle;
+ next = particle.getTerm().newPosition(qName, atts, particle);
- if(trace)
- log.trace("found " + qName + " in " + SequenceBinding.this);
- return this;
- }
-
- if(particle.getMinOccurs() > 0)
- {
- if(required)
- {
- StringBuffer sb = new StringBuffer(250);
- sb.append(qName).append(" cannot appear in this position in group ")
- .append(SequenceBinding.this.toString());
- throw new JBossXBRuntimeException(sb.toString());
- }
- else
- {
- break;
- }
- }
- }
- else
+ if (next != null)
{
- next = term.newPosition(qName, atts, particle);
+ pos = i;
+ occurrence = 1;
+ currentParticle = particle;
+ return this;
+ }
- if (next != null)
+ if (particle.isRequired())
+ {
+ if (required)
{
- pos = i;
- occurrence = 1;
- currentParticle = particle;
- return this;
+ throw new JBossXBRuntimeException("Requested element " + qName
+ + " is not allowed in this position in the sequence. A model group with minOccurs="
+ + particle.getMinOccurs() + " that doesn't contain this element must follow.");
}
-
- if (particle.isRequired())
+ else
{
- if (required)
- {
- throw new JBossXBRuntimeException("Requested element " + qName
- + " is not allowed in this position in the sequence. A model group with minOccurs="
- + particle.getMinOccurs() + " that doesn't contain this element must follow.");
- }
- else
- {
- break;
- }
+ break;
}
}
}
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java 2009-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -372,12 +372,12 @@
{
flushIgnorableCharacters();
- Position groupPosition = null;
Object o = position.o;
- while(newPosition != null)
+ while(newPosition.getNext() != null)
{
- groupPosition = newPosition;
ParticleBinding groupParticle = newPosition.getParticle();
+ if(groupParticle.getTerm().isElement())
+ throw new IllegalStateException();
if(groupParticle.isRepeatable())
startRepeatableParticle(stack.peek(), o, startName, groupParticle);
@@ -387,7 +387,10 @@
newPosition = newPosition.getNext();
}
- particle = groupPosition.getCurrentParticle();
+
+ particle = newPosition.getParticle();
+ if(!particle.getTerm().isElement())
+ throw new IllegalStateException();
}
}
break;
@@ -423,7 +426,7 @@
endRepeatableParticle(position, position.qName, prevParticle, position.particle);
}
- if(newPosition.getNext() != null && curParticle.isRepeatable())
+ if(newPosition.getNext() != null && curParticle.isRepeatable() && !curParticle.getTerm().isElement())
{
startRepeatableParticle(position, position.o, startName, curParticle);
}
@@ -432,19 +435,29 @@
// push all except the last one
parentType = position.parentType;
Object o = position.o;
- Position groupPosition = newPosition;
+ particle = newPosition.getCurrentParticle();
newPosition = newPosition.getNext();
- while(newPosition != null)
+ if(newPosition != null)
{
- groupPosition = newPosition;
- ParticleBinding modelGroupParticle = groupPosition.getParticle();
- handler = getHandler(modelGroupParticle.getTerm());
- o = handler.startParticle(o, startName, modelGroupParticle, atts, nsRegistry);
- push(groupPosition, o, handler, parentType);
-
- newPosition = newPosition.getNext();
+ while (newPosition.getNext() != null)
+ {
+ ParticleBinding modelGroupParticle = newPosition.getParticle();
+ if(modelGroupParticle.getTerm().isElement())
+ throw new IllegalStateException();
+ handler = getHandler(modelGroupParticle.getTerm());
+ o = handler.startParticle(o, startName, modelGroupParticle, atts, nsRegistry);
+ push(newPosition, o, handler, parentType);
+
+ newPosition = newPosition.getNext();
+ }
}
- particle = groupPosition.getCurrentParticle();
+
+ if(newPosition != null)
+ particle = newPosition.getParticle();
+
+ if(!particle.getTerm().isElement())
+ throw new IllegalStateException();
+
break;
}
}
@@ -506,9 +519,7 @@
}
if(!repeated && particle.isRepeatable())
- {
startRepeatableParticle(stack.peek(), parent, startName, particle);
- }
TypeBinding type = element.getType();
if(type == null)
@@ -706,7 +717,7 @@
if(repeatableContainer != null)
{
if(parentPosition.repeatableParticleValue != null)
- throw new IllegalStateException();
+ throw new IllegalStateException("Previous repeatable particle hasn't been ended yet!");
parentPosition.repeatableParticleValue = repeatableContainer;
parentPosition.repeatableHandler = repeatableHandler;
}
@@ -1229,7 +1240,7 @@
ParticleBinding currentParticle = getCurrentParticle();
if(currentParticle == null)
throw new IllegalStateException("The cursor has not been positioned yet!");
-
+
boolean repeated = false;
if(currentParticle.getMaxOccursUnbounded() ||
occurrence < currentParticle.getMinOccurs() ||
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java 2009-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -104,7 +104,8 @@
{
ParticleBinding currentParticle = elementParticles.get(qName);
if (currentParticle != null)
- return new UnorderedSequencePosition(qName, seqParticle, currentParticle);
+ return new UnorderedSequencePosition(qName, seqParticle, currentParticle,
+ currentParticle.getTerm().newPosition(qName, attrs, currentParticle));
for (ParticleBinding particle : groupParticles)
{
@@ -159,6 +160,7 @@
currentParticle = elementParticles.get(qName);
if (currentParticle != null)
{
+ next = currentParticle.getTerm().newPosition(qName, atts, currentParticle);
occurrence = 1;
if (trace)
log.trace("found " + qName + " in " + UnorderedSequenceBinding.this);
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-11-29 18:40:32 UTC (rev 3813)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java 2009-11-30 18:57:34 UTC (rev 3814)
@@ -244,11 +244,15 @@
return element;
}
- public Position newPosition(QName qName, Attributes attrs, ParticleBinding particle)
+ public Position newPosition(QName qName, Attributes attrs, ParticleBinding wildcardParticle)
{
ElementBinding wildcardContent = getElement(qName, attrs);
if(wildcardContent != null)
- return new WildcardPosition(qName, particle, new ParticleBinding(wildcardContent));
+ {
+ ParticleBinding particle = new ParticleBinding(wildcardContent);
+ Position next = wildcardContent.newPosition(qName, attrs, particle);
+ return new WildcardPosition(qName, wildcardParticle, particle, next);
+ }
return null;
}
@@ -294,9 +298,9 @@
private final class WildcardPosition extends NonElementPosition
{
- protected WildcardPosition(QName name, ParticleBinding particle, ParticleBinding currentParticle)
+ protected WildcardPosition(QName name, ParticleBinding particle, ParticleBinding currentParticle, Position next)
{
- super(name, particle, currentParticle);
+ super(name, particle, currentParticle, next);
}
@Override
@@ -306,10 +310,12 @@
if(currentParticle != null && repeatTerm(qName, atts))
return this;
+ next = null;
ElementBinding wildcardContent = getElement(name, atts);
if(wildcardContent != null)
{
currentParticle = new ParticleBinding(wildcardContent);
+ next = wildcardContent.newPosition(name, atts, currentParticle);
occurrence = 1;
return this;
}
More information about the jboss-svn-commits
mailing list