| /******************************************************************************* |
| * 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; |
| |
| /** |
| * Dependency on the BPEL validation model only in here ... |
| */ |
| |
| |
| import java.util.List; |
| |
| import org.eclipse.bpel.validator.model.Filters; |
| 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.ARule; |
| |
| |
| /** |
| * Validate the receive activity. |
| * |
| * @author Michal Chmielewski (michal.chmielewski@oracle.com) |
| * @date Sep 25, 2006 |
| * |
| */ |
| |
| @SuppressWarnings({"nls","boxing"}) |
| |
| public class ReceiveValidator extends CPartnerActivityValidator { |
| |
| protected INode fMyRoleNode; |
| |
| protected INode fVariable; |
| protected INode fPortTypeFromRole; |
| |
| protected String fCreateInstance; |
| |
| protected int fFromPartsCount; |
| |
| protected String fVariableName; |
| |
| |
| /** (non-Javadoc) |
| * @see org.eclipse.bpel.validator.rules.CValidator#checkChildren() |
| */ |
| @Override |
| public void checkChildren () { |
| super.checkChildren(); |
| fFromPartsCount = checkChild(ND_FROM_PARTS,0,1); |
| } |
| |
| |
| /** |
| * |
| * @see org.eclipse.bpel.validator.model.Validator#start() |
| */ |
| |
| @Override |
| protected void start () { |
| |
| super.start(); |
| } |
| |
| |
| /** |
| * Lookup variable |
| */ |
| @ARule( |
| desc = "Check variable on receive activity", |
| author = "michal.chmielewski@oracle.com", |
| date = "01/10/2007", |
| errors="BPELC__UNSET_ATTRIBUTE,BPELC__INVALID_ATTRIBUTE_VALUE" |
| ) |
| public void rule_LookupVariable_1 () { |
| |
| fVariableName = getAttribute(mNode, AT_VARIABLE, KIND_ACTIVITY, Filters.NC_NAME, false); |
| |
| if (isEmpty(fVariableName) == false) { |
| fVariable = mModelQuery.lookup(mNode, |
| IModelQueryLookups.LOOKUP_NODE_VARIABLE, |
| fVariableName ); |
| |
| } |
| |
| fPartnerLinkType = null; |
| fMyRoleNode = null; |
| |
| } |
| |
| |
| /** |
| * Checks to see if the createInstance attribute is set to either yes/no |
| * |
| */ |
| @ARule( |
| desc = "Check createInstance attribute on receive activity.", |
| author = "michal.chmielewski@oracle.com", |
| date = "01/10/2007", |
| errors="BPELC__UNSET_ATTRIBUTE,BPELC__INVALID_ATTRIBUTE_VALUE" |
| ) |
| public void rule_CheckCreateInstanceSetting_2 () { |
| |
| fCreateInstance = getAttribute(mNode, |
| AT_CREATE_INSTANCE, |
| KIND_ACTIVITY, |
| Filters.BOOLEAN_FILTER, |
| false); |
| |
| if (isEmpty(fCreateInstance)) { |
| fCreateInstance = NO; |
| } |
| } |
| |
| /** |
| * Check if this is a valid start activity. |
| * |
| */ |
| @ARule( |
| sa = 56, |
| desc = "Check if this 'start' <receive> activity is positioned correctly", |
| author = "michal.chmielewski@oracle.com", |
| date = "01/10/2007", |
| errors="BPELC__START_ACTIVITY" |
| ) |
| |
| public void rule_CheckIfStartActivity_3 () { |
| |
| if (NO.equals(fCreateInstance)) { |
| return ; |
| } |
| |
| checkStartActivityPositioning(); |
| |
| // mark in the process that we are a start activity. |
| List<INode> starts = getValue ( mNode.rootNode(), "start.activities" , null ); |
| starts.add( mNode ); |
| } |
| |
| |
| /** |
| * Check to see if the variable in the receive is set and is resolvable. |
| * |
| */ |
| |
| |
| @ARule( |
| sa = 2003, |
| desc = "Check if inputVariable is set and exists and is defined correctly.", |
| author="michal.chmielewski@oracle.com", |
| date = "01/20/2007", |
| errors="BPELC__UNSET_ATTRIBUTE,BPELC__UNRESOLVED_ATTRIBUTE,BPELC__INVALID_ATTRIBUTE_VALUE", |
| warnings="BPELC_REF_NODE_PROBLEMS" |
| ) |
| public void rule_CheckVariable_3 () { |
| fVariable = verifyVariable( fVariable, AT_VARIABLE ); |
| } |
| |
| |
| |
| |
| |
| /** |
| * Check if the partner role is defined on this partner link. |
| */ |
| |
| @ARule( |
| author = "michal.chmielewski@oracle.com", |
| date = "9/25/2006", |
| desc = "Checks if partner role is defined in receive activity.", |
| errors = "BPELC_MISSING_ROLE" |
| ) |
| public void rule_CheckIfMyRoleIsDefined_5 () { |
| fMyRoleNode = lookupRoleNode ( fPartnerLinkNode , AT_MY_ROLE ); |
| } |
| |
| |
| |
| /** |
| * Check if the partnerLinkType derived port type and the port type present |
| * on the receive are one and the same. |
| */ |
| @ARule( |
| author = "michal.chmielewski@oracle.com", |
| date = "9/25/2006", |
| desc = "Checks portType and derived portType values on receive activity.", |
| sa = 5 , |
| errors="BPELC_MISMATCH_ROLE_PORT_TYPE" |
| ) |
| |
| public void rule_CheckRolePortTypeWithReceivePortType_10 () { |
| fPortTypeFromRole = verifyPortTypeFromRole ( fMyRoleNode, AT_MY_ROLE, fPortType ) ; |
| } |
| |
| |
| /** |
| * 1) Receive needs myRole set. |
| * 2) myRole -> portType |
| * 3) portType (has operations) -> operation |
| * 4) operation -> "input" message must be set. |
| */ |
| |
| INode fInputMessage ; |
| |
| /** |
| * Checks the Input Message for the receive. This just makes |
| * sure that input message is defined in the WSDL. |
| * |
| */ |
| |
| |
| @ARule( |
| author = "michal.chmielewski@oracle.com", |
| date = "9/25/2006", |
| desc = "Checks if input messages is defined for receive activity.", |
| errors="BPELC_PA__NO_MESSAGE,BPELC_PA__MSG_TYPE" |
| ) |
| public void rule_CheckInputMessage_12 () { |
| fInputMessage = findMessageType (fPortTypeFromRole, fOperation,WSDL_ND_INPUT, true ); |
| setValue("input.message.type", fInputMessage); |
| } |
| |
| |
| |
| |
| /** |
| * Check variable and message structure compatibility. |
| * |
| */ |
| @ARule( |
| sa = 58, |
| desc = "Check message type compatability on receive", |
| author = "michal.chmielewski@oracle.com", |
| date = "02/22/2007", |
| errors="BPELC_PA__MESSAGE_TYPE_MISMATCH" |
| ) |
| public void rule_CheckVariableAndMessageStructureCompatibility_20 () |
| { |
| IProblem problem; |
| |
| if (isUndefined(fInputMessage) || isUndefined( fVariable )) { |
| return ; |
| } |
| |
| // the variable validator will have the type of variable. |
| INode varType = getValue(fVariable,"type", null ); |
| |
| if (isUndefined(varType)) { |
| return ; |
| } |
| |
| // source -> destination |
| if (mModelQuery.check( IModelQueryLookups.TEST_COMPATIBLE_PARTNER_ACTIVITY_MESSAGE, varType, fInputMessage ) == false) { |
| |
| problem = createError( ); |
| problem.fill( "BPELC_PA__MESSAGE_TYPE_MISMATCH", //$NON-NLS-1$ |
| toString(mNode.nodeName()), |
| AT_VARIABLE, |
| fVariable.getAttribute( AT_NAME ), |
| fInputMessage, |
| varType |
| ); |
| } |
| } |
| |
| |
| |
| /** |
| * Check the presence of fromParts. |
| */ |
| |
| |
| |
| @ARule( |
| sa = 55, |
| desc = "Check to see if fromPart is specified; if so then " + |
| " variable must not be used on the receive.", |
| author = "michal.chmielewski@oracle.com", |
| date = "01/20/2007", |
| errors="BPELC__PA_PARTS" |
| ) |
| public void rule_checkFromPartsPresence_50 () { |
| |
| List<INode> fFromParts; |
| |
| fFromParts = mSelector.selectNodes(mNode, ND_FROM_PARTS, ND_FROM_PART ); |
| |
| IProblem problem; |
| |
| if (fFromParts.size() > 0 && isEmptyOrWhitespace(mNode.getAttribute(AT_VARIABLE)) == false) { |
| problem = createError(); |
| problem.fill("BPELC__PA_PARTS", |
| toString(mNode.nodeName()), |
| toString (ND_FROM_PART) , |
| AT_VARIABLE, |
| KIND_ACTIVITY); |
| } |
| } |
| |
| |
| } |