Package util

Source Code of util.Sax

/*
* This file is part of the WfMOpen project.
* Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* $Id: Sax.java 2326 2007-03-27 21:59:44Z mlipp $
*
* $Log$
* Revision 1.3  2006/09/29 12:32:09  drmlipp
* Consistently using WfMOpen as projct name now.
*
* Revision 1.2  2006/03/08 14:46:41  drmlipp
* Synchronized with 1.3.3p5.
*
* Revision 1.1.1.2.6.1  2005/12/05 12:13:33  drmlipp
* Added tests for toString() of SAXContentBuffer.
*
* Revision 1.1.1.2  2004/08/18 15:18:47  drmlipp
* Update to 1.2
*
* Revision 1.12  2004/06/25 14:52:10  lipp
* Minimal implementation of XMLStreamReader.
*
* Revision 1.11  2004/05/09 18:41:43  lipp
* Added support for content > 32k.
*
* Revision 1.10  2003/06/27 09:44:13  lipp
* Fixed copyright/license information.
*
* Revision 1.9  2003/04/24 20:51:21  lipp
* Fixed some warnings.
*
* Revision 1.8  2003/04/21 20:25:41  lipp
* Major revision of implementation.
*
* Revision 1.7  2003/04/17 21:04:13  lipp
* Minor updates for namespace support.
*
* Revision 1.6  2002/10/08 13:25:12  schlue
* Classpath modified to ensure that xerces is used.
* Use of localname changed to qname.
*
* Revision 1.5  2002/02/03 21:41:42  lipp
* Cleaned up unittests.
*
* Revision 1.4  2002/01/23 10:42:20  lipp
* Added delegating handler.
*
* Revision 1.3  2002/01/23 09:42:34  lipp
* Added default handler and attributes.
*
* Revision 1.2  2002/01/22 22:28:26  lipp
* Getting started with sax support, the second.
*
* Revision 1.1  2002/01/22 15:51:48  lipp
* Getting started with sax support.
*
*/
package util;

import java.util.HashSet;
import java.util.Set;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

import org.xml.sax.Attributes;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import de.danet.an.util.sax.DelegatingHandler;
import de.danet.an.util.sax.HandlerStack;
import de.danet.an.util.sax.SAXContentBuffer;
import de.danet.an.util.sax.StackedHandler;

import junit.framework.*;

/**
* Test class for sax utility classes
*/
public class Sax extends TestCase {

    /**
     * Konstruktor zum Erzeugen eines TestCase
     */
    public Sax (String name) {
  super (name);
    }

    /**
     * Assembling the test suite
     */
    public static Test suite() throws Exception {
        TestSuite suite = new TestSuite();
  suite.addTest(new Sax("saxContentBuf1"));
  suite.addTest(new Sax("saxContentBuf2"));
  suite.addTest(new Sax("saxContentBuf3"));
  suite.addTest(new Sax("simpleParse"))
  suite.addTest(new Sax("scopedParse"))
  suite.addTest(new Sax("scopedParse2"))
  suite.addTest(new Sax("scopedParse3"))
  suite.addTest(new Sax("scopedParse4"))
        return suite;
    }

    private XMLReader getReader() throws Exception {
  SAXParserFactory pf = SAXParserFactory.newInstance();
  pf.setValidating (false);
  pf.setNamespaceAware (true);
  SAXParser parser = pf.newSAXParser();
  XMLReader reader = parser.getXMLReader();
  reader.setEntityResolver (new EntityResolver () {
    public InputSource resolveEntity
        (String publicId, String systemId) {
        return new InputSource
      (Sax.class.getResourceAsStream("/xpdl.dtd"));
    }
      });
  return reader;
    }
 
