/*******************************************************************************
 * 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 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Oracle Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.bpel.validator.xpath;

import org.eclipse.bpel.validator.model.ARule;
import org.eclipse.bpel.validator.model.IProblem;

import org.eclipse.bpel.xpath10.Expr;
import org.eclipse.bpel.xpath10.PathExpr;
import org.eclipse.bpel.xpath10.UnaryExpr;
import org.eclipse.bpel.xpath10.VariableReferenceExpr;

/**
 * @author Michal Chmielewski (michal.chmielewski@oracle.com)
 * @date Mar 23, 2007
 *
 */

@SuppressWarnings("nls")

public class To extends XPathValidator {


	
	/**
	 * Check to make sure that the expression is a variable reference expressions.
	 */
	
	
	@ARule(
		sa = 33,
		desc = "Check variable reference expression on to nodes",
		author = "michal.chmielewski@oracle.com",
		date = "01/20/2007"
	)

	public void rule_CheckVariableReference_15 () {
				
		IProblem problem;
		Expr expr = xpathExpr;
		
		// fix Bug 323940
		if (expr instanceof UnaryExpr) {
			expr = ((UnaryExpr)expr).getExpr();
		}
		if (expr instanceof VariableReferenceExpr) {
			mVisitor.visit( expr );
		} else if (expr instanceof PathExpr) {
			PathExpr pe = (PathExpr) expr;
			if (pe.getFilterExpr() instanceof VariableReferenceExpr) {
				mVisitor.visit(pe);
			} else {
				problem = createError();
				problem.fill("XPATH_EXPRESSION_TYPE",
						toString(mNode.nodeName()),
						exprStringTrimmed,
						fExprByNode
					);
				repointOffsets(problem, expr ); 									
			}
		} else {
			problem = createError();
			problem.fill("XPATH_EXPRESSION_TYPE",
					toString(mNode.nodeName()),
					exprStringTrimmed,
					fExprByNode
				);
			repointOffsets(problem, expr ); 					
		}
	
		
		disableRules();
	}
		
}
