Example usage for org.w3c.dom Node getLocalName

List of usage examples for org.w3c.dom Node getLocalName

Introduction

In this page you can find the example usage for org.w3c.dom Node getLocalName.

Prototype

public String getLocalName();

Source Link

Document

Returns the local part of the qualified name of this node.

Usage

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicyDefaults.java

public static boolean repair(Node nodePolicyDefaults) throws DOMStructureException {
    Element elementPolicyDefaults = DOMUtil.getElement(nodePolicyDefaults);
    boolean result = false;

    NodeList children = elementPolicyDefaults.getChildNodes();
    int numChildren;
    if (children != null && (numChildren = children.getLength()) > 0) {
        for (int i = 0; i < numChildren; i++) {
            Node child = children.item(i);
            if (DOMUtil.isElement(child)) {
                if (DOMUtil.isInNamespace(child, XACML3.XMLNS)
                        && XACML3.ELEMENT_XPATHVERSION.equals(child.getLocalName())) {
                    try {
                        DOMUtil.getURIContent(child);
                    } catch (DOMStructureException ex) {
                        logger.warn("Setting invalid " + XACML3.ELEMENT_XPATHVERSION + " attribute "
                                + child.getTextContent() + " to " + XACML.XPATHVERSION_2_0);
                        child.setTextContent(XACML.XPATHVERSION_2_0);
                        result = true;/*from  ww w . j a v a 2  s.c o m*/
                    }
                } else {
                    logger.warn("Unexpected element " + child.getNodeName());
                    elementPolicyDefaults.removeChild(child);
                    result = true;
                }
            }
        }
    }

    return result;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicyIssuer.java

/**
 * Creates a new <code>DOMPolicyIssuer</code> by parsing the given <code>Node</code> representing a XACML
 * PolicyIssuer element.//from  w  w w.  jav a2 s.c  o m
 *
 * @param nodePolicyIssuer the <code>Node</code> representing the PolicyIssuer element
 * @return the new <code>DOMPolicyIssuer</code> parsed from the given <code>Node</code>
 * @throws DOMStructureException if the conversion is not possible
 */
public static PolicyIssuer newInstance(Node nodePolicyIssuer) throws DOMStructureException {
    Element elementPolicyIssuer = DOMUtil.getElement(nodePolicyIssuer);
    boolean bLenient = DOMProperties.isLenient();

    DOMPolicyIssuer domPolicyIssuer = new DOMPolicyIssuer();

    try {
        NodeList children = elementPolicyIssuer.getChildNodes();
        int numChildren;
        if (children != null && (numChildren = children.getLength()) > 0) {
            for (int i = 0; i < numChildren; i++) {
                Node child = children.item(i);
                if (DOMUtil.isElement(child) && DOMUtil.isInNamespace(child, XACML3.XMLNS)) {
                    String childName = child.getLocalName();
                    if (XACML3.ELEMENT_CONTENT.equals(childName)) {
                        if (domPolicyIssuer.getContent() != null && !bLenient) {
                            throw DOMUtil.newUnexpectedElementException(child, nodePolicyIssuer);
                        }
                        domPolicyIssuer.setContent(child);
                    } else if (XACML3.ELEMENT_ATTRIBUTE.equals(childName)) {
                        domPolicyIssuer.add(DOMAttribute.newInstance(identifierCategoryPolicyIssuer, child));
                    } else if (!bLenient) {
                        throw DOMUtil.newUnexpectedElementException(child, nodePolicyIssuer);
                    }
                }
            }
        }
    } catch (DOMStructureException ex) {
        domPolicyIssuer.setStatus(StdStatusCode.STATUS_CODE_SYNTAX_ERROR, ex.getMessage());
        if (DOMProperties.throwsExceptions()) {
            throw ex;
        }
    }

    return domPolicyIssuer;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicyIssuer.java

public static boolean repair(Node nodePolicyIssuer) throws DOMStructureException {
    Element elementPolicyIssuer = DOMUtil.getElement(nodePolicyIssuer);
    boolean result = false;

    boolean sawContent = false;
    NodeList children = elementPolicyIssuer.getChildNodes();
    int numChildren;
    if (children != null && (numChildren = children.getLength()) > 0) {
        for (int i = 0; i < numChildren; i++) {
            Node child = children.item(i);
            if (DOMUtil.isElement(child) && DOMUtil.isInNamespace(child, XACML3.XMLNS)) {
                String childName = child.getLocalName();
                if (XACML3.ELEMENT_CONTENT.equals(childName)) {
                    if (sawContent) {
                        logger.warn("Unexpected element " + child.getNodeName());
                        elementPolicyIssuer.removeChild(child);
                        result = true;/*from w w  w  .  jav a  2 s . co  m*/
                    } else {
                        sawContent = true;
                    }
                } else if (XACML3.ELEMENT_ATTRIBUTE.equals(childName)) {
                    result = DOMAttribute.repair(child) || result;
                } else {
                    logger.warn("Unexpected element " + child.getNodeName());
                    elementPolicyIssuer.removeChild(child);
                    result = true;
                }
            }
        }
    }

    return result;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicySet.java

/**
 * Creates a new <code>PolicySet</code> by parsing the given <code>Node</code> representing a XACML
 * PolicySet element.//w w  w  .j  a v  a  2s. com
 *
 * @param nodePolicySet the <code>Node</code> representing the XACML PolicySetelement
 * @param policyDefaultsParent the {@link org.apache.openaz.xacml.pdp.policy.PolicyDefaults} from the
 *            parent element
 * @return a new <code>PolicySet</code> parsed from the given <code>Node</code>
 * @throws DOMStructureException if there is an error parsing the <code>Node</code>
 */
public static PolicySet newInstance(Node nodePolicySet, PolicySet policySetParent,
        PolicyDefaults policyDefaultsParent) throws DOMStructureException {
    Element elementPolicySet = DOMUtil.getElement(nodePolicySet);
    boolean bLenient = DOMProperties.isLenient();

    PolicySet domPolicySet = new PolicySet(policySetParent);

    Iterator<?> iterator;
    Identifier identifier;
    Integer integer;

    try {
        NodeList children = elementPolicySet.getChildNodes();
        int numChildren;
        if (children != null && (numChildren = children.getLength()) > 0) {
            /*
             * Run through once, quickly, to set the PolicyDefaults for the new DOMPolicySet
             */
            for (int i = 0; i < numChildren; i++) {
                Node child = children.item(i);
                if (DOMUtil.isNamespaceElement(child, XACML3.XMLNS)
                        && XACML3.ELEMENT_POLICYDEFAULTS.equals(child.getLocalName())) {
                    if (domPolicySet.getPolicyDefaults() != null && !bLenient) {
                        throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                    }
                    domPolicySet.setPolicyDefaults(DOMPolicyDefaults.newInstance(child, policyDefaultsParent));
                }
            }
            if (domPolicySet.getPolicyDefaults() == null) {
                domPolicySet.setPolicyDefaults(policyDefaultsParent);
            }

            /*
             * Now process the other elements so we can pull up the parent policy defaults
             */
            for (int i = 0; i < numChildren; i++) {
                Node child = children.item(i);
                if (DOMUtil.isElement(child)) {
                    if (DOMUtil.isInNamespace(child, XACML3.XMLNS)) {
                        String childName = child.getLocalName();
                        if (XACML3.ELEMENT_DESCRIPTION.equals(childName)) {
                            if (domPolicySet.getDescription() != null && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                            }
                            domPolicySet.setDescription(child.getTextContent());
                        } else if (XACML3.ELEMENT_POLICYISSUER.equals(childName)) {
                            if (domPolicySet.getPolicyIssuer() != null && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                            }
                            domPolicySet.setPolicyIssuer(DOMPolicyIssuer.newInstance(child));
                        } else if (XACML3.ELEMENT_POLICYSETDEFAULTS.equals(childName)) { //NOPMD
                            // TODO
                        } else if (XACML3.ELEMENT_TARGET.equals(childName)) {
                            if (domPolicySet.getTarget() != null && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                            }
                            domPolicySet.setTarget(DOMTarget.newInstance(child));
                        } else if (XACML3.ELEMENT_POLICYSET.equals(childName)) {
                            domPolicySet.addChild(DOMPolicySet.newInstance(child, domPolicySet,
                                    domPolicySet.getPolicyDefaults()));
                        } else if (XACML3.ELEMENT_POLICY.equals(childName)) {
                            domPolicySet.addChild(DOMPolicy.newInstance(child, domPolicySet,
                                    domPolicySet.getPolicyDefaults()));
                        } else if (XACML3.ELEMENT_POLICYIDREFERENCE.equals(childName)) {
                            domPolicySet.addChild(DOMPolicyIdReference.newInstance(child, domPolicySet));
                        } else if (XACML3.ELEMENT_POLICYSETIDREFERENCE.equals(childName)) {
                            domPolicySet.addChild(DOMPolicySetIdReference.newInstance(child, domPolicySet));
                        } else if (XACML3.ELEMENT_COMBINERPARAMETERS.equals(childName)) {
                            domPolicySet.addCombinerParameters(DOMCombinerParameter.newList(child));
                        } else if (XACML3.ELEMENT_POLICYCOMBINERPARAMETERS.equals(childName)) {
                            domPolicySet
                                    .addPolicyCombinerParameter(DOMPolicyCombinerParameter.newInstance(child));
                        } else if (XACML3.ELEMENT_POLICYSETCOMBINERPARAMETERS.equals(childName)) {
                            domPolicySet.addPolicyCombinerParameter(
                                    DOMPolicySetCombinerParameter.newInstance(child));
                        } else if (XACML3.ELEMENT_OBLIGATIONEXPRESSIONS.equals(childName)) {
                            if ((iterator = domPolicySet.getObligationExpressions()) != null
                                    && iterator.hasNext() && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                            }
                            domPolicySet.setObligationExpressions(DOMObligationExpression.newList(child, null));
                        } else if (XACML3.ELEMENT_ADVICEEXPRESSIONS.equals(childName)) {
                            if ((iterator = domPolicySet.getAdviceExpressions()) != null && iterator.hasNext()
                                    && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                            }
                            domPolicySet.setAdviceExpressions(DOMAdviceExpression.newList(child, null));
                        } else if (!bLenient) {
                            throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                        }
                    } else if (!bLenient) {
                        throw DOMUtil.newUnexpectedElementException(child, nodePolicySet);
                    }
                }
            }
        }
        if (domPolicySet.getTarget() == null && !bLenient) {
            throw DOMUtil.newMissingElementException(nodePolicySet, XACML3.XMLNS, XACML3.ELEMENT_TARGET);
        }

        /*
         * Get the attributes
         */
        domPolicySet.setIdentifier(
                DOMUtil.getIdentifierAttribute(elementPolicySet, XACML3.ATTRIBUTE_POLICYSETID, !bLenient));
        domPolicySet
                .setVersion(DOMUtil.getVersionAttribute(elementPolicySet, XACML3.ATTRIBUTE_VERSION, !bLenient));

        identifier = DOMUtil.getIdentifierAttribute(elementPolicySet, XACML3.ATTRIBUTE_POLICYCOMBININGALGID,
                !bLenient);
        CombiningAlgorithm<PolicySetChild> combiningAlgorithm = null;
        try {
            combiningAlgorithm = CombiningAlgorithmFactory.newInstance()
                    .getPolicyCombiningAlgorithm(identifier);
        } catch (FactoryException ex) {
            if (!bLenient) {
                throw new DOMStructureException("Failed to get CombinginAlgorithm", ex);
            }
        }
        if (combiningAlgorithm == null && !bLenient) {
            throw new DOMStructureException(elementPolicySet, "Unknown policy combining algorithm \""
                    + identifier.toString() + "\" in \"" + DOMUtil.getNodeLabel(nodePolicySet));
        } else {
            domPolicySet.setPolicyCombiningAlgorithm(combiningAlgorithm);
        }

        if ((integer = DOMUtil.getIntegerAttribute(elementPolicySet,
                XACML3.ATTRIBUTE_MAXDELEGATIONDEPTH)) != null) {
            domPolicySet.setMaxDelegationDepth(integer);
        }
    } catch (DOMStructureException ex) {
        domPolicySet.setStatus(StdStatusCode.STATUS_CODE_SYNTAX_ERROR, ex.getMessage());
        if (DOMProperties.throwsExceptions()) {
            throw ex;
        }
    }

    return domPolicySet;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicySet.java

public static boolean repair(Node nodePolicySet) throws DOMStructureException {
    Element elementPolicySet = DOMUtil.getElement(nodePolicySet);
    boolean result = false;

    NodeList children = elementPolicySet.getChildNodes();
    int numChildren;
    boolean sawDescription = false;
    boolean sawPolicyIssuer = false;
    boolean sawPolicyDefaults = false;
    boolean sawTarget = false;
    boolean sawObligationExprs = false;
    boolean sawAdviceExprs = false;

    if (children != null && (numChildren = children.getLength()) > 0) {
        /*//from  www  .ja v  a2s.c om
         * Now process the other elements so we can pull up the parent policy defaults
         */
        for (int i = 0; i < numChildren; i++) {
            Node child = children.item(i);
            if (DOMUtil.isElement(child)) {
                if (DOMUtil.isInNamespace(child, XACML3.XMLNS)) {
                    String childName = child.getLocalName();
                    if (XACML3.ELEMENT_DESCRIPTION.equals(childName)) {
                        if (sawDescription) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementPolicySet.removeChild(child);
                            result = true;
                        } else {
                            sawDescription = true;
                        }
                    } else if (XACML3.ELEMENT_POLICYISSUER.equals(childName)) {
                        if (sawPolicyIssuer) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementPolicySet.removeChild(child);
                            result = true;
                        } else {
                            sawPolicyIssuer = true;
                            result = DOMPolicyIssuer.repair(child) || result;
                        }
                    } else if (XACML3.ELEMENT_POLICYSETDEFAULTS.equals(childName)) {
                        if (sawPolicyDefaults) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementPolicySet.removeChild(child);
                            result = true;
                        } else {
                            sawPolicyDefaults = true;
                            result = DOMPolicyDefaults.repair(child) || result;
                        }
                    } else if (XACML3.ELEMENT_TARGET.equals(childName)) {
                        if (sawTarget) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementPolicySet.removeChild(child);
                            result = true;
                        } else {
                            sawTarget = true;
                            result = DOMTarget.repair(child) || result;
                        }
                    } else if (XACML3.ELEMENT_POLICYSET.equals(childName)) {
                        result = DOMPolicySet.repair(child) || result;
                    } else if (XACML3.ELEMENT_POLICY.equals(childName)) {
                        result = DOMPolicy.repair(child) || result;
                    } else if (XACML3.ELEMENT_POLICYIDREFERENCE.equals(childName)) {
                        result = DOMPolicyIdReference.repair(child) || result;
                    } else if (XACML3.ELEMENT_POLICYSETIDREFERENCE.equals(childName)) {
                        result = DOMPolicySetIdReference.repair(child) || result;
                    } else if (XACML3.ELEMENT_COMBINERPARAMETERS.equals(childName)) {
                        result = DOMCombinerParameter.repair(child) || result;
                    } else if (XACML3.ELEMENT_POLICYCOMBINERPARAMETERS.equals(childName)) {
                        result = DOMPolicyCombinerParameter.repair(child) || result;
                    } else if (XACML3.ELEMENT_POLICYSETCOMBINERPARAMETERS.equals(childName)) {
                        result = DOMPolicySetCombinerParameter.repair(child) || result;
                    } else if (XACML3.ELEMENT_OBLIGATIONEXPRESSIONS.equals(childName)) {
                        if (sawObligationExprs) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementPolicySet.removeChild(child);
                            result = true;
                        } else {
                            sawObligationExprs = true;
                            result = DOMObligationExpression.repairList(child) || result;
                        }
                    } else if (XACML3.ELEMENT_ADVICEEXPRESSIONS.equals(childName)) {
                        if (sawAdviceExprs) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementPolicySet.removeChild(child);
                            result = true;
                        } else {
                            sawAdviceExprs = true;
                            result = DOMAdviceExpression.repairList(child) || result;
                        }
                    } else {
                        logger.warn("Unexpected element " + child.getNodeName());
                        elementPolicySet.removeChild(child);
                        result = true;
                    }
                } else {
                    logger.warn("Unexpected element " + child.getNodeName());
                    elementPolicySet.removeChild(child);
                    result = true;
                }
            }
        }
    }
    if (!sawTarget) {
        throw DOMUtil.newMissingElementException(nodePolicySet, XACML3.XMLNS, XACML3.ELEMENT_TARGET);
    }

    /*
     * Get the attributes
     */
    result = DOMUtil.repairIdentifierAttribute(elementPolicySet, XACML3.ATTRIBUTE_POLICYSETID, logger)
            || result;
    result = DOMUtil.repairVersionAttribute(elementPolicySet, XACML3.ATTRIBUTE_VERSION, logger) || result;
    result = DOMUtil.repairIdentifierAttribute(elementPolicySet, XACML3.ATTRIBUTE_POLICYCOMBININGALGID,
            XACML3.ID_POLICY_DENY_OVERRIDES, logger) || result;

    Identifier identifier = DOMUtil.getIdentifierAttribute(elementPolicySet,
            XACML3.ATTRIBUTE_POLICYCOMBININGALGID);
    CombiningAlgorithm<PolicySetChild> combiningAlgorithm = null;
    try {
        combiningAlgorithm = CombiningAlgorithmFactory.newInstance().getPolicyCombiningAlgorithm(identifier);
    } catch (FactoryException ex) {
        combiningAlgorithm = null;
    }
    if (combiningAlgorithm == null) {
        logger.warn("Setting invalid " + XACML3.ATTRIBUTE_POLICYCOMBININGALGID + " attribute "
                + identifier.stringValue() + " to " + XACML3.ID_POLICY_DENY_OVERRIDES.stringValue());
        elementPolicySet.setAttribute(XACML3.ATTRIBUTE_POLICYCOMBININGALGID,
                XACML3.ID_POLICY_DENY_OVERRIDES.stringValue());
        result = true;
    }

    return result;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicySetCombinerParameter.java

