blob: 5f0d6b6680aff77dcaef41345e2437ef3f5c1b29 [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.vprop;
import javax.xml.namespace.QName;
import org.eclipse.bpel.validator.model.ARule;
import org.eclipse.bpel.validator.model.IFilter;
import org.eclipse.bpel.validator.model.IModelQueryLookups;
import org.eclipse.bpel.validator.model.INode;
import org.eclipse.bpel.validator.model.IProblem;
import org.eclipse.bpel.validator.model.IValue;
import org.eclipse.bpel.validator.model.NodeNameFilter;
import org.eclipse.bpel.validator.model.Validator;
import org.eclipse.bpel.validator.rules.CValidator;
/**
* Validates Query nodes, that have query expressions.
*
*
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Oct 10, 2006
*
*/
@SuppressWarnings({"nls","boxing"})
public class Query extends CValidator {
/**
* The valid parent nodes (this is read via reflection in CValidator)
*/
static public IFilter<INode> PARENTS = new NodeNameFilter( VPROP_ND_PROPERTY_ALIAS );
protected Validator fQueryValidator = null;
protected String fQueryLanguage;
@Override
protected void start () {
super.start();
}
/**
* Checks the expression language attribute for support in the model.
*/
@ARule(
author = "michal.chmielewski@oracle.com",
desc = "Checks the query language for support in the BPEL model",
date = "10/2/2006",
sa = 4 ,
errors="BPELC__UNSUPPORTED_XML_LANG"
)
public void rule_CheckQueryLanguageSupport_20 () {
fQueryLanguage = getLanguage(mNode,AT_QUERYLANGUAGE);
IProblem problem;
if ( mModelQuery.hasSupport(IModelQueryLookups.SUPPORT_QUERY_LANGUAGE,
fQueryLanguage) == false ) {
problem = createError();
problem.fill(
"BPELC__UNSUPPORTED_XML_LANG", //$NON-NLS-1$
AT_QUERYLANGUAGE,
fQueryLanguage);
disableRules( );
return ;
}
}
/**
*
*
* WS-BPEL variables and WS-BPEL functions MUST NOT be used in query
* expressions of propertyAlias definitions
*/
@ARule(
author = "michal.chmielewski@oracle.com",
desc = "WS-BPEL variables and WS-BPEL functions MUST NOT be used in "
+ " query expressions of propertyAlias definitions.",
date = "3/6/2007",
sa = 29,
warnings="BPELC__NO_EXPRESSION_VALIDATOR"
)
public void rule_CheckQuery_30 () {
if (fQueryValidator == null) {
fQueryValidator = createExpressionValidator( new QName( fQueryLanguage, mNode.nodeName().getLocalPart() ) );
if (fQueryValidator == null) {
return ;
}
attach(fQueryValidator);
}
// The parent node (to or from) has probably figured out some type
// so far. The query further refine it.
setValue("expression.type",getValue(fParentNode,"type",null));
setValue("bpel.function", false);
setValue("bpel.variables", false);
setValue(fParentNode,"type", new IValue<Object>() {
public Object get() {
return fQueryValidator.getValue("expression.type");
}
}
);
}
/** End of public rule methods.
*
* Other methods are support methods for this class to perform its
* validation function.
*
*/
}