com.sun.xml.xsom.impl.ParticleImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xsom Show documentation
Show all versions of xsom Show documentation
XML Schema Object Model (XSOM) is a Java library that allows applications to easily parse XML Schema
documents and inspect information in them. It is expected to be useful for applications that need to take XML
Schema as an input.
/*
* Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.xml.xsom.impl;
import com.sun.xml.xsom.XSContentType;
import com.sun.xml.xsom.XSParticle;
import com.sun.xml.xsom.XSSimpleType;
import com.sun.xml.xsom.XSTerm;
import com.sun.xml.xsom.impl.parser.DelayedRef;
import com.sun.xml.xsom.impl.parser.SchemaDocumentImpl;
import com.sun.xml.xsom.visitor.XSContentTypeFunction;
import com.sun.xml.xsom.visitor.XSContentTypeVisitor;
import com.sun.xml.xsom.visitor.XSFunction;
import com.sun.xml.xsom.visitor.XSVisitor;
import java.math.BigInteger;
import org.xml.sax.Locator;
import java.util.List;
public class ParticleImpl extends ComponentImpl implements XSParticle, ContentTypeImpl
{
public ParticleImpl( SchemaDocumentImpl owner, AnnotationImpl _ann,
Ref.Term _term, Locator _loc, BigInteger _maxOccurs, BigInteger _minOccurs ) {
super(owner,_ann,_loc,null);
this.term = _term;
this.maxOccurs = _maxOccurs;
this.minOccurs = _minOccurs;
}
public ParticleImpl( SchemaDocumentImpl owner, AnnotationImpl _ann,
Ref.Term _term, Locator _loc, int _maxOccurs, int _minOccurs ) {
super(owner,_ann,_loc,null);
this.term = _term;
this.maxOccurs = BigInteger.valueOf(_maxOccurs);
this.minOccurs = BigInteger.valueOf(_minOccurs);
}
public ParticleImpl( SchemaDocumentImpl owner, AnnotationImpl _ann, Ref.Term _term, Locator _loc ) {
this(owner,_ann,_term,_loc,1,1);
}
private Ref.Term term;
public XSTerm getTerm() { return term.getTerm(); }
private BigInteger maxOccurs;
public BigInteger getMaxOccurs() { return maxOccurs; }
public boolean isRepeated() {
return !maxOccurs.equals(BigInteger.ZERO) && !maxOccurs.equals(BigInteger.ONE);
}
private BigInteger minOccurs;
public BigInteger getMinOccurs() { return minOccurs; }
public void redefine(ModelGroupDeclImpl oldMG) {
if( term instanceof ModelGroupImpl ) {
((ModelGroupImpl)term).redefine(oldMG);
return;
}
if( term instanceof DelayedRef.ModelGroup ) {
((DelayedRef)term).redefine(oldMG);
}
}
public XSSimpleType asSimpleType() { return null; }
public XSParticle asParticle() { return this; }
public XSContentType asEmpty() { return null; }
public final Object apply( XSFunction function ) {
return function.particle(this);
}
public final Object apply( XSContentTypeFunction function ) {
return function.particle(this);
}
public final void visit( XSVisitor visitor ) {
visitor.particle(this);
}
public final void visit( XSContentTypeVisitor visitor ) {
visitor.particle(this);
}
// Ref.ContentType implementation
public XSContentType getContentType() { return this; }
/**
* Foreign attribuets are considered to be on terms.
*
* REVISIT: is this a good design?
*/
public List getForeignAttributes() {
return getTerm().getForeignAttributes();
}
}