blob: e6cabb836b89149a9daaa7cbad2f49fd54890211 [file] [log] [blame]
/**
* 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 */