aboutsummaryrefslogtreecommitdiff
path: root/src/function
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-04-26 22:07:13 +0200
committerAdrian Kummerländer2014-04-26 22:07:13 +0200
commit5fde046561caa11a58abd13cf1f469fdce5c53f1 (patch)
tree859b095235b093b448ac5c33aaa5e456d62c984a /src/function
parenteba5513f82f0e1458543e8646db0317d7211cf96 (diff)
downloadInputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.tar
InputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.tar.gz
InputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.tar.bz2
InputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.tar.lz
InputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.tar.xz
InputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.tar.zst
InputXSLT-5fde046561caa11a58abd13cf1f469fdce5c53f1.zip
Added status information to external read-directory function
* updated test transformation accordingly
Diffstat (limited to 'src/function')
-rw-r--r--src/function/read_directory.cc100
1 files changed, 68 insertions, 32 deletions
diff --git a/src/function/read_directory.cc b/src/function/read_directory.cc
index 3f503b3..1e7e7d7 100644
--- a/src/function/read_directory.cc
+++ b/src/function/read_directory.cc
@@ -34,44 +34,80 @@ xalan::XObjectPtr FunctionReadDirectory::execute(
domDocument->getDocumentElement()
);
- this->fs_context_.iterate(
- argument->str(),
- [&domDocument, &rootNode](const boost::filesystem::path& p) {
- xercesc::DOMElement* const itemNode(
- domDocument->createElement(*XercesStringGuard("item"))
+ if (boost::filesystem::is_directory(
+ this->fs_context_.resolve(argument->str())
+ )) {
+ xercesc::DOMElement* const contentNode(
+ domDocument->createElement(*XercesStringGuard("content"))
);
- switch ( boost::filesystem::status(p).type() ) {
- case boost::filesystem::regular_file: {
- itemNode->setAttribute(
- *XercesStringGuard("type"),
- *XercesStringGuard("file")
- );
-
- break;
- };
- case boost::filesystem::directory_file: {
- itemNode->setAttribute(
- *XercesStringGuard("type"),
- *XercesStringGuard("directory")
- );
-
- break;
- };
- default: {
- break;
- };
- }
-
- xercesc::DOMText* const textNode(
+ this->fs_context_.iterate(
+ argument->str(),
+ [&domDocument, &contentNode](const boost::filesystem::path& p) {
+ xercesc::DOMElement* const itemNode(
+ domDocument->createElement(*XercesStringGuard("item"))
+ );
+
+ switch ( boost::filesystem::status(p).type() ) {
+ case boost::filesystem::regular_file: {
+ itemNode->setAttribute(
+ *XercesStringGuard("type"),
+ *XercesStringGuard("file")
+ );
+
+ break;
+ };
+ case boost::filesystem::directory_file: {
+ itemNode->setAttribute(
+ *XercesStringGuard("type"),
+ *XercesStringGuard("directory")
+ );
+
+ break;
+ };
+ default: {
+ break;
+ };
+ }
+
+ xercesc::DOMText* const textNode(
+ domDocument->createTextNode(
+ *XercesStringGuard(p.filename().string())
+ )
+ );
+
+ itemNode->appendChild(textNode);
+ contentNode->appendChild(itemNode);
+ });
+
+ xercesc::DOMElement* const resultNode(
+ domDocument->createElement(*XercesStringGuard("status"))
+ );
+
+ xercesc::DOMText* const resultTextNode(
+ domDocument->createTextNode(
+ *XercesStringGuard("successful")
+ )
+ );
+
+ resultNode->appendChild(resultTextNode);
+
+ rootNode->appendChild(contentNode);
+ rootNode->appendChild(resultNode);
+ } else {
+ xercesc::DOMElement* const resultNode(
+ domDocument->createElement(*XercesStringGuard("status"))
+ );
+
+ xercesc::DOMText* const resultTextNode(
domDocument->createTextNode(
- *XercesStringGuard(p.filename().string())
+ *XercesStringGuard("error")
)
);
- itemNode->appendChild(textNode);
- rootNode->appendChild(itemNode);
- });
+ resultNode->appendChild(resultTextNode);
+ rootNode->appendChild(resultNode);
+ }
}
xalan::XPathExecutionContext::BorrowReturnMutableNodeRefList nodeList(