You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FOAttributes.html 31KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
  2. <!-- Created by htmlize-0.67 in css mode. -->
  3. <html>
  4. <head>
  5. <title>FOAttributes.java</title>
  6. <style type="text/css">
  7. <!--
  8. body {
  9. color: #000000;
  10. background-color: #faf0e6;
  11. } /* default */
  12. .jde-java-font-lock-number {
  13. color: #bc8f8f;
  14. background-color: #faf0e6;
  15. } /* jde-java-font-lock-number-face */
  16. .function-name {
  17. color: #8b2323;
  18. background-color: #faf0e6;
  19. } /* font-lock-function-name-face */
  20. .jde-java-font-lock-italic {
  21. background-color: #faf0e6;
  22. font-style: italic;
  23. } /* jde-java-font-lock-italic-face */
  24. .jde-java-font-lock-modifier {
  25. color: #da70d6;
  26. background-color: #faf0e6;
  27. } /* jde-java-font-lock-modifier-face */
  28. .keyword {
  29. color: #8b0000;
  30. background-color: #faf0e6;
  31. } /* font-lock-keyword-face */
  32. .variable-name {
  33. color: #8b008b;
  34. background-color: #faf0e6;
  35. } /* font-lock-variable-name-face */
  36. .string {
  37. color: #008b00;
  38. background-color: #faf0e6;
  39. } /* font-lock-string-face */
  40. .jde-java-font-lock-package {
  41. color: #0000cd;
  42. background-color: #faf0e6;
  43. } /* jde-java-font-lock-package-face */
  44. .jde-java-font-lock-constant {
  45. color: #5f9ea0;
  46. background-color: #faf0e6;
  47. } /* jde-java-font-lock-constant-face */
  48. .type {
  49. color: #4682b4;
  50. background-color: #faf0e6;
  51. } /* font-lock-type-face */
  52. .jde-java-font-lock-doc-tag {
  53. color: #008b00;
  54. background-color: #faf0e6;
  55. } /* jde-java-font-lock-doc-tag-face */
  56. .comment {
  57. color: #00008b;
  58. background-color: #faf0e6;
  59. } /* font-lock-comment-face */
  60. .reference {
  61. color: #cd0000;
  62. background-color: #faf0e6;
  63. } /* font-lock-reference-face */
  64. a {
  65. color: inherit;
  66. background-color: inherit;
  67. font: inherit;
  68. text-decoration: inherit;
  69. }
  70. a:hover {
  71. text-decoration: underline;
  72. }
  73. -->
  74. </style>
  75. </head>
  76. <body>
  77. <pre>
  78. <span class="keyword">package</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">fo</span>;
  79. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">apps</span>.<span class="type">FOPException</span>;
  80. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">fo</span>.<span class="jde-java-font-lock-package">expr</span>.<span class="type">PropertyException</span>;
  81. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">fo</span>.<span class="type">PropertyConsts</span>;
  82. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">fo</span>.<span class="type">FObjectNames</span>;
  83. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">datatypes</span>.<span class="type">Ints</span>;
  84. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">messaging</span>.<span class="type">MessageHandler</span>;
  85. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">xml</span>.<span class="type">FoXMLEvent</span>;
  86. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">apache</span>.<span class="jde-java-font-lock-package">fop</span>.<span class="jde-java-font-lock-package">xml</span>.<span class="type">XMLNamespaces</span>;
  87. <span class="keyword">import</span> <span class="jde-java-font-lock-package">org</span>.<span class="jde-java-font-lock-package">xml</span>.<span class="jde-java-font-lock-package">sax</span>.<span class="type">Attributes</span>;
  88. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">Iterator</span>;
  89. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">ArrayList</span>;
  90. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">HashMap</span>;
  91. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">List</span>;
  92. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">Map</span>;
  93. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">Collections</span>;
  94. <span class="keyword">import</span> <span class="jde-java-font-lock-package">java</span>.<span class="jde-java-font-lock-package">util</span>.<span class="type">Arrays</span>;
  95. <span class="comment">/*
  96. * FOAttributes.java
  97. * $Id$
  98. *
  99. * Created: Wed Nov 14 15:19:51 2001
  100. * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
  101. * For details on use and redistribution please refer to the
  102. * LICENSE file included with these sources.
  103. *
  104. * @author &lt;a href=&quot;mailto:pbwest@powerup.com.au&quot;&gt;Peter B. West&lt;/a&gt;
  105. * @version $Revision$ $Name$
  106. */</span>
  107. <span class="comment">/**
  108. * The FO Attributes data structures and methods needed to manage the
  109. * Attributes associated with FO nodes.
  110. */</span>
  111. <span class="jde-java-font-lock-modifier">public</span> <span class="keyword">class</span> <span class="function-name" id="FOAttributesClass">FOAttributes</span> {
  112. <span class="jde-java-font-lock-modifier">private</span> <span class="jde-java-font-lock-modifier">static</span> <span class="jde-java-font-lock-modifier">final</span> <span class="type">String</span> <span class="variable-name" id="tag">tag</span> = &quot;<span class="string">$Name$</span>&quot;;
  113. <span class="jde-java-font-lock-modifier">private</span> <span class="jde-java-font-lock-modifier">static</span> <span class="jde-java-font-lock-modifier">final</span> <span class="type">String</span> <span class="variable-name" id="revision">revision</span> = &quot;<span class="string">$Revision$</span>&quot;;
  114. <span class="comment">/**
  115. * &lt;i&gt;</span><span class="jde-java-font-lock-italic">nSpaceAttrMaps</span><span class="comment">&lt;/i&gt; is an &lt;tt&gt;ArrayList&lt;/tt&gt; to hold the array of
  116. * &lt;tt&gt;HashMap&lt;/tt&gt;s which contain the attribute lists for each
  117. * namespace which may be active for a particular FO element. The
  118. * &lt;tt&gt;ArrayList&lt;/tt&gt; is indexed by the URIIndex for this namespace
  119. * which is maintained in an &lt;tt&gt;XMLNamespaces&lt;/tt&gt; object by the
  120. * &lt;tt&gt;FOTree&lt;/tt&gt; object which is processing the FO input. The
  121. * values in the &lt;tt&gt;HashMap&lt;/tt&gt;s are indexed by the local name of the
  122. * attribute.
  123. * The &lt;tt&gt;ArrayList&lt;/tt&gt; will not be created for a particular instance
  124. * of &lt;tt&gt;FOAttributes&lt;/tt&gt; unless a namespace other than the standard
  125. * XSL namespace is activated for this instance.
  126. * See &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrMap</span><span class="comment">&lt;/i&gt;.
  127. */</span>
  128. <span class="jde-java-font-lock-modifier">private</span> <span class="type">ArrayList</span> <span class="variable-name" id="nSpaceAttrMaps">nSpaceAttrMaps</span>;
  129. <span class="comment">/**
  130. * &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrMap</span><span class="comment">&lt;/i&gt; is a &lt;tt&gt;HashMap&lt;/tt&gt; to hold the FO namespace
  131. * attribute list specified in the FO element with which this list is
  132. * associated. The &lt;tt&gt;String&lt;/tt&gt; attribute value is stored
  133. * indexed by the integer constant property identifier from
  134. * &lt;tt&gt;PropertyConsts&lt;/tt&gt;.
  135. */</span>
  136. <span class="jde-java-font-lock-modifier">private</span> <span class="type">HashMap</span> <span class="variable-name" id="foAttrMap">foAttrMap</span> = <span class="keyword">new</span> <span class="type">HashMap</span>(<span class="jde-java-font-lock-number">0</span>);
  137. <span class="comment">/**
  138. * A sorted array of the keys (property indices) of the values in
  139. * &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrMap</span><span class="comment">&lt;/i&gt;.
  140. */</span>
  141. <span class="jde-java-font-lock-modifier">private</span> <span class="type">Integer</span>[] <span class="variable-name" id="foAttrKeys">foAttrKeys</span> = <span class="jde-java-font-lock-constant" id="null">null</span>;
  142. <span class="comment">/**
  143. * A static array of &lt;tt&gt;Integer&lt;/tt&gt; as a template for the generation
  144. * of the &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrKeys</span><span class="comment">&lt;/i&gt; array.
  145. */</span>
  146. <span class="jde-java-font-lock-modifier">private</span> <span class="jde-java-font-lock-modifier">static</span> <span class="type">Integer</span>[] <span class="variable-name" id="integerArray">integerArray</span>
  147. = <span class="keyword">new</span> <span class="type">Integer</span>[] { Ints.consts.get(<span class="jde-java-font-lock-number">0</span>) };
  148. <span class="comment">/**
  149. * Construct an &lt;i&gt;</span><span class="jde-java-font-lock-italic">FOAttributes</span><span class="comment">&lt;/i&gt; object.
  150. * &lt;p&gt;The &lt;tt&gt;Attributes&lt;/tt&gt; object on the event is scanned, and each
  151. * attribute is examined. If the attribute is in the default namespace
  152. * for fo: attributes, it is an fo: property, and its value is entered
  153. * into the &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrMap</span><span class="comment">&lt;/i&gt; &lt;tt&gt;Hashmap&lt;/tt&gt; indexed by the property
  154. * index.
  155. * &lt;p&gt;If the attribute does not belong to the default namespace, its
  156. * value is entered into the appropriate &lt;tt&gt;HashMap&lt;/tt&gt; in the
  157. * &lt;tt&gt;ArrayList&lt;/tt&gt; &lt;i&gt;</span><span class="jde-java-font-lock-italic">nSpaceAttrMaps</span><span class="comment">&lt;/i&gt;, indexed by the attribute's
  158. * local name.
  159. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="event">event</span><span class="comment"> - the FO XML event which triggered construction of the
  160. * parent &lt;tt&gt;FONode&lt;/tt&gt;.
  161. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="foNode">foNode</span><span class="comment"> - the &lt;tt&gt;FONode&lt;/tt&gt; with which these attributes are
  162. * associated.
  163. */</span>
  164. <span class="jde-java-font-lock-modifier">public</span> <span class="function-name" id="FOAttributes">FOAttributes</span>(<span class="type">FoXMLEvent</span> <span class="variable-name">event</span>, <span class="type">FONode</span> <span class="variable-name">foNode</span>) <span class="keyword">throws</span> <span class="type">FOPException</span> {
  165. <span class="comment">// If the event is null, there is no event associated with this
  166. </span> <span class="comment">// node, probably because this is a manufactured node; e.g.,
  167. </span> <span class="comment">// an &quot;invented&quot; FopageSequenceMaster. The default initialisation
  168. </span> <span class="comment">// includes an empty foAttrMap HashMap.
  169. </span> <span class="keyword">if</span> (event == <span class="jde-java-font-lock-constant">null</span>) <span class="keyword">return</span>;
  170. <span class="keyword">if</span> (event.getFoType() == FObjectNames.<span class="jde-java-font-lock-constant" id="PCDATA">PCDATA</span>)
  171. <span class="keyword">return</span>; <span class="comment">// go with the empty foAttrMap
  172. </span>
  173. <span class="comment">// Create the foAttrMap.
  174. </span> <span class="type">Attributes</span> <span class="variable-name" id="attributes">attributes</span> = event.getAttributes();
  175. <span class="keyword">if</span> (attributes == <span class="jde-java-font-lock-constant">null</span>) <span class="keyword">throw</span> <span class="keyword">new</span> <span class="type">FOPException</span>
  176. (&quot;<span class="string">No Attributes in XMLEvent</span>&quot;);
  177. <span class="type">int</span> <span class="variable-name" id="propIndex">propIndex</span>;
  178. <span class="type">HashMap</span> <span class="variable-name" id="tmpHash">tmpHash</span>;
  179. <span class="keyword">for</span> (<span class="type">int</span> <span class="variable-name" id="i">i</span> = <span class="jde-java-font-lock-number">0</span>; i &lt; attributes.getLength(); i++) {
  180. <span class="type">String</span> <span class="variable-name" id="attrUri">attrUri</span> = attributes.getURI(i);
  181. <span class="type">String</span> <span class="variable-name" id="attrLocalname">attrLocalname</span> = attributes.getLocalName(i);
  182. <span class="type">String</span> <span class="variable-name" id="attrQName">attrQName</span> = attributes.getQName(i);
  183. <span class="type">int</span> <span class="variable-name" id="sep">sep</span> = attrQName.indexOf('<span class="string">:</span>');
  184. <span class="type">String</span> <span class="variable-name" id="prefix">prefix</span> = attrQName.substring(<span class="jde-java-font-lock-number">0</span>, (sep == -<span class="jde-java-font-lock-number">1</span> ? <span class="jde-java-font-lock-number">0</span> : sep));
  185. <span class="keyword">if</span> (prefix.equals(&quot;<span class="string">xmlns</span>&quot;)) <span class="keyword">break</span>;
  186. <span class="type">String</span> <span class="variable-name" id="attrValue">attrValue</span> = attributes.getValue(i);
  187. <span class="type">int</span> <span class="variable-name" id="attrUriIndex">attrUriIndex</span> = foNode.namespaces.getURIIndex(attrUri);
  188. <span class="comment">//System.out.println(&quot;FONode:&quot; + event);
  189. </span> <span class="keyword">if</span> (attrUriIndex == XMLNamespaces.DefAttrNSIndex) {
  190. <span class="comment">// Standard FO namespace
  191. </span> <span class="comment">// Catch default namespace declaration here.
  192. </span> <span class="keyword">if</span> (attrLocalname.equals(&quot;<span class="string">xmlns</span>&quot;)) <span class="keyword">break</span>;
  193. <span class="comment">// Is this a known (valid) property?
  194. </span> propIndex = PropNames.getPropertyIndex(attrLocalname);
  195. <span class="comment">// Known attribute name
  196. </span> foAttrMap.put(Ints.consts.get(propIndex), attrValue);
  197. } <span class="keyword">else</span> { <span class="comment">// Not the XSL FO namespace
  198. </span> <span class="type">int</span> <span class="variable-name" id="j">j</span>;
  199. <span class="keyword">if</span> (nSpaceAttrMaps == <span class="jde-java-font-lock-constant">null</span>) {
  200. <span class="comment">//Create the list
  201. </span> System.out.println(&quot;<span class="string">Creating nSpaceAttrMaps</span>&quot;);
  202. nSpaceAttrMaps = <span class="keyword">new</span> <span class="type">ArrayList</span>(attrUriIndex + <span class="jde-java-font-lock-number">1</span>);
  203. <span class="comment">// Add the fo list
  204. </span> <span class="keyword">for</span> (j = <span class="jde-java-font-lock-number">0</span>; j &lt; XMLNamespaces.DefAttrNSIndex; j++)
  205. nSpaceAttrMaps.add(<span class="keyword">new</span> <span class="type">HashMap</span>(<span class="jde-java-font-lock-number">0</span>));
  206. System.out.println(&quot;<span class="string">Adding foAttrMap</span>&quot;);
  207. nSpaceAttrMaps.add(foAttrMap);
  208. }
  209. <span class="comment">// Make sure there are elements between the last current
  210. </span> <span class="comment">// and the one to be added
  211. </span> <span class="keyword">for</span> (j = nSpaceAttrMaps.size(); j &lt;= attrUriIndex; j++)
  212. nSpaceAttrMaps.add(<span class="keyword">new</span> <span class="type">HashMap</span>(<span class="jde-java-font-lock-number">0</span>));
  213. <span class="comment">// Does a HashMap exist for this namespace?
  214. </span> <span class="keyword">if</span> ((tmpHash =
  215. (<span class="type">HashMap</span>)nSpaceAttrMaps.get(attrUriIndex)) == <span class="jde-java-font-lock-constant">null</span>) {
  216. tmpHash = <span class="keyword">new</span> <span class="type">HashMap</span>(<span class="jde-java-font-lock-number">1</span>);
  217. nSpaceAttrMaps.set(attrUriIndex, tmpHash);
  218. }
  219. <span class="comment">// Now put this value in the HashMap
  220. </span> tmpHash.put(attrLocalname, attrValue);
  221. }
  222. }
  223. <span class="comment">// Set up the sorted array of the foAttr keys, if foAttrMap has
  224. </span> <span class="comment">// any entries.
  225. </span> <span class="keyword">if</span> (foAttrMap.size() &gt; <span class="jde-java-font-lock-number">0</span>) {
  226. foAttrKeys = (<span class="type">Integer</span>[])(foAttrMap.keySet().toArray(integerArray));
  227. Arrays.sort(foAttrKeys);
  228. }
  229. <span class="comment">// Finished with the Attributes object
  230. </span> event.setAttributes(<span class="jde-java-font-lock-constant">null</span>);
  231. }
  232. <span class="comment">/**
  233. * Get the default namespace attribute values as an unmodifiable
  234. * &lt;tt&gt;Map&lt;/tt&gt;.
  235. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> a unmodifiable &lt;tt&gt;Map&lt;/tt&gt; containing the the attribute
  236. * values for all of the default attribute namespace attributes in this
  237. * attribute list, indexed by the property name index from
  238. * &lt;tt&gt;PropNames&lt;/tt&gt;.
  239. */</span>
  240. <span class="jde-java-font-lock-modifier">public</span> <span class="type">Map</span> <span class="function-name" id="getFixedFoAttrMap">getFixedFoAttrMap</span>() {
  241. <span class="keyword">return</span> Collections.unmodifiableMap((<span class="type">Map</span>)foAttrMap);
  242. }
  243. <span class="comment">/**
  244. * Get the &lt;tt&gt;HashMap&lt;/tt&gt; of all default namespace attributes.
  245. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> &lt;tt&gt;HashMap&lt;/tt&gt; &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrMap</span><span class="comment">&lt;/i&gt; containing the the attribute
  246. * values for all of the default attribute namespace attributes in this
  247. * attribute list, indexed by the property name index from
  248. * &lt;tt&gt;PropNames&lt;/tt&gt;. This HashMap may be changed by the calling
  249. * process.
  250. */</span>
  251. <span class="jde-java-font-lock-modifier">public</span> <span class="type">HashMap</span> <span class="function-name" id="getFoAttrMap">getFoAttrMap</span>() {
  252. <span class="keyword">return</span> foAttrMap;
  253. }
  254. <span class="comment">/**
  255. * Get the sorted array of property index keys for the default namespace
  256. * attributes.
  257. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> &lt;tt&gt;Integer[]&lt;/tt&gt; &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrKeys</span><span class="comment">&lt;/i&gt; containing the the
  258. * sorted keys (the property indices from &lt;tt&gt;PropNames&lt;/tt&gt;) of the
  259. * attribute values for all of the default attribute namespace attributes
  260. * in this attribute list.
  261. * Warning: This array may be changed by the calling process.
  262. */</span>
  263. <span class="jde-java-font-lock-modifier">public</span> <span class="type">Integer</span>[] <span class="function-name" id="getFoAttrKeys">getFoAttrKeys</span>() {
  264. <span class="keyword">return</span> foAttrKeys;
  265. }
  266. <span class="comment">/**
  267. * A convenience method for accessing attribute values from the default
  268. * attribute namespace.
  269. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="property">property</span><span class="comment"> an &lt;tt&gt;int&lt;/tt&gt; containing the property name index
  270. * from &lt;tt&gt;PropNames&lt;/tt&gt;.
  271. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> a &lt;tt&gt;String&lt;/tt&gt; containing the associated property value.
  272. */</span>
  273. <span class="jde-java-font-lock-modifier">public</span> <span class="type">String</span> <span class="function-name" id="getFoAttrValue">getFoAttrValue</span>(<span class="type">int</span> <span class="variable-name">property</span>) {
  274. <span class="keyword">return</span> (<span class="type">String</span>)(foAttrMap.get(Ints.consts.get(property)));
  275. }
  276. <span class="comment">/**
  277. * A convenience method for accessing attribute values from the default
  278. * attribute namespace.
  279. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="propertyName">propertyName</span><span class="comment"> a &lt;tt&gt;String&lt;/tt&gt; containing the property name.
  280. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> a &lt;tt&gt;String&lt;/tt&gt; containing the associated property value.
  281. */</span>
  282. <span class="jde-java-font-lock-modifier">public</span> <span class="type">String</span> <span class="function-name">getFoAttrValue</span>(<span class="type">String</span> <span class="variable-name">propertyName</span>)
  283. <span class="keyword">throws</span> <span class="type">PropertyException</span>
  284. {
  285. <span class="keyword">return</span> getFoAttrValue(PropNames.getPropertyIndex(propertyName));
  286. }
  287. <span class="comment">/**
  288. * Get an unmodifiable &lt;tt&gt;Map&lt;/tt&gt; of the attribute values for a
  289. * particular namespace.
  290. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="uriIndex">uriIndex</span><span class="comment"> an &lt;tt&gt;int&lt;/tt&gt; containing the index of the attribute
  291. * values namespace, maintained in an &lt;tt&gt;XMLEvent&lt;/tt&gt; &lt;tt&gt;static&lt;/tt&gt;
  292. * array.
  293. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> an unmodifiable &lt;tt&gt;Map&lt;/tt&gt; of the attribute values
  294. * within the indexed namespace, for this attribute list, indexed by the
  295. * local name of the attribute. The &lt;tt&gt;Map&lt;/tt&gt; returned is
  296. * derived from the one maintained in &lt;i&gt;</span><span class="jde-java-font-lock-italic">nSpaceAttrMaps</span><span class="comment">&lt;/i&gt;.
  297. */</span>
  298. <span class="jde-java-font-lock-modifier">public</span> <span class="type">Map</span> <span class="function-name" id="getAttrMap">getAttrMap</span>(<span class="type">int</span> <span class="variable-name">uriIndex</span>) {
  299. <span class="keyword">if</span> (uriIndex == XMLNamespaces.DefAttrNSIndex)
  300. <span class="keyword">return</span> Collections.unmodifiableMap((<span class="type">Map</span>)foAttrMap);
  301. <span class="keyword">if</span> (nSpaceAttrMaps != <span class="jde-java-font-lock-constant">null</span>) {
  302. <span class="keyword">if</span> (uriIndex &gt;= nSpaceAttrMaps.size()) <span class="keyword">return</span> <span class="jde-java-font-lock-constant">null</span>;
  303. <span class="keyword">return</span> Collections.unmodifiableMap
  304. ((<span class="type">Map</span>)(nSpaceAttrMaps.get(uriIndex)));
  305. } <span class="keyword">else</span> {
  306. <span class="keyword">return</span> <span class="jde-java-font-lock-constant">null</span>;
  307. }
  308. }
  309. <span class="comment">/**
  310. * Get the value of an attribute in a particular namespace.
  311. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name">uriIndex</span><span class="comment"> an &lt;tt&gt;int&lt;/tt&gt; index of the URIs maintained
  312. * by &lt;tt&gt;XMLEvent&lt;/tt&gt;.
  313. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="localName">localName</span><span class="comment"> a &lt;tt&gt;String&lt;/tt&gt; with the local name of the
  314. * attribute. In the case of the default attribute namespace, this
  315. * will be the fo property name.
  316. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> a &lt;tt&gt;String&lt;/tt&gt; containing the value of the attribute.
  317. */</span>
  318. <span class="jde-java-font-lock-modifier">public</span> <span class="type">String</span> <span class="function-name" id="getUriAttrValue">getUriAttrValue</span>(<span class="type">int</span> <span class="variable-name">uriIndex</span>, <span class="type">String</span> <span class="variable-name">localName</span>)
  319. <span class="keyword">throws</span> <span class="type">PropertyException</span>
  320. {
  321. <span class="keyword">if</span> (uriIndex == XMLNamespaces.DefAttrNSIndex)
  322. <span class="keyword">return</span> getFoAttrValue(PropNames.getPropertyIndex(localName));
  323. <span class="keyword">return</span> (String)
  324. (((<span class="type">HashMap</span>)nSpaceAttrMaps.get(uriIndex)).get(localName));
  325. }
  326. <span class="comment">/**
  327. * Get the size of the &lt;i&gt;</span><span class="jde-java-font-lock-italic">foAttrMap</span><span class="comment">&lt;/i&gt; &lt;tt&gt;HashMap&lt;/tt&gt;
  328. * containing attributes for the default fo: namespace
  329. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> an &lt;tt&gt;int&lt;/tt&gt; containing the size.
  330. */</span>
  331. <span class="jde-java-font-lock-modifier">public</span> <span class="type">int</span> <span class="function-name" id="getFoAttrMapSize">getFoAttrMapSize</span>() {
  332. <span class="keyword">return</span> foAttrMap.size();
  333. }
  334. <span class="comment">/**
  335. * Get the size of the &lt;i&gt;</span><span class="jde-java-font-lock-italic">nSpaceAttrMaps</span><span class="comment">&lt;/i&gt; &lt;tt&gt;ArrayList&lt;/tt&gt;
  336. * containing attribute namespaces active in this set of attributes.
  337. * &lt;i&gt;</span><span class="jde-java-font-lock-italic">N.B.</span><span class="comment">&lt;/i&gt; this may be zero if only the default attribute
  338. * namespace has been seen in the attribute set.
  339. * </span><span class="jde-java-font-lock-doc-tag">@return</span><span class="comment"> an &lt;tt&gt;int&lt;/tt&gt; containing the size.
  340. */</span>
  341. <span class="jde-java-font-lock-modifier">public</span> <span class="type">int</span> <span class="function-name" id="getNSpaceAttrMapsSize">getNSpaceAttrMapsSize</span>() {
  342. <span class="keyword">if</span> (nSpaceAttrMaps == <span class="jde-java-font-lock-constant">null</span>)
  343. <span class="keyword">return</span> <span class="jde-java-font-lock-number">0</span>;
  344. <span class="keyword">return</span> nSpaceAttrMaps.size();
  345. }
  346. <span class="comment">/**
  347. * Merge attributes from another &lt;tt&gt;FOAttributes&lt;/tt&gt; into &lt;i&gt;</span><span class="jde-java-font-lock-italic">this</span><span class="comment">&lt;/i&gt;.
  348. * </span><span class="jde-java-font-lock-doc-tag">@param</span><span class="comment"> </span><span class="variable-name" id="foAttrs">foAttrs</span><span class="comment"> the &lt;tt&gt;FOAttributes&lt;/tt&gt; containing the attributes
  349. * to merge.
  350. */</span>
  351. <span class="jde-java-font-lock-modifier">public</span> <span class="type">void</span> <span class="function-name" id="merge">merge</span>(<span class="type">FOAttributes</span> <span class="variable-name">foAttrs</span>) {
  352. foAttrMap.putAll(foAttrs.getFoAttrMap());
  353. <span class="type">int</span> <span class="variable-name" id="attrLen">attrLen</span> = foAttrs.getNSpaceAttrMapsSize();
  354. <span class="keyword">if</span> (attrLen != <span class="jde-java-font-lock-number">0</span>) {
  355. <span class="comment">// something to copy
  356. </span> <span class="keyword">if</span> (nSpaceAttrMaps == <span class="jde-java-font-lock-constant">null</span>) {
  357. <span class="comment">// no &quot;foreign&quot; attribute lists in this
  358. </span> <span class="comment">// copy the others in
  359. </span> nSpaceAttrMaps = <span class="keyword">new</span> <span class="type">ArrayList</span>(attrLen);
  360. }
  361. <span class="comment">// If the merging ArrayList of namespaces is larger, add the
  362. </span> <span class="comment">// extra elements and initialise each to an empty HashMap
  363. </span> <span class="keyword">for</span> (<span class="type">int</span> <span class="variable-name">i</span> = nSpaceAttrMaps.size(); i &lt; attrLen; i++)
  364. nSpaceAttrMaps.add(<span class="keyword">new</span> <span class="type">HashMap</span>(<span class="jde-java-font-lock-number">0</span>));
  365. <span class="comment">// Except for foAttrs, which has already been merged, merge
  366. </span> <span class="comment">// the entries from the merging foAttrs
  367. </span> <span class="keyword">for</span> (<span class="type">int</span> <span class="variable-name">i</span> = <span class="jde-java-font-lock-number">0</span>; i &lt; attrLen; i++) {
  368. <span class="comment">// skip foAttrMap
  369. </span> <span class="keyword">if</span> (i == <span class="reference">XMLNamespaces</span>.<span class="type">DefAttrNSIndex</span>) <span class="keyword">continue</span>;
  370. ((<span class="type">HashMap</span>) nSpaceAttrMaps.get(i))
  371. .putAll(foAttrs.getAttrMap(i));
  372. }
  373. }
  374. }
  375. }<span class="comment">// FOAttributes
  376. </span></pre>
  377. </body>
  378. </html>