001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 /*
019 * $Id: ExtensionHandlerJava.java 468637 2006-10-28 06:51:02Z minchau $
020 */
021 package org.apache.xalan.extensions;
022
023 import java.util.Hashtable;
024
025 /**
026 * Abstract base class handling the java language extensions for XPath.
027 * This base class provides cache management shared by all of the
028 * various java extension handlers.
029 *
030 * @xsl.usage internal
031 */
032 public abstract class ExtensionHandlerJava extends ExtensionHandler
033 {
034
035 /** Extension class name */
036 protected String m_className = "";
037
038 /** Table of cached methods */
039 private Hashtable m_cachedMethods = new Hashtable();
040
041 /**
042 * Construct a new extension handler given all the information
043 * needed.
044 *
045 * @param namespaceUri the extension namespace URI that I'm implementing
046 * @param funcNames string containing list of functions of extension NS
047 * @param lang language of code implementing the extension
048 * @param srcURL value of src attribute (if any) - treated as a URL
049 * or a classname depending on the value of lang. If
050 * srcURL is not null, then scriptSrc is ignored.
051 * @param scriptSrc the actual script code (if any)
052 * @param scriptLang the scripting language
053 * @param className the extension class name
054 */
055 protected ExtensionHandlerJava(String namespaceUri, String scriptLang,
056 String className)
057 {
058
059 super(namespaceUri, scriptLang);
060
061 m_className = className;
062 }
063
064 /**
065 * Look up the entry in the method cache.
066 * @param methodKey A key that uniquely identifies this invocation in
067 * the stylesheet.
068 * @param objType A Class object or instance object representing the type
069 * @param methodArgs An array of the XObject arguments to be used for
070 * function mangling.
071 *
072 * @return The given method from the method cache
073 */
074 public Object getFromCache(Object methodKey, Object objType,
075 Object[] methodArgs)
076 {
077
078 // Eventually, we want to insert code to mangle the methodKey with methodArgs
079 return m_cachedMethods.get(methodKey);
080 }
081
082 /**
083 * Add a new entry into the method cache.
084 * @param methodKey A key that uniquely identifies this invocation in
085 * the stylesheet.
086 * @param objType A Class object or instance object representing the type
087 * @param methodArgs An array of the XObject arguments to be used for
088 * function mangling.
089 * @param methodObj A Class object or instance object representing the method
090 *
091 * @return The cached method object
092 */
093 public Object putToCache(Object methodKey, Object objType,
094 Object[] methodArgs, Object methodObj)
095 {
096
097 // Eventually, we want to insert code to mangle the methodKey with methodArgs
098 return m_cachedMethods.put(methodKey, methodObj);
099 }
100 }