| /******************************************************************************* |
| * 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.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. |
| * |
| */ |
| |
| } |