/**
 * Creates a new <code>TargetedCombinerParameter</code> for <code>PolicySet</code>s by parsing the given
 * <code>Node</code> representing a XACML PolicySetCombinerParameter element.
 *
 * @param nodeCombinerParameter the <code>Node</code> representing the XACML PolicySetCombinerParameter
 *            element/*from  ww  w .  j  a  v  a 2 s  .co  m*/
 * @return a new <code>TargetedCombinerParameter</code> for <code>PolicySet</code>s parsed from the given
 *         <code>Node</code>
 * @throws DOMStructureException if there is an error parsing the <code>Node</code>
 */
public static TargetedCombinerParameter<Identifier, PolicySetChild> newInstance(Node nodeCombinerParameter)
        throws DOMStructureException {
    Element elementPolicySetCombinerParameter = DOMUtil.getElement(nodeCombinerParameter);
    boolean bLenient = DOMProperties.isLenient();

    DOMPolicySetCombinerParameter domPolicySetCombinerParameter = new DOMPolicySetCombinerParameter();

    try {
        NodeList children = elementPolicySetCombinerParameter.getChildNodes();
        int numChildren;
        if (children != null && (numChildren = children.getLength()) > 0) {
            for (int i = 0; i < numChildren; i++) {
                Node child = children.item(i);
                if (DOMUtil.isElement(child)) {
                    if (DOMUtil.isInNamespace(child, XACML3.XMLNS)
                            && XACML3.ELEMENT_ATTRIBUTEVALUE.equals(child.getLocalName())) {
                        if (domPolicySetCombinerParameter.getAttributeValue() != null && !bLenient) {
                            throw DOMUtil.newUnexpectedElementException(child, nodeCombinerParameter);
                        }
                        domPolicySetCombinerParameter
                                .setAttributeValue(DOMAttributeValue.newInstance(child, null));
                    } else if (!bLenient) {
                        throw DOMUtil.newUnexpectedElementException(child, nodeCombinerParameter);
                    }
                }
            }
        }
        if (domPolicySetCombinerParameter.getAttributeValue() == null && !bLenient) {
            throw DOMUtil.newMissingElementException(elementPolicySetCombinerParameter, XACML3.XMLNS,
                    XACML3.ELEMENT_ATTRIBUTEVALUE);
        }
        domPolicySetCombinerParameter.setName(DOMUtil.getStringAttribute(elementPolicySetCombinerParameter,
                XACML3.ATTRIBUTE_PARAMETERNAME, !bLenient));
        domPolicySetCombinerParameter.setTargetId(DOMUtil.getIdentifierAttribute(
                elementPolicySetCombinerParameter, XACML3.ATTRIBUTE_POLICYSETIDREF, !bLenient));
    } catch (DOMStructureException ex) {
        domPolicySetCombinerParameter.setStatus(StdStatusCode.STATUS_CODE_SYNTAX_ERROR, ex.getMessage());
        if (DOMProperties.throwsExceptions()) {
            throw ex;
        }
    }

    return domPolicySetCombinerParameter;

}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMPolicySetCombinerParameter.java

