summaryrefslogtreecommitdiff
path: root/ParserClass/FileManParser.cpp
blob: 66e3c52ac05772905d69e84d1ebf956f3bf6fc10 (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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/**
 * @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(){

    //Get websites élément
    xercesc::DOMElement* websitesElement=this->getChildByTagName(this->root, "websites");

    //Make list of website
    xercesc::DOMNodeList* websiteList=websitesElement->getChildNodes();
    XMLSize_t websiteCount = websiteList->getLength();


    //Read the list of website
    for(int i=0;i<websiteCount;i++){

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

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

            //Get id
            XMLCh* idXMLCh=(XMLCh*)((xercesc::DOMElement*)current)->getAttribute((XMLCh*) xercesc::XMLString::transcode("id"));
            //Convert id to string from XMLCh
            std::string id=xercesc::XMLString::transcode(idXMLCh);

            //Assign id
            newWebsite.setId(id);

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

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

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

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

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

            //Add website to container
            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());
}