blob: e2045260af6410a79e04fc61fbfbeab138e3dc73 [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 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.rules;
import org.eclipse.bpel.validator.model.ARule;
import org.eclipse.bpel.validator.model.Filters;
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;
import org.eclipse.bpel.validator.model.Validator;
/**
* Validates Empty nodes.
*
*
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Sep 14, 2006
*
*/
@SuppressWarnings("nls")
public class CopyValidator extends CValidator {
/** My parents */
static public IFilter<INode> PARENTS = new NodeNameFilter( ND_ASSIGN );
protected INode fToNode;
protected INode fFromNode;
protected Validator fromNodeValidator;
protected Validator toNodeValidator;
protected String fKeepSrcElement;
protected INode fFromTypeNode;
protected INode fToTypeNode;
/** (non-Javadoc)
* @see org.eclipse.bpel.validator.rules.CValidator#checkChildren()
*/
@Override
public void checkChildren ( ) {
super.checkChildren ();
checkChild(ND_FROM,1,1);
checkChild(ND_TO,1,1);
}
/**
* Start validation process on this node.
*
*/
@Override
protected void start() {
super.start();
fToNode = mNode.getNode(ND_TO);
fFromNode = mNode.getNode(ND_FROM);
}
/**
* Checks the verifyKeepSrcElement attribute.
*
*/
@ARule(
sa = 1001,
desc = "Check to see if keep source element is one of the allowed values",
author = "michal.chmielewski@oracle.com",
date = "02/12/2007",
errors="BPELC__UNSET_ATTRIBUTE,BPELC__INVALID_ATTRIBUTE_VALUE"
)
public void rule_VerifyKeepSrcElement_5 () {
fKeepSrcElement = getAttribute(mNode,
AT_KEEP_SRC_ELEMENT_NAME,
KIND_NODE,
Filters.BOOLEAN_FILTER,
false);
if (isEmpty(fKeepSrcElement)) {
fKeepSrcElement = NO;
}
}
/**
* Check to see if the copy rule is compatible.
*
*/
@ARule(
sa = 43,
desc = "From and to spec must have compatible types",
author = "michal.chmielewski@oracle.com",
date = "02/16/2007",
tag = "pass2",
errors="BPELC_COPY__INCOMPATIBLE",
warnings="BPELC_COPY__INCOMPATIBLE_SIMPLE",
infos = "BPELC_COPY__NOT_CHECKED"
)
public void rule_CheckCompatibleCopy_40 () {
compatibleCopyCheck(fFromNode,fToNode);
}
/**
* This rule gets run after all the validation rules have been (on 2nd pass).
*/
@ARule(
sa = 42,
desc = "Check if both from and to specs are EII; only then can keepSrcElement be set",
author = "michal.chmielewski@oracle.com",
date = "02/16/2007",
tag = "pass2",
errors="BPELC_COPY__KEEP_ELEMENT_NAME"
)
public void rule_CheckKeepSrcElement_50 () {
if (NO.equals(fKeepSrcElement)) {
return ;
}
fFromTypeNode = getValue(fFromNode,"type",null);
fToTypeNode = getValue(fToTypeNode,"type",null);
if (fFromTypeNode == null || fToTypeNode == null) {
return ;
}
IProblem problem;
if (mModelQuery.check(IModelQueryLookups.TEST_IS_SIMPLE_TYPE,fFromTypeNode,null) ) {
problem = createError();
problem.fill("BPELC_COPY__KEEP_ELEMENT_NAME",
toString(mNode.nodeName()),
AT_KEEP_SRC_ELEMENT_NAME,
"text.term.from",
fFromTypeNode
);
}
if (mModelQuery.check(IModelQueryLookups.TEST_IS_SIMPLE_TYPE,fToTypeNode,null) ) {
problem = createError();
problem.fill("BPELC_COPY__KEEP_ELEMENT_NAME",
toString(mNode.nodeName()),
AT_KEEP_SRC_ELEMENT_NAME,
"text.term.to",
fToTypeNode
);
}
}
/** End of public rule methods.
*
* Other methods are support methods for this class to perform its
* validation function.
*
*/
}