Skip to main content

skip to main content

developerWorks  >  XML  >

Compiling the proxy

Using a Doclet to compile the proxy ContentHandler

developerWorks

Return to article.


Listing 7: DocbookHandler

package org.ananas.hc.test;

import java.io.*;
import org.xml.sax.*;
import org.ananas.hc.*;
import org.xml.sax.helpers.*;

/**
 * @xmlns http://ananas.org/2002/docbook
 */

public class DocbookHandler
   implements org.ananas.hc.HCHandler
{
   protected PrintWriter writer;
   protected String title;

   public DocbookHandler()
   {
      this(null);
      if(writer == null)
      {
         System.out.println("error");
         System.exit(0);
      }
   }

   public DocbookHandler(PrintWriter writer)
   {
      if(writer == null)
         this.writer = new PrintWriter(new OutputStreamWriter(System.out));
      else
         this.writer = writer;
   }

   /**
    * @xpath /
    */
   public void startHTML()
   {
      title = null;
      writer.println("<html>");
   }

   /**
    * @xpath /
    */
   public void endHTML()
   {
      writer.println("</body>");
      writer.print("</html>");
      writer.flush();
   }

   /**
    * @xpath articleinfo
    */
   public void endInfo()
   {
      writer.println("<body>");
   }

   /**
    * @xpath para
    */
   public void startPara()
   {
      writer.print("<p>");
   }

   /**
    * @xpath para
    */
   public void endPara()
   {
      writer.println("</p>");
   }

   /**
    * @xpath para
    * @xpath ulink
    */
   public void characters(char[] ch,int offset,int len)
   {
      writer.write(ch,offset,len);
   }

   /**
    * @xpath articleinfo/title
    */
   public void charactersTitle(String title)
   {
      this.title = title;
   }

   /**
    * @xpath ulink
    */
   public void startULink(Attributes atts)
   {
      writer.print("<a href='");
      writer.print(atts.getValue("uri"));
      writer.print("'>");
   }

   /**
    * @xpath ulink
    */
   public void endULink()
   {
      writer.print("</a>");
   }

   /**
    * @xpath articleinfo/title
    */
   public void endArticleTitle()
   {
      writer.print("<header><title>");
      writer.print(title);
      writer.println("</title></header>");
      writer.print("<h1>");
      writer.print(title);
      writer.println("</h1>");
   }

   public static void main(String[] params)
   {
      try
      {
         XMLReader xparser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
         if(params.length > 1)
         {
            PrintWriter writer = new PrintWriter(new FileWriter(params[1]));
            xparser.setContentHandler(new XPathHandler(new DocbookHandler(writer)));
         }
         else
            xparser.setContentHandler(new XPathHandler(new DocbookHandler()));
         xparser.parse(new InputSource(params[0]));
      }
      catch(SAXException e)
      {
         if(e.getException() != null)
            e.getException().printStackTrace();
         else
            e.printStackTrace();
      }
      catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

Return to article.