Top Description Inners Fields Constructors Methods
com.sun.msv.reader.trex.ng

public Class RestrictionChecker

extends Object
Class Inheritance
Imports
org.xml.sax.Locator, com.sun.msv.grammar.AnyNameClass, .AttributeExp, .ChoiceExp, .ChoiceNameClass, .DataExp, .DifferenceNameClass, .ElementExp, .Expression, .InterleaveExp, .ListExp, .NameClass, .NameClassAndExpression, .NameClassVisitor, .NamespaceNameClass, .NotNameClass, .OneOrMoreExp, .SequenceExp, .SimpleNameClass, .ValueExp, com.sun.msv.grammar.util.ExpressionWalker, .NameClassCollisionChecker

Checks RELAX NG contextual restrictions defined in the section 7.

ExpressionWalker is used to walk the content model thoroughly. Depending on the current context, different walkers are used so that we can detect contextual restrictions properly.

For each ElementExp and AttributeExp, its name class is checked to detect the constraint set out in the section 7.1.6. Also, a set is used to avoid redundant checks.

Author
Kohsuke KAWAGUCHI

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class
RestrictionChecker.DefaultChecker

The base class of all other context-specific checker.

private class
private class
protected abstract class
private class
pack-priv class

Field Summary

Modifier and TypeField and Description
private RestrictionChecker.DuplicateAttributesChecker
attDupChecker

Object that checks duplicate attributes in a content model.

private RestrictionChecker.DuplicateElementsChecker
elemDupChecker

Object that checks conflicting elements in interleave.

private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private static final String
private Expression
errorContext

The source location of this expression should be also reported in case of error.

private final NameClassVisitor
inAnyNameClass

Used to visit children of AnyNameClass

private final ExpressionWalker
inAttribute

Used to visit children of attributes.

private final ExpressionWalker
inElement

Used to visit children of elements.

private final ExpressionWalker
inExcept

Used to visit children of the 'except' clause of data.

private final ExpressionWalker
inGroupInOneOrMoreInElement

Used to visit children of group/interleave in oneOrMore in elements.

private final ExpressionWalker
inInterleaveInList

Used to visit children of interleaves in lists.

private final ExpressionWalker
inList

Used to visit children of lists.

private final RestrictionChecker.NameClassWalker
inNameClass

Used to visit name classes.

private final NameClassVisitor
inNsNameClass

Used to visit children of NamespaceNameClass

private final ExpressionWalker
inOneOrMoreInElement

Used to visit children of oneOrMore in elements.

private final ExpressionWalker
inStart

Used to visit the start pattern.

private final RELAXNGReader
reader

Reader object to which errors are reported.

private final Set<Expression>
visitedExps

Visited ElementExp/AttributeExps.

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
check()

Traverses the grammar and performs the contextual check.

public void
checkNameClass(NameClass nc)

Checks the contextual restriction on a name class.

private void
reportError(Expression exp, String errorMsg)

private void
reportError(Expression exp, String errorMsg, Object[] args)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

attDupCheckerback to summary
private RestrictionChecker.DuplicateAttributesChecker attDupChecker

Object that checks duplicate attributes in a content model.

elemDupCheckerback to summary
private RestrictionChecker.DuplicateElementsChecker elemDupChecker

Object that checks conflicting elements in interleave.

