~vcs-imports/xena/trunk

« back to all changes in this revision

Viewing changes to ext/src/xalan-j_2_7_1/src/org/apache/xalan/extensions/ExtensionHandler.java

  • Committer: matthewoliver
  • Date: 2009-12-10 03:18:07 UTC
  • Revision ID: vcs-imports@canonical.com-20091210031807-l086qguzdlljtkl9
Merged Xena Testing into Xena Stable for the Xena 5 release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Licensed to the Apache Software Foundation (ASF) under one
 
3
 * or more contributor license agreements. See the NOTICE file
 
4
 * distributed with this work for additional information
 
5
 * regarding copyright ownership. The ASF licenses this file
 
6
 * to you under the Apache License, Version 2.0 (the  "License");
 
7
 * you may not use this file except in compliance with the License.
 
8
 * You may obtain a copy of the License at
 
9
 *
 
10
 *     http://www.apache.org/licenses/LICENSE-2.0
 
11
 *
 
12
 * Unless required by applicable law or agreed to in writing, software
 
13
 * distributed under the License is distributed on an "AS IS" BASIS,
 
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
15
 * See the License for the specific language governing permissions and
 
16
 * limitations under the License.
 
17
 */
 
18
/*
 
19
 * $Id: ExtensionHandler.java,v 1.2 2009/12/10 03:18:40 matthewoliver Exp $
 
20
 */
 
21
package org.apache.xalan.extensions;
 
22
 
 
23
import java.io.IOException;
 
24
import java.util.Vector;
 
25
 
 
26
import javax.xml.transform.TransformerException;
 
27
 
 
28
import org.apache.xalan.templates.ElemTemplateElement;
 
29
import org.apache.xalan.templates.Stylesheet;
 
30
import org.apache.xalan.transformer.TransformerImpl;
 
31
import org.apache.xpath.functions.FuncExtFunction;
 
32
 
 
33
/**
 
34
 * Abstract base class for handling an extension namespace for XPath.
 
35
 * Provides functions to test a function's existence and call a function.
 
36
 * Also provides functions for calling an element and testing for
 
37
 * an element's existence.
 
38
 *
 
39
 * @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
 
40
 * @xsl.usage internal
 
41
 */
 
42
public abstract class ExtensionHandler
 
43
{
 
44
 
 
45
  /** uri of the extension namespace */
 
46
  protected String m_namespaceUri; 
 
47
 
 
48
  /** scripting language of implementation */
 
49
  protected String m_scriptLang;
 
50
 
 
51
  /**
 
52
   * This method loads a class using the context class loader if we're
 
53
   * running under Java2 or higher.
 
54
   * 
 
55
   * @param className Name of the class to load
 
56
   */
 
57
  static Class getClassForName(String className)
 
58
      throws ClassNotFoundException
 
59
  {
 
60
    // Hack for backwards compatibility with XalanJ1 stylesheets
 
61
    if(className.equals("org.apache.xalan.xslt.extensions.Redirect")) {
 
62
      className = "org.apache.xalan.lib.Redirect";
 
63
    }
 
64
 
 
65
    return ObjectFactory.findProviderClass(
 
66
        className, ObjectFactory.findClassLoader(), true);
 
67
  }
 
68
 
 
69
  /**
 
70
   * Construct a new extension namespace handler given all the information
 
71
   * needed.
 
72
   *
 
73
   * @param namespaceUri the extension namespace URI that I'm implementing
 
74
   * @param scriptLang   language of code implementing the extension
 
75
   */
 
76
  protected ExtensionHandler(String namespaceUri, String scriptLang)
 
77
  {
 
78
    m_namespaceUri = namespaceUri;
 
79
    m_scriptLang = scriptLang;
 
80
  }
 
81
 
 
82
  /**
 
83
   * Tests whether a certain function name is known within this namespace.
 
84
   * @param function name of the function being tested
 
85
   * @return true if its known, false if not.
 
86
   */
 
87
  public abstract boolean isFunctionAvailable(String function);
 
88
 
 
89
  /**
 
90
   * Tests whether a certain element name is known within this namespace.
 
91
   * @param element Name of element to check
 
92
   * @return true if its known, false if not.
 
93
   */
 
94
  public abstract boolean isElementAvailable(String element);
 
95
 
 
96
  /**
 
97
   * Process a call to a function.
 
98
   *
 
99
   * @param funcName Function name.
 
100
   * @param args     The arguments of the function call.
 
101
   * @param methodKey A key that uniquely identifies this class and method call.
 
102
   * @param exprContext The context in which this expression is being executed.
 
103
   *
 
104
   * @return the return value of the function evaluation.
 
105
   *
 
106
   * @throws TransformerException          if parsing trouble
 
107
   */
 
108
  public abstract Object callFunction(
 
109
    String funcName, Vector args, Object methodKey,
 
110
      ExpressionContext exprContext) throws TransformerException;
 
111
 
 
112
  /**
 
113
   * Process a call to a function.
 
114
   *
 
115
   * @param extFunction The XPath extension function.
 
116
   * @param args     The arguments of the function call.
 
117
   * @param exprContext The context in which this expression is being executed.
 
118
   *
 
119
   * @return the return value of the function evaluation.
 
120
   *
 
121
   * @throws TransformerException          if parsing trouble
 
122
   */
 
123
  public abstract Object callFunction(
 
124
    FuncExtFunction extFunction, Vector args,
 
125
      ExpressionContext exprContext) throws TransformerException;
 
126
 
 
127
  /**
 
128
   * Process a call to this extension namespace via an element. As a side
 
129
   * effect, the results are sent to the TransformerImpl's result tree.
 
130
   *
 
131
   * @param localPart      Element name's local part.
 
132
   * @param element        The extension element being processed.
 
133
   * @param transformer    Handle to TransformerImpl.
 
134
   * @param stylesheetTree The compiled stylesheet tree.
 
135
   * @param methodKey      A key that uniquely identifies this class and method call.
 
136
   *
 
137
   * @throws XSLProcessorException thrown if something goes wrong
 
138
   *            while running the extension handler.
 
139
   * @throws MalformedURLException if loading trouble
 
140
   * @throws FileNotFoundException if loading trouble
 
141
   * @throws IOException           if loading trouble
 
142
   * @throws TransformerException  if parsing trouble
 
143
   */
 
144
  public abstract void processElement(
 
145
    String localPart, ElemTemplateElement element, TransformerImpl transformer,
 
146
      Stylesheet stylesheetTree, Object methodKey) throws TransformerException, IOException;
 
147
}