Methods Summary |
---|
public java.lang.String | addAttributeUse(com.sun.org.apache.xerces.internal.impl.xs.XSAttributeUseImpl attrUse)
// add an attribute use
// if the type is derived from ID, but there is already another attribute
// use of type ID, then return the name of the other attribute use;
// otherwise, return null
if (fAttrUseNum == fAttributeUses.length) {
fAttributeUses = resize(fAttributeUses, fAttrUseNum*2);
}
fAttributeUses[fAttrUseNum++] = attrUse;
// if this attribute use is prohibited, then don't check whether it's
// of type ID
if (attrUse.fUse == SchemaSymbols.USE_PROHIBITED)
return null;
if (attrUse.fAttrDecl.fType.isIDType()) {
// if there is already an attribute use of type ID, return it' sname
if (fIDAttrName == null)
fIDAttrName = attrUse.fAttrDecl.fName;
else
return fIDAttrName;
}
return null;
|
public com.sun.org.apache.xerces.internal.xs.XSAnnotation | getAnnotation()Optional. Annotation.
return fAnnotation;
|
public com.sun.org.apache.xerces.internal.xs.XSAttributeUse | getAttributeUse(java.lang.String namespace, java.lang.String name)
for (int i=0; i<fAttrUseNum; i++) {
if ( (fAttributeUses[i].fAttrDecl.fTargetNamespace == namespace) &&
(fAttributeUses[i].fAttrDecl.fName == name) )
return fAttributeUses[i];
}
return null;
|
public com.sun.org.apache.xerces.internal.xs.XSObjectList | getAttributeUses(){attribute uses} A set of attribute uses.
if (fAttrUses == null){
fAttrUses = new XSObjectListImpl(fAttributeUses, fAttrUseNum);
}
return fAttrUses;
|
public com.sun.org.apache.xerces.internal.xs.XSWildcard | getAttributeWildcard(){attribute wildcard} Optional. A wildcard.
return fAttributeWC;
|
public java.lang.String | getName()The name of this XSObject depending on the
XSObject type.
return fName;
|
public java.lang.String | getNamespace()The namespace URI of this node, or null if it is
unspecified. defines how a namespace URI is attached to schema
components.
return fTargetNamespace;
|
public com.sun.org.apache.xerces.internal.xs.XSNamespaceItem | getNamespaceItem()
//REVISIT: implement
return null;
|
public short | getType()Get the type of the object, i.e ELEMENT_DECLARATION.
return XSConstants.ATTRIBUTE_GROUP;
|
public void | removeProhibitedAttrs()
if (fAttrUseNum == 0) return;
int pCount = 0;
XSAttributeUseImpl[] pUses = new XSAttributeUseImpl[fAttrUseNum];
for (int i = 0; i < fAttrUseNum; i++) {
if (fAttributeUses[i].fUse == SchemaSymbols.USE_PROHIBITED) {
pCount++;
// we use the entries at the end, so that we can use the
// first entries to store non-prohibited attribute uses,
// hence avoid creating a new array.
pUses[fAttrUseNum-pCount] = fAttributeUses[i];
}
}
int newCount = 0;
if (pCount > 0) {
OUTER: for (int i = 0; i < fAttrUseNum; i++) {
if (fAttributeUses[i].fUse == SchemaSymbols.USE_PROHIBITED)
continue;
for (int j = 1; j <= pCount; j++) {
if (fAttributeUses[i].fAttrDecl.fName == pUses[fAttrUseNum-pCount].fAttrDecl.fName &&
fAttributeUses[i].fAttrDecl.fTargetNamespace == pUses[fAttrUseNum-pCount].fAttrDecl.fTargetNamespace) {
continue OUTER;
}
}
pUses[newCount++] = fAttributeUses[i];
}
fAttributeUses = pUses;
fAttrUseNum = newCount;
}
|
public void | reset()
fName = null;
fTargetNamespace = null;
// reset attribute uses
for (int i=0;i<fAttrUseNum;i++) {
fAttributeUses[i] = null;
}
fAttrUseNum = 0;
fAttributeWC = null;
fAnnotation = null;
fIDAttrName = null;
|
static final com.sun.org.apache.xerces.internal.impl.xs.XSAttributeUseImpl[] | resize(com.sun.org.apache.xerces.internal.impl.xs.XSAttributeUseImpl[] oldArray, int newSize)
XSAttributeUseImpl[] newArray = new XSAttributeUseImpl[newSize];
System.arraycopy(oldArray, 0, newArray, 0, Math.min(oldArray.length, newSize));
return newArray;
|
public java.lang.Object[] | validRestrictionOf(java.lang.String typeName, com.sun.org.apache.xerces.internal.impl.xs.XSAttributeGroupDecl baseGroup)Check that the attributes in this group validly restrict those from a base group.
If an error is found, an Object[] is returned. This contains the arguments for the error message
describing the error. The last element in the array (at index arr.length - 1) is the the error code.
Returns null if there is no error.
REVISIT: is there a better way of returning the appropriate information for the error?
Object[] errorArgs = null;
XSAttributeUseImpl attrUse = null;
XSAttributeDecl attrDecl = null;
XSAttributeUseImpl baseAttrUse = null;
XSAttributeDecl baseAttrDecl = null;
for (int i=0; i<fAttrUseNum; i++) {
attrUse = fAttributeUses[i];
attrDecl = attrUse.fAttrDecl;
// Look for a match in the base
baseAttrUse = (XSAttributeUseImpl)baseGroup.getAttributeUse(attrDecl.fTargetNamespace,attrDecl.fName);
if (baseAttrUse != null) {
//
// derivation-ok-restriction. Constraint 2.1.1
//
if (baseAttrUse.getRequired() && !attrUse.getRequired()) {
errorArgs = new Object[]{typeName, attrDecl.fName,
attrUse.fUse == SchemaSymbols.USE_OPTIONAL ? SchemaSymbols.ATTVAL_OPTIONAL : SchemaSymbols.ATTVAL_PROHIBITED,
"derivation-ok-restriction.2.1.1"};
return errorArgs;
}
// if this attribute is prohibited in the derived type, don't
// need to check any of the following constraints.
if (attrUse.fUse == SchemaSymbols.USE_PROHIBITED) {
continue;
}
baseAttrDecl = baseAttrUse.fAttrDecl;
//
// derivation-ok-restriction. Constraint 2.1.1
//
if (! XSConstraints.checkSimpleDerivationOk(attrDecl.fType,
baseAttrDecl.fType,
baseAttrDecl.fType.getFinal()) ) {
errorArgs = new Object[]{typeName, attrDecl.fName, attrDecl.fType.getName(),
baseAttrDecl.fType.getName(), "derivation-ok-restriction.2.1.2"};
return errorArgs;
}
//
// derivation-ok-restriction. Constraint 2.1.3
//
int baseConsType=baseAttrUse.fConstraintType!=XSConstants.VC_NONE?
baseAttrUse.fConstraintType:baseAttrDecl.getConstraintType();
int thisConstType = attrUse.fConstraintType!=XSConstants.VC_NONE?
attrUse.fConstraintType:attrDecl.getConstraintType();
if (baseConsType == XSConstants.VC_FIXED) {
if (thisConstType != XSConstants.VC_FIXED) {
errorArgs = new Object[]{typeName, attrDecl.fName,
"derivation-ok-restriction.2.1.3.a"};
return errorArgs;
} else {
// check the values are the same.
ValidatedInfo baseFixedValue=(baseAttrUse.fDefault!=null ?
baseAttrUse.fDefault: baseAttrDecl.fDefault);
ValidatedInfo thisFixedValue=(attrUse.fDefault!=null ?
attrUse.fDefault: attrDecl.fDefault);
if (!baseFixedValue.actualValue.equals(thisFixedValue.actualValue)) {
errorArgs = new Object[]{typeName, attrDecl.fName, thisFixedValue.stringValue(),
baseFixedValue.stringValue(), "derivation-ok-restriction.2.1.3.b"};
return errorArgs;
}
}
}
} else {
// No matching attribute in base - there should be a matching wildcard
//
// derivation-ok-restriction. Constraint 2.2
//
if (baseGroup.fAttributeWC == null) {
errorArgs = new Object[]{typeName, attrDecl.fName,
"derivation-ok-restriction.2.2.a"};
return errorArgs;
}
else if (!baseGroup.fAttributeWC.allowNamespace(attrDecl.fTargetNamespace)) {
errorArgs = new Object[]{typeName, attrDecl.fName,
attrDecl.fTargetNamespace==null?"":attrDecl.fTargetNamespace,
"derivation-ok-restriction.2.2.b"};
return errorArgs;
}
}
}
//
// Check that any REQUIRED attributes in the base have matching attributes
// in this group
// derivation-ok-restriction. Constraint 3
//
for (int i=0; i<baseGroup.fAttrUseNum; i++) {
baseAttrUse = baseGroup.fAttributeUses[i];
if (baseAttrUse.fUse == SchemaSymbols.USE_REQUIRED) {
baseAttrDecl = baseAttrUse.fAttrDecl;
// Look for a match in this group
if (getAttributeUse(baseAttrDecl.fTargetNamespace,baseAttrDecl.fName) == null) {
errorArgs = new Object[]{typeName, baseAttrUse.fAttrDecl.fName,
"derivation-ok-restriction.3"};
return errorArgs;
}
}
}
// Now, check wildcards
//
// derivation-ok-restriction. Constraint 4
//
if (fAttributeWC != null) {
if (baseGroup.fAttributeWC == null) {
errorArgs = new Object[]{typeName, "derivation-ok-restriction.4.1"};
return errorArgs;
}
if (! fAttributeWC.isSubsetOf(baseGroup.fAttributeWC)) {
errorArgs = new Object[]{typeName, "derivation-ok-restriction.4.2"};
return errorArgs;
}
if (fAttributeWC.weakerProcessContents(baseGroup.fAttributeWC)) {
errorArgs = new Object[]{typeName,
fAttributeWC.getProcessContentsAsString(),
baseGroup.fAttributeWC.getProcessContentsAsString(),
"derivation-ok-restriction.4.3"};
return errorArgs;
}
}
return null;
|