private boolean marshalModelGroup(ModelGroupBinding modelGroup, boolean declareNs) { boolean marshalled; if(modelGroup instanceof AllBinding) { marshalled = marshalModelGroupAll(modelGroup.getParticles(), declareNs); } else if(modelGroup instanceof ChoiceBinding) { marshalled = marshalModelGroupChoice(modelGroup.getParticles(), declareNs); } else { marshalled = marshalModelGroupSequence(modelGroup, declareNs); } return marshalled; }
private ElementBinding findLocalPathElement(Iterator particles, String[] path, int pos) { while (particles.hasNext()) { TermBinding term = ((ParticleBinding)particles.next()).getTerm(); if (term instanceof ElementBinding) { ElementBinding element = (ElementBinding)term; element = findLocalPathElement(element, path, pos); if (element != null) return element; } else if (term instanceof ModelGroupBinding) { Iterator i = ((ModelGroupBinding)term).getParticles().iterator(); ElementBinding element = findLocalPathElement(i, path, pos); if (element != null) return element; } } return null; }
private ElementBinding findLocalPathElementInTypes(Iterator types, String[] path) { while (types.hasNext()) { TypeBinding type = (TypeBinding)types.next(); if (type.getQName().getLocalPart().equals(path[0])) { ParticleBinding particle = type.getParticle(); if (particle == null) continue; TermBinding term = particle.getTerm(); if (!term.isModelGroup()) continue; return findLocalPathElement(((ModelGroupBinding)term).getParticles().iterator(), path, 1); } } return null; }
private void bindGlobalGroupParticles(XSModelGroup group) { ModelGroupBinding groupBinding = sharedElements.getGlobalGroup(group); if (groupBinding.getParticles().isEmpty()) { pushModelGroup(groupBinding); bindModelGroupParticles(group); popModelGroup(); } }
private boolean marshalModelGroupSequence(ModelGroupBinding sequence, boolean declareNs) { // if sequence is bound to a collection, // we assume the iterator over the collection is in sync with the particle iterator Iterator valueIterator = null; if(!sequence.isSkip() && !stack.isEmpty()) { Object o = stack.peek(); if(o != null && (Collection.class.isAssignableFrom(o.getClass()) || o.getClass().isArray())) { valueIterator = getIterator(o); } } boolean marshalled = true; for(Iterator i = sequence.getParticles().iterator(); i.hasNext();) { if(valueIterator != null) { Object o = valueIterator.hasNext() ? valueIterator.next() : null; stack.push(o); } ParticleBinding particle = (ParticleBinding)i.next(); marshalled &= marshalParticle(particle, declareNs); if(valueIterator != null) { stack.pop(); } } return marshalled; }
private ElementBinding findLocalPathElement(ElementBinding element, String[] path, int pos) { String name = path[pos]; if (!name.equals(element.getQName().getLocalPart())) return null; // End of path if (path.length - 1 == pos) return element; ParticleBinding particle = element.getType().getParticle(); if (particle == null) return null; TermBinding term = particle.getTerm(); if (!term.isModelGroup()) return null; ModelGroupBinding group = (ModelGroupBinding)term; Iterator i = group.getParticles().iterator(); // Increase depth return findLocalPathElement(i, path, pos + 1); }
private static WildcardBinding getWildcard(TermBinding term) { if(term.isWildcard()) { return (WildcardBinding) term; } if(term.isModelGroup()) { ModelGroupBinding group = (ModelGroupBinding) term; for(Iterator i = group.getParticles().iterator(); i.hasNext();) { term = ((ParticleBinding)i.next()).getTerm(); if(term.isWildcard()) { return (WildcardBinding)term; } else if(term.isModelGroup()) { WildcardBinding wc = getWildcard(term); if (wc != null) return wc; } } } return null; } }
if (term instanceof ModelGroupBinding) Iterator iterator = ((ModelGroupBinding)term).getParticles().iterator(); element = findLocalPathElement(iterator, new String[] { varMapping.getXmlElementName() }, 0);
if (groupBinding.getParticles().isEmpty())