Package org.dykman.dexter.descriptor

Source Code of org.dykman.dexter.descriptor.NodeDescriptor

/**
* dexter (c) 2007, 2008 Michael Dykman
* Free for use under version 2.0 of the Artistic License.    
* http://www.opensource.org/licences/artistic-license.php    
*/

package org.dykman.dexter.descriptor;

import java.util.Iterator;

import org.dykman.dexter.Dexter;
import org.dykman.dexter.DexterException;
import org.dykman.dexter.base.TransformSequencer;
import org.w3c.dom.DocumentType;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

public class NodeDescriptor extends AbstractDescriptor
{
//  public static String idHash;
  protected Node node;
  TransformSequencer sequencer;
  boolean taint;
  public void setTransformSequencer(TransformSequencer sequencer)
  {
    this.sequencer = sequencer;
  }

  public NodeDescriptor(Node node)
  {
//    System.out.println("node type " + node.getNodeType());
    this.node = node;

    taint = node.getUserData(Dexter.DEXTER_TAINT) != null;
   
//System.out.println("ELEMENT: " + (taint ? "TAINTED" : "UNTAINED") + " " + node.getNodeName());   
  }
  public void attributes()
  {
    NamedNodeMap attr = node.getAttributes();
    if(attr != null)
    {
      int n = attr.getLength();
      for(int i = 0; i < n ;++i)
      {
        Node a = attr.item(i);
        sequencer.setAttribute(
            a.getNodeName(),a.getNodeValue());
      }
    }
  }

  public void children()
  {
    Iterator<Descriptor> it = children.iterator();
    while(it.hasNext())
    {
      Descriptor d = it.next();
      sequencer.runDescriptor(d);
    }
  }

  public void end()
  {
    int type = node.getNodeType();
    switch(type)
    {
      case Node.ELEMENT_NODE:
      case Node.TEXT_NODE:
      case Node.ENTITY_NODE:
      case Node.ENTITY_REFERENCE_NODE:
      case Node.CDATA_SECTION_NODE:
      case Node.COMMENT_NODE:
      case Node.DOCUMENT_NODE:
        sequencer.endNode();
      break;
    }

//    sequencer.endNode();
  }

  public void start()
  {
    int type = node.getNodeType();
//System.out.println("start " + type);
    switch(type)
    {
      case Node.ELEMENT_NODE:
        sequencer.startNode(node.getNodeName(),node.getNodeType());
      break;
      case Node.TEXT_NODE:
      case Node.CDATA_SECTION_NODE:
      case Node.COMMENT_NODE:
      case Node.DOCUMENT_NODE:
        sequencer.startNode(node.getNodeValue(),node.getNodeType());
      break;
      case Node.ENTITY_NODE:
//System.out.println("ENTITY NODE CALLED IN NodeDescriptor");
      case Node.ENTITY_REFERENCE_NODE:
//System.out.println("ENTITY_REFERENCE_NODE CALLED IN NodeDescriptor");
        sequencer.startNode(node.getNodeName(),node.getNodeType());
      break;
      case Node.DOCUMENT_TYPE_NODE:
        {
            sequencer.setDocType((DocumentType)node);
        }
      break;
      case Node.PROCESSING_INSTRUCTION_NODE:
        {
//System.err.println("WARNING: discarding processing instruction in the input");         
        }
      break;
      case Node.NOTATION_NODE:
      {
 
System.err.println("WARNING: discarding notation node in the input");         
      }
      break;
      default :
      {
        Dexter.reportInternalError("unhandled node type in NodeDescriptor: " + node.getNodeType(), null);
        throw new DexterException("unhandled node type: " + node.getNodeType());
      }
    }
  }

}
TOP

Related Classes of org.dykman.dexter.descriptor.NodeDescriptor

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.