public static boolean repair(Node nodeCombinerParameter) throws DOMStructureException {
    Element elementPolicySetCombinerParameter = DOMUtil.getElement(nodeCombinerParameter);
    boolean result = false;

    NodeList children = elementPolicySetCombinerParameter.getChildNodes();
    int numChildren;
    boolean sawAttributeValue = false;
    if (children != null && (numChildren = children.getLength()) > 0) {
        for (int i = 0; i < numChildren; i++) {
            Node child = children.item(i);
            if (DOMUtil.isElement(child)) {
                if (DOMUtil.isInNamespace(child, XACML3.XMLNS)
                        && XACML3.ELEMENT_ATTRIBUTEVALUE.equals(child.getLocalName())) {
                    if (sawAttributeValue) {
                        logger.warn("Unexpected element " + child.getNodeName());
                        elementPolicySetCombinerParameter.removeChild(child);
                        result = true;/* ww  w .j a v a  2  s  .co  m*/
                    } else {
                        sawAttributeValue = true;
                        result = DOMAttributeValue.repair(child) || result;
                    }
                } else {
                    logger.warn("Unexpected element " + child.getNodeName());
                    elementPolicySetCombinerParameter.removeChild(child);
                    result = true;
                }
            }
        }
    }
    if (!sawAttributeValue) {
        throw DOMUtil.newMissingElementException(elementPolicySetCombinerParameter, XACML3.XMLNS,
                XACML3.ELEMENT_ATTRIBUTEVALUE);
    }
    result = DOMUtil.repairStringAttribute(elementPolicySetCombinerParameter, XACML3.ATTRIBUTE_PARAMETERNAME,
            "parameter", logger) || result;
    result = DOMUtil.repairIdentifierAttribute(elementPolicySetCombinerParameter,
            XACML3.ATTRIBUTE_POLICYSETIDREF, logger) || result;
    return result;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMRule.java

/**
 * Creates a new <code>Rule</code> by parsing the given <code>Node</code> representing a XACML Rule
 * element.//from ww  w  . j  a  v a 2  s  .  c om
 *
 * @param nodeRule the <code>Node</code> representing the XACML Rule element
 * @param policy the {@link org.apache.openaz.xacml.pdp.policy.Policy} encompassing the Rule element
 * @return a new <code>Rule</code> parsed from the given <code>Node</code>
 * @throws DOMStructureException if there is an error parsing the <code>Node</code>
 */
public static Rule newInstance(Node nodeRule, Policy policy) throws DOMStructureException {
    Element elementRule = DOMUtil.getElement(nodeRule);
    boolean bLenient = DOMProperties.isLenient();

    DOMRule domRule = new DOMRule();

    domRule.setPolicy(policy);

    Iterator<?> iterator;

    try {
        NodeList children = elementRule.getChildNodes();
        int numChildren;
        if (children != null && (numChildren = children.getLength()) > 0) {
            for (int i = 0; i < numChildren; i++) {
                Node child = children.item(i);
                if (DOMUtil.isElement(child)) {
                    if (DOMUtil.isInNamespace(child, XACML3.XMLNS)) {
                        String childName = child.getLocalName();
                        if (XACML3.ELEMENT_DESCRIPTION.equals(childName)) {
                            if (domRule.getDescription() != null && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                            }
                            domRule.setDescription(child.getTextContent());
                        } else if (XACML3.ELEMENT_TARGET.equals(childName)) {
                            if (domRule.getTarget() != null && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                            }
                            domRule.setTarget(DOMTarget.newInstance(child));
                        } else if (XACML3.ELEMENT_CONDITION.equals(childName)) {
                            if (domRule.getCondition() != null && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                            }
                            Node nodeExpression = DOMUtil.getFirstChildElement(child);
                            if (nodeExpression == null && !bLenient) {
                                throw DOMUtil.newMissingElementException(child, XACML3.XMLNS,
                                        XACML3.ELEMENT_EXPRESSION);
                            }
                            domRule.setCondition(
                                    new Condition(DOMExpression.newInstance(nodeExpression, policy)));
                        } else if (XACML3.ELEMENT_OBLIGATIONEXPRESSIONS.equals(childName)) {
                            if ((iterator = domRule.getObligationExpressions()) != null && iterator.hasNext()
                                    && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                            }
                            domRule.setObligationExpressions(DOMObligationExpression.newList(child, policy));
                        } else if (XACML3.ELEMENT_ADVICEEXPRESSIONS.equals(childName)) {
                            if ((iterator = domRule.getAdviceExpressions()) != null && iterator.hasNext()
                                    && !bLenient) {
                                throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                            }
                            domRule.setAdviceExpressions(DOMAdviceExpression.newList(child, policy));
                        } else if (!bLenient) {
                            throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                        }
                    } else if (!bLenient) {
                        throw DOMUtil.newUnexpectedElementException(child, nodeRule);
                    }
                }
            }
        }

        domRule.setRuleId(DOMUtil.getStringAttribute(elementRule, XACML3.ATTRIBUTE_RULEID, !bLenient));
        String string = DOMUtil.getStringAttribute(elementRule, XACML3.ATTRIBUTE_EFFECT, !bLenient);
        RuleEffect ruleEffect = RuleEffect.getRuleEffect(string);
        if (ruleEffect == null && !bLenient) {
            throw new DOMStructureException(elementRule,
                    "Unknown RuleEffect \"" + string + "\" in \"" + DOMUtil.getNodeLabel(nodeRule) + "\"");
        }
        domRule.setRuleEffect(ruleEffect);

    } catch (DOMStructureException ex) {
        domRule.setStatus(StdStatusCode.STATUS_CODE_SYNTAX_ERROR, ex.getMessage());
        if (DOMProperties.throwsExceptions()) {
            throw ex;
        }
    }
    return domRule;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMRule.java

public static boolean repair(Node nodeRule) throws DOMStructureException {
    Element elementRule = DOMUtil.getElement(nodeRule);
    boolean result = false;

    NodeList children = elementRule.getChildNodes();
    int numChildren;
    boolean sawDescription = false;
    boolean sawTarget = false;
    boolean sawCondition = false;
    boolean sawObligationExpressions = false;
    boolean sawAdviceExpressions = false;

    if (children != null && (numChildren = children.getLength()) > 0) {
        for (int i = 0; i < numChildren; i++) {
            Node child = children.item(i);
            if (DOMUtil.isElement(child)) {
                if (DOMUtil.isInNamespace(child, XACML3.XMLNS)) {
                    String childName = child.getLocalName();
                    if (XACML3.ELEMENT_DESCRIPTION.equals(childName)) {
                        if (sawDescription) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementRule.removeChild(child);
                            result = true;
                        } else {
                            sawDescription = true;
                        }//from   w ww . ja  va2s  .  c o m
                    } else if (XACML3.ELEMENT_TARGET.equals(childName)) {
                        if (sawTarget) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementRule.removeChild(child);
                            result = true;
                        } else {
                            sawTarget = true;
                            result = DOMTarget.repair(child) || result;
                        }
                    } else if (XACML3.ELEMENT_CONDITION.equals(childName)) {
                        if (sawCondition) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementRule.removeChild(child);
                            result = true;
                        } else {
                            sawCondition = true;
                            Node nodeExpression = DOMUtil.getFirstChildElement(child);
                            if (nodeExpression == null) {
                                throw DOMUtil.newMissingElementException(child, XACML3.XMLNS,
                                        XACML3.ELEMENT_EXPRESSION);
                            }
                            result = DOMExpression.repair(nodeExpression) || result;
                        }
                    } else if (XACML3.ELEMENT_OBLIGATIONEXPRESSIONS.equals(childName)) {
                        if (sawObligationExpressions) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementRule.removeChild(child);
                            result = true;
                        } else {
                            sawObligationExpressions = true;
                            result = DOMObligationExpression.repairList(child) || result;
                        }
                    } else if (XACML3.ELEMENT_ADVICEEXPRESSIONS.equals(childName)) {
                        if (sawAdviceExpressions) {
                            logger.warn("Unexpected element " + child.getNodeName());
                            elementRule.removeChild(child);
                            result = true;
                        } else {
                            sawAdviceExpressions = true;
                            result = DOMAdviceExpression.repairList(child) || result;
                        }
                    } else {
                        logger.warn("Unexpected element " + child.getNodeName());
                        elementRule.removeChild(child);
                        result = true;
                    }
                } else {
                    logger.warn("Unexpected element " + child.getNodeName());
                    elementRule.removeChild(child);
                    result = true;
                }
            }
        }
    }

    result = DOMUtil.repairStringAttribute(elementRule, XACML3.ATTRIBUTE_RULEID,
            IdentifierImpl.gensym().stringValue(), logger) || result;
    result = DOMUtil.repairStringAttribute(elementRule, XACML3.ATTRIBUTE_EFFECT, RuleEffect.DENY.getName(),
            logger) || result;

    String string = DOMUtil.getStringAttribute(elementRule, XACML3.ATTRIBUTE_EFFECT);
    RuleEffect ruleEffect = RuleEffect.getRuleEffect(string);
    if (ruleEffect == null) {
        logger.warn("Setting invalid " + XACML3.ATTRIBUTE_EFFECT + " attribute " + string + " to "
                + RuleEffect.DENY.getName());
        elementRule.setAttribute(XACML3.ATTRIBUTE_EFFECT, RuleEffect.DENY.getName());
        result = true;
    }

    return result;
}

