neilg 2003/06/23 09:35:23 Modified: java/src/org/apache/xerces/impl/xs SchemaGrammar.java XSAttributeDecl.java XSAttributeGroupDecl.java XSComplexTypeDecl.java XSElementDecl.java XSGroupDecl.java XSModelGroupImpl.java XSModelImpl.java XSNotationDecl.java XSWildcardDecl.java java/src/org/apache/xerces/impl/xs/traversers XSDAbstractIDConstraintTraverser.java XSDAbstractParticleTraverser.java XSDAbstractTraverser.java XSDAttributeGroupTraverser.java XSDAttributeTraverser.java XSDComplexTypeTraverser.java XSDElementTraverser.java XSDGroupTraverser.java XSDHandler.java XSDNotationTraverser.java XSDSimpleTypeTraverser.java XSDWildcardTraverser.java java/src/org/apache/xerces/impl/xs/identity IdentityConstraint.java Log: ensure that annotations are passed to all components that may possess them. Revision Changes Path 1.30 +32 -7 xml-xerces/java/src/org/apache/xerces/impl/xs/SchemaGrammar.java Index: SchemaGrammar.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/SchemaGrammar.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- SchemaGrammar.java 24 Mar 2003 21:10:58 -0000 1.29 +++ SchemaGrammar.java 23 Jun 2003 16:35:21 -0000 1.30 @@ -64,6 +64,7 @@ import org.apache.xerces.impl.dv.XSSimpleType; import org.apache.xerces.impl.xs.identity.IdentityConstraint; import org.apache.xerces.impl.xs.psvi.StringList; +import org.apache.xerces.impl.xs.psvi.XSAnnotation; import org.apache.xerces.impl.xs.psvi.XSAttributeDeclaration; import org.apache.xerces.impl.xs.psvi.XSAttributeGroupDefinition; import org.apache.xerces.impl.xs.psvi.XSConstants; @@ -83,7 +84,6 @@ import org.apache.xerces.impl.xs.util.XSNamedMapImpl; import org.apache.xerces.impl.xs.util.XSObjectListImpl; import org.apache.xerces.util.SymbolHash; -import org.apache.xerces.xni.grammars.Grammar; import org.apache.xerces.xni.grammars.XMLGrammarDescription; import org.apache.xerces.xni.grammars.XSGrammar; @@ -102,7 +102,7 @@ * @version $Id$ */ -public class SchemaGrammar implements Grammar, XSGrammar, XSNamespaceItem { +public class SchemaGrammar implements XSGrammar, XSNamespaceItem { // the target namespace of grammar String fTargetNamespace; @@ -119,6 +119,12 @@ // the XMLGrammarDescription member XSDDescription fGrammarDescription = null; + // annotations associated with the "root" schema of this targetNamespace + XSAnnotationImpl [] fAnnotations = null; + + // number of annotations declared + int fNumAnnotations; + // // Constructors // @@ -237,7 +243,7 @@ // xsi:schemaLocation name = SchemaSymbols.XSI_SCHEMALOCATION; tns = SchemaSymbols.URI_XSI; - type = schemaFactory.createTypeList(null, SchemaSymbols.URI_XSI, (short)0, anyURI); + type = schemaFactory.createTypeList(null, SchemaSymbols.URI_XSI, (short)0, anyURI, null); fGlobalAttrDecls.put(name, new BuiltinAttrDecl(name, tns, type, scope)); // xsi:noNamespaceSchemaLocation @@ -372,7 +378,7 @@ * register one identity constraint */ public final void addIDConstraintDecl(XSElementDecl elmDecl, IdentityConstraint decl) { - elmDecl.addIDConstaint(decl); + elmDecl.addIDConstraint(decl); fGlobalIDConstraintDecls.put(decl.getIdentityConstraintName(), decl); } @@ -624,6 +630,10 @@ return particleG; } + + public XSObjectList getAnnotations() { + return null; + } } private static class BuiltinAttrDecl extends XSAttributeDecl { public BuiltinAttrDecl(String name, String tns, @@ -643,6 +653,9 @@ public void reset () { // also ignore this call. } + public XSAnnotation getAnnotation() { + return null; + } } // class BuiltinAttrDecl // the grammars to hold components of the schema namespace @@ -872,8 +885,20 @@ * @see org.apache.xerces.impl.xs.psvi.XSNamespaceItem#getAnnotations() */ public XSObjectList getAnnotations() { - // REVISIT: implement - return null; + return new XSObjectListImpl(fAnnotations, fNumAnnotations); } + + public void addAnnotation(XSAnnotationImpl annotation) { + if(annotation == null) + return; + if(fAnnotations == null) { + fAnnotations = new XSAnnotationImpl[2]; + } else if(fNumAnnotations == fAnnotations.length) { + XSAnnotationImpl[] newArray = new XSAnnotationImpl[fNumAnnotations << 1]; + System.arraycopy(fAnnotations, 0, newArray, 0, fNumAnnotations); + fAnnotations = newArray; + } + fAnnotations[fNumAnnotations++] = annotation; + } } // class SchemaGrammar 1.13 +9 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/XSAttributeDecl.java Index: XSAttributeDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSAttributeDecl.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- XSAttributeDecl.java 21 Feb 2003 17:03:48 -0000 1.12 +++ XSAttributeDecl.java 23 Jun 2003 16:35:21 -0000 1.13 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -88,12 +88,15 @@ short fScope = XSConstants.SCOPE_ABSENT; // enclosing complex type, when the scope is local XSComplexTypeDecl fEnclosingCT = null; + // optional annotation + XSAnnotationImpl fAnnotation = null; // value constraint value ValidatedInfo fDefault = null; public void setValues(String name, String targetNamespace, XSSimpleType simpleType, short constraintType, short scope, - ValidatedInfo valInfo, XSComplexTypeDecl enclosingCT) { + ValidatedInfo valInfo, XSComplexTypeDecl enclosingCT, + XSAnnotationImpl annotation) { fName = name; fTargetNamespace = targetNamespace; fType = simpleType; @@ -101,6 +104,7 @@ fScope = scope; fDefault = valInfo; fEnclosingCT = enclosingCT; + fAnnotation = annotation; } public void reset(){ @@ -110,6 +114,7 @@ fConstraintType = XSConstants.VC_NONE; fScope = XSConstants.SCOPE_ABSENT; fDefault = null; + fAnnotation = null; } /** @@ -185,8 +190,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } public ValidatedInfo getValInfo() { 1.14 +7 -4 xml-xerces/java/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java Index: XSAttributeGroupDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- XSAttributeGroupDecl.java 18 Jun 2003 15:16:52 -0000 1.13 +++ XSAttributeGroupDecl.java 23 Jun 2003 16:35:21 -0000 1.14 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -91,6 +91,9 @@ // whether there is an attribute use whose type is or is derived from ID. public String fIDAttrName = null; + // optional annotation + public XSAnnotationImpl fAnnotation; + // 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; @@ -333,6 +336,7 @@ } fAttrUseNum = 0; fAttributeWC = null; + fAnnotation = null; fIDAttrName = null; } @@ -379,8 +383,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } /** 1.14 +15 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/XSComplexTypeDecl.java Index: XSComplexTypeDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSComplexTypeDecl.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- XSComplexTypeDecl.java 14 Jan 2003 20:21:45 -0000 1.13 +++ XSComplexTypeDecl.java 23 Jun 2003 16:35:21 -0000 1.14 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -61,6 +61,7 @@ import org.apache.xerces.impl.xs.psvi.*; import org.apache.xerces.impl.xs.models.XSCMValidator; import org.apache.xerces.impl.xs.models.CMBuilder; +import org.apache.xerces.impl.xs.util.XSObjectListImpl;; /** * The XML representation for a complexType @@ -109,6 +110,9 @@ // if there is a particle, the content model corresponding to that particle XSCMValidator fCMValidator = null; + // list of annotations affiliated with this type + XSObjectListImpl fAnnotations = null; + public XSComplexTypeDecl() { // do-nothing constructor for now. } @@ -117,7 +121,8 @@ XSTypeDefinition baseType, short derivedBy, short schemaFinal, short block, short contentType, boolean isAbstract, XSAttributeGroupDecl attrGrp, - XSSimpleType simpleType, XSParticleDecl particle) { + XSSimpleType simpleType, XSParticleDecl particle, + XSObjectListImpl annotations) { fTargetNamespace = targetNamespace; fBaseType = baseType; fDerivedBy = derivedBy; @@ -129,6 +134,7 @@ fAttrGrp = attrGrp; fXSSimpleType = simpleType; fParticle = particle; + fAnnotations = annotations; } public void setName(String name) { @@ -270,6 +276,11 @@ fXSSimpleType = null; fParticle = null; fCMValidator = null; + if(fAnnotations != null) { + // help out the garbage collector + fAnnotations.reset(); + } + fAnnotations = null; } /** @@ -416,8 +427,7 @@ * Optional. Annotation. */ public XSObjectList getAnnotations() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotations; } /** 1.12 +8 -6 xml-xerces/java/src/org/apache/xerces/impl/xs/XSElementDecl.java Index: XSElementDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSElementDecl.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- XSElementDecl.java 14 Jan 2003 20:21:45 -0000 1.11 +++ XSElementDecl.java 23 Jun 2003 16:35:21 -0000 1.12 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -98,6 +98,8 @@ public short fBlock = XSConstants.DERIVATION_NONE; // final set (substitution group exclusions) of the element public short fFinal = XSConstants.DERIVATION_NONE; + // optional annotation + public XSAnnotationImpl fAnnotation = null; // value constraint value public ValidatedInfo fDefault = null; // the substitution group affiliation of the element @@ -132,7 +134,7 @@ fEnclosingCT = enclosingCT; } - public void addIDConstaint(IdentityConstraint idc) { + public void addIDConstraint(IdentityConstraint idc) { if (fIDCPos == fIDConstraints.length) { fIDConstraints = resize(fIDConstraints, fIDCPos*2); } @@ -202,6 +204,7 @@ fBlock = XSConstants.DERIVATION_NONE; fFinal = XSConstants.DERIVATION_NONE; fDefault = null; + fAnnotation = null; fSubGroup = null; // reset identity constraints for (int i=0;i<fIDCPos;i++) { @@ -362,8 +365,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } @@ -375,4 +377,4 @@ return null; } -} // class XMLElementDecl +} // class XSElementDecl 1.7 +5 -4 xml-xerces/java/src/org/apache/xerces/impl/xs/XSGroupDecl.java Index: XSGroupDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSGroupDecl.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- XSGroupDecl.java 14 Jan 2003 20:21:45 -0000 1.6 +++ XSGroupDecl.java 23 Jun 2003 16:35:21 -0000 1.7 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 1999-2002 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -74,6 +74,8 @@ public String fTargetNamespace = null; // model group of the group public XSModelGroupImpl fModelGroup = null; + // optional annotation + public XSAnnotationImpl fAnnotation = null; /** * Get the type of the object, i.e ELEMENT_DECLARATION. @@ -110,8 +112,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } /** 1.4 +8 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/XSModelGroupImpl.java Index: XSModelGroupImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSModelGroupImpl.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- XSModelGroupImpl.java 21 Feb 2003 16:36:15 -0000 1.3 +++ XSModelGroupImpl.java 23 Jun 2003 16:35:21 -0000 1.4 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2002 The Apache Software Foundation. All rights + * Copyright (c) 2002,2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -84,6 +84,9 @@ public XSParticleDecl[] fParticles = null; public int fParticleCount = 0; + // this particle's optional annotation + public XSAnnotationImpl fAnnotation; + // whether this model group contains nothing public boolean isEmpty() { for (int i = 0; i < fParticleCount; i++) { @@ -201,6 +204,7 @@ fParticles = null; fParticleCount = 0; fDescription = null; + fAnnotation = null; } /** @@ -251,8 +255,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } /** @@ -262,4 +265,4 @@ return null; } -} // class XSParticle +} // class XSModelGroupImpl 1.9 +24 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/XSModelImpl.java Index: XSModelImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSModelImpl.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- XSModelImpl.java 22 Apr 2003 21:13:50 -0000 1.8 +++ XSModelImpl.java 23 Jun 2003 16:35:21 -0000 1.9 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2002 The Apache Software Foundation. All rights + * Copyright (c) 2002, 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -75,6 +75,7 @@ import org.apache.xerces.impl.xs.util.StringListImpl; import org.apache.xerces.impl.xs.util.XSNamedMap4Types; import org.apache.xerces.impl.xs.util.XSNamedMapImpl; +import org.apache.xerces.impl.xs.util.XSObjectListImpl; import org.apache.xerces.util.SymbolHash; import org.apache.xerces.util.XMLSymbols; @@ -136,6 +137,9 @@ private XSNamedMap[] fGlobalComponents; // store a certain kind of components from one namespace private XSNamedMap[][] fNSComponents; + + // store all annotations + private XSObjectListImpl fAnnotations = null; /** * Construct an XSModelImpl, by storing some grammars and grammars imported @@ -439,9 +443,24 @@ /** * {annotations} A set of annotations. */ - public XSObjectList getAnnotations() { - // REVISIT: SCAPI: to implement - return null; + public synchronized XSObjectList getAnnotations() { + if(fAnnotations != null) + return fAnnotations; + + // do this in two passes to avoid inaccurate array size + int totalAnnotations = 0; + for (int i = 0; i < fGrammarCount; i++) { + totalAnnotations += fGrammarList[i].fNumAnnotations; + } + XSAnnotationImpl [] annotations = new XSAnnotationImpl [totalAnnotations]; + int currPos = 0; + for (int i = 0; i < fGrammarCount; i++) { + SchemaGrammar currGrammar = fGrammarList[i]; + System.arraycopy(currGrammar.fAnnotations, 0, annotations, currPos, currGrammar.fNumAnnotations); + currPos += currGrammar.fNumAnnotations; + } + fAnnotations = new XSObjectListImpl(annotations, annotations.length); + return fAnnotations; } private static final String null2EmptyString(String str) { 1.5 +6 -4 xml-xerces/java/src/org/apache/xerces/impl/xs/XSNotationDecl.java Index: XSNotationDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSNotationDecl.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XSNotationDecl.java 14 Jan 2003 20:21:45 -0000 1.4 +++ XSNotationDecl.java 23 Jun 2003 16:35:21 -0000 1.5 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -80,6 +80,9 @@ // system id of the notation public String fSystemId = null; + // optional annotation + public XSAnnotationImpl fAnnotation = null; + /** * Get the type of the object, i.e ELEMENT_DECLARATION. */ @@ -123,8 +126,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } /** 1.13 +6 -4 xml-xerces/java/src/org/apache/xerces/impl/xs/XSWildcardDecl.java Index: XSWildcardDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSWildcardDecl.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- XSWildcardDecl.java 18 Jun 2003 15:16:52 -0000 1.12 +++ XSWildcardDecl.java 23 Jun 2003 16:35:21 -0000 1.13 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -86,6 +86,9 @@ // for NSCONSTRAINT_NOT, it means not any of the namespaces in the list public String[] fNamespaceList; + // optional annotation + public XSAnnotationImpl fAnnotation = null; + // I'm trying to implement the following constraint exactly as what the // spec describes. Sometimes it seems redundant, and sometimes there seems // to be much easier solutions. But it makes it easy to understand, @@ -609,8 +612,7 @@ * Optional. Annotation. */ public XSAnnotation getAnnotation() { - // REVISIT: SCAPI: to implement - return null; + return fAnnotation; } 1.8 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java Index: XSDAbstractIDConstraintTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XSDAbstractIDConstraintTraverser.java 18 Jun 2003 15:16:52 -0000 1.7 +++ XSDAbstractIDConstraintTraverser.java 23 Jun 2003 16:35:22 -0000 1.8 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -95,7 +95,7 @@ // General Attribute Checking on sElem // first child could be an annotation if (DOMUtil.getLocalName(sElem).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(sElem, icElemAttrs, false, schemaDoc); + ic.addAnnotation(traverseAnnotationDecl(sElem, icElemAttrs, false, schemaDoc)); sElem = DOMUtil.getNextSiblingElement(sElem); } // if no more children report an error @@ -115,7 +115,7 @@ if (selChild !=null) { // traverse annotation if any if (DOMUtil.getLocalName(selChild).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(selChild, attrValues, false, schemaDoc); + ic.addAnnotation(traverseAnnotationDecl(selChild, attrValues, false, schemaDoc)); selChild = DOMUtil.getNextSiblingElement(selChild); } else { @@ -167,7 +167,7 @@ if (fieldChild != null) { // traverse annotation if (DOMUtil.getLocalName(fieldChild).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(fieldChild, attrValues, false, schemaDoc); + ic.addAnnotation(traverseAnnotationDecl(fieldChild, attrValues, false, schemaDoc)); fieldChild = DOMUtil.getNextSiblingElement(fieldChild); } } 1.14 +27 -37 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java Index: XSDAbstractParticleTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- XSDAbstractParticleTraverser.java 18 Jun 2003 15:16:52 -0000 1.13 +++ XSDAbstractParticleTraverser.java 23 Jun 2003 16:35:22 -0000 1.14 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -61,6 +61,7 @@ import org.apache.xerces.impl.xs.SchemaSymbols; import org.apache.xerces.impl.xs.XSParticleDecl; import org.apache.xerces.impl.xs.XSModelGroupImpl; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSComplexTypeDecl; import org.apache.xerces.util.DOMUtil; import org.apache.xerces.impl.xs.util.XInt; @@ -101,10 +102,11 @@ Element child = DOMUtil.getFirstChildElement(allDecl); + XSAnnotationImpl annotation = null; if (child !=null) { // traverse Annotation if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } } @@ -131,34 +133,26 @@ } particle = null; - // REVISIT: model group - // Quick fix for the case that particle <all> does not have any children. - // For now we return null. In the future we might want to return model group decl. - if (fPArray.getParticleCount() != 0) { - - XInt minAtt = (XInt)attrValues[XSAttributeChecker.ATTIDX_MINOCCURS]; - XInt maxAtt = (XInt)attrValues[XSAttributeChecker.ATTIDX_MAXOCCURS]; - Long defaultVals = (Long)attrValues[XSAttributeChecker.ATTIDX_FROMDEFAULT]; + XInt minAtt = (XInt)attrValues[XSAttributeChecker.ATTIDX_MINOCCURS]; + XInt maxAtt = (XInt)attrValues[XSAttributeChecker.ATTIDX_MAXOCCURS]; + Long defaultVals = (Long)attrValues[XSAttributeChecker.ATTIDX_FROMDEFAULT]; - XSModelGroupImpl group = new XSModelGroupImpl(); - group.fCompositor = XSModelGroupImpl.MODELGROUP_ALL; - group.fParticleCount = fPArray.getParticleCount(); - group.fParticles = fPArray.popContext(); - particle = new XSParticleDecl(); - particle.fType = XSParticleDecl.PARTICLE_MODELGROUP; - particle.fMinOccurs = minAtt.intValue(); - particle.fMaxOccurs = maxAtt.intValue(); - particle.fValue = group; - - particle = checkOccurrences(particle, - SchemaSymbols.ELT_ALL, - (Element)allDecl.getParentNode(), - allContextFlags, - defaultVals.longValue()); - } - else { - fPArray.discardContext(); - } + XSModelGroupImpl group = new XSModelGroupImpl(); + group.fCompositor = XSModelGroupImpl.MODELGROUP_ALL; + group.fParticleCount = fPArray.getParticleCount(); + group.fParticles = fPArray.popContext(); + group.fAnnotation = annotation; + particle = new XSParticleDecl(); + particle.fType = XSParticleDecl.PARTICLE_MODELGROUP; + particle.fMinOccurs = minAtt.intValue(); + particle.fMaxOccurs = maxAtt.intValue(); + particle.fValue = group; + + particle = checkOccurrences(particle, + SchemaSymbols.ELT_ALL, + (Element)allDecl.getParentNode(), + allContextFlags, + defaultVals.longValue()); fAttrChecker.returnAttrArray(attrValues, schemaDoc); return particle; @@ -232,10 +226,11 @@ Object[] attrValues = fAttrChecker.checkAttributes(decl, false, schemaDoc); Element child = DOMUtil.getFirstChildElement(decl); + XSAnnotationImpl annotation = null; if (child !=null) { // traverse Annotation if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } } @@ -299,6 +294,7 @@ group.fCompositor = choice ? XSModelGroupImpl.MODELGROUP_CHOICE : XSModelGroupImpl.MODELGROUP_SEQUENCE; group.fParticleCount = fPArray.getParticleCount(); group.fParticles = fPArray.popContext(); + group.fAnnotation = annotation; particle = new XSParticleDecl(); particle.fType = XSParticleDecl.PARTICLE_MODELGROUP; particle.fMinOccurs = minAtt.intValue(); @@ -393,12 +389,6 @@ return array; } - void discardContext() { - // clear the particle array, to release memory - for (int i = fPos[fContextCount-1]; i < fPos[fContextCount]; i++) - fParticles[i] = null; - fContextCount--; - } } // the big particle array to hold all particles in model groups 1.27 +9 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java Index: XSDAbstractTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- XSDAbstractTraverser.java 18 Jun 2003 15:16:52 -0000 1.26 +++ XSDAbstractTraverser.java 23 Jun 2003 16:35:22 -0000 1.27 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -65,6 +65,7 @@ import org.apache.xerces.impl.validation.ValidationState; import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSAttributeGroupDecl; import org.apache.xerces.impl.xs.XSAttributeUseImpl; import org.apache.xerces.impl.xs.XSComplexTypeDecl; @@ -133,8 +134,8 @@ // REVISIT: store annotation information for PSVI // REVISIT: how to pass the parentAttrs? as DOM attributes? // as name/value pairs (string)? in parsed form? - // REVISIT: what to return - void traverseAnnotationDecl(Element annotationDecl, Object[] parentAttrs, + // @return XSAnnotationImpl object + XSAnnotationImpl traverseAnnotationDecl(Element annotationDecl, Object[] parentAttrs, boolean isGlobal, XSDocumentInfo schemaDoc) { // General Attribute Checking Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, isGlobal, schemaDoc); @@ -159,7 +160,7 @@ fAttrChecker.returnAttrArray(attrValues, schemaDoc); } - // REVISIT: an annotation decl should be returned when we support PSVI + return null; } // the QName simple type used to resolve qnames @@ -222,6 +223,7 @@ if (child != null) { // traverse annotation if any if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { + // REVISIT: change API to provide a receptacle for these traverseAnnotationDecl(child, attrs, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -245,6 +247,7 @@ if (child != null) { // traverse annotation if any if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { + // REVISIT: change API to provide for these traverseAnnotationDecl(child, attrs, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -338,6 +341,7 @@ if (child != null) { // traverse annotation if any if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { + // REVISIT: change API to provide for these traverseAnnotationDecl(child, attrs, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } 1.11 +7 -3 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java Index: XSDAttributeGroupTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSDAttributeGroupTraverser.java 18 Jun 2003 15:16:52 -0000 1.10 +++ XSDAttributeGroupTraverser.java 23 Jun 2003 16:35:22 -0000 1.11 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -58,6 +58,7 @@ import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSAttributeGroupDecl; import org.apache.xerces.util.DOMUtil; import org.apache.xerces.util.XMLSymbols; @@ -154,11 +155,12 @@ // check the content Element child = DOMUtil.getFirstChildElement(elmNode); + XSAnnotationImpl annotation = null; if (child!=null) { String childName = DOMUtil.getLocalName(child); if (childName.equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } } @@ -188,6 +190,8 @@ reportSchemaError("src-redefine.7.2.2", new Object [] {nameAttr, errArgs[errArgs.length-1]}, child); } } + + attrGrp.fAnnotation = annotation; // make an entry in global declarations. grammar.addGlobalAttributeGroupDecl(attrGrp); 1.25 +7 -4 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java Index: XSDAttributeTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- XSDAttributeTraverser.java 18 Jun 2003 15:16:52 -0000 1.24 +++ XSDAttributeTraverser.java 23 Jun 2003 16:35:22 -0000 1.25 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -63,6 +63,7 @@ import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; import org.apache.xerces.impl.xs.XSAttributeDecl; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSAttributeUseImpl; import org.apache.xerces.impl.xs.XSComplexTypeDecl; import org.apache.xerces.impl.xs.psvi.XSConstants; @@ -122,6 +123,7 @@ Element child = DOMUtil.getFirstChildElement(attrDecl); if (child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { + // REVISIT: put this somewhere traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -293,8 +295,9 @@ // get 'annotation' Element child = DOMUtil.getFirstChildElement(attrDecl); + XSAnnotationImpl annotation = null; if (child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -327,7 +330,7 @@ } attribute.setValues(nameAtt, tnsAtt, attrType, - constraintType, scope, attDefault, enclCT); + constraintType, scope, attDefault, enclCT, annotation); // Step 2: register attribute decl to the grammar if (isGlobal && nameAtt != null) 1.37 +32 -9 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java Index: XSDComplexTypeTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- XSDComplexTypeTraverser.java 18 Jun 2003 15:16:52 -0000 1.36 +++ XSDComplexTypeTraverser.java 23 Jun 2003 16:35:22 -0000 1.37 @@ -62,6 +62,7 @@ import org.apache.xerces.impl.dv.XSSimpleType; import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSAttributeGroupDecl; import org.apache.xerces.impl.xs.XSAttributeUseImpl; import org.apache.xerces.impl.xs.XSComplexTypeDecl; @@ -73,6 +74,7 @@ import org.apache.xerces.impl.xs.psvi.XSObjectList; import org.apache.xerces.impl.xs.psvi.XSTypeDefinition; import org.apache.xerces.impl.xs.util.XInt; +import org.apache.xerces.impl.xs.util.XSObjectListImpl; import org.apache.xerces.util.DOMUtil; import org.apache.xerces.xni.QName; import org.w3c.dom.Element; @@ -98,7 +100,7 @@ class XSDComplexTypeTraverser extends XSDAbstractParticleTraverser { // size of stack to hold globals: - private final static int GLOBAL_NUM = 10; + private final static int GLOBAL_NUM = 11; // globals for building XSComplexTypeDecls private String fName = null; @@ -113,6 +115,7 @@ private XSParticleDecl fParticle = null; private boolean fIsAbstract = false; private XSComplexTypeDecl fComplexTypeDecl = null; + private XSAnnotationImpl [] fAnnotations = null; private XSParticleDecl fEmptyParticle = null; @@ -240,7 +243,7 @@ if (child != null) { // traverse annotation if any if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + addAnnotation(traverseAnnotationDecl(child, attrValues, false, schemaDoc)); child = DOMUtil.getNextSiblingElement(child); } if (child !=null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { @@ -312,7 +315,8 @@ } fComplexTypeDecl.setValues(fName, fTargetNamespace, fBaseType, fDerivedBy, fFinal, fBlock, fContentType, fIsAbstract, - fAttrGrp, fXSSimpleType, fParticle); + fAttrGrp, fXSSimpleType, fParticle, new XSObjectListImpl(fAnnotations, + fAnnotations == null? 0 : fAnnotations.length)); return fComplexTypeDecl; } @@ -336,7 +340,7 @@ if (simpleContent != null) { // traverse annotation if any if (DOMUtil.getLocalName(simpleContent).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(simpleContent, simpleContentAttrValues, false, schemaDoc); + addAnnotation(traverseAnnotationDecl(simpleContent, simpleContentAttrValues, false, schemaDoc)); simpleContent = DOMUtil.getNextSiblingElement(simpleContent); } } @@ -455,7 +459,7 @@ // traverse annotation if any if (DOMUtil.getLocalName(simpleContent).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(simpleContent, derivationTypeAttrValues, false, schemaDoc); + addAnnotation(traverseAnnotationDecl(simpleContent, derivationTypeAttrValues, false, schemaDoc)); simpleContent = DOMUtil.getNextSiblingElement(simpleContent); } @@ -529,7 +533,7 @@ fixedFacets = fi.fFixedFacets; } - fXSSimpleType = schemaFactory.createTypeRestriction(null,schemaDoc.fTargetNamespace,(short)0,baseValidator); + fXSSimpleType = schemaFactory.createTypeRestriction(null,schemaDoc.fTargetNamespace,(short)0,baseValidator,null); try{ fValidationState.setNamespaceSupport(schemaDoc.fNamespaceSupport); fXSSimpleType.applyFacets(facetData, presentFacets, fixedFacets, fValidationState); @@ -655,7 +659,7 @@ if (complexContent != null) { // traverse annotation if any if (DOMUtil.getLocalName(complexContent).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(complexContent, complexContentAttrValues, false, schemaDoc); + addAnnotation(traverseAnnotationDecl(complexContent, complexContentAttrValues, false, schemaDoc)); complexContent = DOMUtil.getNextSiblingElement(complexContent); } } @@ -744,7 +748,7 @@ if (complexContent != null) { // traverse annotation if any if (DOMUtil.getLocalName(complexContent).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(complexContent, derivationTypeAttrValues, false, schemaDoc); + addAnnotation(traverseAnnotationDecl(complexContent, derivationTypeAttrValues, false, schemaDoc)); complexContent = DOMUtil.getNextSiblingElement(complexContent); } if (complexContent !=null && @@ -1169,9 +1173,11 @@ fGlobalStore[fGlobalStorePos++] = fAttrGrp; fGlobalStore[fGlobalStorePos++] = fParticle; fGlobalStore[fGlobalStorePos++] = fXSSimpleType; + fGlobalStore[fGlobalStorePos++] = fAnnotations; } private void contentRestore() { + fAnnotations = (XSAnnotationImpl [])fGlobalStore[--fGlobalStorePos]; fXSSimpleType = (XSSimpleType)fGlobalStore[--fGlobalStorePos]; fParticle = (XSParticleDecl)fGlobalStore[--fGlobalStorePos]; fAttrGrp = (XSAttributeGroupDecl)fGlobalStore[--fGlobalStorePos]; @@ -1186,5 +1192,22 @@ fName = (String)fGlobalStore[--fGlobalStorePos]; fIsAbstract = ((Boolean)fGlobalStore[--fGlobalStorePos]).booleanValue(); fComplexTypeDecl = (XSComplexTypeDecl)fGlobalStore[--fGlobalStorePos]; + } + + private void addAnnotation(XSAnnotationImpl annotation) { + if(annotation == null) + return; + // it isn't very likely that there will be more than one annotation + // in a complexType decl. This saves us fromhaving to push/pop + // one more object from the fGlobalStore, and that's bound + // to be a savings for most applications + if(fAnnotations == null) { + fAnnotations = new XSAnnotationImpl[1]; + } else { + XSAnnotationImpl [] tempArray = new XSAnnotationImpl[fAnnotations.length + 1]; + System.arraycopy(fAnnotations, 0, tempArray, 0, fAnnotations.length); + fAnnotations = tempArray; + } + fAnnotations[fAnnotations.length-1] = annotation; } } 1.25 +7 -3 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java Index: XSDElementTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- XSDElementTraverser.java 18 Jun 2003 15:16:53 -0000 1.24 +++ XSDElementTraverser.java 23 Jun 2003 16:35:22 -0000 1.25 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -61,6 +61,7 @@ import org.apache.xerces.impl.dv.XSSimpleType; import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSComplexTypeDecl; import org.apache.xerces.impl.xs.XSConstraints; import org.apache.xerces.impl.xs.XSElementDecl; @@ -191,6 +192,7 @@ Element child = DOMUtil.getFirstChildElement(elmDecl); if (child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { + // REVISIT: put this somewhere traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -335,10 +337,12 @@ // get 'annotation' Element child = DOMUtil.getFirstChildElement(elmDecl); + XSAnnotationImpl annotation = null; if(child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } + element.fAnnotation = annotation; // get 'type definition' XSTypeDefinition elementType = null; 1.18 +7 -3 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java Index: XSDGroupTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- XSDGroupTraverser.java 18 Jun 2003 15:16:53 -0000 1.17 +++ XSDGroupTraverser.java 23 Jun 2003 16:35:22 -0000 1.18 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -58,6 +58,7 @@ import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSGroupDecl; import org.apache.xerces.impl.xs.XSModelGroupImpl; import org.apache.xerces.impl.xs.XSParticleDecl; @@ -113,6 +114,7 @@ // no children other than "annotation?" are allowed Element child = DOMUtil.getFirstChildElement(elmNode); if (child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { + // REVISIT: put this somewhere traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -165,6 +167,7 @@ // must have at least one child Element l_elmChild = DOMUtil.getFirstChildElement(elmNode); + XSAnnotationImpl annotation = null; if (l_elmChild == null) { reportSchemaError("s4s-elt-must-match.2", new Object[]{"group (global)", "(annotation?, (all | choice | sequence))"}, @@ -172,7 +175,7 @@ } else { String childName = l_elmChild.getLocalName(); if (childName.equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(l_elmChild, attrValues, true, schemaDoc); + annotation = traverseAnnotationDecl(l_elmChild, attrValues, true, schemaDoc); l_elmChild = DOMUtil.getNextSiblingElement(l_elmChild); if (l_elmChild != null) childName = l_elmChild.getLocalName(); @@ -209,6 +212,7 @@ group.fTargetNamespace = schemaDoc.fTargetNamespace; if (particle != null) group.fModelGroup = (XSModelGroupImpl)particle.fValue; + group.fAnnotation = annotation; grammar.addGlobalGroupDecl(group); } } 1.71 +11 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java Index: XSDHandler.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- XSDHandler.java 18 Jun 2003 22:13:45 -0000 1.70 +++ XSDHandler.java 23 Jun 2003 16:35:22 -0000 1.71 @@ -634,7 +634,9 @@ if(importChild != null ) { String importComponentType = DOMUtil.getLocalName(importChild); if (importComponentType.equals(SchemaSymbols.ELT_ANNOTATION)) { - fElementTraverser.traverseAnnotationDecl(importChild, importAttrs, true, currSchemaInfo); + // promoting annotations to parent component + sg.addAnnotation( + fElementTraverser.traverseAnnotationDecl(importChild, importAttrs, true, currSchemaInfo)); } else { reportSchemaError("s4s-elt-must-match.1", new Object [] {localName, "annotation?", importComponentType}, child); } @@ -701,7 +703,9 @@ if(includeChild != null ) { String includeComponentType = DOMUtil.getLocalName(includeChild); if (includeComponentType.equals(SchemaSymbols.ELT_ANNOTATION)) { - fElementTraverser.traverseAnnotationDecl(includeChild, includeAttrs, true, currSchemaInfo); + // promoting annotations to parent component + sg.addAnnotation( + fElementTraverser.traverseAnnotationDecl(includeChild, includeAttrs, true, currSchemaInfo)); } else { reportSchemaError("s4s-elt-must-match.1", new Object [] {localName, "annotation?", includeComponentType}, child); } @@ -716,7 +720,9 @@ redefinedChild = DOMUtil.getNextSiblingElement(redefinedChild)) { String redefinedComponentType = DOMUtil.getLocalName(redefinedChild); if (redefinedComponentType.equals(SchemaSymbols.ELT_ANNOTATION)) { - fElementTraverser.traverseAnnotationDecl(redefinedChild, includeAttrs, true, currSchemaInfo); + // promoting annotations to parent component + sg.addAnnotation( + fElementTraverser.traverseAnnotationDecl(redefinedChild, includeAttrs, true, currSchemaInfo)); DOMUtil.setHidden(redefinedChild); } // catch all other content errors later @@ -1007,7 +1013,7 @@ fSimpleTypeTraverser.traverseGlobal(globalComp, currSchemaDoc, currSG); } else if (componentType.equals(SchemaSymbols.ELT_ANNOTATION)) { - fElementTraverser.traverseAnnotationDecl(globalComp, currSchemaDoc.getSchemaAttrs(), true, currSchemaDoc); + currSG.addAnnotation(fElementTraverser.traverseAnnotationDecl(globalComp, currSchemaDoc.getSchemaAttrs(), true, currSchemaDoc)); } else { reportSchemaError("s4s-elt-invalid-content.1", new Object [] {SchemaSymbols.ELT_SCHEMA, DOMUtil.getLocalName(globalComp)}, globalComp); 1.11 +6 -3 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDNotationTraverser.java Index: XSDNotationTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDNotationTraverser.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSDNotationTraverser.java 18 Jun 2003 15:16:53 -0000 1.10 +++ XSDNotationTraverser.java 23 Jun 2003 16:35:22 -0000 1.11 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,6 +59,7 @@ import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSNotationDecl; import org.apache.xerces.util.DOMUtil; import org.w3c.dom.Element; @@ -115,14 +116,16 @@ //check content Element content = DOMUtil.getFirstChildElement(elmNode); + XSAnnotationImpl annotation = null; if (content != null) { // traverse annotation if any if (DOMUtil.getLocalName(content).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(content, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(content, attrValues, false, schemaDoc); content = DOMUtil.getNextSiblingElement(content); } } + notation.fAnnotation = annotation; if (content!=null){ Object[] args = new Object [] {SchemaSymbols.ELT_NOTATION, "(annotation?)", DOMUtil.getLocalName(content)}; reportSchemaError("s4s-elt-must-match.1", args, content); 1.25 +29 -11 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java Index: XSDSimpleTypeTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- XSDSimpleTypeTraverser.java 18 Jun 2003 15:16:53 -0000 1.24 +++ XSDSimpleTypeTraverser.java 23 Jun 2003 16:35:22 -0000 1.25 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -65,9 +65,11 @@ import org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl; import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.psvi.XSConstants; import org.apache.xerces.impl.xs.psvi.XSObjectList; import org.apache.xerces.impl.xs.psvi.XSTypeDefinition; +import org.apache.xerces.impl.xs.util.XSObjectListImpl; import org.apache.xerces.impl.xs.util.XInt; import org.apache.xerces.util.DOMUtil; import org.apache.xerces.xni.QName; @@ -176,10 +178,13 @@ // annotation?,(list|restriction|union) Element child = DOMUtil.getFirstChildElement(simpleTypeDecl); + XSAnnotationImpl [] annotations = null; if (child != null) { // traverse annotation if any if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + XSAnnotationImpl annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); + if (annotation != null) + annotations = new XSAnnotationImpl [] {annotation}; child = DOMUtil.getNextSiblingElement(child); } } @@ -231,7 +236,17 @@ if (content != null) { // traverse annotation if any if (DOMUtil.getLocalName(content).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(content, contentAttrs, false, schemaDoc); + XSAnnotationImpl annotation = traverseAnnotationDecl(content, contentAttrs, false, schemaDoc); + if(annotation != null ) { + if(annotations == null) + annotations = new XSAnnotationImpl [] {annotation}; + else { + XSAnnotationImpl [] tempArray = new XSAnnotationImpl[2]; + tempArray[0] = annotations[0]; + annotations = tempArray; + annotations[1] = annotation; + } + } content = DOMUtil.getNextSiblingElement(content); } } @@ -272,7 +287,7 @@ } } - // when there is an error finding the base type of a restriciton + // when there is an error finding the base type of a restriction // we use anySimpleType as the base, then we should skip the facets, // because anySimpleType doesn't recognize any facet. boolean skipFacets = false; @@ -347,16 +362,19 @@ // create the simple type based on the "base" type XSSimpleType newDecl = null; if (restriction) { - newDecl = schemaFactory.createTypeRestriction(name, schemaDoc.fTargetNamespace, (short)finalProperty, baseValidator); + newDecl = schemaFactory.createTypeRestriction(name, schemaDoc.fTargetNamespace, (short)finalProperty, baseValidator, + annotations == null? null : new XSObjectListImpl(annotations, annotations.length)); } else if (list) { - newDecl = schemaFactory.createTypeList(name, schemaDoc.fTargetNamespace, (short)finalProperty, baseValidator); + newDecl = schemaFactory.createTypeList(name, schemaDoc.fTargetNamespace, (short)finalProperty, baseValidator, + annotations == null? null : new XSObjectListImpl(annotations, annotations.length)); } else if (union) { XSSimpleType[] memberDecls = new XSSimpleType[dTValidators.size()]; for (int i = 0; i < dTValidators.size(); i++) memberDecls[i] = (XSSimpleType)dTValidators.elementAt(i); - newDecl = schemaFactory.createTypeUnion(name, schemaDoc.fTargetNamespace, (short)finalProperty, memberDecls); + newDecl = schemaFactory.createTypeUnion(name, schemaDoc.fTargetNamespace, (short)finalProperty, memberDecls, + annotations == null? null : new XSObjectListImpl(annotations, annotations.length)); } // now traverse facets, if it's derived by restriction @@ -467,13 +485,13 @@ switch (refType) { case XSConstants.DERIVATION_RESTRICTION: return schemaFactory.createTypeRestriction(name, namespace, (short)0, - SchemaGrammar.fAnySimpleType); + SchemaGrammar.fAnySimpleType, null); case XSConstants.DERIVATION_LIST: return schemaFactory.createTypeList(name, namespace, (short)0, - SchemaGrammar.fAnySimpleType); + SchemaGrammar.fAnySimpleType, null); case XSConstants.DERIVATION_UNION: return schemaFactory.createTypeUnion(name, namespace, (short)0, - new XSSimpleType[]{SchemaGrammar.fAnySimpleType}); + new XSSimpleType[]{SchemaGrammar.fAnySimpleType}, null); } return null; 1.11 +6 -3 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDWildcardTraverser.java Index: XSDWildcardTraverser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDWildcardTraverser.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSDWildcardTraverser.java 18 Jun 2003 15:16:53 -0000 1.10 +++ XSDWildcardTraverser.java 23 Jun 2003 16:35:22 -0000 1.11 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,6 +59,7 @@ import org.apache.xerces.impl.xs.SchemaGrammar; import org.apache.xerces.impl.xs.SchemaSymbols; +import org.apache.xerces.impl.xs.XSAnnotationImpl; import org.apache.xerces.impl.xs.XSParticleDecl; import org.apache.xerces.impl.xs.XSWildcardDecl; import org.apache.xerces.impl.xs.util.XInt; @@ -193,10 +194,11 @@ //check content Element child = DOMUtil.getFirstChildElement(elmNode); + XSAnnotationImpl annotation = null; if (child != null) { if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { - traverseAnnotationDecl(child, attrValues, false, schemaDoc); + annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } @@ -204,6 +206,7 @@ reportSchemaError("s4s-elt-must-match.1", new Object[]{"wildcard", "(annotation?)", DOMUtil.getLocalName(child)}, elmNode); } } + wildcard.fAnnotation = annotation; return wildcard; 1.8 +29 -5 xml-xerces/java/src/org/apache/xerces/impl/xs/identity/IdentityConstraint.java Index: IdentityConstraint.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/identity/IdentityConstraint.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- IdentityConstraint.java 20 Jan 2003 13:55:57 -0000 1.7 +++ IdentityConstraint.java 23 Jun 2003 16:35:23 -0000 1.8 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. + * Copyright (c) 2001-2003 The Apache Software Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,8 +57,14 @@ package org.apache.xerces.impl.xs.identity; -import org.apache.xerces.impl.xs.psvi.*; +import org.apache.xerces.impl.xs.psvi.XSIDCDefinition; +import org.apache.xerces.impl.xs.psvi.StringList; +import org.apache.xerces.impl.xs.psvi.XSNamespaceItem; +import org.apache.xerces.impl.xs.psvi.XSObjectList; +import org.apache.xerces.impl.xs.psvi.XSConstants; import org.apache.xerces.impl.xs.util.StringListImpl; +import org.apache.xerces.impl.xs.util.XSObjectListImpl; +import org.apache.xerces.impl.xs.XSAnnotationImpl; /** * Base class of Schema identity constraint. @@ -93,6 +99,12 @@ /** Fields. */ protected Field[] fFields; + // optional annotations + protected XSAnnotationImpl [] fAnnotations = null; + + // number of annotations in this identity constraint + protected int fNumAnnotations; + // // Constructors // @@ -247,8 +259,7 @@ * Optional. Annotation. */ public XSObjectList getAnnotations() { - // REVISIT: SCAPI: to implement - return null; + return new XSObjectListImpl(fAnnotations, fNumAnnotations); } /** @@ -258,5 +269,18 @@ // REVISIT: implement return null; } + + public void addAnnotation(XSAnnotationImpl annotation) { + if(annotation == null) + return; + if(fAnnotations == null) { + fAnnotations = new XSAnnotationImpl[2]; + } else if(fNumAnnotations == fAnnotations.length) { + XSAnnotationImpl[] newArray = new XSAnnotationImpl[fNumAnnotations << 1]; + System.arraycopy(fAnnotations, 0, newArray, 0, fNumAnnotations); + fAnnotations = newArray; + } + fAnnotations[fNumAnnotations++] = annotation; + } } // class IdentityConstraint
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]