19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: ExtensionNamespacesManager.java 469672 2006-10-31 21:56:19Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xalan.extensions;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Vector;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.templates.Constants;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Used during assembly of a stylesheet to collect the information for each
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * extension namespace that is required during the transformation process
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to generate an {@link ExtensionHandler}.
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class ExtensionNamespacesManager
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Vector of ExtensionNamespaceSupport objects to be used to generate ExtensionHandlers.
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private Vector m_extensions = new Vector();
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Vector of ExtensionNamespaceSupport objects for predefined ExtensionNamespaces. Elements
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * from this vector are added to the m_extensions vector when encountered in the stylesheet.
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private Vector m_predefExtensions = new Vector(7);
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Vector of extension namespaces for which sufficient information is not yet available to
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * complete the registration process.
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private Vector m_unregisteredExtensions = new Vector();
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * An ExtensionNamespacesManager is instantiated the first time an extension function or
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * element is found in the stylesheet. During initialization, a vector of ExtensionNamespaceSupport
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * objects is created, one for each predefined extension namespace.
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public ExtensionNamespacesManager()
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    setPredefinedNamespaces();
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * If necessary, register the extension namespace found compiling a function or
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * creating an extension element.
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * If it is a predefined namespace, create a
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * support object to simplify the instantiate of an appropriate ExtensionHandler
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * during transformation runtime. Otherwise, add the namespace, if necessary,
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * to a vector of undefined extension namespaces, to be defined later.
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void registerExtension(String namespace)
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (namespaceIndex(namespace, m_extensions) == -1)
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      int predef = namespaceIndex(namespace, m_predefExtensions);
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (predef !=-1)
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_extensions.add(m_predefExtensions.get(predef));
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      else if (!(m_unregisteredExtensions.contains(namespace)))
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_unregisteredExtensions.add(namespace);
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Register the extension namespace for an ElemExtensionDecl or ElemFunction,
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * and prepare a support object to launch the appropriate ExtensionHandler at
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * transformation runtime.
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void registerExtension(ExtensionNamespaceSupport extNsSpt)
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String namespace = extNsSpt.getNamespace();
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (namespaceIndex(namespace, m_extensions) == -1)
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      m_extensions.add(extNsSpt);
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (m_unregisteredExtensions.contains(namespace))
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_unregisteredExtensions.remove(namespace);
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the index for a namespace entry in the extension namespace Vector, -1 if
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * no such entry yet exists.
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int namespaceIndex(String namespace, Vector extensions)
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for (int i = 0; i < extensions.size(); i++)
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (((ExtensionNamespaceSupport)extensions.get(i)).getNamespace().equals(namespace))
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return i;
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return -1;
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the vector of extension namespaces. Used to provide
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the extensions table access to a list of extension
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * namespaces encountered during composition of a stylesheet.
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public Vector getExtensions()
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_extensions;
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Attempt to register any unregistered extension namespaces.
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void registerUnregisteredNamespaces()
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for (int i = 0; i < m_unregisteredExtensions.size(); i++)
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      String ns = (String)m_unregisteredExtensions.get(i);
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      ExtensionNamespaceSupport extNsSpt = defineJavaNamespace(ns);
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (extNsSpt != null)
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_extensions.add(extNsSpt);
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * For any extension namespace that is not either predefined or defined
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * by a "component" declaration or exslt function declaration, attempt
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * to create an ExtensionNamespaceSuport object for the appropriate
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Java class or Java package Extension Handler.
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Called by StylesheetRoot.recompose(), after all ElemTemplate compose()
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * operations have taken place, in order to set up handlers for
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the remaining extension namespaces.
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param ns The extension namespace URI.
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return   An ExtensionNamespaceSupport object for this namespace
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * (which defines the ExtensionHandler to be used), or null if such
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * an object cannot be created.
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws javax.xml.transform.TransformerException
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public ExtensionNamespaceSupport defineJavaNamespace(String ns)
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return defineJavaNamespace(ns, ns);
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public ExtensionNamespaceSupport defineJavaNamespace(String ns, String classOrPackage)
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null == ns || ns.trim().length() == 0) // defensive. I don't think it's needed.  -sb
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return null;
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // Prepare the name of the actual class or package, stripping
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // out any leading "class:".  Next, see if there is a /.  If so,
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // only look at the text to the right of the rightmost /.
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String className = classOrPackage;
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (className.startsWith("class:"))
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      className = className.substring(6);
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    int lastSlash = className.lastIndexOf("/");
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (-1 != lastSlash)
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      className = className.substring(lastSlash + 1);
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // The className can be null here, and can cause an error in getClassForName
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // in JDK 1.8.
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null == className || className.trim().length() == 0)
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return null;
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    try
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      ExtensionHandler.getClassForName(className);
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return new ExtensionNamespaceSupport(
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                           ns,
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                           "org.apache.xalan.extensions.ExtensionHandlerJavaClass",
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                           new Object[]{ns, "javaclass", className});
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    catch (ClassNotFoundException e)
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return new ExtensionNamespaceSupport(
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            ns,
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            "org.apache.xalan.extensions.ExtensionHandlerJavaPackage",
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            new Object[]{ns, "javapackage", className + "."});
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public ExtensionNamespaceSupport getSupport(int index, Vector extensions)
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return (ExtensionNamespaceSupport)extensions.elementAt(index);
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson*/
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set up a Vector for predefined extension namespaces.
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private void setPredefinedNamespaces()
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String uri = Constants.S_EXTENSIONS_JAVA_URL;
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String handlerClassName = "org.apache.xalan.extensions.ExtensionHandlerJavaPackage";
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String lang = "javapackage";
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String lib = "";
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXTENSIONS_OLD_JAVA_URL;
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXTENSIONS_LOTUSXSL_JAVA_URL;
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_BUILTIN_EXTENSIONS_URL;
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    handlerClassName = "org.apache.xalan.extensions.ExtensionHandlerJavaClass";
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lang = "javaclass"; // for remaining predefined extension namespaces.
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.Extensions";
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_BUILTIN_OLD_EXTENSIONS_URL;
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // Xalan extension namespaces (redirect, pipe and SQL).
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXTENSIONS_REDIRECT_URL;
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.Redirect";
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXTENSIONS_PIPE_URL;
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.PipeDocument";
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXTENSIONS_SQL_URL;
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.sql.XConnection";
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    //EXSLT namespaces (not including EXSLT function namespaces which are
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // registered by the associated ElemFunction.
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXSLT_COMMON_URL;
2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.ExsltCommon";
2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXSLT_MATH_URL;
2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.ExsltMath";
2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXSLT_SETS_URL;
2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.ExsltSets";
2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXSLT_DATETIME_URL;
2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.ExsltDatetime";
2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXSLT_DYNAMIC_URL;
2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.ExsltDynamic";
2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    uri = Constants.S_EXSLT_STRINGS_URL;
2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    lib = "org.apache.xalan.lib.ExsltStrings";
2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_predefExtensions.add(new ExtensionNamespaceSupport(uri, handlerClassName,
2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                             new Object[]{uri, lang, lib}));
2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
287