morten      01/06/06 04:55:43

  Added:       java/src/org/apache/xalan/xsltc/compiler
                        UnsupportedElement.java
  Log:
  Adding a class for handling unsupported stylesheet elements
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.1                  
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UnsupportedElement.java
  
  Index: UnsupportedElement.java
  ===================================================================
  /*
   * @(#)$Id: UnsupportedElement.java,v 1.1 2001/06/06 11:55:41 morten Exp $
   *
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2001, Sun
   * Microsystems., http://www.sun.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * @author Morten Jorgensen
   *
   */
  
  package org.apache.xalan.xsltc.compiler;
  
  import java.util.Hashtable;
  import java.util.Enumeration;
  import java.util.Vector;
  
  import javax.xml.parsers.*;
  
  import org.xml.sax.*;
  
  import org.apache.xalan.xsltc.compiler.util.Type;
  import org.apache.xalan.xsltc.compiler.util.ReferenceType;
  
  import de.fub.bytecode.generic.*;
  import org.apache.xalan.xsltc.compiler.util.*;
  
  final class UnsupportedElement extends SyntaxTreeNode {
  
      private Fallback _fallback = null;
      private String _message = null;
  
      /**
       * Basic consutrcor - stores element uri/prefix/localname
       */
      public UnsupportedElement(String uri, String prefix, String local) {
        super(uri, prefix, local);
      }
  
      /**
       * There are different categories of unsupported elements (believe it
       * or not): there are elements within the XSLT namespace (these would
       * be elements that are not yet implemented), there are extensions of
       * other XSLT processors and there are unrecognised extension elements
       * of this XSLT processor. The error message passed to this method
       * should describe the unsupported element itself and what category
       * the element belongs in.
       */
      public void setErrorMessage(String message) {
        _message = message;
      }
  
      /**
       * Displays the contents of this element
       */
      public void display(int indent) {
        indent(indent);
        Util.println("Unsupported element = " + _qname.getNamespace() +
                     ":" + _qname.getLocalPart());
        displayContents(indent + IndentIncrement);
      }
  
  
      /**
       * Scan all descendants and find the first xsl:fallback element (if any)
       */
      private SyntaxTreeNode findFallback(SyntaxTreeNode root) {
  
        // First check if this element exists at all
        if (root == null) return null;
  
        // Then check if the element is an xsl:fallback element
        if (root instanceof Fallback) return((Fallback)root);
  
        // Then traverse all child elements
        Vector children = root.getContents();
        if (children != null) {
            final int count = children.size();
            for (int i = 0; i < count; i++) {
                SyntaxTreeNode child = (SyntaxTreeNode)children.elementAt(i);
                SyntaxTreeNode node = findFallback(child);
                if (node != null) return node;
            }
        }
        return null;
      }
  
      /**
       * Find any fallback in the descendant nodes; then activate & parse it
       */
      public void parseContents(Parser parser) {
        _fallback = (Fallback)findFallback(this);
        if (_fallback != null) {
            _fallback.activate();
            _fallback.parseContents(parser);
        }
      }
  
      /**
       * Run type check on the fallback element (if any).
       */
      public Type typeCheck(SymbolTable stable) throws TypeCheckError {
        if (_fallback == null) {
            throw new TypeCheckError(new ErrorMsg(_message));
        }
        return(_fallback.typeCheck(stable));
      }
  
      /**
       * Translate the fallback element (if any). The stylesheet should never
       * be compiled if an unsupported element does not have a fallback element,
       * so this method should never be called unless _fallback != null
       */
      public void translate(ClassGenerator classGen, MethodGenerator methodGen) 
{
        if (_fallback != null) _fallback.translate(classGen, methodGen);
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to