blob: 5c16b037673a41d19903e92212f131f8525453c0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id$
*/
package org.apache.xalan.extensions;
import java.util.Hashtable;
/**
* Abstract base class handling the java language extensions for XPath.
* This base class provides cache management shared by all of the
* various java extension handlers.
*
* @xsl.usage internal
*/
public abstract class ExtensionHandlerJava extends ExtensionHandler
{
/** Extension class name */
protected String m_className = "";
/** Table of cached methods */
private Hashtable m_cachedMethods = new Hashtable();
/**
* Construct a new extension handler given all the information
* needed.
*
* @param namespaceUri the extension namespace URI that I'm implementing
* @param funcNames string containing list of functions of extension NS
* @param lang language of code implementing the extension
* @param srcURL value of src attribute (if any) - treated as a URL
* or a classname depending on the value of lang. If
* srcURL is not null, then scriptSrc is ignored.
* @param scriptSrc the actual script code (if any)
* @param scriptLang the scripting language
* @param className the extension class name
*/
protected ExtensionHandlerJava(String namespaceUri, String scriptLang,
String className)
{
super(namespaceUri, scriptLang);
m_className = className;
}
/**
* Look up the entry in the method cache.
* @param methodKey A key that uniquely identifies this invocation in
* the stylesheet.
* @param objType A Class object or instance object representing the type
* @param methodArgs An array of the XObject arguments to be used for
* function mangling.
*
* @return The given method from the method cache
*/
public Object getFromCache(Object methodKey, Object objType,
Object[] methodArgs)
{
// Eventually, we want to insert code to mangle the methodKey with methodArgs
return m_cachedMethods.get(methodKey);
}
/**
* Add a new entry into the method cache.
* @param methodKey A key that uniquely identifies this invocation in
* the stylesheet.
* @param objType A Class object or instance object representing the type
* @param methodArgs An array of the XObject arguments to be used for
* function mangling.
* @param methodObj A Class object or instance object representing the method
*
* @return The cached method object
*/
public Object putToCache(Object methodKey, Object objType,
Object[] methodArgs, Object methodObj)
{
// Eventually, we want to insert code to mangle the methodKey with methodArgs
return m_cachedMethods.put(methodKey, methodObj);
}
}