blob: 1dc95a35cbfa684f3c679fde8d17ccc5df44dba8 [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.rules;
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.NodeNameFilter;
/**
* Validates variable related rules.
* <p>
* When thinking
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Sep 14, 2006
*
*/
@SuppressWarnings({"nls","boxing"})
public class CorrelationSetValidator extends CValidator {
/** Parent nodes */
static public IFilter<INode> PARENTS = new NodeNameFilter( ND_CORRELATION_SETS );
protected String ncName ;
protected String fProperties;
/**
* Start performing variable checks.
*/
@Override
protected void start () {
super.start();
ncName = mNode.getAttribute( AT_NAME );
fProperties = mNode.getAttribute(AT_PROPERTIES);
}
/**
* Check the NCName of the correlation set.
*/
@ARule(
sa = 0,
desc = "Check the NCName of the correlationSet",
author = "michal.chmielewski@oracle.com",
date = "01/20/2007",
errors="BPELC__UNSET_ATTRIBUTE,General.NCName_Bad"
)
public void rule_CheckName_1 () {
// Must be a valid NCName ...
checkNCName(mNode, ncName, AT_NAME );
}
/**
* Check if the correlation already exists.
*
*/
@ARule(
sa = 44,
desc = "Check to see if the correlationSet is already specified",
author = "michal.chmielewski@oracle.com",
date = "01/20/2007",
errors="BPELC_DUPLICATE_NAME"
)
public void rule_CheckDuplicateCorrelationSet_2 () {
if (ncName == null) {
return ;
}
String key = "set." + ncName;
// parent is correlationSets,
if (containsValueKey(fParentNode,key)) {
IProblem problem = createError();
problem.fill("BPELC_DUPLICATE_NAME",
toString(mNode.parentNode().nodeName()),
toString(mNode.nodeName()),
ncName);
return ;
}
setValue(fParentNode, key, Boolean.TRUE);
}
/**
* Check to make sure that properties are set.
*/
@ARule(
desc = "Check if property attribute is set",
author = "michal.chmielewski@oracle.com",
date = "01/20/2007",
errors="BPELC__UNSET_ATTRIBUTE"
)
public void rule_CheckPropertiesAttribute_10 () {
IProblem problem;
if (isEmptyOrWhitespace(fProperties)) {
problem = createError();
problem.fill("BPELC__UNSET_ATTRIBUTE",
toString(mNode.nodeName()) ,
AT_PROPERTIES,
KIND_NODE);
}
}
/**
* Properties used in a <correlationSet> MUST be defined using XML Schema simple types.
*
*/
@ARule(
sa = 45,
desc = "Properties used in a <correlationSet> MUST be defined using "
+ " XML Schema simple types.",
author = "michal.chmielewski@oracle.com",
date = "03/01/2007",
errors="BPELC__UNRESOLVED_ATTRIBUTE,BPELC_XSD__NOT_SIMPLE_TYPE"
)
public void rule_CheckProperties_15 () {
if (isEmpty(fProperties)) {
return ;
}
String[] qnList = fProperties.split("\\s");
INode property;
IProblem problem;
for(String qName : qnList) {
property = mModelQuery.lookup(mNode, IModelQueryLookups.LOOKUP_NODE_PROPERTY, qName);
if (isUndefined(property)) {
problem = createError();
problem.fill("BPELC__UNRESOLVED_ATTRIBUTE",
toString( mNode.nodeName() ), AT_PROPERTIES, KIND_NODE , qName ) ;
continue;
}
String atType = property.getAttribute(AT_TYPE);
if (isEmpty(atType)) {
continue ;
}
INode typeDef = mModelQuery.lookup( mNode, IModelQueryLookups.LOOKUP_NODE_XSD_TYPE, atType);
if (isUndefined(typeDef)) {
continue;
}
if (mModelQuery.check(IModelQueryLookups.TEST_IS_SIMPLE_TYPE, typeDef, null) == false) {
problem = createError();
problem.fill("BPELC_XSD__NOT_SIMPLE_TYPE",
toString(mNode.nodeName()),
atType,
"text.property",
qName
);
}
}
}
/**
* End of public rule methods.
*
* Other methods are support methods for this class to perform its
* validation function.
*
*/
}