aboutsummaryrefslogtreecommitdiff
path: root/src/function
diff options
context:
space:
mode:
authorAdrian Kummerlaender2014-07-05 21:55:48 +0200
committerAdrian Kummerlaender2014-07-05 21:55:48 +0200
commita02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2 (patch)
tree669ad392772fcc9ab4eaa9e1a410156d6d4cc616 /src/function
parentf05e742b88e3ebf7401c252332022f1a2f7eb8b0 (diff)
downloadInputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.tar
InputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.tar.gz
InputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.tar.bz2
InputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.tar.lz
InputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.tar.xz
InputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.tar.zst
InputXSLT-a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2.zip
Revamped implementation to support FunctionTransform XalanNode input
* FunctionTransform now accepts xalan::XalanNode base xalan::XSLTInputSource instances as input parameter ** such xalan::XSLTInputSource instances were already supported for the stylesheet parameter but not for the input parameter ** e.g. it is now possible to generate a DOM inside a transformation, pass the DOM into a embedded transformation as input, modifiy the output of that transformation, pass this modified DOM into another transformation and so on... you get the point * this required a revamp of TransformationFacade ** it is now a transformation independent wrapper for xalan::XalanTransformer *** as such is was renamed to TransformerFacade ** removed error catching template factory method "try_create" as it is not needed anymore ** "std::basic_ostream<char>&" taking "generate" member method overloads were removed ** the set of "generate" member overloads was reduced to two methods accepting xalan::XSLTInputSource and xalan::FormatterListener as parameters * the core problem first documented in 299d0f6 was solved by transforming the input parameter into a xerces DOM and wrapping this DOM inside a xalan::XercesDOMWrapperParsedSource instance * serialization of the transformation result for file / std::cout output is now performed directly by the ixslt frontend * removed 'stylesheet parameter' parameter from FunctionTransform ** the functionality provided by this is easily replicated using the now possible DOM input parameter ** this was done to simplify the interface and reduce unnecessary feature duplication * updated FunctionTransform test case accordingly * added "generate" template function to ixslt frontend ** wraps TransformerFacade and manages ist input arguments ** handles serialization to stream * this commit marks a important milestone towards the goals defined in 741a70f
Diffstat (limited to 'src/function')
-rw-r--r--src/function/transform.cc72
-rw-r--r--src/function/transform.h6
2 files changed, 35 insertions, 43 deletions
diff --git a/src/function/transform.cc b/src/function/transform.cc
index 1d22399..e53b55f 100644
--- a/src/function/transform.cc
+++ b/src/function/transform.cc
@@ -6,7 +6,7 @@
#include <xercesc/dom/DOMImplementation.hpp>
#include <xercesc/dom/DOMElement.hpp>
-#include "transformation_facade.h"
+#include "transformer_facade.h"
#include "support/xerces_string_guard.h"
#include "support/dom/result_node_facade.h"
#include "support/error/error_capacitor.h"
@@ -15,15 +15,15 @@ namespace {
using InputXSLT::ErrorCapacitor;
-inline std::function<void(const ErrorCapacitor::error_cache&)> handleErrors(
- InputXSLT::ResultNodeFacade& result) {
- return [&result](const ErrorCapacitor::error_cache& errors) {
- result.setAttribute("result", "error");
+inline void handleErrors(
+ InputXSLT::ResultNodeFacade& result,
+ const ErrorCapacitor::error_cache& errors
+) {
+ result.setAttribute("result", "error");
- for ( auto&& error : errors ) {
- result.setValueNode("error", error);
- }
- };
+ for ( auto&& error : errors ) {
+ result.setValueNode("error", error);
+ }
}
}
@@ -32,8 +32,7 @@ namespace InputXSLT {
xercesc::DOMDocument* FunctionTransform::constructDocument(
xalan::XSLTInputSource inputSource,
- xalan::XSLTInputSource transformationSource,
- xalan::XObjectPtr parameterObject
+ xalan::XSLTInputSource transformationSource
) {
xercesc::DOMDocument* const domDocument(
xercesc::DOMImplementation::getImplementation()->createDocument(
@@ -48,37 +47,32 @@ xercesc::DOMDocument* FunctionTransform::constructDocument(
);
ResultNodeFacade result(domDocument, rootElement, "transformation");
+ TransformerFacade transformer(this->include_resolver_);
- if ( auto transformation = TransformationFacade::try_create(
- handleErrors(result),
- inputSource,
- transformationSource,
- this->include_resolver_
- ) ) {
- try {
- xalan::FormatterToXercesDOM formatter(
- domDocument,
- result.getResultElement()
- );
-
- transformation->generate(
- formatter,
- parameterObject
- );
-
- result.setAttribute("result", "success");
- }
- catch (const ErrorCapacitor::exception& exception) {
- handleErrors(result)(*exception);
- }
-
- WarningCapacitor::warning_cache_ptr warnings(
- transformation->getCachedWarnings()
+ try {
+ xalan::FormatterToXercesDOM targetFormatter(
+ domDocument,
+ result.getResultElement()
);
- for ( auto&& warning : *warnings ) {
- result.setValueNode("warning", warning);
- }
+ transformer.generate(
+ inputSource,
+ transformationSource,
+ targetFormatter
+ );
+
+ result.setAttribute("result", "success");
+ }
+ catch (const ErrorCapacitor::exception& exception) {
+ handleErrors(result, *exception);
+ }
+
+ WarningCapacitor::warning_cache_ptr warnings(
+ transformer.getCachedWarnings()
+ );
+
+ for ( auto&& warning : *warnings ) {
+ result.setValueNode("warning", warning);
}
return domDocument;
diff --git a/src/function/transform.h b/src/function/transform.h
index 234a1d0..b8e733d 100644
--- a/src/function/transform.h
+++ b/src/function/transform.h
@@ -10,8 +10,7 @@ namespace InputXSLT {
class FunctionTransform : public FunctionBase<
FunctionTransform,
xalan::XSLTInputSource,
- xalan::XSLTInputSource,
- xalan::XObjectPtr
+ xalan::XSLTInputSource
> {
public:
using FunctionBase::FunctionBase;
@@ -21,8 +20,7 @@ class FunctionTransform : public FunctionBase<
xercesc::DOMDocument* constructDocument(
xalan::XSLTInputSource,
- xalan::XSLTInputSource,
- xalan::XObjectPtr
+ xalan::XSLTInputSource
);
};