aboutsummaryrefslogtreecommitdiff
path: root/src/transformer_facade.cc
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-04-20 13:09:32 +0200
committerAdrian Kummerländer2014-04-20 13:09:32 +0200
commit29a9fb20b4c8414f2590886e43ae86794a53db89 (patch)
tree4d426d45293a019caee8ee879186111c90b426d3 /src/transformer_facade.cc
parent3383e24e396431eed7d4ab9f69ff8ffaf12d4925 (diff)
downloadInputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar
InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.gz
InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.bz2
InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.lz
InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.xz
InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.zst
InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.zip
Implemented support for modifying external function base path
* one expects a read-file function to work relative to the directory the transformation is located and not to the executable's location ** from the perspective of the user the transformation is the application, not the actual executable * removed PlattformGuard struct from TransformerGuard (now TransformerFacade) * TransformerFacade is instatiated with the appropriate relative working path ** i.e. it will have to be instantiated for every directory containing one or more transformations
Diffstat (limited to 'src/transformer_facade.cc')
-rw-r--r--src/transformer_facade.cc66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/transformer_facade.cc b/src/transformer_facade.cc
new file mode 100644
index 0000000..be2a6a2
--- /dev/null
+++ b/src/transformer_facade.cc
@@ -0,0 +1,66 @@
+#include "transformer_facade.h"
+
+#include <xalanc/Include/PlatformDefinitions.hpp>
+#include <xercesc/util/PlatformUtils.hpp>
+
+#include <xalanc/XSLT/XSLTInputSource.hpp>
+#include <xalanc/XalanTransformer/XalanTransformer.hpp>
+#include <xalanc/XalanTransformer/XercesDOMWrapperParsedSource.hpp>
+#include <xalanc/XercesParserLiaison/XercesDOMSupport.hpp>
+
+#include <xercesc/dom/DOMDocument.hpp>
+#include <xercesc/dom/DOMImplementation.hpp>
+
+#include "function/read_file.h"
+#include "function/read_xml_file.h"
+
+namespace InputXSLT {
+
+TransformerFacade::TransformerFacade(const std::string& path):
+ parser_(),
+ transformer_() {
+ const xalan::XalanDOMString customNamespace(
+ "http://ExternalFunction.xalan-c++.xml.apache.org"
+ );
+
+ this->transformer_.installExternalFunction(
+ customNamespace,
+ xalan::XalanDOMString("read-file"),
+ InputXSLT::FunctionReadFile(path)
+ );
+
+ this->transformer_.installExternalFunction(
+ customNamespace,
+ xalan::XalanDOMString("read-xml-file"),
+ InputXSLT::FunctionReadXmlFile(path)
+ );
+
+}
+
+int TransformerFacade::execute(
+ const std::string& transformation,
+ const std::string& target
+) {
+ xercesc::DOMDocument* inputDom(
+ xercesc::DOMImplementation::getImplementation()->createDocument()
+ );
+ xalan::XercesDOMSupport domSupport(this->parser_);
+
+ xalan::XercesDOMWrapperParsedSource parsedInput(
+ inputDom,
+ this->parser_,
+ domSupport,
+ xalan::XalanDOMString("")
+ );
+
+ xalan::XSLTInputSource transform(transformation.data());
+ xalan::XSLTResultTarget output(target.data());
+
+ return this->transformer_.transform(
+ parsedInput,
+ transform,
+ output
+ );
+}
+
+}