    /**
     * Test
     */
    public void saxContentBuf1() throws Exception {
  SAXContentBuffer buf = new SAXContentBuffer ();
  final String ts1 = "Hello world!";
  StringBuffer ts2 = new StringBuffer ();
  for (int i = 0; i < 5000; i++) {
      ts2.append ("0123456789");
  }
  assertTrue (ts2.length() == 50000);

  buf.characters (ts1.toCharArray(), 0, ts1.toCharArray().length);
  buf.characters (ts2.toString().toCharArray(), 0,
      ts2.toString().toCharArray().length);

  final String[] res = new String[2];
  buf.emit (new DefaultHandler () {
    public void characters (char[] ch, int start, int length)
        throws SAXException {
        if (res[0] == null) {
      res[0] = new String (ch, start, length);
        } else {
      res[1] = new String (ch, start, length);
        }
    }
      });
  assertTrue (res[0].equals (ts1));
  assertTrue (res[1].equals (ts2.toString ()));
    }

    /**
     * Test
     */
    public void saxContentBuf2() throws Exception {
  SAXContentBuffer buf = new SAXContentBuffer ();
  XMLReader reader = getReader();
  reader.setContentHandler(buf);
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/testXPDL.xml")));
  XMLStreamReader rdr = buf.createXMLStreamReader();
  int event = 0;
  int sees = 0;
  int eees = 0;
  while (rdr.hasNext()) {
      event = rdr.next ();
      switch (event) {
      case XMLStreamConstants.START_ELEMENT:
    if (sees == 0) {
        assertTrue (rdr.getNamespaceURI().equals
        ("http://www.wfmc.org/2002/XPDL1.0"));
        assertTrue (rdr.getLocalName().equals ("Package"));
    }
    sees += 1;
    break;
      case XMLStreamConstants.END_ELEMENT:
    eees += 1;
    break;
      }
  }
  assertTrue (event == XMLStreamConstants.END_DOCUMENT);
  assertTrue (sees > 0);
  assertTrue (sees == eees);
    }

    /**
     * Test
     */
    public void saxContentBuf3() throws Exception {
  SAXContentBuffer buf = new SAXContentBuffer ();
  XMLReader reader = getReader();
  reader.setContentHandler(buf);
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/simpleSample.xml")));
  assertTrue (buf.toString(),
        buf.toString().equals ("<body><item/></body>"));
   }

    /**
     * Simple parsing test
     */
    public void simpleParse() throws Exception {
  XMLReader reader = getReader();
  HandlerStack stack = new HandlerStack (reader, new StackedHandler());
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/testXPDL.xml")));
    }

    /**
     * Scoped parsing test
     */
    public void scopedParse() throws Exception {
  final Set outerTags = new HashSet();
  final Set innerTags = new HashSet();
  final String expPath
      = "/{http://www.wfmc.org/2002/XPDL1.0}Package"
      + "/{http://www.wfmc.org/2002/XPDL1.0}WorkflowProcesses"
      + "/{http://www.wfmc.org/2002/XPDL1.0}WorkflowProcess"
      + "/{http://www.wfmc.org/2002/XPDL1.0}Activities"
      + "/{http://www.wfmc.org/2002/XPDL1.0}Activity"
      + "/{http://www.wfmc.org/2002/XPDL1.0}TransitionRestrictions";
  XMLReader reader = getReader();
  HandlerStack stack = new HandlerStack
      (reader, new StackedHandler() {
        public void startElement
      (String uri, String localName, String qName,
       Attributes atts) throws SAXException {
      outerTags.add (qName);
      if (qName.equals ("TransitionRestrictions")) {
          assertTrue (currentPath().equals(expPath));
          getStack().push (new SubHandler());
      }
        }
    });
  stack.setContextData ("innerTags", innerTags);
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/testXPDL.xml")));
  assertTrue (outerTags.contains ("Activity"));
  assertTrue (outerTags.contains ("TransitionRestrictions"));
  assertTrue (!outerTags.contains ("TransitionRestriction"));
  assertTrue (innerTags.contains ("TransitionRestrictions"));
  assertTrue (innerTags.contains ("TransitionRestriction"));
  assertTrue (!innerTags.contains ("Activity"));
    }

    public static class SubHandler extends StackedHandler {
  private Set tags;
  public void startElement
      (String uri, String localName, String qName, Attributes atts)
      throws SAXException {
      Set tags = (Set)getContextData("innerTags");
      tags.add (qName);
  }
    }

