Methods Summary |
---|
public void | addElement(com.sun.org.apache.xerces.internal.impl.xs.XSElementDecl element, boolean isOptional)
fAllElements[fNumElements] = element;
fIsOptionalElement[fNumElements] = isOptional;
fNumElements++;
|
public boolean | checkUniqueParticleAttribution(com.sun.org.apache.xerces.internal.impl.xs.SubstitutionGroupHandler subGroupHandler)check whether this content violates UPA constraint.
// check whether there is conflict between any two leaves
for (int i = 0; i < fNumElements; i++) {
for (int j = i+1; j < fNumElements; j++) {
if (XSConstraints.overlapUPA(fAllElements[i], fAllElements[j], subGroupHandler)) {
// REVISIT: do we want to report all errors? or just one?
throw new XMLSchemaException("cos-nonambig", new Object[]{fAllElements[i].toString(),
fAllElements[j].toString()});
}
}
}
return false;
|
public boolean | endContentModel(int[] currentState)The method indicates the end of list of children
int state = currentState[0];
if (state == XSCMValidator.FIRST_ERROR || state == XSCMValidator.SUBSEQUENT_ERROR) {
return false;
}
// If <all> has minOccurs of zero and there are
// no children to validate, it is trivially valid
if (fHasOptionalContent && state == STATE_START) {
return true;
}
for (int i = 0; i < fNumElements; i++) {
// if one element is required, but not present, then error
if (!fIsOptionalElement[i] && currentState[i+1] == STATE_START)
return false;
}
return true;
|
java.lang.Object | findMatchingDecl(com.sun.org.apache.xerces.internal.xni.QName elementName, com.sun.org.apache.xerces.internal.impl.xs.SubstitutionGroupHandler subGroupHandler)
Object matchingDecl = null;
for (int i = 0; i < fNumElements; i++) {
matchingDecl = subGroupHandler.getMatchingElemDecl(elementName, fAllElements[i]);
if (matchingDecl != null)
break;
}
return matchingDecl;
|
public int | getOneTransitionCounter()This method is only implemented by XSDFACM .
throw new UnsupportedOperationException();
|
public java.lang.Object | getUserData()This method is only implemented by XSDFACM .
return null;
|
public java.lang.Object | oneTransition(com.sun.org.apache.xerces.internal.xni.QName elementName, int[] currentState, com.sun.org.apache.xerces.internal.impl.xs.SubstitutionGroupHandler subGroupHandler)The method corresponds to one transition in the content model.
// error state
if (currentState[0] < 0) {
currentState[0] = XSCMValidator.SUBSEQUENT_ERROR;
return findMatchingDecl(elementName, subGroupHandler);
}
// seen child
currentState[0] = STATE_CHILD;
Object matchingDecl = null;
for (int i = 0; i < fNumElements; i++) {
// we only try to look for a matching decl if we have not seen
// this element yet.
if (currentState[i+1] != STATE_START)
continue;
matchingDecl = subGroupHandler.getMatchingElemDecl(elementName, fAllElements[i]);
if (matchingDecl != null) {
// found the decl, mark this element as "seen".
currentState[i+1] = STATE_VALID;
return matchingDecl;
}
}
// couldn't find the decl, change to error state.
currentState[0] = XSCMValidator.FIRST_ERROR;
return findMatchingDecl(elementName, subGroupHandler);
|
public int[] | startContentModel()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
int[] state = new int[fNumElements + 1];
for (int i = 0; i <= fNumElements; i++) {
state[i] = STATE_START;
}
return state;
|
public java.util.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.
Vector ret = new Vector();
for (int i = 0; i < fNumElements; i++) {
// we only try to look for a matching decl if we have not seen
// this element yet.
if (state[i+1] == STATE_START)
ret.addElement(fAllElements[i]);
}
return ret;
|