ERR_ANYNAME_IN_ANYNAMEback to summary
private static final String ERR_ANYNAME_IN_ANYNAME
ERR_ANYNAME_IN_NSNAMEback to summary
private static final String ERR_ANYNAME_IN_NSNAME
ERR_ATTRIBUTE_IN_ATTRIBUTEback to summary
private static final String ERR_ATTRIBUTE_IN_ATTRIBUTE
ERR_ATTRIBUTE_IN_EXCEPTback to summary
private static final String ERR_ATTRIBUTE_IN_EXCEPT
ERR_ATTRIBUTE_IN_LISTback to summary
private static final String ERR_ATTRIBUTE_IN_LIST
ERR_ATTRIBUTE_IN_STARTback to summary
private static final String ERR_ATTRIBUTE_IN_START
ERR_DATA_IN_INTERLEAVE_IN_LISTback to summary
private static final String ERR_DATA_IN_INTERLEAVE_IN_LIST
ERR_DATA_IN_STARTback to summary
private static final String ERR_DATA_IN_START
ERR_DUPLICATE_ATTRIBUTESback to summary
private static final String ERR_DUPLICATE_ATTRIBUTES
ERR_DUPLICATE_ELEMENTSback to summary
private static final String ERR_DUPLICATE_ELEMENTS
ERR_ELEMENT_IN_ATTRIBUTEback to summary
private static final String ERR_ELEMENT_IN_ATTRIBUTE
ERR_ELEMENT_IN_EXCEPTback to summary
private static final String ERR_ELEMENT_IN_EXCEPT
ERR_ELEMENT_IN_LISTback to summary
private static final String ERR_ELEMENT_IN_LIST
ERR_EMPTY_IN_EXCEPTback to summary
private static final String ERR_EMPTY_IN_EXCEPT
ERR_EMPTY_IN_STARTback to summary
private static final String ERR_EMPTY_IN_START
ERR_INTERLEAVE_IN_EXCEPTback to summary
private static final String ERR_INTERLEAVE_IN_EXCEPT
ERR_INTERLEAVE_IN_STARTback to summary
private static final String ERR_INTERLEAVE_IN_START
ERR_LIST_IN_EXCEPTback to summary
private static final String ERR_LIST_IN_EXCEPT
ERR_LIST_IN_LISTback to summary
private static final String ERR_LIST_IN_LIST
ERR_LIST_IN_STARTback to summary
private static final String ERR_LIST_IN_START
ERR_NSNAME_IN_NSNAMEback to summary
private static final String ERR_NSNAME_IN_NSNAME
ERR_ONEORMORE_IN_EXCEPTback to summary
private static final String ERR_ONEORMORE_IN_EXCEPT
ERR_ONEORMORE_IN_STARTback to summary
private static final String ERR_ONEORMORE_IN_START
ERR_REPEATED_GROUPED_ATTRIBUTEback to summary
private static final String ERR_REPEATED_GROUPED_ATTRIBUTE
ERR_SEQUENCE_IN_EXCEPTback to summary
private static final String ERR_SEQUENCE_IN_EXCEPT
ERR_SEQUENCE_IN_STARTback to summary
private static final String ERR_SEQUENCE_IN_START
ERR_TEXT_IN_EXCEPTback to summary
private static final String ERR_TEXT_IN_EXCEPT
ERR_TEXT_IN_LISTback to summary
private static final String ERR_TEXT_IN_LIST
ERR_TEXT_IN_STARTback to summary
private static final String ERR_TEXT_IN_START
ERR_VALUE_IN_INTERLEAVE_IN_LISTback to summary
private static final String ERR_VALUE_IN_INTERLEAVE_IN_LIST
errorContextback to summary
private Expression errorContext

The source location of this expression should be also reported in case of error.

inAnyNameClassback to summary
private final NameClassVisitor inAnyNameClass

Used to visit children of AnyNameClass

inAttributeback to summary
private final ExpressionWalker inAttribute

Used to visit children of attributes.

inElementback to summary
private final ExpressionWalker inElement

Used to visit children of elements.

inExceptback to summary
private final ExpressionWalker inExcept

Used to visit children of the 'except' clause of data.

inGroupInOneOrMoreInElementback to summary
private final ExpressionWalker inGroupInOneOrMoreInElement

Used to visit children of group/interleave in oneOrMore in elements.

inInterleaveInListback to summary
private final ExpressionWalker inInterleaveInList

Used to visit children of interleaves in lists.

inListback to summary
private final ExpressionWalker inList

Used to visit children of lists.

inNameClassback to summary
private final RestrictionChecker.NameClassWalker inNameClass

Used to visit name classes.

inNsNameClassback to summary
private final NameClassVisitor inNsNameClass

Used to visit children of NamespaceNameClass

inOneOrMoreInElementback to summary
private final ExpressionWalker inOneOrMoreInElement

Used to visit children of oneOrMore in elements.

inStartback to summary
private final ExpressionWalker inStart

Used to visit the start pattern.

readerback to summary
private final RELAXNGReader reader

Reader object to which errors are reported.

visitedExpsback to summary
private final Set<Expression> visitedExps

Visited ElementExp/AttributeExps.

Constructor Detail

RestrictionCheckerback to summary
public RestrictionChecker(RELAXNGReader _reader)

Method Detail

checkback to summary
public void check()

Traverses the grammar and performs the contextual check.

checkNameClassback to summary
public void checkNameClass(NameClass nc)

Checks the contextual restriction on a name class.

If an error is found, it is reported through GrammarReader.

reportErrorback to summary
private void reportError(Expression exp, String errorMsg)
reportErrorback to summary
private void reportError(Expression exp, String errorMsg, Object[] args)
com.sun.msv.reader.trex.ng back to summary

