blob: ca9a4b7bd0aa5c02302ce6d5deaf525809e6a8d0 [file] [log] [blame]
/*
* Copyright 2005 Sascha Weinreuter
*
* Licensed 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.
*/
package org.intellij.plugins.xpathView.support.jaxen.extensions;
import org.intellij.lang.xpath.context.ContextType;
import org.intellij.lang.xpath.context.functions.Function;
import org.intellij.lang.xpath.context.functions.Parameter;
import org.intellij.lang.xpath.context.functions.XPathFunctionProvider;
import org.intellij.lang.xpath.psi.XPathType;
import org.intellij.plugins.xpathView.support.XPathSupport;
import org.jaxen.function.ext.EndsWithFunction;
import org.jaxen.function.ext.EvaluateFunction;
import org.jaxen.function.ext.LowerFunction;
import org.jaxen.function.ext.UpperFunction;
import org.jetbrains.annotations.NotNull;
import javax.xml.namespace.QName;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Simple implementation that adds extension functions for file-type, file-name and file-extension
*/
class XPathFunctionProviderImpl extends XPathFunctionProvider {
private final Map<QName, FunctionImplementation> myFunctions = new HashMap<QName, FunctionImplementation>();
public XPathFunctionProviderImpl() {
// XPathView extensions
myFunctions.put(new QName(null, "file-type"), new FileTypeFunction());
myFunctions.put(new QName(null, "file-name"), new FileNameFunction());
myFunctions.put(new QName(null, "file-ext"), new FileExtensionFunction());
// Extensions provided by Jaxen
//myFunctions.put(new QName(null, "matrix-concat"), new JaxenMatrixConcat());
myFunctions.put(new QName(null, "evaluate"), new JaxenEvaluate());
myFunctions.put(new QName(null, "lower-case"), new JaxenLower());
myFunctions.put(new QName(null, "upper-case"), new JaxenUpper());
myFunctions.put(new QName(null, "ends-with"), new JaxenEndsWith());
}
@NotNull
public Map<QName, ? extends Function> getFunctions(ContextType contextType) {
if (contextType == XPathSupport.TYPE) {
return myFunctions;
} else {
//noinspection unchecked
return Collections.emptyMap();
}
}
private static class JaxenEvaluate extends FunctionImplementation {
public JaxenEvaluate() {
super("evaluate", XPathType.NODESET,
new Parameter(XPathType.STRING, Parameter.Kind.REQUIRED));
}
public org.jaxen.Function getImplementation() {
return new EvaluateFunction();
}
}
private static class JaxenLower extends FunctionImplementation {
public JaxenLower() {
super("lower-case", XPathType.STRING,
new Parameter(XPathType.STRING, Parameter.Kind.REQUIRED),
new Parameter(XPathType.STRING, Parameter.Kind.OPTIONAL));
}
public org.jaxen.Function getImplementation() {
return new LowerFunction();
}
}
private static class JaxenUpper extends FunctionImplementation {
public JaxenUpper() {
super("upper-case", XPathType.STRING,
new Parameter(XPathType.STRING, Parameter.Kind.REQUIRED),
new Parameter(XPathType.STRING, Parameter.Kind.OPTIONAL));
}
public org.jaxen.Function getImplementation() {
return new UpperFunction();
}
}
private static class JaxenEndsWith extends FunctionImplementation {
public JaxenEndsWith() {
super("ends-with", XPathType.BOOLEAN,
new Parameter(XPathType.STRING, Parameter.Kind.REQUIRED),
new Parameter(XPathType.STRING, Parameter.Kind.REQUIRED));
}
public org.jaxen.Function getImplementation() {
return new EndsWithFunction();
}
}
}