blob: 1c703a7cf23ab4885aca013660e7a42b0bb40181 [file] [log] [blame]
<HTML><HEAD><META CONTENT="text/html; charset=UTF-8" HTTP-EQUIV="Content-Type"/><TITLE>EMMA Coverage Report</TITLE><STYLE TYPE="text/css"> TABLE,TD,TH {border-style:solid; border-color:black;} TD,TH {background:white;margin:0;line-height:100%;padding-left:0.5em;padding-right:0.5em;} TD {border-width:0 1px 0 0;} TH {border-width:1px 1px 1px 0;} TR TD.h {color:red;} TABLE {border-spacing:0; border-collapse:collapse;border-width:0 0 1px 1px;} P,H1,H2,H3,TH {font-family:verdana,arial,sans-serif;font-size:10pt;} TD {font-family:courier,monospace;font-size:10pt;} TABLE.hdft {border-spacing:0;border-collapse:collapse;border-style:none;} TABLE.hdft TH,TABLE.hdft TD {border-style:none;line-height:normal;} TABLE.hdft TH.tl,TABLE.hdft TD.tl {background:#6699CC;color:white;} TABLE.hdft TD.nv {background:#6633DD;color:white;} .nv A:link {color:white;} .nv A:visited {color:white;} .nv A:active {color:yellow;} TABLE.hdft A:link {color:white;} TABLE.hdft A:visited {color:white;} TABLE.hdft A:active {color:yellow;} .in {color:#356085;} TABLE.s TD {padding-left:0.25em;padding-right:0.25em;} TABLE.s TD.l {padding-left:0.25em;padding-right:0.25em;text-align:right;background:#F0F0F0;} TABLE.s TR.z TD {background:#FF9999;} TABLE.s TR.p TD {background:#FFFF88;} TABLE.s TR.c TD {background:#CCFFCC;} A:link {color:#0000EE;text-decoration:none;} A:visited {color:#0000EE;text-decoration:none;} A:hover {color:#0000EE;text-decoration:underline;} TABLE.cn {border-width:0 0 1px 0;} TABLE.s {border-width:1px 0 1px 1px;} TD.h {color:red;border-width:0 1px 0 0;} TD.f {border-width:0 1px 0 1px;} TD.hf {color:red;border-width:0 1px 0 1px;} TH.f {border-width:1px 1px 1px 1px;} TR.cis TD {background:#F0F0F0;} TR.cis TD {border-width:1px 1px 1px 0;} TR.cis TD.h {color:red;border-width:1px 1px 1px 0;} TR.cis TD.f {border-width:1px 1px 1px 1px;} TR.cis TD.hf {color:red;border-width:1px 1px 1px 1px;} TD.b {border-style:none;background:transparent;line-height:50%;} TD.bt {border-width:1px 0 0 0;background:transparent;line-height:50%;} TR.o TD {background:#F0F0F0;}TABLE.it {border-style:none;}TABLE.it TD,TABLE.it TH {border-style:none;}</STYLE></HEAD><BODY><TABLE CLASS="hdft" CELLSPACING="0" WIDTH="100%"><TR><TH CLASS="tl"><A HREF="http://www.eclemma.org/">EMMA</A> Coverage Report (generated Fri Feb 20 18:44:54 GMT 2009)</TH></TR><TR><TD CLASS="nv">[<A HREF="../xslUnitTestCoverage.html">all classes</A>][<A HREF="8f.html">org.eclipse.wst.xml.core.internal.contentmodel.util</A>]</TD></TR></TABLE><H2>COVERAGE SUMMARY FOR SOURCE FILE [<SPAN CLASS="in">DOMContentBuilderImpl.java</SPAN>]</H2><TABLE CELLSPACING="0" WIDTH="100%"><TR><TH>name</TH><TH>class, %</TH><TH>method, %</TH><TH>block, %</TH><TH>line, %</TH></TR><TR><TD>DOMContentBuilderImpl.java</TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/38)</TD><TD CLASS="h">0%   (0/1088)</TD><TD CLASS="h">0%   (0/260)</TD></TR></TABLE><H3>COVERAGE BREAKDOWN BY CLASS AND METHOD</H3><TABLE CLASS="cn" CELLSPACING="0" WIDTH="100%"><TR><TH CLASS="f">name</TH><TH>class, %</TH><TH>method, %</TH><TH>block, %</TH><TH>line, %</TH></TR><TR><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#0">DOMContentBuilderImpl</A></TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/38)</TD><TD CLASS="h">0%   (0/1088)</TD><TD CLASS="h">0%   (0/260)</TD></TR><TR><TD CLASS="f"><A HREF="#1">&lt;static initializer&gt;</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/3)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#2">DOMContentBuilderImpl (Document): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/44)</TD><TD CLASS="h">0%   (0/12)</TD></TR><TR><TD CLASS="f"><A HREF="#3">build (Node, CMNode): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/29)</TD><TD CLASS="h">0%   (0/9)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#4">buildAllContent (int): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#5">buildFirstChoice (int): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#6">buildFirstSubstitution (int): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#7">buildOptionalAttributes (int): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#8">buildOptionalElements (int): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#9">buildTextNodes (int): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#a">computeName (CMNode, Node): String</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR><TD CLASS="f"><A HREF="#b">createAttribute (CMAttributeDeclaration, String, Node): Attr</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/5)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#c">createDefaultContent (Node, CMElementDeclaration): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/10)</TD><TD CLASS="h">0%   (0/4)</TD></TR><TR><TD CLASS="f"><A HREF="#d">createDefaultRootContent (CMDocument, CMElementDeclaration): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/122)</TD><TD CLASS="h">0%   (0/22)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#e">createDefaultRootContent (CMDocument, CMElementDeclaration, List): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/8)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR><TD CLASS="f"><A HREF="#f">createElement (CMElementDeclaration, String, Node): Element</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/5)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#10">createTextNode (CMDataType, String, Node): Text</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/5)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#11">getBuildPolicy (): int</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/3)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#12">getNumOfRepeatableElements (): int</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/3)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#13">getParentCMElementDeclaration (): CMElementDeclaration</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/18)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#14">getProperty (String): Object</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/5)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#15">getResult (): List</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/3)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#16">getSubstitution (CMElementDeclaration): CMElementDeclaration</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/34)</TD><TD CLASS="h">0%   (0/9)</TD></TR><TR><TD CLASS="f"><A HREF="#17">getSuitableElement (CMElementDeclaration, CMDocument): CMElementDeclaration</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/20)</TD><TD CLASS="h">0%   (0/6)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#18">getSuitableElement (CMNamedNodeMap): CMElementDeclaration</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/27)</TD><TD CLASS="h">0%   (0/8)</TD></TR><TR><TD CLASS="f"><A HREF="#19">handlePopParent (Element, CMElementDeclaration): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#1a">handlePushParent (Element, CMElementDeclaration): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/1)</TD></TR><TR><TD CLASS="f"><A HREF="#1b">isAbstract (CMNode): boolean</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/17)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#1c">linkNode (Node): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/33)</TD><TD CLASS="h">0%   (0/7)</TD></TR><TR><TD CLASS="f"><A HREF="#1d">setBuildPolicy (int): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#0">setExternalCMDocumentSupport (DOMContentBuilderImpl$ExternalCMDocumentSupport...</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR><TD CLASS="f"><A HREF="#1f">setNumOfRepeatableElements (int): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#20">setProperty (String, Object): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/7)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR><TD CLASS="f"><A HREF="#21">testPopulateDocumentFromGrammarFile (Document, String, String, boolean): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/61)</TD><TD CLASS="h">0%   (0/17)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#22">visitCMAnyElement (CMAnyElement): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/99)</TD><TD CLASS="h">0%   (0/20)</TD></TR><TR><TD CLASS="f"><A HREF="#23">visitCMAttributeDeclaration (CMAttributeDeclaration): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/46)</TD><TD CLASS="h">0%   (0/8)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#24">visitCMDataType (CMDataType): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/61)</TD><TD CLASS="h">0%   (0/14)</TD></TR><TR><TD CLASS="f"><A HREF="#25">visitCMElementDeclaration (CMElementDeclaration): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/197)</TD><TD CLASS="h">0%   (0/47)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#26">visitCMGroup (CMGroup): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/146)</TD><TD CLASS="h">0%   (0/37)</TD></TR></TABLE><P></P><TABLE CLASS="s" CELLSPACING="0" WIDTH="100%"><TR><TD CLASS="l">1</TD><TD>/*******************************************************************************</TD></TR><TR><TD CLASS="l">2</TD><TD> * Copyright (c) 2002, 2006 IBM Corporation and others.</TD></TR><TR><TD CLASS="l">3</TD><TD> * All rights reserved. This program and the accompanying materials</TD></TR><TR><TD CLASS="l">4</TD><TD> * are made available under the terms of the Eclipse Public License v1.0</TD></TR><TR><TD CLASS="l">5</TD><TD> * which accompanies this distribution, and is available at</TD></TR><TR><TD CLASS="l">6</TD><TD> * http://www.eclipse.org/legal/epl-v10.html</TD></TR><TR><TD CLASS="l">7</TD><TD> *</TD></TR><TR><TD CLASS="l">8</TD><TD> * Contributors:</TD></TR><TR><TD CLASS="l">9</TD><TD> *     IBM Corporation - initial API and implementation</TD></TR><TR><TD CLASS="l">10</TD><TD> *     Jens Lukowski/Innoopract - initial renaming/restructuring</TD></TR><TR><TD CLASS="l">11</TD><TD> *     </TD></TR><TR><TD CLASS="l">12</TD><TD> *******************************************************************************/</TD></TR><TR><TD CLASS="l">13</TD><TD>package org.eclipse.wst.xml.core.internal.contentmodel.util;</TD></TR><TR><TD CLASS="l">14</TD><TD> </TD></TR><TR><TD CLASS="l">15</TD><TD>import java.util.Hashtable;</TD></TR><TR><TD CLASS="l">16</TD><TD>import java.util.List;</TD></TR><TR><TD CLASS="l">17</TD><TD>import java.util.Stack;</TD></TR><TR><TD CLASS="l">18</TD><TD>import java.util.Vector;</TD></TR><TR><TD CLASS="l">19</TD><TD> </TD></TR><TR><TD CLASS="l">20</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMAnyElement;</TD></TR><TR><TD CLASS="l">21</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;</TD></TR><TR><TD CLASS="l">22</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;</TD></TR><TR><TD CLASS="l">23</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;</TD></TR><TR><TD CLASS="l">24</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;</TD></TR><TR><TD CLASS="l">25</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;</TD></TR><TR><TD CLASS="l">26</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;</TD></TR><TR><TD CLASS="l">27</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;</TD></TR><TR><TD CLASS="l">28</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;</TD></TR><TR><TD CLASS="l">29</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.CMNodeList;</TD></TR><TR><TD CLASS="l">30</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.ContentModelManager;</TD></TR><TR><TD CLASS="l">31</TD><TD>import org.eclipse.wst.xml.core.internal.contentmodel.internal.util.CMDataTypeValueHelper;</TD></TR><TR><TD CLASS="l">32</TD><TD>import org.w3c.dom.Attr;</TD></TR><TR><TD CLASS="l">33</TD><TD>import org.w3c.dom.DOMImplementation;</TD></TR><TR><TD CLASS="l">34</TD><TD>import org.w3c.dom.Document;</TD></TR><TR><TD CLASS="l">35</TD><TD>import org.w3c.dom.DocumentType;</TD></TR><TR><TD CLASS="l">36</TD><TD>import org.w3c.dom.Element;</TD></TR><TR><TD CLASS="l">37</TD><TD>import org.w3c.dom.Node;</TD></TR><TR><TD CLASS="l">38</TD><TD>import org.w3c.dom.ProcessingInstruction;</TD></TR><TR><TD CLASS="l">39</TD><TD>import org.w3c.dom.Text;</TD></TR><TR><TD CLASS="l">40</TD><TD> </TD></TR><TR><TD CLASS="l">41</TD><TD> </TD></TR><TR><TD CLASS="l">42</TD><TD>/**</TD></TR><TR><TD CLASS="l">43</TD><TD> * todo... common up this code with 'ContentBuilder'</TD></TR><TR><TD CLASS="l">44</TD><TD> */</TD></TR><TR CLASS="z"><TD CLASS="l">45</TD><TD>public class DOMContentBuilderImpl extends CMVisitor implements DOMContentBuilder {</TD></TR><TR CLASS="z"><TD CLASS="l">46</TD><TD>        protected int buildPolicy = BUILD_ALL_CONTENT;</TD></TR><TR CLASS="z"><TD CLASS="l">47</TD><TD>        protected Hashtable propertyTable = new Hashtable();</TD></TR><TR><TD CLASS="l">48</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">49</TD><TD>        protected boolean alwaysVisit = false;</TD></TR><TR><TD CLASS="l">50</TD><TD>        protected List resultList;</TD></TR><TR><TD CLASS="l">51</TD><TD>        protected Document document;</TD></TR><TR><TD CLASS="l">52</TD><TD>        protected Node currentParent;</TD></TR><TR><TD CLASS="l">53</TD><TD>        protected Node topParent;</TD></TR><TR CLASS="z"><TD CLASS="l">54</TD><TD>        protected Vector visitedCMElementDeclarationList = new Vector();</TD></TR><TR CLASS="z"><TD CLASS="l">55</TD><TD>        protected boolean attachNodesToParent = true;</TD></TR><TR><TD CLASS="l">56</TD><TD>        protected NamespaceTable namespaceTable;</TD></TR><TR><TD CLASS="l">57</TD><TD> </TD></TR><TR><TD CLASS="l">58</TD><TD>        protected List namespaceInfoList;</TD></TR><TR><TD CLASS="l">59</TD><TD>        protected Element rootElement; // this is used only teporarily via</TD></TR><TR><TD CLASS="l">60</TD><TD>                                                                        // createDefaultRootContent</TD></TR><TR><TD CLASS="l">61</TD><TD>        protected ExternalCMDocumentSupport externalCMDocumentSupport;</TD></TR><TR><TD CLASS="l">62</TD><TD> </TD></TR><TR><TD CLASS="l">63</TD><TD>        public boolean supressCreationOfDoctypeAndXMLDeclaration;</TD></TR><TR><TD CLASS="l">64</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">65</TD><TD>        protected CMDataTypeValueHelper valueHelper = new CMDataTypeValueHelper();</TD></TR><TR><TD CLASS="l">66</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">67</TD><TD>        protected int numOfRepeatableElements = 1;</TD></TR><TR CLASS="z"><TD CLASS="l">68</TD><TD>        protected Stack cmGroupStack = new Stack();</TD></TR><TR><TD CLASS="l">69</TD><TD> </TD></TR><TR><TD CLASS="l">70</TD><TD>        public interface ExternalCMDocumentSupport {</TD></TR><TR><TD CLASS="l"><A NAME="0">71</A></TD><TD>                public CMDocument getCMDocument(Element element, String uri);</TD></TR><TR><TD CLASS="l">72</TD><TD>        }</TD></TR><TR><TD CLASS="l">73</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="2">74</A></TD><TD>        public void setExternalCMDocumentSupport(ExternalCMDocumentSupport externalCMDocumentSupport) {</TD></TR><TR CLASS="z"><TD CLASS="l">75</TD><TD>                this.externalCMDocumentSupport = externalCMDocumentSupport;</TD></TR><TR CLASS="z"><TD CLASS="l">76</TD><TD>        }</TD></TR><TR><TD CLASS="l">77</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">78</TD><TD>        public DOMContentBuilderImpl(Document document) {</TD></TR><TR CLASS="z"><TD CLASS="l">79</TD><TD>                this.document = document;</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="1d">80</A></TD><TD>                namespaceTable = new NamespaceTable(document);</TD></TR><TR CLASS="z"><TD CLASS="l">81</TD><TD>        }</TD></TR><TR><TD CLASS="l">82</TD><TD> </TD></TR><TR><TD CLASS="l">83</TD><TD>        public void setBuildPolicy(int buildPolicy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="11">84</A></TD><TD>                this.buildPolicy = buildPolicy;</TD></TR><TR CLASS="z"><TD CLASS="l">85</TD><TD>        }</TD></TR><TR><TD CLASS="l">86</TD><TD> </TD></TR><TR><TD CLASS="l">87</TD><TD>        public int getBuildPolicy() {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="4">88</A></TD><TD>                return buildPolicy;</TD></TR><TR><TD CLASS="l">89</TD><TD>        }</TD></TR><TR><TD CLASS="l">90</TD><TD> </TD></TR><TR><TD CLASS="l">91</TD><TD>        protected boolean buildAllContent(int policy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="8">92</A></TD><TD>                return (policy &amp; BUILD_ALL_CONTENT) == BUILD_ALL_CONTENT;</TD></TR><TR><TD CLASS="l">93</TD><TD>        }</TD></TR><TR><TD CLASS="l">94</TD><TD> </TD></TR><TR><TD CLASS="l">95</TD><TD>        protected boolean buildOptionalElements(int policy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="7">96</A></TD><TD>                return (policy &amp; BUILD_OPTIONAL_ELEMENTS) == BUILD_OPTIONAL_ELEMENTS;</TD></TR><TR><TD CLASS="l">97</TD><TD>        }</TD></TR><TR><TD CLASS="l">98</TD><TD> </TD></TR><TR><TD CLASS="l">99</TD><TD>        protected boolean buildOptionalAttributes(int policy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="5">100</A></TD><TD>                return (policy &amp; BUILD_OPTIONAL_ATTRIBUTES) == BUILD_OPTIONAL_ATTRIBUTES;</TD></TR><TR><TD CLASS="l">101</TD><TD>        }</TD></TR><TR><TD CLASS="l">102</TD><TD> </TD></TR><TR><TD CLASS="l">103</TD><TD>        protected boolean buildFirstChoice(int policy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="9">104</A></TD><TD>                return (policy &amp; BUILD_FIRST_CHOICE) == BUILD_FIRST_CHOICE;</TD></TR><TR><TD CLASS="l">105</TD><TD>        }</TD></TR><TR><TD CLASS="l">106</TD><TD> </TD></TR><TR><TD CLASS="l">107</TD><TD>        protected boolean buildTextNodes(int policy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="6">108</A></TD><TD>                return (policy &amp; BUILD_TEXT_NODES) == BUILD_TEXT_NODES;</TD></TR><TR><TD CLASS="l">109</TD><TD>        }</TD></TR><TR><TD CLASS="l">110</TD><TD> </TD></TR><TR><TD CLASS="l">111</TD><TD>        protected boolean buildFirstSubstitution(int policy) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="15">112</A></TD><TD>                return (policy &amp; BUILD_FIRST_SUBSTITUTION) == BUILD_FIRST_SUBSTITUTION;</TD></TR><TR><TD CLASS="l">113</TD><TD>        }</TD></TR><TR><TD CLASS="l">114</TD><TD> </TD></TR><TR><TD CLASS="l">115</TD><TD>        public List getResult() {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="20">116</A></TD><TD>                return resultList;</TD></TR><TR><TD CLASS="l">117</TD><TD>        }</TD></TR><TR><TD CLASS="l">118</TD><TD> </TD></TR><TR><TD CLASS="l">119</TD><TD>        public void setProperty(String propertyName, Object value) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="14">120</A></TD><TD>                propertyTable.put(propertyName, value);</TD></TR><TR CLASS="z"><TD CLASS="l">121</TD><TD>        }</TD></TR><TR><TD CLASS="l">122</TD><TD> </TD></TR><TR><TD CLASS="l">123</TD><TD>        public Object getProperty(String propertyName) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="3">124</A></TD><TD>                return propertyTable.get(propertyName);</TD></TR><TR><TD CLASS="l">125</TD><TD>        }</TD></TR><TR><TD CLASS="l">126</TD><TD> </TD></TR><TR><TD CLASS="l">127</TD><TD>        public void build(Node parent, CMNode child) {</TD></TR><TR CLASS="z"><TD CLASS="l">128</TD><TD>                resultList = new Vector();</TD></TR><TR CLASS="z"><TD CLASS="l">129</TD><TD>                topParent = parent;</TD></TR><TR CLASS="z"><TD CLASS="l">130</TD><TD>                currentParent = parent;</TD></TR><TR CLASS="z"><TD CLASS="l">131</TD><TD>                if (parent instanceof Element) {</TD></TR><TR CLASS="z"><TD CLASS="l">132</TD><TD>                        namespaceTable.addElementLineage((Element) parent);</TD></TR><TR><TD CLASS="l">133</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">134</TD><TD>                attachNodesToParent = false;</TD></TR><TR CLASS="z"><TD CLASS="l">135</TD><TD>                alwaysVisit = true;</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="e">136</A></TD><TD>                visitCMNode(child);</TD></TR><TR CLASS="z"><TD CLASS="l">137</TD><TD>        }</TD></TR><TR><TD CLASS="l">138</TD><TD> </TD></TR><TR><TD CLASS="l">139</TD><TD>        public void createDefaultRootContent(CMDocument cmDocument, CMElementDeclaration rootCMElementDeclaration, List namespaceInfoList) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">140</TD><TD>                this.namespaceInfoList = namespaceInfoList;</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="d">141</A></TD><TD>                createDefaultRootContent(cmDocument, rootCMElementDeclaration);</TD></TR><TR CLASS="z"><TD CLASS="l">142</TD><TD>        }</TD></TR><TR><TD CLASS="l">143</TD><TD> </TD></TR><TR><TD CLASS="l">144</TD><TD>        public void createDefaultRootContent(CMDocument cmDocument, CMElementDeclaration rootCMElementDeclaration) throws Exception {</TD></TR><TR CLASS="z"><TD CLASS="l">145</TD><TD>                String grammarFileName = cmDocument.getNodeName();</TD></TR><TR CLASS="z"><TD CLASS="l">146</TD><TD>                if (!supressCreationOfDoctypeAndXMLDeclaration) {</TD></TR><TR><TD CLASS="l">147</TD><TD>                        // TODO cs... investigate to see if this code path is ever used,</TD></TR><TR><TD CLASS="l">148</TD><TD>                        // doesn't seem to be</TD></TR><TR><TD CLASS="l">149</TD><TD>                        // for now I'm setting the encoding to UTF-8 just incase this code</TD></TR><TR><TD CLASS="l">150</TD><TD>                        // path is used somewhere</TD></TR><TR><TD CLASS="l">151</TD><TD>                        //</TD></TR><TR CLASS="z"><TD CLASS="l">152</TD><TD>                        String piValue = &#34;version=\&#34;1.0\&#34;&#34;; //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">153</TD><TD>                        String encoding = &#34;UTF-8&#34;; //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">154</TD><TD>                        piValue += &#34; encoding=\&#34;&#34; + encoding + &#34;\&#34;&#34;; //$NON-NLS-1$ //$NON-NLS-2$      </TD></TR><TR CLASS="z"><TD CLASS="l">155</TD><TD>                        ProcessingInstruction pi = document.createProcessingInstruction(&#34;xml&#34;, piValue); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">156</TD><TD>                        document.appendChild(pi);</TD></TR><TR><TD CLASS="l">157</TD><TD> </TD></TR><TR><TD CLASS="l">158</TD><TD>                        // if we have a 'dtd' then add a DOCTYPE tag</TD></TR><TR><TD CLASS="l">159</TD><TD>                        //</TD></TR><TR CLASS="z"><TD CLASS="l">160</TD><TD>                        if (grammarFileName != null &amp;&amp; grammarFileName.endsWith(&#34;dtd&#34;)) //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">161</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">162</TD><TD>                                DOMImplementation domImpl = document.getImplementation();</TD></TR><TR CLASS="z"><TD CLASS="l">163</TD><TD>                                DocumentType documentType = domImpl.createDocumentType(rootCMElementDeclaration.getElementName(), grammarFileName, grammarFileName);</TD></TR><TR CLASS="z"><TD CLASS="l">164</TD><TD>                                document.appendChild(documentType);</TD></TR><TR><TD CLASS="l">165</TD><TD>                        }</TD></TR><TR><TD CLASS="l">166</TD><TD>                }</TD></TR><TR><TD CLASS="l">167</TD><TD> </TD></TR><TR><TD CLASS="l">168</TD><TD>                // if we have a schema add an xsi:schemaLocation attribute</TD></TR><TR><TD CLASS="l">169</TD><TD>                //</TD></TR><TR CLASS="z"><TD CLASS="l">170</TD><TD>                if (grammarFileName != null &amp;&amp; grammarFileName.endsWith(&#34;xsd&#34;) &amp;&amp; namespaceInfoList != null) //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">171</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">172</TD><TD>                        DOMNamespaceInfoManager manager = new DOMNamespaceInfoManager();</TD></TR><TR CLASS="z"><TD CLASS="l">173</TD><TD>                        String name = rootCMElementDeclaration.getNodeName();</TD></TR><TR CLASS="z"><TD CLASS="l">174</TD><TD>                        if (namespaceInfoList.size() &gt; 0) {</TD></TR><TR CLASS="z"><TD CLASS="l">175</TD><TD>                                NamespaceInfo info = (NamespaceInfo) namespaceInfoList.get(0);</TD></TR><TR CLASS="z"><TD CLASS="l">176</TD><TD>                                if (info.prefix != null &amp;&amp; info.prefix.length() &gt; 0) {</TD></TR><TR CLASS="z"><TD CLASS="l">177</TD><TD>                                        name = info.prefix + &#34;:&#34; + name; //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">178</TD><TD>                                }</TD></TR><TR><TD CLASS="l">179</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">180</TD><TD>                        rootElement = createElement(rootCMElementDeclaration, name, document);</TD></TR><TR CLASS="z"><TD CLASS="l">181</TD><TD>                        manager.addNamespaceInfo(rootElement, namespaceInfoList, true);</TD></TR><TR><TD CLASS="l">182</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="c">183</A></TD><TD>                createDefaultContent(document, rootCMElementDeclaration);</TD></TR><TR CLASS="z"><TD CLASS="l">184</TD><TD>        }</TD></TR><TR><TD CLASS="l">185</TD><TD> </TD></TR><TR><TD CLASS="l">186</TD><TD>        public void createDefaultContent(Node parent, CMElementDeclaration ed) {</TD></TR><TR CLASS="z"><TD CLASS="l">187</TD><TD>                currentParent = parent;</TD></TR><TR CLASS="z"><TD CLASS="l">188</TD><TD>                alwaysVisit = true;</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="a">189</A></TD><TD>                visitCMElementDeclaration(ed);</TD></TR><TR CLASS="z"><TD CLASS="l">190</TD><TD>        }</TD></TR><TR><TD CLASS="l">191</TD><TD> </TD></TR><TR><TD CLASS="l">192</TD><TD>        public String computeName(CMNode cmNode, Node parent) {</TD></TR><TR CLASS="z"><TD CLASS="l">193</TD><TD>                String prefix = null;</TD></TR><TR CLASS="z"><TD CLASS="l">194</TD><TD>                return DOMNamespaceHelper.computeName(cmNode, parent, prefix, namespaceTable);</TD></TR><TR><TD CLASS="l">195</TD><TD>        }</TD></TR><TR><TD CLASS="l"><A NAME="f">196</A></TD><TD> </TD></TR><TR><TD CLASS="l">197</TD><TD>        // overide the following 'create' methods to control how nodes are created</TD></TR><TR><TD CLASS="l">198</TD><TD>        //</TD></TR><TR><TD CLASS="l">199</TD><TD>        protected Element createElement(CMElementDeclaration ed, String name, Node parent) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="b">200</A></TD><TD>                return document.createElement(name);</TD></TR><TR><TD CLASS="l">201</TD><TD>        }</TD></TR><TR><TD CLASS="l">202</TD><TD> </TD></TR><TR><TD CLASS="l">203</TD><TD>        protected Attr createAttribute(CMAttributeDeclaration ad, String name, Node parent) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="10">204</A></TD><TD>                return document.createAttribute(name);</TD></TR><TR><TD CLASS="l">205</TD><TD>        }</TD></TR><TR><TD CLASS="l">206</TD><TD> </TD></TR><TR><TD CLASS="l">207</TD><TD>        protected Text createTextNode(CMDataType dataType, String value, Node parent) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="1a">208</A></TD><TD>                return document.createTextNode(value);</TD></TR><TR><TD CLASS="l">209</TD><TD>        }</TD></TR><TR><TD CLASS="l">210</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="19">211</A></TD><TD>        protected void handlePushParent(Element parent, CMElementDeclaration ed) {</TD></TR><TR CLASS="z"><TD CLASS="l">212</TD><TD>        }</TD></TR><TR><TD CLASS="l">213</TD><TD> </TD></TR><TR><TD CLASS="l">214</TD><TD>        protected void handlePopParent(Element element, CMElementDeclaration ed) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="1f">215</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">216</TD><TD> </TD></TR><TR><TD CLASS="l">217</TD><TD>        // The range must be between 1 and 99.</TD></TR><TR><TD CLASS="l">218</TD><TD>        public void setNumOfRepeatableElements(int i) {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="12">219</A></TD><TD>                numOfRepeatableElements = i;</TD></TR><TR CLASS="z"><TD CLASS="l">220</TD><TD>        }</TD></TR><TR><TD CLASS="l">221</TD><TD> </TD></TR><TR><TD CLASS="l">222</TD><TD>        protected int getNumOfRepeatableElements() {</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="25">223</A></TD><TD>                return numOfRepeatableElements;</TD></TR><TR><TD CLASS="l">224</TD><TD>        }</TD></TR><TR><TD CLASS="l">225</TD><TD> </TD></TR><TR><TD CLASS="l">226</TD><TD>        public void visitCMElementDeclaration(CMElementDeclaration ed) {</TD></TR><TR CLASS="z"><TD CLASS="l">227</TD><TD>                int forcedMin = (buildOptionalElements(buildPolicy) || alwaysVisit) ? 1 : 0;</TD></TR><TR CLASS="z"><TD CLASS="l">228</TD><TD>                int min = Math.max(ed.getMinOccur(), forcedMin);</TD></TR><TR><TD CLASS="l">229</TD><TD> </TD></TR><TR><TD CLASS="l">230</TD><TD>                // Correct the min value if the element is contained in</TD></TR><TR><TD CLASS="l">231</TD><TD>                // a group.</TD></TR><TR CLASS="z"><TD CLASS="l">232</TD><TD>                if (!cmGroupStack.isEmpty()) {</TD></TR><TR CLASS="z"><TD CLASS="l">233</TD><TD>                        CMGroup group = (CMGroup) cmGroupStack.peek();</TD></TR><TR CLASS="z"><TD CLASS="l">234</TD><TD>                        int gmin = group.getMinOccur();</TD></TR><TR CLASS="z"><TD CLASS="l">235</TD><TD>                        if (gmin == 0)</TD></TR><TR CLASS="z"><TD CLASS="l">236</TD><TD>                                if (buildOptionalElements(buildPolicy)) { </TD></TR><TR><TD CLASS="l">237</TD><TD>                                        /* do nothing: min = min */</TD></TR><TR><TD CLASS="l">238</TD><TD>                                }</TD></TR><TR><TD CLASS="l">239</TD><TD>                                else {</TD></TR><TR CLASS="z"><TD CLASS="l">240</TD><TD>                                        min = min * gmin; // min = 0</TD></TR><TR><TD CLASS="l">241</TD><TD>                                }</TD></TR><TR><TD CLASS="l">242</TD><TD>                        else {</TD></TR><TR CLASS="z"><TD CLASS="l">243</TD><TD>                                min = min * gmin;</TD></TR><TR><TD CLASS="l">244</TD><TD>                        }</TD></TR><TR><TD CLASS="l">245</TD><TD>                }</TD></TR><TR><TD CLASS="l">246</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">247</TD><TD>                int max = Math.min(ed.getMaxOccur(), getNumOfRepeatableElements());</TD></TR><TR CLASS="z"><TD CLASS="l">248</TD><TD>                if (max &lt; min)</TD></TR><TR CLASS="z"><TD CLASS="l">249</TD><TD>                        max = min;</TD></TR><TR><TD CLASS="l">250</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">251</TD><TD>                alwaysVisit = false;</TD></TR><TR><TD CLASS="l">252</TD><TD> </TD></TR><TR><TD CLASS="l">253</TD><TD>                // Note - ed may not be abstract but has substitutionGroups</TD></TR><TR><TD CLASS="l">254</TD><TD>                // involved.</TD></TR><TR CLASS="z"><TD CLASS="l">255</TD><TD>                if (buildFirstSubstitution(buildPolicy) || isAbstract(ed)) // leave</TD></TR><TR><TD CLASS="l">256</TD><TD>                                                                                                                                        // this</TD></TR><TR><TD CLASS="l">257</TD><TD>                                                                                                                                        // for</TD></TR><TR><TD CLASS="l">258</TD><TD>                                                                                                                                        // backward</TD></TR><TR><TD CLASS="l">259</TD><TD>                                                                                                                                        // compatibility</TD></TR><TR><TD CLASS="l">260</TD><TD>                                                                                                                                        // for now</TD></TR><TR><TD CLASS="l">261</TD><TD>                {</TD></TR><TR><TD CLASS="l">262</TD><TD>                        // Note - To change so that if ed is optional, we do not</TD></TR><TR><TD CLASS="l">263</TD><TD>                        // generate anything here.</TD></TR><TR CLASS="z"><TD CLASS="l">264</TD><TD>                        ed = getSubstitution(ed);</TD></TR><TR><TD CLASS="l">265</TD><TD> </TD></TR><TR><TD CLASS="l">266</TD><TD>                        // Note - the returned ed may be an abstract element in</TD></TR><TR><TD CLASS="l">267</TD><TD>                        // which case the xml will be invalid.</TD></TR><TR><TD CLASS="l">268</TD><TD>                }</TD></TR><TR><TD CLASS="l">269</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">270</TD><TD>                if (min &gt; 0 &amp;&amp; !visitedCMElementDeclarationList.contains(ed)) {</TD></TR><TR CLASS="z"><TD CLASS="l">271</TD><TD>                        visitedCMElementDeclarationList.add(ed);</TD></TR><TR CLASS="z"><TD CLASS="l">272</TD><TD>                        for (int i = 1; i &lt;= max; i++) {</TD></TR><TR><TD CLASS="l">273</TD><TD>                                // create an Element for each</TD></TR><TR CLASS="z"><TD CLASS="l">274</TD><TD>                                Element element = null;</TD></TR><TR CLASS="z"><TD CLASS="l">275</TD><TD>                                if (rootElement != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">276</TD><TD>                                        element = rootElement;</TD></TR><TR CLASS="z"><TD CLASS="l">277</TD><TD>                                        rootElement = null;</TD></TR><TR><TD CLASS="l">278</TD><TD>                                }</TD></TR><TR><TD CLASS="l">279</TD><TD>                                else {</TD></TR><TR CLASS="z"><TD CLASS="l">280</TD><TD>                                        element = createElement(ed, computeName(ed, currentParent), currentParent);</TD></TR><TR><TD CLASS="l">281</TD><TD>                                }</TD></TR><TR><TD CLASS="l">282</TD><TD> </TD></TR><TR><TD CLASS="l">283</TD><TD>                                // visit the children of the GrammarElement</TD></TR><TR CLASS="z"><TD CLASS="l">284</TD><TD>                                Node oldParent = currentParent;</TD></TR><TR CLASS="z"><TD CLASS="l">285</TD><TD>                                currentParent = element;</TD></TR><TR CLASS="z"><TD CLASS="l">286</TD><TD>                                handlePushParent(element, ed);</TD></TR><TR><TD CLASS="l">287</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">288</TD><TD>                                namespaceTable.addElement(element);</TD></TR><TR><TD CLASS="l">289</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">290</TD><TD>                                boolean oldAttachNodesToParent = attachNodesToParent;</TD></TR><TR CLASS="z"><TD CLASS="l">291</TD><TD>                                attachNodesToParent = true;</TD></TR><TR><TD CLASS="l">292</TD><TD> </TD></TR><TR><TD CLASS="l">293</TD><TD>                                // instead of calling super.visitCMElementDeclaration()</TD></TR><TR><TD CLASS="l">294</TD><TD>                                // we duplicate the code with some minor modifications</TD></TR><TR CLASS="z"><TD CLASS="l">295</TD><TD>                                CMNamedNodeMap nodeMap = ed.getAttributes();</TD></TR><TR CLASS="z"><TD CLASS="l">296</TD><TD>                                int size = nodeMap.getLength();</TD></TR><TR CLASS="z"><TD CLASS="l">297</TD><TD>                                for (int j = 0; j &lt; size; j++) {</TD></TR><TR CLASS="z"><TD CLASS="l">298</TD><TD>                                        visitCMNode(nodeMap.item(j));</TD></TR><TR><TD CLASS="l">299</TD><TD>                                }</TD></TR><TR><TD CLASS="l">300</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">301</TD><TD>                                CMContent content = ed.getContent();</TD></TR><TR CLASS="z"><TD CLASS="l">302</TD><TD>                                if (content != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">303</TD><TD>                                        visitCMNode(content);</TD></TR><TR><TD CLASS="l">304</TD><TD>                                }</TD></TR><TR><TD CLASS="l">305</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">306</TD><TD>                                if (ed.getContentType() == CMElementDeclaration.PCDATA) {</TD></TR><TR CLASS="z"><TD CLASS="l">307</TD><TD>                                        CMDataType dataType = ed.getDataType();</TD></TR><TR CLASS="z"><TD CLASS="l">308</TD><TD>                                        if (dataType != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">309</TD><TD>                                                visitCMDataType(dataType);</TD></TR><TR><TD CLASS="l">310</TD><TD>                                        }</TD></TR><TR><TD CLASS="l">311</TD><TD>                                }</TD></TR><TR><TD CLASS="l">312</TD><TD>                                // end duplication</TD></TR><TR CLASS="z"><TD CLASS="l">313</TD><TD>                                attachNodesToParent = oldAttachNodesToParent;</TD></TR><TR CLASS="z"><TD CLASS="l">314</TD><TD>                                handlePopParent(element, ed);</TD></TR><TR CLASS="z"><TD CLASS="l">315</TD><TD>                                currentParent = oldParent;</TD></TR><TR CLASS="z"><TD CLASS="l">316</TD><TD>                                linkNode(element);</TD></TR><TR><TD CLASS="l">317</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">318</TD><TD>                        int size = visitedCMElementDeclarationList.size();</TD></TR><TR CLASS="z"><TD CLASS="l">319</TD><TD>                        visitedCMElementDeclarationList.remove(size - 1);</TD></TR><TR><TD CLASS="l">320</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="24">321</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">322</TD><TD> </TD></TR><TR><TD CLASS="l">323</TD><TD> </TD></TR><TR><TD CLASS="l">324</TD><TD>        public void visitCMDataType(CMDataType dataType) {</TD></TR><TR CLASS="z"><TD CLASS="l">325</TD><TD>                Text text = null;</TD></TR><TR CLASS="z"><TD CLASS="l">326</TD><TD>                String value = null;</TD></TR><TR><TD CLASS="l">327</TD><TD> </TD></TR><TR><TD CLASS="l">328</TD><TD>                // For backward compatibility:</TD></TR><TR><TD CLASS="l">329</TD><TD>                // Previous code uses a property value but new one uses</TD></TR><TR><TD CLASS="l">330</TD><TD>                // buildPolicy.</TD></TR><TR CLASS="z"><TD CLASS="l">331</TD><TD>                if (getProperty(PROPERTY_BUILD_BLANK_TEXT_NODES) != null &amp;&amp; getProperty(PROPERTY_BUILD_BLANK_TEXT_NODES).equals(&#34;true&#34;)) //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">332</TD><TD>                        buildPolicy = buildPolicy ^ BUILD_TEXT_NODES;</TD></TR><TR><TD CLASS="l">333</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">334</TD><TD>                if (buildTextNodes(buildPolicy)) {</TD></TR><TR CLASS="z"><TD CLASS="l">335</TD><TD>                        value = valueHelper.getValue(dataType);</TD></TR><TR CLASS="z"><TD CLASS="l">336</TD><TD>                        if (value == null) {</TD></TR><TR CLASS="z"><TD CLASS="l">337</TD><TD>                                if (currentParent != null &amp;&amp; currentParent.getNodeType() == Node.ELEMENT_NODE) {</TD></TR><TR CLASS="z"><TD CLASS="l">338</TD><TD>                                        value = currentParent.getNodeName();</TD></TR><TR><TD CLASS="l">339</TD><TD>                                }</TD></TR><TR><TD CLASS="l">340</TD><TD>                                else {</TD></TR><TR CLASS="z"><TD CLASS="l">341</TD><TD>                                        value = &#34;pcdata&#34;; //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">342</TD><TD>                                }</TD></TR><TR><TD CLASS="l">343</TD><TD>                        }</TD></TR><TR><TD CLASS="l">344</TD><TD>                }</TD></TR><TR><TD CLASS="l">345</TD><TD>                else {</TD></TR><TR CLASS="z"><TD CLASS="l">346</TD><TD>                        value = &#34;&#34;; //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">347</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">348</TD><TD>                text = createTextNode(dataType, value, currentParent);</TD></TR><TR CLASS="z"><TD CLASS="l">349</TD><TD>                linkNode(text);</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="26">350</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">351</TD><TD> </TD></TR><TR><TD CLASS="l">352</TD><TD> </TD></TR><TR><TD CLASS="l">353</TD><TD>        public void visitCMGroup(CMGroup e) {</TD></TR><TR CLASS="z"><TD CLASS="l">354</TD><TD>                cmGroupStack.push(e);</TD></TR><TR><TD CLASS="l">355</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">356</TD><TD>                int forcedMin = (buildOptionalElements(buildPolicy) || alwaysVisit) ? 1 : 0;</TD></TR><TR CLASS="z"><TD CLASS="l">357</TD><TD>                int min = Math.max(e.getMinOccur(), forcedMin);</TD></TR><TR><TD CLASS="l">358</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">359</TD><TD>                int max = 0;</TD></TR><TR CLASS="z"><TD CLASS="l">360</TD><TD>                if (e.getMaxOccur() == -1) // unbounded</TD></TR><TR CLASS="z"><TD CLASS="l">361</TD><TD>                        max = getNumOfRepeatableElements();</TD></TR><TR><TD CLASS="l">362</TD><TD>                else</TD></TR><TR CLASS="z"><TD CLASS="l">363</TD><TD>                        max = Math.min(e.getMaxOccur(), getNumOfRepeatableElements());</TD></TR><TR><TD CLASS="l">364</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">365</TD><TD>                if (max &lt; min)</TD></TR><TR CLASS="z"><TD CLASS="l">366</TD><TD>                        max = min;</TD></TR><TR><TD CLASS="l">367</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">368</TD><TD>                alwaysVisit = false;</TD></TR><TR><TD CLASS="l">369</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">370</TD><TD>                for (int i = 1; i &lt;= max; i++) {</TD></TR><TR CLASS="z"><TD CLASS="l">371</TD><TD>                        if (e.getOperator() == CMGroup.CHOICE &amp;&amp; buildFirstChoice(buildPolicy)) {</TD></TR><TR CLASS="z"><TD CLASS="l">372</TD><TD>                                CMNode hintNode = null;</TD></TR><TR><TD CLASS="l">373</TD><TD> </TD></TR><TR><TD CLASS="l">374</TD><TD>                                // todo... the CMGroup should specify the hint... but it seems</TD></TR><TR><TD CLASS="l">375</TD><TD>                                // as though</TD></TR><TR><TD CLASS="l">376</TD><TD>                                // the Yamato guys are making the CMElement specify the hint.</TD></TR><TR><TD CLASS="l">377</TD><TD>                                // I do it that way for now until... we should fix this post</TD></TR><TR><TD CLASS="l">378</TD><TD>                                // GA</TD></TR><TR><TD CLASS="l">379</TD><TD>                                //    </TD></TR><TR CLASS="z"><TD CLASS="l">380</TD><TD>                                int listSize = visitedCMElementDeclarationList.size();</TD></TR><TR CLASS="z"><TD CLASS="l">381</TD><TD>                                if (listSize &gt; 0) {</TD></TR><TR CLASS="z"><TD CLASS="l">382</TD><TD>                                        CMElementDeclaration ed = (CMElementDeclaration) visitedCMElementDeclarationList.get(listSize - 1);</TD></TR><TR CLASS="z"><TD CLASS="l">383</TD><TD>                                        Object contentHint = ed.getProperty(&#34;contentHint&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">384</TD><TD>                                        if (contentHint instanceof CMNode) {</TD></TR><TR CLASS="z"><TD CLASS="l">385</TD><TD>                                                hintNode = (CMNode) contentHint;</TD></TR><TR><TD CLASS="l">386</TD><TD>                                        }</TD></TR><TR><TD CLASS="l">387</TD><TD>                                }</TD></TR><TR><TD CLASS="l">388</TD><TD> </TD></TR><TR><TD CLASS="l">389</TD><TD>                                // see if this hint corresponds to a valid choice</TD></TR><TR><TD CLASS="l">390</TD><TD>                                //</TD></TR><TR CLASS="z"><TD CLASS="l">391</TD><TD>                                CMNode cmNode = null;</TD></TR><TR><TD CLASS="l">392</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">393</TD><TD>                                if (hintNode != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">394</TD><TD>                                        CMNodeList nodeList = e.getChildNodes();</TD></TR><TR CLASS="z"><TD CLASS="l">395</TD><TD>                                        int nodeListLength = nodeList.getLength();</TD></TR><TR CLASS="z"><TD CLASS="l">396</TD><TD>                                        for (int j = 0; j &lt; nodeListLength; j++) {</TD></TR><TR CLASS="z"><TD CLASS="l">397</TD><TD>                                                if (hintNode == nodeList.item(j)) {</TD></TR><TR CLASS="z"><TD CLASS="l">398</TD><TD>                                                        cmNode = hintNode;</TD></TR><TR><TD CLASS="l">399</TD><TD>                                                }</TD></TR><TR><TD CLASS="l">400</TD><TD>                                        }</TD></TR><TR><TD CLASS="l">401</TD><TD>                                }</TD></TR><TR><TD CLASS="l">402</TD><TD> </TD></TR><TR><TD CLASS="l">403</TD><TD>                                // if no cmNode has been determined from the hint, just use</TD></TR><TR><TD CLASS="l">404</TD><TD>                                // the first choice</TD></TR><TR><TD CLASS="l">405</TD><TD>                                //</TD></TR><TR CLASS="z"><TD CLASS="l">406</TD><TD>                                if (cmNode == null) {</TD></TR><TR CLASS="z"><TD CLASS="l">407</TD><TD>                                        CMNodeList nodeList = e.getChildNodes();</TD></TR><TR CLASS="z"><TD CLASS="l">408</TD><TD>                                        if (nodeList.getLength() &gt; 0) {</TD></TR><TR CLASS="z"><TD CLASS="l">409</TD><TD>                                                cmNode = nodeList.item(0);</TD></TR><TR><TD CLASS="l">410</TD><TD>                                        }</TD></TR><TR><TD CLASS="l">411</TD><TD>                                }</TD></TR><TR><TD CLASS="l">412</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">413</TD><TD>                                if (cmNode != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">414</TD><TD>                                        visitCMNode(cmNode);</TD></TR><TR><TD CLASS="l">415</TD><TD>                                }</TD></TR><TR><TD CLASS="l">416</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">417</TD><TD>                        else if (e.getOperator() == CMGroup.ALL // ALL</TD></TR><TR CLASS="z"><TD CLASS="l">418</TD><TD>                                                || e.getOperator() == CMGroup.SEQUENCE) // SEQUENCE</TD></TR><TR><TD CLASS="l">419</TD><TD>                        {</TD></TR><TR><TD CLASS="l">420</TD><TD>                                // visit all of the content</TD></TR><TR CLASS="z"><TD CLASS="l">421</TD><TD>                                super.visitCMGroup(e);</TD></TR><TR><TD CLASS="l">422</TD><TD>                        }</TD></TR><TR><TD CLASS="l">423</TD><TD>                }</TD></TR><TR><TD CLASS="l"><A NAME="1">424</A></TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">425</TD><TD>                cmGroupStack.pop();</TD></TR><TR CLASS="z"><TD CLASS="l">426</TD><TD>        }</TD></TR><TR><TD CLASS="l"><A NAME="23">427</A></TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">428</TD><TD>        static int count = 0;</TD></TR><TR><TD CLASS="l">429</TD><TD> </TD></TR><TR><TD CLASS="l">430</TD><TD>        public void visitCMAttributeDeclaration(CMAttributeDeclaration ad) {</TD></TR><TR CLASS="z"><TD CLASS="l">431</TD><TD>                if (alwaysVisit || buildOptionalAttributes(buildPolicy) || ad.getUsage() == CMAttributeDeclaration.REQUIRED) {</TD></TR><TR CLASS="z"><TD CLASS="l">432</TD><TD>                        alwaysVisit = false;</TD></TR><TR CLASS="z"><TD CLASS="l">433</TD><TD>                        String name = computeName(ad, currentParent);</TD></TR><TR CLASS="z"><TD CLASS="l">434</TD><TD>                        String value = valueHelper.getValue(ad, namespaceTable);</TD></TR><TR CLASS="z"><TD CLASS="l">435</TD><TD>                        Attr attr = createAttribute(ad, name, currentParent);</TD></TR><TR CLASS="z"><TD CLASS="l">436</TD><TD>                        attr.setValue(value != null ? value : &#34;&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">437</TD><TD>                        linkNode(attr);</TD></TR><TR><TD CLASS="l"><A NAME="1b">438</A></TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">439</TD><TD>        }</TD></TR><TR><TD CLASS="l">440</TD><TD> </TD></TR><TR><TD CLASS="l">441</TD><TD>        protected boolean isAbstract(CMNode ed) {</TD></TR><TR CLASS="z"><TD CLASS="l">442</TD><TD>                boolean result = false;</TD></TR><TR CLASS="z"><TD CLASS="l">443</TD><TD>                if (ed != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">444</TD><TD>                        Object value = ed.getProperty(&#34;Abstract&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">445</TD><TD>                        result = (value == Boolean.TRUE);</TD></TR><TR><TD CLASS="l">446</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="16">447</A></TD><TD>                return result;</TD></TR><TR><TD CLASS="l">448</TD><TD>        }</TD></TR><TR><TD CLASS="l">449</TD><TD> </TD></TR><TR><TD CLASS="l">450</TD><TD>        protected CMElementDeclaration getSubstitution(CMElementDeclaration ed) {</TD></TR><TR CLASS="z"><TD CLASS="l">451</TD><TD>                CMElementDeclaration result = ed;</TD></TR><TR CLASS="z"><TD CLASS="l">452</TD><TD>                CMNodeList l = (CMNodeList) ed.getProperty(&#34;SubstitutionGroup&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">453</TD><TD>                if (l != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">454</TD><TD>                        for (int i = 0; i &lt; l.getLength(); i++) {</TD></TR><TR CLASS="z"><TD CLASS="l">455</TD><TD>                                CMNode candidate = l.item(i);</TD></TR><TR CLASS="z"><TD CLASS="l">456</TD><TD>                                if (!isAbstract(candidate) &amp;&amp; (candidate instanceof CMElementDeclaration)) {</TD></TR><TR CLASS="z"><TD CLASS="l">457</TD><TD>                                        result = (CMElementDeclaration) candidate;</TD></TR><TR CLASS="z"><TD CLASS="l">458</TD><TD>                                        break;</TD></TR><TR><TD CLASS="l">459</TD><TD>                                }</TD></TR><TR><TD CLASS="l">460</TD><TD>                        }</TD></TR><TR><TD CLASS="l">461</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="13">462</A></TD><TD>                return result;</TD></TR><TR><TD CLASS="l">463</TD><TD>        }</TD></TR><TR><TD CLASS="l">464</TD><TD> </TD></TR><TR><TD CLASS="l">465</TD><TD>        protected CMElementDeclaration getParentCMElementDeclaration() {</TD></TR><TR CLASS="z"><TD CLASS="l">466</TD><TD>                CMElementDeclaration ed = null;</TD></TR><TR CLASS="z"><TD CLASS="l">467</TD><TD>                int listSize = visitedCMElementDeclarationList.size();</TD></TR><TR CLASS="z"><TD CLASS="l">468</TD><TD>                if (listSize &gt; 0) {</TD></TR><TR CLASS="z"><TD CLASS="l">469</TD><TD>                        ed = (CMElementDeclaration) visitedCMElementDeclarationList.get(listSize - 1);</TD></TR><TR><TD CLASS="l">470</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">471</TD><TD>                return ed;</TD></TR><TR><TD CLASS="l">472</TD><TD>        }</TD></TR><TR><TD CLASS="l">473</TD><TD> </TD></TR><TR><TD CLASS="l"><A NAME="22">474</A></TD><TD>        public void visitCMAnyElement(CMAnyElement anyElement) {</TD></TR><TR><TD CLASS="l">475</TD><TD>                // ingnore buildPolicy for ANY elements... only create elements if</TD></TR><TR><TD CLASS="l">476</TD><TD>                // absolutely needed</TD></TR><TR><TD CLASS="l">477</TD><TD>                //</TD></TR><TR CLASS="z"><TD CLASS="l">478</TD><TD>                int forcedMin = alwaysVisit ? 1 : 0;</TD></TR><TR CLASS="z"><TD CLASS="l">479</TD><TD>                int min = Math.max(anyElement.getMinOccur(), forcedMin);</TD></TR><TR CLASS="z"><TD CLASS="l">480</TD><TD>                alwaysVisit = false;</TD></TR><TR><TD CLASS="l">481</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">482</TD><TD>                String uri = anyElement.getNamespaceURI();</TD></TR><TR CLASS="z"><TD CLASS="l">483</TD><TD>                String targetNSProperty = &#34;http://org.eclipse.wst/cm/properties/targetNamespaceURI&#34;; //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">484</TD><TD>                CMDocument parentCMDocument = (CMDocument) anyElement.getProperty(&#34;CMDocument&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">485</TD><TD>                CMElementDeclaration ed = null;</TD></TR><TR><TD CLASS="l">486</TD><TD> </TD></TR><TR><TD CLASS="l">487</TD><TD>                // System.out.println(&#34;parentCMDocument = &#34; + parentCMDocument);</TD></TR><TR><TD CLASS="l">488</TD><TD>                // //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">489</TD><TD>                if (parentCMDocument != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">490</TD><TD>                        if (uri == null || uri.startsWith(&#34;##&#34;) || uri.equals(parentCMDocument.getProperty(targetNSProperty))) //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">491</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">492</TD><TD>                                ed = getSuitableElement(getParentCMElementDeclaration(), parentCMDocument);</TD></TR><TR><TD CLASS="l">493</TD><TD>                        }</TD></TR><TR><TD CLASS="l">494</TD><TD>                }</TD></TR><TR><TD CLASS="l">495</TD><TD> </TD></TR><TR><TD CLASS="l">496</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">497</TD><TD>                if (ed == null &amp;&amp; externalCMDocumentSupport != null &amp;&amp; uri != null &amp;&amp; !uri.startsWith(&#34;##&#34;) &amp;&amp; currentParent instanceof Element) //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">498</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">499</TD><TD>                        CMDocument externalCMDocument = externalCMDocumentSupport.getCMDocument((Element) currentParent, uri);</TD></TR><TR CLASS="z"><TD CLASS="l">500</TD><TD>                        if (externalCMDocument != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">501</TD><TD>                                ed = getSuitableElement(null, externalCMDocument);</TD></TR><TR><TD CLASS="l">502</TD><TD>                        }</TD></TR><TR><TD CLASS="l">503</TD><TD>                }</TD></TR><TR><TD CLASS="l">504</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">505</TD><TD>                for (int i = 1; i &lt;= min; i++) {</TD></TR><TR CLASS="z"><TD CLASS="l">506</TD><TD>                        if (ed != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">507</TD><TD>                                visitCMElementDeclaration(ed);</TD></TR><TR><TD CLASS="l">508</TD><TD>                        }</TD></TR><TR><TD CLASS="l">509</TD><TD>                        else {</TD></TR><TR CLASS="z"><TD CLASS="l">510</TD><TD>                                Element element = document.createElement(&#34;ANY-ELEMENT&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">511</TD><TD>                                linkNode(element);</TD></TR><TR><TD CLASS="l">512</TD><TD>                        }</TD></TR><TR><TD CLASS="l"><A NAME="18">513</A></TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">514</TD><TD>        }</TD></TR><TR><TD CLASS="l">515</TD><TD> </TD></TR><TR><TD CLASS="l">516</TD><TD>        protected CMElementDeclaration getSuitableElement(CMNamedNodeMap nameNodeMap) {</TD></TR><TR CLASS="z"><TD CLASS="l">517</TD><TD>                CMElementDeclaration result = null;</TD></TR><TR CLASS="z"><TD CLASS="l">518</TD><TD>                int size = nameNodeMap.getLength();</TD></TR><TR CLASS="z"><TD CLASS="l">519</TD><TD>                for (int i = 0; i &lt; size; i++) {</TD></TR><TR CLASS="z"><TD CLASS="l">520</TD><TD>                        CMElementDeclaration candidate = (CMElementDeclaration) nameNodeMap.item(i);</TD></TR><TR CLASS="z"><TD CLASS="l">521</TD><TD>                        if (!visitedCMElementDeclarationList.contains(candidate)) {</TD></TR><TR CLASS="z"><TD CLASS="l">522</TD><TD>                                result = candidate;</TD></TR><TR CLASS="z"><TD CLASS="l">523</TD><TD>                                break;</TD></TR><TR><TD CLASS="l">524</TD><TD>                        }</TD></TR><TR><TD CLASS="l">525</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="17">526</A></TD><TD>                return result;</TD></TR><TR><TD CLASS="l">527</TD><TD>        }</TD></TR><TR><TD CLASS="l">528</TD><TD> </TD></TR><TR><TD CLASS="l">529</TD><TD>        protected CMElementDeclaration getSuitableElement(CMElementDeclaration ed, CMDocument cmDocument) {</TD></TR><TR CLASS="z"><TD CLASS="l">530</TD><TD>                CMElementDeclaration result = null;</TD></TR><TR><TD CLASS="l">531</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">532</TD><TD>                if (ed != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">533</TD><TD>                        result = getSuitableElement(ed.getLocalElements());</TD></TR><TR><TD CLASS="l">534</TD><TD>                }</TD></TR><TR><TD CLASS="l">535</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">536</TD><TD>                if (result == null &amp;&amp; cmDocument != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">537</TD><TD>                        result = getSuitableElement(cmDocument.getElements());</TD></TR><TR><TD CLASS="l">538</TD><TD>                }</TD></TR><TR><TD CLASS="l">539</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">540</TD><TD>                return result;</TD></TR><TR><TD CLASS="l"><A NAME="1c">541</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">542</TD><TD> </TD></TR><TR><TD CLASS="l">543</TD><TD> </TD></TR><TR><TD CLASS="l">544</TD><TD>        public void linkNode(Node node) {</TD></TR><TR CLASS="z"><TD CLASS="l">545</TD><TD>                if (attachNodesToParent &amp;&amp; currentParent != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">546</TD><TD>                        if (node.getNodeType() == Node.ATTRIBUTE_NODE) {</TD></TR><TR CLASS="z"><TD CLASS="l">547</TD><TD>                                ((Element) currentParent).setAttributeNode((Attr) node);</TD></TR><TR><TD CLASS="l">548</TD><TD>                        }</TD></TR><TR><TD CLASS="l">549</TD><TD>                        else {</TD></TR><TR CLASS="z"><TD CLASS="l">550</TD><TD>                                currentParent.appendChild(node);</TD></TR><TR><TD CLASS="l">551</TD><TD>                        }</TD></TR><TR><TD CLASS="l">552</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">553</TD><TD>                else if (resultList != null) {</TD></TR><TR CLASS="z"><TD CLASS="l">554</TD><TD>                        resultList.add(node);</TD></TR><TR><TD CLASS="l">555</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="21">556</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">557</TD><TD> </TD></TR><TR><TD CLASS="l">558</TD><TD>        public static void testPopulateDocumentFromGrammarFile(Document document, String grammarFileName, String rootElementName, boolean hack) {</TD></TR><TR><TD CLASS="l">559</TD><TD>                try {</TD></TR><TR CLASS="z"><TD CLASS="l">560</TD><TD>                        CMDocument cmDocument = ContentModelManager.getInstance().createCMDocument(grammarFileName, null);</TD></TR><TR CLASS="z"><TD CLASS="l">561</TD><TD>                        CMNamedNodeMap elementMap = cmDocument.getElements();</TD></TR><TR CLASS="z"><TD CLASS="l">562</TD><TD>                        CMElementDeclaration element = (CMElementDeclaration) elementMap.getNamedItem(rootElementName);</TD></TR><TR><TD CLASS="l">563</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">564</TD><TD>                        DOMContentBuilderImpl contentBuilder = new DOMContentBuilderImpl(document);</TD></TR><TR CLASS="z"><TD CLASS="l">565</TD><TD>                        contentBuilder.supressCreationOfDoctypeAndXMLDeclaration = hack;</TD></TR><TR CLASS="z"><TD CLASS="l">566</TD><TD>                        contentBuilder.createDefaultRootContent(cmDocument, element);</TD></TR><TR><TD CLASS="l">567</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">568</TD><TD>                        System.out.println();</TD></TR><TR CLASS="z"><TD CLASS="l">569</TD><TD>                        System.out.println(&#34;-----------------------------&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">570</TD><TD>                        DOMWriter writer = new DOMWriter();</TD></TR><TR CLASS="z"><TD CLASS="l">571</TD><TD>                        if (hack) {</TD></TR><TR CLASS="z"><TD CLASS="l">572</TD><TD>                                writer.print(document, grammarFileName);</TD></TR><TR><TD CLASS="l">573</TD><TD>                        }</TD></TR><TR><TD CLASS="l">574</TD><TD>                        else {</TD></TR><TR CLASS="z"><TD CLASS="l">575</TD><TD>                                writer.print(document);</TD></TR><TR><TD CLASS="l">576</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">577</TD><TD>                        System.out.println(&#34;-----------------------------&#34;); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">578</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">579</TD><TD>                catch (Exception e) {</TD></TR><TR CLASS="z"><TD CLASS="l">580</TD><TD>                        System.out.println(&#34;Error: &#34; + e); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">581</TD><TD>                        e.printStackTrace();</TD></TR><TR><TD CLASS="l">582</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">583</TD><TD>        }</TD></TR><TR><TD CLASS="l">584</TD><TD> </TD></TR><TR><TD CLASS="l">585</TD><TD>        // test</TD></TR><TR><TD CLASS="l">586</TD><TD>        //</TD></TR><TR><TD CLASS="l">587</TD><TD>        /*</TD></TR><TR><TD CLASS="l">588</TD><TD>         * public static void main(String arg[]) { if (arg.length &gt;= 2) { try {</TD></TR><TR><TD CLASS="l">589</TD><TD>         * CMDocumentFactoryRegistry.getInstance().registerCMDocumentBuilderWithClassName(&#34;org.eclipse.wst.xml.core.internal.contentmodel.mofimpl.CMDocumentBuilderImpl&#34;);</TD></TR><TR><TD CLASS="l">590</TD><TD>         * </TD></TR><TR><TD CLASS="l">591</TD><TD>         * String grammarFileName = arg[0]; String rootElementName = arg[1];</TD></TR><TR><TD CLASS="l">592</TD><TD>         * </TD></TR><TR><TD CLASS="l">593</TD><TD>         * Document document =</TD></TR><TR><TD CLASS="l">594</TD><TD>         * (Document)Class.forName(&#34;org.apache.xerces.dom.DocumentImpl&#34;).newInstance();</TD></TR><TR><TD CLASS="l">595</TD><TD>         * testPopulateDocumentFromGrammarFile(document, grammarFileName,</TD></TR><TR><TD CLASS="l">596</TD><TD>         * rootElementName, true); } catch (Exception e) {</TD></TR><TR><TD CLASS="l">597</TD><TD>         * System.out.println(&#34;DOMContentBuilderImpl error&#34;); e.printStackTrace(); } }</TD></TR><TR><TD CLASS="l">598</TD><TD>         * else { System.out.println(&#34;Usage : java</TD></TR><TR><TD CLASS="l">599</TD><TD>         * org.eclipse.wst.xml.util.DOMContentBuildingCMVisitor grammarFileName</TD></TR><TR><TD CLASS="l">600</TD><TD>         * rootElementName&#34;); } }</TD></TR><TR><TD CLASS="l">601</TD><TD>         */</TD></TR><TR><TD CLASS="l">602</TD><TD>}</TD></TR></TABLE><P></P><TABLE CLASS="hdft" CELLSPACING="0" WIDTH="100%"><TR><TD CLASS="nv">[<A HREF="../xslUnitTestCoverage.html">all classes</A>][<A HREF="8f.html">org.eclipse.wst.xml.core.internal.contentmodel.util</A>]</TD></TR><TR><TD CLASS="tl"><A HREF="http://www.eclemma.org/support.html">EMMA 2.0.5312 EclEmma Fix 1</A> (C) Vladimir Roubtsov</TD></TR></TABLE></BODY></HTML>