|
What this is
Other links
The source code/* * 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.compiler; import org.apache.commons.jxpath.ri.Compiler; import org.apache.commons.jxpath.ri.QName; /** * @author Dmitri Plotnikov * @version $Revision: 1.10 $ $Date: 2004/02/29 14:17:39 $ */ public class TreeCompiler implements Compiler { private static final QName QNAME_NAME = new QName(null, "name"); public Object number(String value) { return new Constant(new Double(value)); } public Object literal(String value) { return new Constant(value); } public Object qname(String prefix, String name) { return new QName(prefix, name); } public Object sum(Object[] arguments) { return new CoreOperationAdd(toExpressionArray(arguments)); } public Object minus(Object left, Object right) { return new CoreOperationSubtract( (Expression) left, (Expression) right); } public Object multiply(Object left, Object right) { return new CoreOperationMultiply((Expression) left, (Expression) right); } public Object divide(Object left, Object right) { return new CoreOperationDivide((Expression) left, (Expression) right); } public Object mod(Object left, Object right) { return new CoreOperationMod((Expression) left, (Expression) right); } public Object lessThan(Object left, Object right) { return new CoreOperationLessThan((Expression) left, (Expression) right); } public Object lessThanOrEqual(Object left, Object right) { return new CoreOperationLessThanOrEqual( (Expression) left, (Expression) right); } public Object greaterThan(Object left, Object right) { return new CoreOperationGreaterThan( (Expression) left, (Expression) right); } public Object greaterThanOrEqual(Object left, Object right) { return new CoreOperationGreaterThanOrEqual( (Expression) left, (Expression) right); } public Object equal(Object left, Object right) { if (isNameAttributeTest((Expression) left)) { return new NameAttributeTest((Expression) left, (Expression) right); } else { return new CoreOperationEqual( (Expression) left, (Expression) right); } } public Object notEqual(Object left, Object right) { return new CoreOperationNotEqual( (Expression) left, (Expression) right); } public Object minus(Object argument) { return new CoreOperationNegate((Expression) argument); } public Object variableReference(Object qName) { return new VariableReference((QName) qName); } public Object function(int code, Object[] args) { return new CoreFunction(code, toExpressionArray(args)); } public Object function(Object name, Object[] args) { return new ExtensionFunction((QName) name, toExpressionArray(args)); } public Object and(Object arguments[]) { return new CoreOperationAnd( toExpressionArray(arguments)); } public Object or(Object arguments[]) { return new CoreOperationOr( toExpressionArray(arguments)); } public Object union(Object[] arguments) { return new CoreOperationUnion( toExpressionArray(arguments)); } public Object locationPath(boolean absolute, Object[] steps) { return new LocationPath(absolute, toStepArray(steps)); } public Object expressionPath( Object expression, Object[] predicates, Object[] steps) { return new ExpressionPath( (Expression) expression, toExpressionArray(predicates), toStepArray(steps)); } public Object nodeNameTest(Object qname) { return new NodeNameTest((QName) qname); } public Object nodeTypeTest(int nodeType) { return new NodeTypeTest(nodeType); } public Object processingInstructionTest(String instruction) { return new ProcessingInstructionTest(instruction); } public Object step(int axis, Object nodeTest, Object[] predicates) { return new Step( axis, (NodeTest) nodeTest, toExpressionArray(predicates)); } private Expression[] toExpressionArray(Object[] array) { Expression expArray[] = null; if (array != null) { expArray = new Expression[array.length]; for (int i = 0; i < expArray.length; i++) { expArray[i] = (Expression) array[i]; } } return expArray; } private Step[] toStepArray(Object[] array) { Step stepArray[] = null; if (array != null) { stepArray = new Step[array.length]; for (int i = 0; i < stepArray.length; i++) { stepArray[i] = (Step) array[i]; } } return stepArray; } private boolean isNameAttributeTest(Expression arg) { if (!(arg instanceof LocationPath)) { return false; } Step[] steps = ((LocationPath) arg).getSteps(); if (steps.length != 1) { return false; } if (steps[0].getAxis() != Compiler.AXIS_ATTRIBUTE) { return false; } NodeTest test = steps[0].getNodeTest(); if (!(test instanceof NodeNameTest)) { return false; } if (!((NodeNameTest) test).getNodeName().equals(QNAME_NAME)) { return false; } return true; } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.