sandygao 2003/11/10 12:43:51
Modified: java/samples/xni PSVIWriter.java
Log:
Committing the PSVI Writer patch propsed by Pete Lloyd. Thx Pete.
Revision Changes Path
1.23 +94 -40 xml-xerces/java/samples/xni/PSVIWriter.java
Index: PSVIWriter.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/samples/xni/PSVIWriter.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- PSVIWriter.java 23 Sep 2003 21:55:37 -0000 1.22
+++ PSVIWriter.java 10 Nov 2003 20:43:51 -0000 1.23
@@ -601,7 +601,8 @@
throws XNIException {
if (fDocumentHandler == null)
return;
-
+
+ checkForChildren();
sendIndentedElement("element");
sendElementEvent("namespaceName", element.uri);
sendElementEvent("localName", element.localpart);
@@ -774,8 +775,8 @@
for (int i = 0; i < attrCount; i++) {
String localpart = attributes.getLocalName(i);
String prefix = attributes.getPrefix(i);
- if (prefix == XMLSymbols.PREFIX_XMLNS
- || localpart == XMLSymbols.PREFIX_XMLNS) {
+ if (prefix.equals(XMLSymbols.PREFIX_XMLNS)
+ || localpart.equals(XMLSymbols.PREFIX_XMLNS)) {
namespaceAttribute = true;
continue;
}
@@ -835,8 +836,8 @@
for (int i = 0; i < attrCount; i++) {
String localpart = attributes.getLocalName(i);
String prefix = attributes.getPrefix(i);
- if (!(prefix == XMLSymbols.PREFIX_XMLNS
- || localpart == XMLSymbols.PREFIX_XMLNS))
+ if (!(prefix.equals(XMLSymbols.PREFIX_XMLNS)
+ || localpart.equals(XMLSymbols.PREFIX_XMLNS)))
continue;
sendIndentedElement("attribute");
sendElementEvent("namespaceName", NamespaceContext.XMLNS_URI);
@@ -1167,7 +1168,7 @@
sendElementEvent(
"psv:derivationMethod",
this.translateDerivation(type.getDerivationMethod()));
- sendElementEvent("psv:final", this.translateFinal(type.getFinal()));
+ sendElementEvent("psv:final", this.translateBlockOrFinal(type.getFinal()));
sendElementEvent("psv:abstract", String.valueOf(type.getAbstract()));
processPSVIAttributeUses(type.getAttributeUses());
processPSVIAttributeWildcard(type.getAttributeWildcard());
@@ -1180,7 +1181,7 @@
sendUnIndentedElement("psv:contentType");
sendElementEvent(
"psv:prohibitedSubstitutions",
- this.translateFinal(type.getProhibitedSubstitutions()));
+ this.translateBlockOrFinal(type.getProhibitedSubstitutions()));
processPSVIAnnotations(type.getAnnotations());
sendUnIndentedElement("psv:complexTypeDefinition");
}
@@ -1214,7 +1215,7 @@
sendUnIndentedElement("psv:numeric");
sendUnIndentedElement("psv:fundamentalFacets");
- sendElementEvent("psv:final", this.translateFinal(type.getFinal()));
+ sendElementEvent("psv:final", this.translateBlockOrFinal(type.getFinal()));
sendElementEvent(
"psv:variety",
this.translateVariety(type.getVariety()));
@@ -1343,13 +1344,9 @@
for (int i = 0; i < uses.getLength(); i++) {
XSAttributeUse use = (XSAttributeUse)uses.item(i);
sendIndentedElement("psv:attributeUse");
- sendElementEvent(
- "psv:required",
- String.valueOf(use.getRequired()));
+ sendElementEvent("psv:required", String.valueOf(use.getRequired()));
processPSVIAttributeDeclarationOrRef(use.getAttrDeclaration());
- sendElementEvent(
- "psv:valueConstraint",
- use.getConstraintValue());
+ processPSVIValueConstraint(use.getConstraintType(),
use.getConstraintValue());
sendUnIndentedElement("psv:attributeUse");
}
sendUnIndentedElement("psv:attributeUses");
@@ -1449,7 +1446,19 @@
sendElementEvent("textContent", DOMUtil.getChildText(child));
sendUnIndentedElement("character");
sendUnIndentedElement("children");
- processDOMAttributes(child, "attributes");
+
+ //Create XMLAttributes from DOM
+ Attr[] atts = (Element) node == null ? null :
DOMUtil.getAttrs((Element) node);
+ XMLAttributes attrs = new XMLAttributesImpl();
+ for (int i=0; i<atts.length; i++) {
+ Attr att = (Attr)atts[i];
+ attrs.addAttribute(
+ new QName(att.getPrefix(), att.getLocalName(),
att.getName(), att.getNamespaceURI()),
+ "CDATA" ,att.getValue()
+ );
+ }
+
+ processAttributes(attrs);
sendUnIndentedElement("element");
}
}
@@ -1475,9 +1484,7 @@
sendElementEvent("localName", DOMUtil.getLocalName(att));
sendElementEvent("prefix", att.getPrefix());
sendElementEvent("normalizedValue", att.getValue());
- sendElementEvent(
- "specified",
- String.valueOf(att.getSpecified()));
+ sendElementEvent("specified", String.valueOf(att.getSpecified()));
sendElementEvent("attributeType");
// this property isn't relevent to PSVI
@@ -1498,21 +1505,18 @@
processPSVITypeDefinitionOrRef(
"psv:typeDefinition",
elem.getTypeDefinition());
- sendElementEvent("psv:scope", this.translateScope(elem.getScope()));
- sendElementEvent("psv:valueConstraint", elem.getConstraintValue());
+ processPSVIScope("psv:scope", elem.getEnclosingCTDefinition(),
elem.getScope());
+ processPSVIValueConstraint(elem.getConstraintType(),
elem.getConstraintValue());
sendElementEvent("psv:nillable", String.valueOf(elem.getNillable()));
processPSVIIdentityConstraintDefinitions(elem.getIdentityConstraints());
- processPSVIElementRef(
- "psv:substitutionGroupAffiliation",
- elem.getSubstitutionGroupAffiliation());
- // We can use translateFinal() for these, because substitution group
exclusions
- // is a subset of final values.
+ processPSVISubstitutionGroupAffiliation(elem);
+
sendElementEvent(
"psv:substitutionGroupExclusions",
- this.translateFinal(elem.getSubstitutionGroupExclusions()));
+ this.translateBlockOrFinal(elem.getSubstitutionGroupExclusions()));
sendElementEvent(
"psv:disallowedSubstitutions",
- this.translateFinal(elem.getDisallowedSubstitutions()));
+ this.translateBlockOrFinal(elem.getDisallowedSubstitutions()));
sendElementEvent("psv:abstract", String.valueOf(elem.getAbstract()));
processPSVIAnnotation(elem.getAnnotation());
sendUnIndentedElement("psv:elementDeclaration");
@@ -1527,8 +1531,8 @@
processPSVITypeDefinitionOrRef(
"psv:typeDefinition",
attr.getTypeDefinition());
- sendElementEvent("psv:scope", this.translateScope(attr.getScope()));
- sendElementEvent("psv:valueConstraint", attr.getConstraintValue());
+ processPSVIScope("psv:scope", attr.getEnclosingCTDefinition(),
attr.getScope());
+ processPSVIValueConstraint(attr.getConstraintType(),
attr.getConstraintValue());
processPSVIAnnotation(attr.getAnnotation());
sendUnIndentedElement("psv:attributeDeclaration");
}
@@ -1795,6 +1799,40 @@
processPSVIElementDeclaration(elem);
}
}
+
+ private void processPSVIScope(
+ String enclose,
+ XSComplexTypeDefinition enclosingCTD,
+ short scope) {
+ if (scope == XSConstants.SCOPE_ABSENT || scope == XSConstants.SCOPE_GLOBAL)
{
+ sendElementEvent(enclose, this.translateScope(scope));
+ } else { // XSConstants.SCOPE_LOCAL
+ processPSVITypeDefinitionRef(enclose, enclosingCTD);
+ }
+ }
+
+ private void processPSVIValueConstraint(
+ short constraintType,
+ String constraintValue) {
+ if (constraintType == XSConstants.VC_NONE) {
+ sendElementEvent("psv:valueConstraint");
+ } else {
+ sendIndentedElement("psv:valueConstraint");
+ sendElementEvent("psv:variety",
translateValueConstraintType(constraintType));
+ sendElementEvent("psv:value", constraintValue);
+ sendUnIndentedElement("psv:valueConstraint");
+ }
+ }
+
+ private void processPSVISubstitutionGroupAffiliation(XSElementDeclaration elem)
{
+ if (elem.getSubstitutionGroupAffiliation() == null) {
+ sendElementEvent("psv:substitutionGroupAffiliation");
+ } else {
+ sendIndentedElement("psv:substitutionGroupAffiliation");
+ processPSVIElementRef("psv:elementDeclaration",
elem.getSubstitutionGroupAffiliation());
+ sendUnIndentedElement("psv:substitutionGroupAffiliation");
+ }
+ }
/**
* This method writes an empty element at the current indent level.
@@ -2105,26 +2143,42 @@
return "unknown";
}
}
-
- private String translateFinal(short finalVal) {
+
+ private String translateValueConstraintType(short type) {
+ switch (type) {
+ case XSConstants.VC_DEFAULT :
+ return "default";
+ case XSConstants.VC_FIXED :
+ return "fixed";
+ default :
+ return "unknown";
+ }
+ }
+
+ private String translateBlockOrFinal(short val) {
String ret = "";
- if ((finalVal & XSConstants.DERIVATION_EXTENSION) != 0) {
- ret += SchemaSymbols.ELT_EXTENSION;
+ if ((val & XSConstants.DERIVATION_EXTENSION) != 0) {
+ ret += SchemaSymbols.ATTVAL_EXTENSION;
+ }
+ if ((val & XSConstants.DERIVATION_LIST) != 0) {
+ if (ret.length() != 0)
+ ret += " ";
+ ret += SchemaSymbols.ATTVAL_LIST;
}
- if ((finalVal & XSConstants.DERIVATION_LIST) != 0) {
+ if ((val & XSConstants.DERIVATION_RESTRICTION) != 0) {
if (ret.length() != 0)
ret += " ";
- ret += SchemaSymbols.ELT_LIST;
+ ret += SchemaSymbols.ATTVAL_RESTRICTION + " ";
}
- if ((finalVal & XSConstants.DERIVATION_RESTRICTION) != 0) {
+ if ((val & XSConstants.DERIVATION_UNION) != 0) {
if (ret.length() != 0)
ret += " ";
- ret += SchemaSymbols.ELT_RESTRICTION + " ";
+ ret += SchemaSymbols.ATTVAL_UNION + " ";
}
- if ((finalVal & XSConstants.DERIVATION_UNION) != 0) {
+ if ((val & XSConstants.DERIVATION_SUBSTITUTION) != 0) {
if (ret.length() != 0)
ret += " ";
- ret += SchemaSymbols.ELT_UNION + " ";
+ ret += SchemaSymbols.ATTVAL_SUBSTITUTION + " ";
}
return ret;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]