    /**
     * Scoped parsing test using delegating handler
     */
    public void scopedParse2() throws Exception {
  final Set outerTags = new HashSet();
  final Set innerTags = new HashSet();
  XMLReader reader = getReader();
  DelegatingHandler dh = new DelegatingHandler () {
    public void startElement
        (String uri, String localName, String qName,
         Attributes atts) throws SAXException {
        outerTags.add (qName);
        super.startElement (uri, localName, qName, atts);
    }
      };
  dh.addHandler ("http://www.wfmc.org/2002/XPDL1.0",
           "TransitionRestrictions", SubHandler.class);
  HandlerStack stack = new HandlerStack (reader, dh);
  stack.setContextData ("innerTags", innerTags);
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/testXPDL.xml")));
  assertTrue (outerTags.contains ("Activity"));
  assertTrue (outerTags.contains ("TransitionRestrictions"));
  assertTrue (!outerTags.contains ("TransitionRestriction"));
  assertTrue (innerTags.contains ("TransitionRestrictions"));
  assertTrue (innerTags.contains ("TransitionRestriction"));
  assertTrue (!innerTags.contains ("Activity"));
    }

    /**
     * Scoped parsing test using delegating handler
     */
    public void scopedParse3() throws Exception {
  final Set outerTags = new HashSet();
  final Set innerTags = new HashSet();
  XMLReader reader = getReader();
  DelegatingHandler dh = new DelegatingHandler () {
    public void startElement
        (String uri, String localName, String qName,
         Attributes atts) throws SAXException {
        outerTags.add (qName);
        super.startElement (uri, localName, qName, atts);
    }
      };
  dh.addHandler
      ("{http://www.wfmc.org/2002/XPDL1.0}Activity"
       + "/{http://www.wfmc.org/2002/XPDL1.0}TransitionRestrictions",
       SubHandler.class);
  HandlerStack stack = new HandlerStack (reader, dh);
  stack.setContextData ("innerTags", innerTags);
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/testXPDL.xml")));
  assertTrue (outerTags.contains ("Activity"));
  assertTrue (outerTags.contains ("TransitionRestrictions"));
  assertTrue (!outerTags.contains ("TransitionRestriction"));
  assertTrue (innerTags.contains ("TransitionRestrictions"));
  assertTrue (innerTags.contains ("TransitionRestriction"));
  assertTrue (!innerTags.contains ("Activity"));
    }

    /**
     * Scoped parsing test using delegating handler
     */
    public void scopedParse4() throws Exception {
  final Set outerTags = new HashSet();
  final Set innerTags = new HashSet();
  XMLReader reader = getReader();
  DelegatingHandler dh = new DelegatingHandler () {
    public void startElement
        (String uri, String localName, String qName,
         Attributes atts) throws SAXException {
        outerTags.add (qName);
        super.startElement (uri, localName, qName, atts);
    }
      };
  dh.addHandler
      ("/{http://www.wfmc.org/2002/XPDL1.0}Package"
       + "/{http://www.wfmc.org/2002/XPDL1.0}WorkflowProcesses"
       + "/{http://www.wfmc.org/2002/XPDL1.0}WorkflowProcess"
       + "/{http://www.wfmc.org/2002/XPDL1.0}Activities"
       + "/{http://www.wfmc.org/2002/XPDL1.0}Activity"
       + "/{http://www.wfmc.org/2002/XPDL1.0}TransitionRestrictions",
       SubHandler.class);
  HandlerStack stack = new HandlerStack (reader, dh);
  stack.setContextData ("innerTags", innerTags);
  reader.parse
      (new InputSource
       (Sax.class.getResourceAsStream("/util/testXPDL.xml")));
  assertTrue (outerTags.contains ("Activity"));
  assertTrue (outerTags.contains ("TransitionRestrictions"));
  assertTrue (!outerTags.contains ("TransitionRestriction"));
  assertTrue (innerTags.contains ("TransitionRestrictions"));
  assertTrue (innerTags.contains ("TransitionRestriction"));
  assertTrue (!innerTags.contains ("Activity"));
    }

}
TOP

Related Classes of util.Sax

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.