| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /* |
| * XSEC |
| * |
| * DSIGXPathFilterExpr := Class that holds an XPath Filter expression |
| * |
| * $Id$ |
| * |
| */ |
| |
| #ifndef DSIGXPATHFILTEREXPR_INCLUDE |
| #define DSIGXPATHFILTEREXPR_INCLUDE |
| |
| #include <xsec/framework/XSECDefs.hpp> |
| #include <xsec/dsig/DSIGConstants.hpp> |
| #include <xsec/utils/XSECSafeBuffer.hpp> |
| |
| |
| XSEC_DECLARE_XERCES_CLASS(DOMNamedNodeMap); |
| XSEC_DECLARE_XERCES_CLASS(DOMNode); |
| XSEC_DECLARE_XERCES_CLASS(DOMElement); |
| |
| class XSECEnv; |
| |
| /** |
| * @ingroup pubsig |
| */ |
| |
| /** |
| * @brief Class used to hold (and manipulate) individual expressions |
| * in an XPathFilter transform |
| * |
| * @see TXFMXPathFilter |
| * @see DSIGTransformXpathFilter |
| * |
| */ |
| |
| class XSEC_EXPORT DSIGXPathFilterExpr { |
| |
| public: |
| |
| /** |
| * \brief Enumeration of XPath Filter types |
| */ |
| |
| enum XPathFilterType { |
| FILTER_UNION = 0, /** Results should be added to previous nodeset */ |
| FILTER_INTERSECT = 1, /** Results should be included if in previous nodeset */ |
| FILTER_SUBTRACT = 2 /** Results should be subtracted from previous nodeset */ |
| }; |
| |
| /** @name Constructors and Destructors */ |
| //@{ |
| |
| /** |
| * \brief Constructor used for existing XML signatures |
| * |
| * Node already exists and is part of an existing XPathFilter tree |
| * |
| * @param env The operating environment |
| * @param node The node that will be used to read the expression in |
| */ |
| |
| DSIGXPathFilterExpr(const XSECEnv* env, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* node); |
| |
| /** |
| * \brief Builder constructor |
| * |
| * Used to create the DOM structure and DSIGSignature elements |
| * |
| * @param env The operating Environment |
| */ |
| |
| DSIGXPathFilterExpr(const XSECEnv* env); |
| |
| /** |
| * \brief Destructor. |
| * |
| * Destroy the DSIGSignature elements. |
| * |
| * Does not destroy any associated DOM Nodes |
| */ |
| |
| virtual ~DSIGXPathFilterExpr(); |
| |
| //@} |
| |
| /** @name Set and get Information */ |
| |
| //@{ |
| |
| /** |
| * \brief Read in existing structure |
| * |
| * Reads DOM structure of the XPath expression |
| */ |
| |
| void load(); |
| |
| /** |
| * \brief Get the filter type |
| * |
| * Returns the type of this particular XPath filter |
| * |
| * @returns The filter type of this expression |
| */ |
| |
| XPathFilterType getFilterType() const; |
| |
| /** |
| * \brief create from blank |
| * |
| * Given the filter type and XPath expression, setup the |
| * DOMNodes and variables to allow signing and validation |
| * |
| * @param filterType Type of this filter to add |
| * @param filterExpr The XPath expression |
| */ |
| |
| XERCES_CPP_NAMESPACE_QUALIFIER DOMElement* setFilter(XPathFilterType filterType, |
| const XMLCh* filterExpr); |
| |
| /** |
| * \brief Get the filter expression |
| * |
| * Returns an XMLCh string containing the filter expression |
| * |
| * @returns The filter expression |
| */ |
| |
| const XMLCh* getFilter() const {return m_expr.rawXMLChBuffer();} |
| |
| /** |
| * \brief Add a new namespace to the list to be used |
| * |
| * Add a new namespace to the XPath Element. |
| * |
| * @param prefix NCName of the Namespace to set |
| * @param value The string with the URI to set |
| */ |
| |
| void setNamespace(const XMLCh* prefix, const XMLCh* value); |
| |
| /** |
| * \brief Get the list of namespaces. |
| * |
| * Returns the DOMNamedNodeMap of the attributes of the XPath transform |
| * node. |
| * |
| * @note This will also contain the Filter attribute |
| * |
| * @returns A pointer to the NamedNodeMap |
| */ |
| |
| XERCES_CPP_NAMESPACE_QUALIFIER DOMNamedNodeMap* getNamespaces() const { |
| return mp_NSMap; |
| } |
| |
| /** |
| * \brief Delete a namespace to the list to be used |
| * |
| * Delete a namespace from the XPath Element. |
| * |
| * @param prefix NCName of the Namespace to delete |
| * @throws XSECException if the NCName does not exist |
| * |
| */ |
| |
| void deleteNamespace(const XMLCh* prefix); |
| |
| //@} |
| |
| private: |
| |
| // Just let the TXFM read directly |
| |
| friend class TXFMXPathFilter; |
| |
| DSIGXPathFilterExpr(); |
| DSIGXPathFilterExpr(const DSIGXPathFilterExpr& theOther); |
| |
| const XSECEnv* mp_env; |
| XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* mp_xpathFilterNode; |
| XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* mp_exprTextNode; |
| XERCES_CPP_NAMESPACE_QUALIFIER DOMNamedNodeMap* mp_NSMap; |
| safeBuffer m_expr; |
| XPathFilterType m_filterType; |
| bool m_loaded; |
| }; |
| |
| #endif /* DSIGXPATHFILTEREXPR_INCLUDE */ |