private Class RestrictionChecker.DefaultChecker

extends ExpressionWalker
Class Inheritance
Known Direct Subclasses
com.sun.msv.reader.trex.ng.RestrictionChecker.ListChecker

The base class of all other context-specific checker. This class performs the context switching.

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
protected void
public void
public void
public void
public void
public void
public void
public void
Inherited from com.sun.msv.grammar.util.ExpressionWalker:
onBinExponConcuronEpsilononMixedonNullSetonOneOrMoreonOtheronRefonSequenceonValue

Constructor Detail

DefaultCheckerback to summary
private DefaultChecker()

Method Detail

checkAttributeInfiniteNameback to summary
protected void checkAttributeInfiniteName(final AttributeExp exp)
onAnyStringback to summary
public void onAnyString()

Overrides com.sun.msv.grammar.util.ExpressionWalker.onAnyString.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onAnyString.

onAttributeback to summary
public void onAttribute(AttributeExp exp)

Overrides com.sun.msv.grammar.util.ExpressionWalker.onAttribute.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onAttribute.

onChoiceback to summary
public void onChoice(ChoiceExp exp)

Overrides com.sun.msv.grammar.util.ExpressionWalker.onChoice.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onChoice.

onDataback to summary
public void onData(DataExp exp)

Overrides com.sun.msv.grammar.util.ExpressionWalker.onData.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onData.

onElementback to summary
public void onElement(ElementExp exp)

Overrides com.sun.msv.grammar.util.ExpressionWalker.onElement.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onElement.

onInterleaveback to summary
public void onInterleave(InterleaveExp exp)

Overrides com.sun.msv.grammar.util.ExpressionWalker.onInterleave.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onInterleave.

onListback to summary
public void onList(ListExp exp)

Overrides com.sun.msv.grammar.util.ExpressionWalker.onList.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onList.

com.sun.msv.reader.trex.ng back to summary

private Class RestrictionChecker.DuplicateAttributesChecker

extends DuplicateNameChecker
Class Inheritance

Field Summary

Inherited from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker:
areaLenareasexpsexpsLen

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
protected void
check(NameClassAndExpression exp)

Implements abstract com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.check.

tests a given exp against existing expressions (which are stored in the exps field.)
protected String
Inherited from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker:
addcheckendLeftBranchendRightBranchstart

Constructor Detail

DuplicateAttributesCheckerback to summary
private DuplicateAttributesChecker()

Method Detail

checkback to summary
protected void check(NameClassAndExpression exp)

Implements abstract com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.check.

Doc from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.check.

tests a given exp against existing expressions (which are stored in the exps field.)

getErrorMessageback to summary
protected String getErrorMessage()

Implements abstract com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.getErrorMessage.

Doc from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.getErrorMessage.

Gets the error message resource name.

com.sun.msv.reader.trex.ng back to summary

private Class RestrictionChecker.DuplicateElementsChecker

extends DuplicateNameChecker
Class Inheritance

Field Summary

Inherited from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker:
areaLenareasexpsexpsLen

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
protected void
check(NameClassAndExpression exp)

Implements abstract com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.check.

tests a given exp against existing expressions (which are stored in the exps field.)
protected String
Inherited from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker:
addcheckendLeftBranchendRightBranchstart

Constructor Detail

DuplicateElementsCheckerback to summary
private DuplicateElementsChecker()

Method Detail

checkback to summary
protected void check(NameClassAndExpression exp)

Implements abstract com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.check.

Doc from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.check.

tests a given exp against existing expressions (which are stored in the exps field.)

getErrorMessageback to summary
protected String getErrorMessage()

Implements abstract com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.getErrorMessage.

Doc from com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker.getErrorMessage.

Gets the error message resource name.

com.sun.msv.reader.trex.ng back to summary

protected abstract Class RestrictionChecker.DuplicateNameChecker

extends Object
Class Inheritance
  • java.lang.Object
  • com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateNameChecker
Known Direct Subclasses
com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateElementsChecker, com.sun.msv.reader.trex.ng.RestrictionChecker.DuplicateAttributesChecker

Field Summary

Modifier and TypeField and Description
protected int
protected int[]
areas

areas.

private final NameClassCollisionChecker
checker

Name class checker object.

protected NameClassAndExpression[]
exps

ElementExps will be added into this array.

protected int
expsLen

Number of items in the atts array.

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
public void
add(NameClassAndExpression exp)

Adds newly found element or attribute.

protected abstract void
check(NameClassAndExpression exp)

