Class XSDFACM
- java.lang.Object
-
- org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.xs.models.XSDFACM
-
- All Implemented Interfaces:
XSCMValidator
public class XSDFACM extends Object implements XSCMValidator
DFAContentModel is the implementation of XSCMValidator that does all of the non-trivial element content validation. This class does the conversion from the regular expression to the DFA that it then uses in its validation algorithm.- Version:
- $Id$
- Author:
- Neil Graham, IBM
-
-
Field Summary
-
Fields inherited from interface org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.xs.models.XSCMValidator
FIRST_ERROR, SUBSEQUENT_ERROR
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
checkUniqueParticleAttribution(SubstitutionGroupHandler subGroupHandler)
check whether this content violates UPA constraint.boolean
endContentModel(int[] state)
The method indicates the end of list of childrenString
getTermName(int termId)
Returns the name of the term (element or wildcard) for the given identifier.boolean
isCompactedForUPA()
Checks if this content model has had its min/maxOccurs values reduced for purposes of speeding up UPA.boolean
isFinalState(int state)
check whether the given state is one of the final statesint[]
occurenceInfo(int[] state)
Returns an array containing information about the current repeating term ornull
if no occurrence counting was being performed at the current state.Object
oneTransition(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler)
one transition onlyint[]
startContentModel()
This methods to be called on entering a first element whose type has this content model.Vector
whatCanGoHere(int[] state)
Check which elements are valid to appear at this point.
-
-
-
Constructor Detail
-
XSDFACM
public XSDFACM(CMNode syntaxTree, int leafCount)
Constructs a DFA content model.- Parameters:
syntaxTree
- The syntax tree of the content model.leafCount
- The number of leaves.- Throws:
RuntimeException
- Thrown if DFA can't be built.
-
-
Method Detail
-
isFinalState
public boolean isFinalState(int state)
check whether the given state is one of the final states- Parameters:
state
- the state to check- Returns:
- whether it's a final state
-
oneTransition
public Object oneTransition(QName curElem, int[] state, SubstitutionGroupHandler subGroupHandler)
one transition only- Specified by:
oneTransition
in interfaceXSCMValidator
- Parameters:
curElem
- The current element's QNamestate
- stack to store the previous statesubGroupHandler
- the substitution group handler- Returns:
- null if transition is invalid; otherwise the Object corresponding to the XSElementDecl or XSWildcardDecl identified. Also, the state array will be modified to include the new state; this so that the validator can store it away.
- Throws:
RuntimeException
- thrown on error
-
startContentModel
public int[] startContentModel()
Description copied from interface:XSCMValidator
This methods to be called on entering a first element whose type has this content model. It will return the initial state of the content model- Specified by:
startContentModel
in interfaceXSCMValidator
- Returns:
- Start state of the content model
-
endContentModel
public boolean endContentModel(int[] state)
Description copied from interface:XSCMValidator
The method indicates the end of list of children- Specified by:
endContentModel
in interfaceXSCMValidator
- Parameters:
state
- Current state of the content model- Returns:
- true if the last state was a valid final state
-
checkUniqueParticleAttribution
public boolean checkUniqueParticleAttribution(SubstitutionGroupHandler subGroupHandler) throws XMLSchemaException
check whether this content violates UPA constraint.- Specified by:
checkUniqueParticleAttribution
in interfaceXSCMValidator
- Parameters:
subGroupHandler
- the substitution group handler- Returns:
- true if this content model contains other or list wildcard
- Throws:
XMLSchemaException
-
whatCanGoHere
public Vector whatCanGoHere(int[] state)
Check which elements are valid to appear at this point. This method also works if the state is in error, in which case it returns what should have been seen.- Specified by:
whatCanGoHere
in interfaceXSCMValidator
- Parameters:
state
- the current state- Returns:
- a Vector whose entries are instances of either XSWildcardDecl or XSElementDecl.
-
occurenceInfo
public int[] occurenceInfo(int[] state)
Description copied from interface:XSCMValidator
Returns an array containing information about the current repeating term or
null
if no occurrence counting was being performed at the current state.If an array is returned it will have a length == 4 and will contain:
- a[0] :: min occurs
- a[1] :: max occurs
- a[2] :: current value of the counter
- a[3] :: identifier for the repeating term
- Specified by:
occurenceInfo
in interfaceXSCMValidator
- Parameters:
state
- the current state- Returns:
- an array containing information about the current repeating term
-
getTermName
public String getTermName(int termId)
Description copied from interface:XSCMValidator
Returns the name of the term (element or wildcard) for the given identifier.- Specified by:
getTermName
in interfaceXSCMValidator
- Parameters:
termId
- identifier for the element declaration or wildcard- Returns:
- the name of the element declaration or wildcard
-
isCompactedForUPA
public boolean isCompactedForUPA()
Description copied from interface:XSCMValidator
Checks if this content model has had its min/maxOccurs values reduced for purposes of speeding up UPA. If so, this content model should not be used for any purpose other than checking unique particle attribution- Specified by:
isCompactedForUPA
in interfaceXSCMValidator
- Returns:
- a boolean that says whether this content has been compacted for UPA
-
-