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: ElemExtensionDecl.java 468643 2006-10-28 06:56:03Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xalan.templates; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.TransformerException; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.extensions.ExtensionNamespaceSupport; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.extensions.ExtensionNamespacesManager; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLMessages; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLTErrorResources; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.transformer.TransformerImpl; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.StringVector; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Implement the declaration of an extension element 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class ElemExtensionDecl extends ElemTemplateElement 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final long serialVersionUID = -4692738885172766789L; 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Constructor ElemExtensionDecl 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ElemExtensionDecl() 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // System.out.println("ElemExtensionDecl ctor"); 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Prefix string for this extension element. 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial */ 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String m_prefix = null; 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the prefix for this extension element 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param v Prefix to set for this extension element 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setPrefix(String v) 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_prefix = v; 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the prefix for this extension element 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Prefix for this extension element 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getPrefix() 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_prefix; 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** StringVector holding the names of functions defined in this extension. 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial */ 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private StringVector m_functions = new StringVector(); 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the names of functions defined in this extension 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param v StringVector holding the names of functions defined in this extension 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setFunctions(StringVector v) 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_functions = v; 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the names of functions defined in this extension 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return StringVector holding the names of functions defined in this extension 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public StringVector getFunctions() 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_functions; 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a function at a given index in this extension element 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param i Index of function to get 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Name of Function at given index 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getFunction(int i) throws ArrayIndexOutOfBoundsException 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == m_functions) 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new ArrayIndexOutOfBoundsException(); 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (String) m_functions.elementAt(i); 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get count of functions defined in this extension element 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return count of functions defined in this extension element 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getFunctionCount() 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (null != m_functions) ? m_functions.size() : 0; 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** StringVector of elements defined in this extension. 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial */ 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private StringVector m_elements = null; 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set StringVector of elements for this extension 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param v StringVector of elements to set 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setElements(StringVector v) 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elements = v; 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get StringVector of elements defined for this extension 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return StringVector of elements defined for this extension 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public StringVector getElements() 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_elements; 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the element at the given index 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param i Index of element to get 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The element at the given index 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getElement(int i) throws ArrayIndexOutOfBoundsException 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == m_elements) 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new ArrayIndexOutOfBoundsException(); 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (String) m_elements.elementAt(i); 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the count of elements defined for this extension element 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the count of elements defined for this extension element 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getElementCount() 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (null != m_elements) ? m_elements.size() : 0; 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get an int constant identifying the type of element. 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.templates.Constants 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The token ID for this element 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getXSLToken() 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return Constants.ELEMNAME_EXTENSIONDECL; 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void compose(StylesheetRoot sroot) throws TransformerException 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.compose(sroot); 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String prefix = getPrefix(); 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String declNamespace = getNamespaceForPrefix(prefix); 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String lang = null; 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String srcURL = null; 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String scriptSrc = null; 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == declNamespace) 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_NAMESPACE_DECL, new Object[]{prefix})); 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //"Prefix " + prefix does not have a corresponding namespace declaration"); 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (ElemTemplateElement child = getFirstChildElem(); child != null; 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson child = child.getNextSiblingElem()) 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (Constants.ELEMNAME_EXTENSIONSCRIPT == child.getXSLToken()) 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemExtensionScript sdecl = (ElemExtensionScript) child; 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson lang = sdecl.getLang(); 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson srcURL = sdecl.getSrc(); 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTemplateElement childOfSDecl = sdecl.getFirstChildElem(); 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != childOfSDecl) 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (Constants.ELEMNAME_TEXTLITERALRESULT 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson == childOfSDecl.getXSLToken()) 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTextLiteral tl = (ElemTextLiteral) childOfSDecl; 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char[] chars = tl.getChars(); 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson scriptSrc = new String(chars); 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (scriptSrc.trim().length() == 0) 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson scriptSrc = null; 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == lang) 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson lang = "javaclass"; 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (lang.equals("javaclass") && (scriptSrc != null)) 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_ELEM_CONTENT_NOT_ALLOWED, new Object[]{scriptSrc})); 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //"Element content not allowed for lang=javaclass " + scriptSrc); 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Register the extension namespace if it has not already been registered. 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ExtensionNamespaceSupport extNsSpt = null; 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ExtensionNamespacesManager extNsMgr = sroot.getExtensionNamespacesManager(); 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (extNsMgr.namespaceIndex(declNamespace, 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson extNsMgr.getExtensions()) == -1) 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (lang.equals("javaclass")) 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == srcURL) 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson extNsSpt = extNsMgr.defineJavaNamespace(declNamespace); 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (extNsMgr.namespaceIndex(srcURL, 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson extNsMgr.getExtensions()) == -1) 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson extNsSpt = extNsMgr.defineJavaNamespace(declNamespace, srcURL); 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else // not java 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String handler = "org.apache.xalan.extensions.ExtensionHandlerGeneral"; 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Object [] args = {declNamespace, this.m_elements, this.m_functions, 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson lang, srcURL, scriptSrc, getSystemId()}; 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson extNsSpt = new ExtensionNamespaceSupport(declNamespace, handler, args); 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (extNsSpt != null) 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson extNsMgr.registerExtension(extNsSpt); 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This function will be called on top-level elements 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * only, just before the transform begins. 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param transformer The XSLT TransformerFactory. 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerException 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void runtimeInit(TransformerImpl transformer) throws TransformerException 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* //System.out.println("ElemExtensionDecl.runtimeInit()"); 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String lang = null; 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String srcURL = null; 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String scriptSrc = null; 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String prefix = getPrefix(); 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String declNamespace = getNamespaceForPrefix(prefix); 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == declNamespace) 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_NAMESPACE_DECL, new Object[]{prefix})); 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //"Prefix " + prefix does not have a corresponding namespace declaration"); 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (ElemTemplateElement child = getFirstChildElem(); child != null; 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson child = child.getNextSiblingElem()) 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (Constants.ELEMNAME_EXTENSIONSCRIPT == child.getXSLToken()) 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemExtensionScript sdecl = (ElemExtensionScript) child; 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson lang = sdecl.getLang(); 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson srcURL = sdecl.getSrc(); 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTemplateElement childOfSDecl = sdecl.getFirstChildElem(); 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != childOfSDecl) 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (Constants.ELEMNAME_TEXTLITERALRESULT 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson == childOfSDecl.getXSLToken()) 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTextLiteral tl = (ElemTextLiteral) childOfSDecl; 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson char[] chars = tl.getChars(); 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson scriptSrc = new String(chars); 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (scriptSrc.trim().length() == 0) 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson scriptSrc = null; 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == lang) 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson lang = "javaclass"; 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (lang.equals("javaclass") && (scriptSrc != null)) 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_ELEM_CONTENT_NOT_ALLOWED, new Object[]{scriptSrc})); 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //"Element content not allowed for lang=javaclass " + scriptSrc); 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Instantiate a handler for this extension namespace. 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ExtensionsTable etable = transformer.getExtensionsTable(); 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ExtensionHandler nsh = etable.get(declNamespace); 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If we have no prior ExtensionHandler for this namespace, we need to 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // create one. 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If the script element is for javaclass, this is our special compiled java. 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Element content is not supported for this so we throw an exception if 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // it is provided. Otherwise, we look up the srcURL to see if we already have 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // an ExtensionHandler. 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == nsh) 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (lang.equals("javaclass")) 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == srcURL) 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson nsh = etable.makeJavaNamespace(declNamespace); 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson nsh = etable.get(srcURL); 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == nsh) 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson nsh = etable.makeJavaNamespace(srcURL); 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else // not java 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson nsh = new ExtensionHandlerGeneral(declNamespace, this.m_elements, 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_functions, lang, srcURL, 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson scriptSrc, getSystemId()); 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // System.out.println("Adding NS Handler: declNamespace = "+ 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // declNamespace+", lang = "+lang+", srcURL = "+ 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // srcURL+", scriptSrc="+scriptSrc); 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson etable.addExtensionNamespace(declNamespace, nsh); 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }*/ 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 370