rootcontext.java
来自「JXPath」· Java 代码 · 共 146 行
JAVA
146 行
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* 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.apache.commons.jxpath.ri.axes;
import org.apache.commons.jxpath.Function;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.NodeSet;
import org.apache.commons.jxpath.ri.EvalContext;
import org.apache.commons.jxpath.ri.JXPathContextReferenceImpl;
import org.apache.commons.jxpath.ri.NamespaceResolver;
import org.apache.commons.jxpath.ri.QName;
import org.apache.commons.jxpath.ri.model.NodePointer;
/**
* EvalContext that is used to hold the root node for the path traversal.
*
* @author Dmitri Plotnikov
* @version $Revision: 1.18 $ $Date: 2004/04/01 02:55:31 $
*/
public class RootContext extends EvalContext {
private JXPathContextReferenceImpl jxpathContext;
private NodePointer pointer;
private Object registers[];
private int availableRegister = 0;
private NamespaceResolver namespaceResolver;
public static final Object UNKNOWN_VALUE = new Object();
private static final int MAX_REGISTER = 4;
public RootContext(
JXPathContextReferenceImpl jxpathContext,
NodePointer pointer)
{
super(null);
this.jxpathContext = jxpathContext;
this.pointer = pointer;
if (pointer != null) {
pointer.setNamespaceResolver(jxpathContext.getNamespaceResolver());
}
}
public JXPathContext getJXPathContext() {
return jxpathContext;
}
public RootContext getRootContext() {
return this;
}
public EvalContext getAbsoluteRootContext() {
return jxpathContext.getAbsoluteRootContext();
}
public NodePointer getCurrentNodePointer() {
return pointer;
}
public Object getValue() {
return pointer;
}
public int getCurrentPosition() {
throw new UnsupportedOperationException();
}
public boolean nextNode() {
throw new UnsupportedOperationException();
}
public boolean nextSet() {
throw new UnsupportedOperationException();
}
public boolean setPosition(int position) {
throw new UnsupportedOperationException();
}
public EvalContext getConstantContext(Object constant) {
if (constant instanceof NodeSet) {
return new NodeSetContext(
new RootContext(jxpathContext, null),
(NodeSet) constant);
}
NodePointer pointer;
if (constant instanceof NodePointer) {
pointer = (NodePointer) constant;
}
else {
pointer = NodePointer.newNodePointer(
new QName(null, ""),
constant,
null);
}
return new InitialContext(new RootContext(jxpathContext, pointer));
}
public EvalContext getVariableContext(QName variableName) {
return new InitialContext(
new RootContext(
jxpathContext,
jxpathContext.getVariablePointer(variableName)));
}
public Function getFunction(QName functionName, Object[] parameters) {
return jxpathContext.getFunction(functionName, parameters);
}
public Object getRegisteredValue(int id) {
if (registers == null || id >= MAX_REGISTER || id == -1) {
return UNKNOWN_VALUE;
}
return registers[id];
}
public int setRegisteredValue(Object value) {
if (registers == null) {
registers = new Object[MAX_REGISTER];
for (int i = 0; i < MAX_REGISTER; i++) {
registers[i] = UNKNOWN_VALUE;
}
}
if (availableRegister >= MAX_REGISTER) {
return -1;
}
registers[availableRegister] = value;
availableRegister++;
return availableRegister - 1;
}
public String toString() {
return super.toString() + ":" + pointer.asPath();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?