    ...
	/**
	 * Rule to check the name of the variable. 
	 */
	@ARule(
		author = "michal.chmielewski@oracle.com",
		date = "9/14/2006",
		desc = "Checks that variable NCName further does not contain a period (.) in the name.",
		sa = 24
	)	
	public void rule_CheckName_1 () {			
		
		// Must be a valid NCName ...
		mChecks.checkNCName(mNode, ncName, AT_NAME );
		
		IProblem problem ;
		// ... and not contain a .
		if (ncName.indexOf('.') >= 0) {
			problem = createError();
			problem.setAttribute(IProblem.CONTEXT, AT_NAME);
			problem.fill("BPELC_VARIABLE__NO_DOT", //$NON-NLS-1$
				ncName);
		}
	}
	
	
	
	/**
	 * Rule to check the type of the variable.
	 * 
	 * It can be either:
	 *   1) MessageType
	 *   2) Element
	 *   3) Type
	 *   
	 * Only one must be defined, more then one cannot be defined. 
	 *  
	 */
	@ARule(
		author = "michal.chmielewski@oracle.com",
		date = "9/14/2006",
		desc = "Variable type specification (either element, messaageType, or type).",
		sa = 25
	)
	
	public void rule_CheckType_2 () {
		
		int typeCount = 0;
		IProblem problem;
		
		// Check messageType 
		String messageType = mNode.getAttribute(AT_MESSAGE_TYPE);		 
		if (messageType != null) {
			typeCount += 1;
			fMessageTypeNode = mModelQuery.lookup(mNode, 
				  					IModelQuery.LookupNode.MESSAGE_TYPE, 
				  					messageType);			
		}
		
		
		// Check element
		String element = mNode.getAttribute(AT_ELEMENT);		
		if (element != null) {
			typeCount += 1;
			fElementNode = mModelQuery.lookup(mNode, 
							IModelQuery.LookupNode.XSD_ELEMENT,
							element );			
		}
		
		// Check Type (XMLType)
		String type = mNode.getAttribute ( AT_TYPE );			
		if (type != null) {
			typeCount += 1;
			fTypeNode = mModelQuery.lookup(mNode, 
										IModelQuery.LookupNode.XSD_TYPE,
										type );			
		}
		
		
		
		// Missing and too many types
		if (typeCount == 0) {
			problem = createError( );
			problem.setAttribute(IProblem.CONTEXT, AT_TYPE);
			problem.fill( "BPELC_VARIABLE__NO_TYPE", ncName); //$NON-NLS-1$
			
		} else if (typeCount > 1) {
			
			problem = createError( );
			problem.setAttribute(IProblem.CONTEXT, AT_TYPE);
			problem.fill( "BPELC_VARIABLE__NO_TYPE", ncName); //$NON-NLS-1$			
		}
	}
	

	/**
	 * Check message type node
	 */
	@ARule(
		sa = 10,
		desc = "Make sure that Message Type is visible from the import(s)",
		author = "michal.chmielewski@oracle.com",
		date = "01/25/2007"
	)
	
	public void rule_CheckMessageTypeNode_4 () {
		if (fMessageTypeNode == null) {
			return ;
		}
		
		mChecks.checkAttributeNode (mNode, fMessageTypeNode, AT_MESSAGE_TYPE, KIND_NODE );
		setValue("type",fMessageTypeNode);
	}
	...