1. /* ===========================================================
  2. * JFreeChart : a free chart library for the Java(tm) platform
  3. * ===========================================================
  4. *
  5. * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
  6. *
  7. * Project Info: http://www.jfree.org/jfreechart/index.html
  8. *
  9. * This library is free software; you can redistribute it and/or modify it
  10. * under the terms of the GNU Lesser General Public License as published by
  11. * the Free Software Foundation; either version 2.1 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This library is distributed in the hope that it will be useful, but
  15. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  16. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
  17. * License for more details.
  18. *
  19. * You should have received a copy of the GNU Lesser General Public License
  20. * along with this library; if not, write to the Free Software Foundation,
  21. * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  22. *
  23. * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
  24. * in the United States and other countries.]
  25. *
  26. * ----------------
  27. * RootHandler.java
  28. * ----------------
  29. * (C) Copyright 2003-2005, by Object Refinery Limited and Contributors.
  30. *
  31. * Original Author: David Gilbert (for Object Refinery Limited);
  32. * Contributor(s): -;
  33. *
  34. * $Id: RootHandler.java,v 1.3 2005/02/13 22:07:34 mungady Exp $
  35. *
  36. * Changes
  37. * -------
  38. * 23-Jan-2003 : Version 1 (DG);
  39. *
  40. */
  41. package org.jfree.data.xml;
  42. import java.util.Stack;
  43. import org.xml.sax.SAXException;
  44. import org.xml.sax.helpers.DefaultHandler;
  45. /**
  46. * A SAX handler that delegates work to sub-handlers.
  47. */
  48. public class RootHandler extends DefaultHandler implements DatasetTags {
  49. /** The sub-handlers. */
  50. private Stack subHandlers;
  51. /**
  52. * Creates a new handler.
  53. */
  54. public RootHandler() {
  55. this.subHandlers = new Stack();
  56. }
  57. /**
  58. * Returns the stack of sub handlers.
  59. *
  60. * @return The sub-handler stack.
  61. */
  62. public Stack getSubHandlers() {
  63. return this.subHandlers;
  64. }
  65. /**
  66. * Receives some (or all) of the text in the current element.
  67. *
  68. * @param ch character buffer.
  69. * @param start the start index.
  70. * @param length the length of the valid character data.
  71. *
  72. * @throws SAXException for errors.
  73. */
  74. public void characters(char[] ch, int start, int length)
  75. throws SAXException {
  76. DefaultHandler handler = getCurrentHandler();
  77. if (handler != this) {
  78. handler.characters(ch, start, length);
  79. }
  80. }
  81. /**
  82. * Returns the handler at the top of the stack.
  83. *
  84. * @return The handler.
  85. */
  86. public DefaultHandler getCurrentHandler() {
  87. DefaultHandler result = this;
  88. if (this.subHandlers != null) {
  89. if (this.subHandlers.size() > 0) {
  90. Object top = this.subHandlers.peek();
  91. if (top != null) {
  92. result = (DefaultHandler) top;
  93. }
  94. }
  95. }
  96. return result;
  97. }
  98. /**
  99. * Pushes a sub-handler onto the stack.
  100. *
  101. * @param subhandler the sub-handler.
  102. */
  103. public void pushSubHandler(DefaultHandler subhandler) {
  104. this.subHandlers.push(subhandler);
  105. }
  106. /**
  107. * Pops a sub-handler from the stack.
  108. *
  109. * @return The sub-handler.
  110. */
  111. public DefaultHandler popSubHandler() {
  112. return (DefaultHandler) this.subHandlers.pop();
  113. }
  114. }