tests a given exp against existing expressions (which are stored in the exps field.)

protected void
check(NameClassAndExpression newExp, NameClassAndExpression oldExp)

Tests two name classes to see if they collide.

public void
endLeftBranch(int start)

public void
protected abstract String
getErrorMessage()

Gets the error message resource name.

public int
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

areaLenback to summary
protected int areaLen
areasback to summary
protected int[] areas

areas.

An area is a range of index designated by the start and end. Areas are stored as:

{ start, end, start, end, ... }

The start method gives the index. The endLeftBranch method creates an area by using the start index given by the start method. The endRightBranch method will remove the area.

When testing duplicate attributes, areas are created by ChoiceExp and used to exclude test candidates (as two attributes can share the same name if they are in different branches of choice.)

When testing duplicate elements, areas are created by InterleaveExp and used to include test candidates (as two elements cannot share the same name if they are in different branches of interleave.)

checkerback to summary
private final NameClassCollisionChecker checker

Name class checker object. One object is reused throughout the test.

expsback to summary
protected NameClassAndExpression[] exps

ElementExps will be added into this array.

expsLenback to summary
protected int expsLen

Number of items in the atts array.

Constructor Detail

DuplicateNameCheckerback to summary
protected DuplicateNameChecker()

Method Detail

addback to summary
public void add(NameClassAndExpression exp)

Adds newly found element or attribute.

checkback to summary
protected abstract void check(NameClassAndExpression exp)

tests a given exp against existing expressions (which are stored in the exps field.)

checkback to summary
protected void check(NameClassAndExpression newExp, NameClassAndExpression oldExp)

Tests two name classes to see if they collide.

endLeftBranchback to summary
public void endLeftBranch(int start)
endRightBranchback to summary
public void endRightBranch()
getErrorMessageback to summary
protected abstract String getErrorMessage()

Gets the error message resource name.

startback to summary
public int start()
com.sun.msv.reader.trex.ng back to summary

private Class RestrictionChecker.ListChecker

extends DefaultChecker
Class Inheritance

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public void
public void
public void
public void
Inherited from com.sun.msv.reader.trex.ng.RestrictionChecker.DefaultChecker:
checkAttributeInfiniteNameonChoiceonDataonInterleave

Constructor Detail

ListCheckerback to summary
private ListChecker()

Method Detail

onAnyStringback to summary
public void onAnyString()

Overrides com.sun.msv.reader.trex.ng.RestrictionChecker.DefaultChecker.onAnyString.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onAnyString.

onAttributeback to summary
public void onAttribute(AttributeExp exp)

Overrides com.sun.msv.reader.trex.ng.RestrictionChecker.DefaultChecker.onAttribute.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onAttribute.

onElementback to summary
public void onElement(ElementExp exp)

Overrides com.sun.msv.reader.trex.ng.RestrictionChecker.DefaultChecker.onElement.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onElement.

onListback to summary
public void onList(ListExp exp)

Overrides com.sun.msv.reader.trex.ng.RestrictionChecker.DefaultChecker.onList.

Implements com.sun.msv.grammar.ExpressionVisitorVoid.onList.

com.sun.msv.reader.trex.ng back to summary

pack-priv Class RestrictionChecker.NameClassWalker

extends Object
implements NameClassVisitor
Class Inheritance
  • java.lang.Object
  • com.sun.msv.reader.trex.ng.RestrictionChecker.NameClassWalker
All Implemented Interfaces
com.sun.msv.grammar.NameClassVisitor

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
public Object
public Object
public Object
public Object
public Object
public Object
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

NameClassWalkerback to summary
pack-priv NameClassWalker()

Method Detail

onAnyNameback to summary
public Object onAnyName(AnyNameClass nc)

Implements com.sun.msv.grammar.NameClassVisitor.onAnyName.

onChoiceback to summary
public Object onChoice(ChoiceNameClass nc)

Implements com.sun.msv.grammar.NameClassVisitor.onChoice.

onDifferenceback to summary
public Object onDifference(DifferenceNameClass nc)

Implements com.sun.msv.grammar.NameClassVisitor.onDifference.

onNotback to summary
public Object onNot(NotNameClass nc)

Implements com.sun.msv.grammar.NameClassVisitor.onNot.

onNsNameback to summary
public Object onNsName(NamespaceNameClass nc)

Implements com.sun.msv.grammar.NameClassVisitor.onNsName.

onSimpleback to summary
public Object onSimple(SimpleNameClass nc)

Implements com.sun.msv.grammar.NameClassVisitor.onSimple.