-
Notifications
You must be signed in to change notification settings - Fork 0
/
energyXml.cc
66 lines (57 loc) · 1.67 KB
/
energyXml.cc
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
#include "energyXml.h"
EnergyXml::EnergyXml() {
m_pEnergy = NULL;
}
EnergyXml::~EnergyXml() {
clear();
}
void EnergyXml::clear() {
if (NULL != m_pEnergy) {
delete m_pEnergy;
m_pEnergy = NULL;
}
}
bool EnergyXml::load(const rapidxml::xml_node<>* pEnergyElem) {
using namespace strings;
clear();
const char* energyElementNames[] = {xInternal, xExternal};
XsdElementUtil energyUtil(XSD_CHOICE, energyElementNames);
if (!energyUtil.process(pEnergyElem))
return false;
m_bExternalEnergy = (bool)energyUtil.getChoiceElementIndex();
if (m_bExternalEnergy) {
if (!m_externalEnergyXml.load(energyUtil.getChoiceElement()))
return false;
} else {
if (!m_internalEnergyXml.load(energyUtil.getChoiceElement()))
return false;
}
return true;
}
bool EnergyXml::save(rapidxml::xml_document<> &doc, rapidxml::xml_node<>* pParentOfEnergyElem) {
using namespace rapidxml;
using namespace strings;
xml_node<>* energy = doc.allocate_node(node_element, xEnergy);
pParentOfEnergyElem->append_node(energy);
if (m_bExternalEnergy) {
xml_node<>* external = doc.allocate_node(node_element, xExternal);
energy->append_node(external);
if (!m_externalEnergyXml.save(doc, external))
return false;
} else {
xml_node<>* internal = doc.allocate_node(node_element, xInternal);
energy->append_node(internal);
if (!m_internalEnergyXml.save(doc, internal))
return false;
}
return true;
}
Energy* EnergyXml::getEnergy() {
if (NULL == m_pEnergy) {
if (m_bExternalEnergy)
m_pEnergy = ExternalEnergy::instance(m_externalEnergyXml.m_method, &m_externalEnergyXml);
else
m_pEnergy = InternalEnergy::instance(m_internalEnergyXml.m_method, &m_internalEnergyXml);
}
return m_pEnergy;
}