From source file:org.apache.openaz.xacml.pdp.policy.dom.DOMRuleCombinerParameters.java

/**
 * Creates a new <code>TargetedCombinerParameter</code> for
 * {@link org.apache.openaz.xacml.pdp.policy.Rule}s by parsing the given <code>Node</code> representing
 * a XACML RuleCombinerParameters element.
 *
 * @param nodeRuleCombinerParameters the <code>Node</code> representing the XACML RuleCombinerParameters
 *            element.//from   w ww .j  av  a  2 s .co m
 * @return a new <code>TargetedCombinerParameter</code> for <code>Rule</code>s parsed from the given
 *         <code>Node</code>
 * @throws DOMStructureException if there is an error parsing the <code>Node</code>.
 */
public static TargetedCombinerParameter<String, Rule> newInstance(Node nodeRuleCombinerParameters)
        throws DOMStructureException {
    Element elementRuleCombinerParameters = DOMUtil.getElement(nodeRuleCombinerParameters);
    boolean bLenient = DOMProperties.isLenient();

    DOMRuleCombinerParameters domRuleCombinerParameters = new DOMRuleCombinerParameters();

    try {
        NodeList children = elementRuleCombinerParameters.getChildNodes();
        int numChildren;
        if (children != null && (numChildren = children.getLength()) > 0) {
            for (int i = 0; i < numChildren; i++) {
                Node child = children.item(i);
                if (DOMUtil.isElement(child)) {
                    if (DOMUtil.isInNamespace(child, XACML3.XMLNS)
                            && XACML3.ELEMENT_ATTRIBUTEVALUE.equals(child.getLocalName())) {
                        if (domRuleCombinerParameters.getAttributeValue() != null) {
                            throw DOMUtil.newUnexpectedElementException(child, nodeRuleCombinerParameters);
                        }
                        domRuleCombinerParameters.setAttributeValue(DOMAttributeValue.newInstance(child, null));
                    } else if (!bLenient) {
                        throw DOMUtil.newUnexpectedElementException(child, nodeRuleCombinerParameters);
                    }
                }
            }
        }
        if (domRuleCombinerParameters.getAttributeValue() == null && !bLenient) {
            throw DOMUtil.newMissingElementException(nodeRuleCombinerParameters, XACML3.XMLNS,
                    XACML3.ELEMENT_ATTRIBUTEVALUE);
        }
        domRuleCombinerParameters.setName(DOMUtil.getStringAttribute(elementRuleCombinerParameters,
                XACML3.ATTRIBUTE_PARAMETERNAME, !bLenient));
        domRuleCombinerParameters.setTargetId(DOMUtil.getStringAttribute(elementRuleCombinerParameters,
                XACML3.ATTRIBUTE_RULEIDREF, !bLenient));
    } catch (DOMStructureException ex) {
        domRuleCombinerParameters.setStatus(StdStatusCode.STATUS_CODE_SYNTAX_ERROR, ex.getMessage());
        if (DOMProperties.throwsExceptions()) {
            throw ex;
        }
    }
    return domRuleCombinerParameters;
}