Ignore:
Timestamp:
04/07/11 15:04:00 (13 years ago)
Author:
hozdoba
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/xmlio/node/context.cpp

    r157 r168  
    55#include "group_template_impl.hpp" 
    66 
    7 namespace xmlioserver 
    8 { 
    9    namespace tree 
     7namespace xmlioserver { 
     8namespace 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) 
    1041   { 
    11       /// ////////////////////// Définitions ////////////////////// /// 
     42      CContext::SuperClass::parse(node); 
    1243 
    13       CContext::CContext(void) 
    14          : CObjectTemplate<CContext>(), CContextAttributes() 
    15       { /* Ne rien faire de plus */ } 
     44      // PARSING POUR GESTION DES ENFANTS 
     45      xml::THashAttributes attributes; 
    1646 
    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 !"); 
    2049 
    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. 
    2357 
    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(); 
    2661 
    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 !"); } 
    3165 
    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++) 
    3398      { 
    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; 
    35106 
    36          // PARSING POUR GESTION DES ENFANTS 
    37          xml::THashAttributes attributes; 
     107      CObjectFactory::SetCurrentContextId(currentContextId); 
     108       CGroupFactory::SetCurrentContextId(currentContextId); 
     109   } 
    38110 
    39          if (node.getElementName().compare(CContext::GetName())) 
    40             DEBUG("Le noeud est mal nommé mais sera traité comme un contexte !"); 
     111   //---------------------------------------------------------------- 
    41112 
    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      { 
    49125 
    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" 
    53131 
    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é \'"     << name 
    66                      << "\' dans le contexte \'" << CObjectFactory::GetCurrentContextId() 
    67                      << "\' ne représente pas une définition !"); 
    68  
    69             } while (node.goToNextElement()); 
    70  
    71             node.goToParentElement(); // Retour au parent 
    72          } 
    73132      } 
    74133 
    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++) 
    76173      { 
    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   } 
    83178 
    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   ///--------------------------------------------------------------- 
    96180 
    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 
    162182} // namespace xmlioserver 
Note: See TracChangeset for help on using the changeset viewer.