| /* |
| * Copyright 2002-2005 The Apache Software Foundation. |
| * |
| * Licensed 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 |
| * |
| * TXFMBase := Base (virtual) class that defines a DSIG Transformer |
| * |
| * Author(s): Berin Lautenbach |
| * |
| * $Id$ |
| * |
| */ |
| |
| #ifndef TXFMBASE_INCLUDE |
| #define TXFMBASE_INCLUDE |
| |
| #include <xercesc/dom/DOM.hpp> |
| #include <xsec/canon/XSECC14n20010315.hpp> |
| #include <xsec/utils/XSECNameSpaceExpander.hpp> |
| #include <xsec/utils/XSECXPathNodeList.hpp> |
| |
| // Xalan |
| |
| #include <xercesc/util/BinInputStream.hpp> |
| |
| #include <stdlib.h> |
| |
| class TXFMChain; |
| |
| /** @defgroup internal Internal Classes |
| * Classes marked as <b>internal</b> are used internally by the xml-security-c |
| * library. Generally there should be no requirement for these classes |
| * to be manipulated directly by the calling applicataion. |
| * @{ |
| */ |
| |
| /** |
| * \brief Base class for transformers |
| * |
| * Transformers are internal classes within the xml-security-c library |
| * that actually perform the transformations. |
| * |
| * Users interface with the library should use the DSIGTransform classes, |
| * which define the DOM nodes and allow users to manipulate the actual |
| * transform defined. |
| */ |
| |
| |
| class DSIG_EXPORT TXFMBase { |
| |
| protected: |
| |
| TXFMBase *input; // The input source that we read from |
| bool keepComments; // Each transform needs to tell the next whether comments are still in |
| XSECNameSpaceExpander * mp_nse; // For expanding document name spaces |
| XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument |
| * mp_expansionDoc; // For expanding |
| XSECXPathNodeList m_XPathMap; // For node lists if necessary |
| |
| public: |
| |
| TXFMBase(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc) |
| {input = NULL; keepComments = true; mp_nse = NULL; mp_expansionDoc = doc;} |
| virtual ~TXFMBase(); |
| |
| // For getting/setting input/output type |
| |
| enum ioType { |
| |
| NONE = 1, // For when there is no Input |
| BYTE_STREAM = 2, |
| DOM_NODES = 3 |
| |
| }; |
| |
| enum nodeType { |
| |
| DOM_NODE_NONE = 1, // No nodes set |
| DOM_NODE_DOCUMENT = 2, // This is a dom document |
| DOM_NODE_DOCUMENT_FRAGMENT = 3, // This is a fragment only |
| DOM_NODE_DOCUMENT_NODE = 4, // This is a fragment id;d by DOM_Node |
| DOM_NODE_XPATH_NODESET = 5 // This is a set of nodes |
| |
| }; |
| |
| |
| // Methods to set the inputs |
| // NOTE: If this throws an exception, the implementation class |
| // MUST have added the newInput to it's chain to ensure that |
| // Deletion of the chain will include everything. |
| |
| virtual void setInput(TXFMBase *newInput) = 0; |
| |
| // Methods to get tranform output type and input requirement |
| |
| virtual ioType getInputType(void) = 0; |
| virtual ioType getOutputType(void) = 0; |
| virtual nodeType getNodeType(void) = 0; |
| |
| // Name space expansion handling |
| virtual bool nameSpacesExpanded(void); |
| virtual void expandNameSpaces(void); |
| void deleteExpandedNameSpaces(void); |
| |
| // Comment handling |
| |
| virtual void stripComments(void) { keepComments = false;} |
| virtual void activateComments(void); |
| virtual bool getCommentsStatus(void) {return keepComments;} |
| |
| // Methods to get output data |
| |
| // BinInputStream methods: |
| |
| virtual unsigned int readBytes(XMLByte * const toFill, const unsigned int maxToFill) = 0; |
| virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *getDocument() = 0; |
| virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *getFragmentNode() = 0; |
| virtual const XMLCh * getFragmentId() = 0; |
| virtual XSECXPathNodeList & getXPathNodeList() {return m_XPathMap;} |
| |
| // Friends and Statics |
| |
| friend class TXFMChain; |
| |
| |
| private: |
| |
| TXFMBase(); |
| }; |
| |
| /** @} */ |
| |
| #endif /* #define TXFMBASE_INCLUDE */ |