Changeset 168 for XMLIO_V2/dev/dev_rv/src/xmlio/node/context.cpp
- Timestamp:
- 04/07/11 15:04:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/xmlio/node/context.cpp
r157 r168 5 5 #include "group_template_impl.hpp" 6 6 7 namespace xmlioserver 8 { 9 namespace tree 7 namespace xmlioserver { 8 namespace tree { 9 10 /// ////////////////////// Définitions ////////////////////// /// 11 12 CContext::CContext(void) 13 : CObjectTemplate<CContext>(), CContextAttributes() 14 { /* Ne rien faire de plus */ } 15 16 CContext::CContext(const StdString & id) 17 : CObjectTemplate<CContext>(id), CContextAttributes() 18 { /* Ne rien faire de plus */ } 19 20 CContext::~CContext(void) 21 { /* Ne rien faire de plus */ } 22 23 //---------------------------------------------------------------- 24 25 StdString CContext::GetName(void) { return (StdString("context")); } 26 StdString CContext::GetDefName(void){ return (CContext::GetName()); } 27 ENodeType CContext::GetType(void) { return (eContext); } 28 29 //---------------------------------------------------------------- 30 31 boost::shared_ptr<CContextGroup> CContext::GetContextGroup(void) 32 { 33 static boost::shared_ptr<CContextGroup> group_context 34 (new CContextGroup(xml::CXMLNode::GetRootName())); 35 return (group_context); 36 } 37 38 //---------------------------------------------------------------- 39 40 void CContext::parse(xml::CXMLNode & node) 10 41 { 11 /// ////////////////////// Définitions ////////////////////// ///42 CContext::SuperClass::parse(node); 12 43 13 CContext::CContext(void) 14 : CObjectTemplate<CContext>(), CContextAttributes() 15 { /* Ne rien faire de plus */ } 44 // PARSING POUR GESTION DES ENFANTS 45 xml::THashAttributes attributes; 16 46 17 CContext::CContext(const StdString & id) 18 : CObjectTemplate<CContext>(id), CContextAttributes() 19 { /* Ne rien faire de plus */ } 47 if (node.getElementName().compare(CContext::GetName())) 48 DEBUG("Le noeud est mal nommé mais sera traité comme un contexte !"); 20 49 21 CContext::~CContext(void) 22 { /* Ne rien faire de plus */ } 50 if (!(node.goToChildElement())) 51 { 52 DEBUG("Le context ne contient pas d'enfant !"); 53 } 54 else 55 { 56 do { // Parcours des contextes pour traitement. 23 57 24 StdString CContext::GetName(void) { return (StdString("context")); } 25 StdString CContext::GetDefName(void){ return (CContext::GetName()); } 58 StdString name = node.getElementName(); 59 attributes.clear(); 60 attributes = node.getAttributes(); 26 61 27 boost::shared_ptr<CContextGroup> CContext::GetContextGroup(void) 28 { static boost::shared_ptr<CContextGroup> group_context 29 (new CContextGroup(xml::CXMLNode::GetRootName())); 30 return (group_context); } 62 if (attributes.end() != attributes.find("id")) 63 { DEBUG(<< "Le noeud de définition possÚde un identifiant," 64 << " ce dernier ne sera pas pris en compte lors du traitement !"); } 31 65 32 void CContext::parse(xml::CXMLNode & node) 66 #define DECLARE_NODE(Name_, name_) \ 67 if (name.compare(C##Name_##Definition::GetDefName()) == 0) \ 68 { CObjectFactory::CreateObject<C##Name_##Definition>(C##Name_##Definition::GetDefName()) -> parse(node); \ 69 continue; } 70 #define DECLARE_NODE_PAR(Name_, name_) 71 #include "node_type.conf" 72 73 DEBUG(<< "L'élément nommé \'" << name 74 << "\' dans le contexte \'" << CObjectFactory::GetCurrentContextId() 75 << "\' ne représente pas une définition !"); 76 77 } while (node.goToNextElement()); 78 79 node.goToParentElement(); // Retour au parent 80 } 81 } 82 83 //---------------------------------------------------------------- 84 85 void CContext::ShowTree(StdOStream & out) 86 { 87 StdString currentContextId = 88 CObjectFactory::GetCurrentContextId(); 89 std::vector<boost::shared_ptr<CContext> > def_vector = 90 CContext::GetContextGroup()->getChildList(); 91 std::vector<boost::shared_ptr<CContext> >::iterator 92 it = def_vector.begin(), end = def_vector.end(); 93 94 out << "<? xml version=\"1.0\" ?>" << std::endl; 95 out << "< " << xml::CXMLNode::GetRootName() << " >" << std::endl; 96 97 for (; it != end; it++) 33 98 { 34 CContext::SuperClass::parse(node); 99 boost::shared_ptr<CContext> context = *it; 100 CObjectFactory::SetCurrentContextId(context->getId()); 101 CGroupFactory::SetCurrentContextId(context->getId()); 102 out << *context << std::endl; 103 } 104 105 out << "</ " << xml::CXMLNode::GetRootName() << " >" << std::endl; 35 106 36 // PARSING POUR GESTION DES ENFANTS 37 xml::THashAttributes attributes; 107 CObjectFactory::SetCurrentContextId(currentContextId); 108 CGroupFactory::SetCurrentContextId(currentContextId); 109 } 38 110 39 if (node.getElementName().compare(CContext::GetName())) 40 DEBUG("Le noeud est mal nommé mais sera traité comme un contexte !"); 111 //---------------------------------------------------------------- 41 112 42 if (!(node.goToChildElement())) 43 { 44 DEBUG("Le context ne contient pas d'enfant !"); 45 } 46 else 47 { 48 do { // Parcours des contextes pour traitement. 113 StdString CContext::toString(void) const 114 { 115 StdOStringStream oss; 116 oss << "< " << CContext::GetName() 117 << " id=\"" << this->getId() << "\" " 118 << SuperClassAttribute::toString() << ">" << std::endl; 119 if (!this->hasChild()) 120 { 121 //oss << "<!-- No definition -->" << std::endl; // fait planter l'incrémentation 122 } 123 else 124 { 49 125 50 StdString name = node.getElementName(); 51 attributes.clear(); 52 attributes = node.getAttributes(); 126 #define DECLARE_NODE(Name_, name_) \ 127 if (CObjectFactory::HasObject<C##Name_##Definition>(C##Name_##Definition::GetDefName())) \ 128 oss << *CObjectFactory::GetObject<C##Name_##Definition>(C##Name_##Definition::GetDefName()) << std::endl; 129 #define DECLARE_NODE_PAR(Name_, name_) 130 #include "node_type.conf" 53 131 54 if (attributes.end() != attributes.find("id"))55 { DEBUG(<< "Le noeud de définition possÚde un identifiant,"56 << " ce dernier ne sera pas pris en compte lors du traitement !"); }57 58 #define DECLARE_NODE(Name_, name_) \59 if (name.compare(C##Name_##Definition::GetDefName()) == 0) \60 { CObjectFactory::CreateObject<C##Name_##Definition>(C##Name_##Definition::GetDefName()) -> parse(node); \61 continue; }62 #define DECLARE_NODE_PAR(Name_, name_)63 #include "node_type.conf"64 65 DEBUG(<< "L'élément nommé \'" << name66 << "\' dans le contexte \'" << CObjectFactory::GetCurrentContextId()67 << "\' ne représente pas une définition !");68 69 } while (node.goToNextElement());70 71 node.goToParentElement(); // Retour au parent72 }73 132 } 74 133 75 void CContext::ShowTree(StdOStream & out) 134 oss << "</ " << CContext::GetName() << " >"; 135 136 return (oss.str()); 137 } 138 139 //---------------------------------------------------------------- 140 141 void CContext::solveDescInheritance(const CAttributeMap * const UNUSED(parent)) 142 { 143 #define DECLARE_NODE(Name_, name_) \ 144 if (CObjectFactory::HasObject<C##Name_##Definition>(C##Name_##Definition::GetDefName())) \ 145 CObjectFactory::GetObject<C##Name_##Definition>(C##Name_##Definition::GetDefName())->solveDescInheritance(); 146 #define DECLARE_NODE_PAR(Name_, name_) 147 #include "node_type.conf" 148 } 149 150 //---------------------------------------------------------------- 151 152 bool CContext::hasChild(void) const 153 { 154 return (false || 155 #define DECLARE_NODE(Name_, name_) \ 156 CObjectFactory::HasObject<C##Name_##Definition> (C##Name_##Definition::GetDefName()) || 157 #define DECLARE_NODE_PAR(Name_, name_) 158 #include "node_type.conf" 159 false); 160 } 161 162 //---------------------------------------------------------------- 163 164 void CContext::solveFieldRefInheritance(void) 165 { 166 if (!this->hasId()) return; 167 std::vector<boost::shared_ptr<CField> > allField 168 = CObjectTemplate<CField>::GetAllVectobject(this->getId()); 169 std::vector<boost::shared_ptr<CField> >::iterator 170 it = allField.begin(), end = allField.end(); 171 172 for (; it != end; it++) 76 173 { 77 StdString currentContextId = 78 CObjectFactory::GetCurrentContextId(); 79 std::vector<boost::shared_ptr<CContext> > def_vector = 80 CContext::GetContextGroup()->getChildList(); 81 std::vector<boost::shared_ptr<CContext> >::iterator 82 it = def_vector.begin(), end = def_vector.end(); 174 boost::shared_ptr<CField> field = *it; 175 field->solveRefInheritance(); 176 } 177 } 83 178 84 out << "<? xml version=\"1.0\" ?>" << std::endl; 85 out << "< " << xml::CXMLNode::GetRootName() << " >" << std::endl; 86 87 for (; it != end; it++) 88 { 89 boost::shared_ptr<CContext> context = *it; 90 CObjectFactory::SetCurrentContextId(context->getId()); 91 CGroupFactory::SetCurrentContextId(context->getId()); 92 out << *context << std::endl; 93 } 94 95 out << "</ " << xml::CXMLNode::GetRootName() << " >" << std::endl; 179 ///--------------------------------------------------------------- 96 180 97 CObjectFactory::SetCurrentContextId(currentContextId); 98 CGroupFactory::SetCurrentContextId(currentContextId); 99 } 100 101 StdString CContext::toString(void) const 102 { 103 StdOStringStream oss; 104 oss << "< " << CContext::GetName() 105 << " id=\"" << this->getId() << "\" " 106 << SuperClassAttribute::toString() << ">" << std::endl; 107 if (!this->hasChild()) 108 { 109 //oss << "<!-- No definition -->" << std::endl; // fait planter l'incrémentation 110 } 111 else 112 { 113 114 #define DECLARE_NODE(Name_, name_) \ 115 if (CObjectFactory::HasObject<C##Name_##Definition>(C##Name_##Definition::GetDefName())) \ 116 oss << *CObjectFactory::GetObject<C##Name_##Definition>(C##Name_##Definition::GetDefName()) << std::endl; 117 #define DECLARE_NODE_PAR(Name_, name_) 118 #include "node_type.conf" 119 120 } 121 122 oss << "</ " << CContext::GetName() << " >"; 123 124 return (oss.str()); 125 } 126 127 void CContext::solveDescInheritance(const CAttributeMap * const UNUSED(parent)) 128 { 129 #define DECLARE_NODE(Name_, name_) \ 130 if (CObjectFactory::HasObject<C##Name_##Definition>(C##Name_##Definition::GetDefName())) \ 131 CObjectFactory::GetObject<C##Name_##Definition>(C##Name_##Definition::GetDefName())->solveDescInheritance(); 132 #define DECLARE_NODE_PAR(Name_, name_) 133 #include "node_type.conf" 134 } 135 136 bool CContext::hasChild(void) const 137 { 138 return (false || 139 #define DECLARE_NODE(Name_, name_) \ 140 CObjectFactory::HasObject<C##Name_##Definition> (C##Name_##Definition::GetDefName()) || 141 #define DECLARE_NODE_PAR(Name_, name_) 142 #include "node_type.conf" 143 false); 144 } 145 146 void CContext::solveFieldRefInheritance(void) 147 { 148 if (!this->hasId()) return; 149 std::vector<boost::shared_ptr<CField> > allField 150 = CObjectTemplate<CField>::GetAllVectobject(this->getId()); 151 std::vector<boost::shared_ptr<CField> >::iterator 152 it = allField.begin(), end = allField.end(); 153 154 for (; it != end; it++) 155 { 156 boost::shared_ptr<CField> field = *it; 157 field->solveRefInheritance(); 158 } 159 } 160 161 } // namespace tree 181 } // namespace tree 162 182 } // namespace xmlioserver
Note: See TracChangeset
for help on using the changeset viewer.