/******************************************************************************* * 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.vprop; 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; import org.eclipse.bpel.validator.rules.CValidator; /** * <vprop:property name="taxpayerNumber" type="txtyp:SSN" /> * * * @author Michal Chmielewski (michal.chmielewski@oracle.com) * */ @SuppressWarnings({"nls","boxing"}) public class Property extends CValidator { /** Parent nodes */ static public IFilter<INode> PARENTS = new NodeNameFilter( WSDL_ND_DEFINITIONS ); String ncName ; protected String fTypeName; protected String fElementName; /** * Start performing link checks. */ @Override public void start () { super.start(); ncName = mNode.getAttribute( AT_NAME ); } /** * Rule to check the name of the link. */ @ARule( sa = 0, desc = "Check the NCName of the property", author = "michal.chmielewski@oracle.com", date = "02/15/2007", errors="BPELC__UNSET_ATTRIBUTE,General.NCName_Bad" ) public void rule_CheckName_1 () { // Must be a valid NCName ... if (checkNCName(mNode, ncName, AT_NAME ) == false) { disableRules(); } } /** * Check duplicate name of property * */ @ARule( sa = 0, desc = "Check if property name is duplicated", author = "michal.chmielewski@oracle.com", date = "02/15/2007", errors="BPELC__DUPLICATE" ) public void rule_CheckDuplicateName_5 () { if (isEmpty(ncName)) { return; } IProblem problem; String key = "v.property." + ncName; if (containsValueKey(fParentNode,key)) { problem = createError(); problem.fill("BPELC__DUPLICATE", toString(mNode.nodeName()), ncName); return ; } setValue(fParentNode, key,true); } /** * Either the type or element attributes MUST be present in a * <vprop:property> element but not both. */ @ARule( sa = 19, desc = "Either the type or element attributes MUST be present but not both.", author = "michal.chmielewski@oracle.com", date = "02/17/2007", tag = "pass1", errors="BPELC_PROPERTY__UNSET" ) public void rule_CheckPropertyType_10 () { IProblem problem; fTypeName = mNode.getAttribute(AT_TYPE); fElementName = mNode.getAttribute(AT_ELEMENT); if ((isEmpty(fTypeName) && isEmpty(fElementName)) || (isNonEmpty(fTypeName) && isNonEmpty(fElementName))) { problem = createError(); problem.fill("BPELC_PROPERTY__UNSET", toString(mNode.nodeName()), AT_TYPE, AT_ELEMENT, 0); disableRules(); } } /** * Check if the type or element is visible. * * */ @ARule( desc = "Attribute cannot be resolved for XSD type or element.", author = "michal.chmielewski@oracle.com", date = "02/17/2007", tag = "pass1", errors="BPELC__UNRESOLVED_ATTRIBUTE" ) public void rule_CheckTypeOrElement_15 () { INode typeNode = null; IProblem problem; if (isEmpty(fTypeName) == false) { typeNode = mModelQuery.lookup(mNode.rootNode(), IModelQueryLookups.LOOKUP_NODE_XSD_TYPE, fTypeName); if (isUndefined(typeNode)) { problem = createError(); problem.fill("BPELC__UNRESOLVED_ATTRIBUTE", toString(mNode.nodeName()), AT_TYPE, KIND_NODE, fTypeName ); } } else if (isEmpty(fElementName) == false) { typeNode = mModelQuery.lookup(mNode.rootNode(), IModelQueryLookups.LOOKUP_NODE_XSD_ELEMENT, fElementName); if (isUndefined(typeNode)) { problem = createError(); problem.fill("BPELC__UNRESOLVED_ATTRIBUTE", toString(mNode.nodeName()), AT_ELEMENT, KIND_NODE, fElementName ); } } } /** * End of public rule methods. * * Other methods are support methods for this class to perform its * validation function. * */ }