summaryrefslogtreecommitdiff
path: root/ParserClass/FileManParser.cpp
blob: 8cc72b5100ef3d7b09f6651217e210edddd7482a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/**
 * @file FileManParser.cpp
 * @brief FileManParser class definitions
 * @author manzerbredes
 * @date 11 Mars 2015
 *
 * Contain all implementations of FileManParser class.
 *
 */


#include "FileManParser.hpp"


FileManParser::FileManParser(std::string data){
    this->data=data;

    try {
        xercesc::XMLPlatformUtils::Initialize();
    }
    catch (const xercesc::XMLException& toCatch) {
        // Do your failure processing here

    }


    xercesc::XercesDOMParser *parser = new xercesc::XercesDOMParser();
    xercesc::MemBufInputSource myxml_buf((const XMLByte*)this->data.c_str(), this->data.size(), "dummy",false);

    parser->parse("Doxygen/doc.xml");


    this->document=parser->getDocument();
    this->root=this->document->getDocumentElement();

    this->initWebsites();



}



FileManContainer FileManParser::getContainer(){
    return this->container;
}


std::string FileManParser::getData(){ return this->data;};



void FileManParser::initWebsites(){

    xercesc::DOMElement* websitesElement=this->getChildByTagName(this->root, "websites");


    xercesc::DOMNodeList* nodeList=websitesElement->getChildNodes();
    XMLSize_t nodeCount = nodeList->getLength();

    for(int i=0;i<nodeCount;i++){

        xercesc::DOMNode* current=nodeList->item(i);
        std::string TagName=xercesc::XMLString::transcode(current->getNodeName());

        if( current->getNodeType() == xercesc::DOMNode::ELEMENT_NODE ) {
            Website newWebsite;

            newWebsite.setTitle(\
            this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"title"));

            newWebsite.setUrl(\
            this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"url"));

            newWebsite.setUsername(\
            this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"username"));

            newWebsite.setPassword(\
            this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"password"));

            newWebsite.setDescription(\
            this->getContentOfChild(dynamic_cast< xercesc::DOMElement* >( current ),"description"));


            this->container.addWebsite(newWebsite);

        }
    }
}


xercesc::DOMElement* FileManParser::getChildByTagName(xercesc::DOMElement* node, std::string TagName){
    xercesc::DOMNodeList* nodeList=node->getChildNodes();
    XMLSize_t nodeCount = nodeList->getLength();
    xercesc::DOMElement* returnElement=NULL;

    for(int i=0;i<nodeCount;i++){

        xercesc::DOMNode* current=nodeList->item(i);
        std::string currentTagName=xercesc::XMLString::transcode(current->getNodeName());

        if( current->getNodeType() == xercesc::DOMNode::ELEMENT_NODE ) {
            if(currentTagName.compare(TagName)==0){
                returnElement=dynamic_cast< xercesc::DOMElement* >( current );
                break;
            }
        }
    }

    return returnElement;
}


std::string FileManParser::getContentOfChild(xercesc::DOMElement* node,std::string TagName){
    xercesc::DOMElement* child=this->getChildByTagName(node,TagName);
    return xercesc::XMLString::transcode(child->getTextContent());
}