blob: 9f0a5b7096589cefb3d42f0284db77437ef03bf3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.validator.xpath;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.List;
import org.eclipse.bpel.xpath10.*;
import org.eclipse.bpel.xpath10.parser.XPath10Exception;
import org.eclipse.bpel.xpath10.parser.XPath10Factory;
/**
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Oct 17, 2006
*
*/
@SuppressWarnings({"nls","boxing"})
public class Main {
/**
* @param argv
* @throws Exception
*/
static public void main (String argv[]) throws Exception {
Main main = new Main();
main.prompt ();
}
void prompt () throws IOException {
int ch = 0;
Walker visitor = new Walker();
while (ch != -1) {
p("XPath> ");
StringBuilder buf = new StringBuilder(100);
ch = System.in.read();
while (ch != '\n' && ch != (-1) ) {
buf.append((char) ch);
ch = System.in.read();
}
String xpath = buf.toString().trim();
if (xpath.length() == 0) {
continue;
}
Expr expr = null;
try {
expr = XPath10Factory.create ( xpath );
} catch (XPath10Exception t) {
pl("error: ... cannot create XPath expression"); //$NON-NLS-1$
System.out.println(xpath);
for(int i=0,j=t.getPosition(); i <= j; i++) {
System.out.print(" ");
}
pl("^^^ {0}",t.getMessage());
continue;
}
visitor.visit( expr );
}
}
static void p (String msg, Object ... args ) {
String text = MessageFormat.format(msg, args);
System.out.print(text);
System.out.flush();
}
static void pl (String msg, Object ... args ) {
p(msg,args);
System.out.println(""); //$NON-NLS-1$
System.out.flush();
}
class Walker {
int offset = 0;
/** (non-Javadoc)
* @see org.jaxen.expr.VisitorSupport#visit(org.jaxen.expr.AdditiveExpr)
*/
protected void visit (AdditiveExpr arg0) {
out("{0}: op={1} text={2}",
arg0.getClass().getSimpleName(),
arg0.getOperator(),
arg0.getText() );
out("LHS:");
visit(arg0.getLHS());
out("RHS:");
visit(arg0.getRHS());
}
protected void visit(AllNodeStep arg0) {
out("{0}: axis={1}, text={2}",
arg0.getClass().getSimpleName(),
arg0.getAxis(),
arg0.getText());
out("predicates:");
visitList(arg0.getPredicates());
}
protected void visit(CommentNodeStep arg0) {
out("{0}: {1}",arg0.getClass().getSimpleName(),arg0.getText());
out("predicates:");
visitList(arg0.getPredicates());
}
protected void visit(EqualityExpr arg0) {
out("{0}: op={1} text={2}",
arg0.getClass().getSimpleName(),
arg0.getOperator(),
arg0.getText() );
out("LHS:");
visit(arg0.getLHS());
out("RHS:");
visit(arg0.getRHS());
}
protected void visit(FilterExpr arg0) {
out("{0}: text={1}",arg0.getClass().getSimpleName(),arg0.getText());
out("expression:");
visit(arg0.getExpr());
out("predicates:");
visitList(arg0.getPredicates());
}
protected void visit(FunctionCallExpr arg0) {
out("{0}: name={1}, prefix={2}, #arguments={3}, text={4}", //$NON-NLS-1$
arg0.getClass().getSimpleName(),
arg0.getFunctionName(),
arg0.getPrefix(),
arg0.getParameters().size(),
arg0.getText());
out("arguments:");
visitList(arg0.getParameters());
}
protected void visit(LiteralExpr arg0) {
out("{0}: literal={1}, text={2}",
arg0.getClass().getSimpleName(),
arg0.getLiteral(),
arg0.getText());
}
protected void visit (LocationPath arg0) {
out("{0}: text={1}",arg0.getClass().getSimpleName(),arg0.getText());
out("steps:");
visitList(arg0.getSteps());
}
protected void visit(LogicalExpr arg0) {
out("{0}: op={1} text={2}",
arg0.getClass().getSimpleName(),
arg0.getOperator(),
arg0.getText() );
out("LHS:");
visit(arg0.getLHS());
out("RHS:");
visit(arg0.getRHS());
}
protected void visit (MultiplicativeExpr arg0) {
out("{0}: op={1} text={2}",
arg0.getClass().getSimpleName(),
arg0.getOperator(),
arg0.getText() );
out("LHS:");
visit(arg0.getLHS());
out("RHS:");
visit(arg0.getRHS());
}
protected void visit(NameStep arg0) {
out("{0}: axis={1}, name={2}, prefix={3}, text={4}",
arg0.getClass().getSimpleName(),
arg0.getAxis(),
arg0.getLocalName(),
arg0.getPrefix(),
arg0.getText());
out("predicates:");
visitList(arg0.getPredicates());
}
protected void visit(NumberExpr arg0) {
out("{0}: {1}",arg0.getClass().getSimpleName(),arg0.getNumber());
}
protected void visit(PathExpr arg0) {
out("{0}: text={1}",arg0.getClass().getSimpleName(),arg0.getText());
out("filterExpr:");
visit ( arg0.getFilterExpr() );
out("locationPath:");
visit ( arg0.getLocationPath() );
}
protected void visit(Predicate arg0) {
out("{0}: text={1}",arg0.getClass().getSimpleName(),arg0.getText());
out("expression:");
visit(arg0.getExpr());
}
protected void visit(ProcessingInstructionNodeStep arg0) {
out("{0}: name={1}, axis={2}, text={3}",arg0.getClass().getSimpleName(),
arg0.getName(),
arg0.getAxis(),
arg0.getText());
out("predicates:");
visitList(arg0.getPredicates());
}
protected void visit(RelationalExpr arg0) {
out("{0}: op={1} text={2}",
arg0.getClass().getSimpleName(),
arg0.getOperator(),
arg0.getText() );
out("LHS:");
visit(arg0.getLHS());
out("RHS:");
visit(arg0.getRHS());
}
protected void visit(TextNodeStep arg0) {
out("{0}: axis={1}, text={2}",
arg0.getClass().getSimpleName(),
arg0.getAxis(),
arg0.getText());
out("predicates:");
visitList(arg0.getPredicates());
}
protected void visit(UnaryExpr arg0) {
out("{0}: text={1}",arg0.getClass().getSimpleName(),arg0.getText() ) ;
out("expression:");
visit(arg0.getExpr());
}
protected void visit(UnionExpr arg0) {
out("{0}: text={1}",
arg0.getClass().getSimpleName(),
arg0.getText() );
out("LHS:");
visit(arg0.getLHS());
out("RHS:");
visit(arg0.getRHS());
}
/** (non-Javadoc)
* @see org.jaxen.expr.VisitorSupport#visit(org.jaxen.expr.VariableReferenceExpr)
*/
protected void visit(VariableReferenceExpr arg0) {
out("{0}: variable={1}, prefix={2}, text={3}",arg0.getClass().getSimpleName(),
arg0.getVariableName(),
arg0.getPrefix(),
arg0.getText());
}
protected void visitList (List<?> list) {
offset += 3;
Iterator<?> it = list.iterator();
while (it.hasNext()) {
visit(it.next());
}
offset -= 3;
}
/**
* Visit the generic expression.
*
* @param expr
*/
public void visit (Object expr) {
offset += 2;
if (expr instanceof VariableReferenceExpr) {
visit ( (VariableReferenceExpr) expr);
} else if (expr instanceof UnionExpr) {
visit ( (UnionExpr) expr);
} else if ( expr instanceof UnaryExpr) {
visit ( (UnaryExpr) expr);
} else if ( expr instanceof TextNodeStep ) {
visit ( (TextNodeStep) expr) ;
} else if ( expr instanceof RelationalExpr) {
visit ( (RelationalExpr) expr);
} else if ( expr instanceof ProcessingInstructionNodeStep) {
visit ( (ProcessingInstructionNodeStep) expr) ;
} else if ( expr instanceof Predicate) {
visit ( (Predicate) expr );
} else if ( expr instanceof PathExpr) {
visit ( (PathExpr) expr) ;
} else if ( expr instanceof NumberExpr) {
visit ( (NumberExpr) expr);
} else if ( expr instanceof NameStep) {
visit ( (NameStep) expr);
} else if ( expr instanceof MultiplicativeExpr) {
visit ( (MultiplicativeExpr) expr);
} else if ( expr instanceof LogicalExpr) {
visit ( (LogicalExpr) expr);
} else if ( expr instanceof LocationPath) {
visit ( (LocationPath) expr);
} else if ( expr instanceof LiteralExpr) {
visit ( (LiteralExpr) expr);
} else if ( expr instanceof FunctionCallExpr) {
visit ( (FunctionCallExpr) expr);
} else if ( expr instanceof FilterExpr) {
visit ( (FilterExpr) expr);
} else if ( expr instanceof EqualityExpr) {
visit ( (EqualityExpr) expr);
} else if ( expr instanceof CommentNodeStep) {
visit ( (CommentNodeStep)expr);
} else if ( expr instanceof AllNodeStep) {
visit ( (AllNodeStep) expr);
} else if ( expr instanceof AdditiveExpr) {
visit ( (AdditiveExpr) expr);
} else if (expr instanceof List) {
visitList((List)expr);
} else if (expr != null) {
out("Panic: Unknown expression kind {0} ",expr.getClass().getName()); //$NON-NLS-1$
} else {
out("null - unset");
}
offset -= 2;
}
void out ( String msg, Object ... args ) {
for(int i=0; i < offset; i++) {
System.out.print(' ');
}
pl (msg,args);
}
}
}