/* * reserved comment block * DO NOT REMOVE OR ALTER! */ /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sun.org.apache.xerces.internal.impl.xs; import com.sun.org.apache.xerces.internal.impl.dv.ValidatedInfo; import com.sun.org.apache.xerces.internal.impl.xs.util.XSObjectListImpl; import com.sun.org.apache.xerces.internal.xs.XSAnnotation; import com.sun.org.apache.xerces.internal.xs.XSAttributeGroupDefinition; import com.sun.org.apache.xerces.internal.xs.XSAttributeUse; import com.sun.org.apache.xerces.internal.xs.XSConstants; import com.sun.org.apache.xerces.internal.xs.XSNamespaceItem; import com.sun.org.apache.xerces.internal.xs.XSObjectList; import com.sun.org.apache.xerces.internal.xs.XSWildcard; /** * The XML representation for an attribute group declaration * schema component is a global element information item * * @xerces.internal * * @author Sandy Gao, IBM * @author Rahul Srivastava, Sun Microsystems Inc. * */ public class XSAttributeGroupDecl implements XSAttributeGroupDefinition { // name of the attribute group public String fName = null; // target namespace of the attribute group public String fTargetNamespace = null; // number of attribute uses included by this attribute group int fAttrUseNum = 0; // attribute uses included by this attribute group private static final int INITIAL_SIZE = 5; XSAttributeUseImpl[] fAttributeUses = new XSAttributeUseImpl[INITIAL_SIZE]; // attribute wildcard included by this attribute group public XSWildcardDecl fAttributeWC = null; // whether there is an attribute use whose type is or is derived from ID. public String fIDAttrName = null; // optional annotation public XSObjectList fAnnotations; protected XSObjectListImpl fAttrUses = null; // The namespace schema information item corresponding to the target namespace // of the attribute group definition, if it is globally declared; or null otherwise. private XSNamespaceItem fNamespaceItem = null; // 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 public String addAttributeUse(XSAttributeUseImpl attrUse) { // if this attribute use is prohibited, then don't check whether it's // of type ID if (attrUse.fUse != SchemaSymbols.USE_PROHIBITED) { if (attrUse.fAttrDecl.fType.isIDType()) { // if there is already an attribute use of type ID, // return its name (and don't add it to the list, to avoid // interruption to instance validation. if (fIDAttrName == null) fIDAttrName = attrUse.fAttrDecl.fName; else return fIDAttrName; } } if (fAttrUseNum == fAttributeUses.length) { fAttributeUses = resize(fAttributeUses, fAttrUseNum*2); } fAttributeUses[fAttrUseNum++] = attrUse; return null; } public void replaceAttributeUse(XSAttributeUse oldUse, XSAttributeUseImpl newUse) { for (int i=0; i 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; // } } /** * 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? * * @param typeName the name of the type containing this attribute group, used for error reporting purposes * @param baseGroup the XSAttributeGroupDecl that is the base we are checking against */ public Object[] validRestrictionOf(String typeName, XSAttributeGroupDecl baseGroup) { Object[] errorArgs = null; XSAttributeUseImpl attrUse = null; XSAttributeDecl attrDecl = null; XSAttributeUseImpl baseAttrUse = null; XSAttributeDecl baseAttrDecl = null; for (int i=0; iname of this XSObject depending on the * XSObject type. */ public String getName() { return fName; } /** * The namespace URI of this node, or null if it is * unspecified. defines how a namespace URI is attached to schema * components. */ public String getNamespace() { return fTargetNamespace; } /** * {attribute uses} A set of attribute uses. */ public XSObjectList getAttributeUses() { if (fAttrUses == null){ fAttrUses = new XSObjectListImpl(fAttributeUses, fAttrUseNum); } return fAttrUses; } /** * {attribute wildcard} Optional. A wildcard. */ public XSWildcard getAttributeWildcard() { return fAttributeWC; } /** * Optional. Annotation. */ public XSAnnotation getAnnotation() { return (fAnnotations != null) ? (XSAnnotation) fAnnotations.item(0) : null; } /** * Optional. Annotations. */ public XSObjectList getAnnotations() { return (fAnnotations != null) ? fAnnotations : XSObjectListImpl.EMPTY_LIST; } /** * @see org.apache.xerces.xs.XSObject#getNamespaceItem() */ public XSNamespaceItem getNamespaceItem() { return fNamespaceItem; } void setNamespaceItem(XSNamespaceItem namespaceItem) { fNamespaceItem = namespaceItem; } } // class XSAttributeGroupDecl