diff options
Diffstat (limited to 'src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java')
-rw-r--r-- | src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java b/src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java new file mode 100644 index 0000000..fd066a3 --- /dev/null +++ b/src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java @@ -0,0 +1,165 @@ +/* + * reserved comment block + * DO NOT REMOVE OR ALTER! + */ +/* + * 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. + */ +/* + * $Id: UnaryOperation.java,v 1.2.4.1 2005/09/14 21:31:44 jeffsuttor Exp $ + */ +package com.sun.org.apache.xpath.internal.operations; + +import com.sun.org.apache.xpath.internal.Expression; +import com.sun.org.apache.xpath.internal.ExpressionOwner; +import com.sun.org.apache.xpath.internal.XPathContext; +import com.sun.org.apache.xpath.internal.XPathVisitor; +import com.sun.org.apache.xpath.internal.objects.XObject; + +/** + * The unary operation base class. + */ +public abstract class UnaryOperation extends Expression implements ExpressionOwner +{ + static final long serialVersionUID = 6536083808424286166L; + + /** The operand for the operation. + * @serial */ + protected Expression m_right; + + /** + * This function is used to fixup variables from QNames to stack frame + * indexes at stylesheet build time. + * @param vars List of QNames that correspond to variables. This list + * should be searched backwards for the first qualified name that + * corresponds to the variable reference qname. The position of the + * QName in the vector from the start of the vector will be its position + * in the stack frame (but variables above the globalsTop value will need + * to be offset to the current stack frame). + */ + public void fixupVariables(java.util.Vector vars, int globalsSize) + { + m_right.fixupVariables(vars, globalsSize); + } + + /** + * Tell if this expression or it's subexpressions can traverse outside + * the current subtree. + * + * @return true if traversal outside the context node's subtree can occur. + */ + public boolean canTraverseOutsideSubtree() + { + + if (null != m_right && m_right.canTraverseOutsideSubtree()) + return true; + + return false; + } + + /** + * Set the expression operand for the operation. + * + * + * @param r The expression operand to which the unary operation will be + * applied. + */ + public void setRight(Expression r) + { + m_right = r; + r.exprSetParent(this); + } + + /** + * Execute the operand and apply the unary operation to the result. + * + * + * @param xctxt The runtime execution context. + * + * @return An XObject that represents the result of applying the unary + * operation to the evaluated operand. + * + * @throws javax.xml.transform.TransformerException + */ + public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException + { + + return operate(m_right.execute(xctxt)); + } + + /** + * Apply the operation to two operands, and return the result. + * + * + * @param right non-null reference to the evaluated right operand. + * + * @return non-null reference to the XObject that represents the result of the operation. + * + * @throws javax.xml.transform.TransformerException + */ + public abstract XObject operate(XObject right) + throws javax.xml.transform.TransformerException; + + /** @return the operand of unary operation, as an Expression. + */ + public Expression getOperand(){ + return m_right; + } + + /** + * @see com.sun.org.apache.xpath.internal.XPathVisitable#callVisitors(ExpressionOwner, XPathVisitor) + */ + public void callVisitors(ExpressionOwner owner, XPathVisitor visitor) + { + if(visitor.visitUnaryOperation(owner, this)) + { + m_right.callVisitors(this, visitor); + } + } + + + /** + * @see ExpressionOwner#getExpression() + */ + public Expression getExpression() + { + return m_right; + } + + /** + * @see ExpressionOwner#setExpression(Expression) + */ + public void setExpression(Expression exp) + { + exp.exprSetParent(this); + m_right = exp; + } + + /** + * @see Expression#deepEquals(Expression) + */ + public boolean deepEquals(Expression expr) + { + if(!isSameClass(expr)) + return false; + + if(!m_right.deepEquals(((UnaryOperation)expr).m_right)) + return false; + + return true; + } + + +} |