Ignore:
Timestamp:
06/14/10 15:32:15 (14 years ago)
Author:
hozdoba
Message:

Commit intermédiaire en attendant l'arrivée de l'héritage par référence...
Prise en charge de la définition des fichiers.
Correction des fichiers xml de définition (pour tests).
Correction de deux problÚmes de mise à jour de context.
etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/XMLIO/field_group.hpp

    r105 r106  
    22#define __FIELD_GROUP__ 
    33 
    4  
    5 using XMLIOSERVER::XML::THashAttributes; 
    6  
    74namespace XMLIOSERVER 
    85{    
    9    class FieldGroup : public GroupTemplate<Field, FieldAttribut> 
     6   class FieldGroup : public GroupTemplate<CField, FieldAttribut> 
    107   { 
    118      public: 
    129       
    13          FieldGroup(void) : GroupTemplate<Field, FieldAttribut>() 
     10         FieldGroup(void) : GroupTemplate<CField, FieldAttribut>() 
    1411         {/* Ne rien faire de plus */}                
    15          FieldGroup(const string& _id) : GroupTemplate<Field, FieldAttribut>(_id) 
     12         FieldGroup(const string& _id) : GroupTemplate<CField, FieldAttribut>(_id) 
    1613         {/* Ne rien faire de plus */} 
    17           
    18          void setAttributes(const THashAttributes& _attr) 
    19          { 
    20             for (THashAttributes::ConstIterator it = _attr.begin(); it != _attr.end(); it++) 
    21                if ((*it).first.compare(string("id"))!= 0 and (*it).first.compare(string("src"))!=0) 
    22                // (Au dessus) Non prise en compte de l'identifiant et de l'inclusion de fichiers externes lors de l'affectation des attributs. 
    23                   this->setSAttribut((*it).first, (*it).second); 
    24              
    25             return; 
    26          } 
    27                   
     14                          
    2815         const char* getName(void) const {return ("Field_Group"); }   
    2916          
     17          
     18         /// TODO A remonter dans l'arbre des héritages 
    3019         friend ostream& operator<< (ostream& out, const FieldGroup& c)  
    31          {             
    32             out << IncIndent << "<" << c.getName(); 
    33             if(c.hasId()) out << " id=\"" <<  c.getId() << "\""; 
    34             for(unsigned int i = 0; i < c.attrList.getVectorSize(); i++) out << *c.attrList.getVector()[i]; 
    35             out << ">" << std::endl; 
     20         {    
     21            const AttributRegistrar &ar = c; 
     22            out << IncIndent << "<" << c.getName() << c.printId() << ar << ">" << std::endl;             
    3623             
    37              
     24            // Ecriture des sous-groupes. 
    3825            for(unsigned int i = 0; i < c.groupList.getVector().size() ; i++) 
    3926               out << *((FieldGroup*)c.groupList.getVector()[i])  << std::endl; 
    4027                
     28            // Ecriture des enfants. 
    4129            for(unsigned int i = 0; i < c.childList.getVector().size() ; i++) 
    4230               out << *(c.childList.getVector()[i]) << std::endl; 
    4331                
    4432            out << NIndent << "</" << c.getName()<< ">" << DecEndl; 
     33             
    4534            return (out); 
    46          }  
    47                            
    48          void addAttributes(const StrHashMap<BaseAttribut>& _pattr) 
    49          {           
    50             StrHashMap<BaseAttribut>& _lattr = getAttributList(); 
    51              
    52             //_pattr contient les attributs du parent, _lattr les attributs locaux. 
    53              
    54             for(unsigned int i = 0; i < _lattr.getVectorSize(); i++) 
    55             { 
    56                if(_lattr.getVector()[i]->_hasValue() or !_pattr.getVector()[i]->_hasValue()) continue; 
    57                _lattr.getVector()[i]->assignValue(_pattr.getVector()[i]); 
    58             } 
    59          } 
     35         }    
    6036          
    61          void resolveDescInheritance(StrHashMap<BaseAttribut>* _pattr = 0) 
     37         /// TODO A remonter dans l'arbre des héritages    
     38         void resolveDescInheritance(const AttributRegistrar* _parent = 0) 
    6239         { 
    63             const vector<Field*>&  childvect = childList.getVector(); 
    64             const vector<GroupTemplate<Field, FieldAttribut>*>& groupvect = groupList.getVector(); 
     40            const vector<CField*>&  childvect = childList.getVector(); 
     41            const vector<GroupTemplate<CField, FieldAttribut>*>& groupvect = groupList.getVector(); 
    6542             
    6643            // On complÚte les propres attributs du groupe. 
    67             if (_pattr!= NULL) addAttributes(*_pattr); 
     44            if (_parent!= NULL) addAttributes(*_parent); 
    6845             
    6946            for(unsigned int i = 0; i < childvect.size() ; i++) 
    7047            // on complÚte les attributs des champs enfants 
    71                childvect[i] -> addAttributes(this->attrList); 
     48               childvect[i] -> addAttributes(*this); 
    7249                
    7350            for(unsigned int i = 0; i < groupvect.size() ; i++) 
    7451            // on complÚte les attributs des groupes de champs enfants 
    75                ((FieldGroup*)groupvect[i]) -> resolveDescInheritance(&this->attrList); 
     52               ((FieldGroup*)groupvect[i]) -> resolveDescInheritance(this); 
    7653         } 
    7754          
    78          void parse (XMLNode& _node) 
     55         void parse (XMLNode& _node, bool _withAttr = true) 
    7956         { 
    8057            string name = _node.getElementName();             
     
    8259 
    8360            /// PARSING GESTION DES ATTRIBUTS /// 
    84             _node.getAttributes(attributes);   
    85             this->setAttributes(attributes); 
    86              
    87             if (attributes.end() != attributes.find("src")) 
    88             { // Si une demande d'inclusion de fichier est trouvé. 
    89                XMLNode _node_inc = getNodeIncludedFile(attributes["src"], name); 
    90                parse (_node_inc); 
     61            if (_withAttr) 
     62            { 
     63               _node.getAttributes(attributes);   
     64               this->setAttributes(attributes); 
     65                
     66               if (attributes.end() != attributes.find("src")) 
     67               { // Si une demande d'inclusion de fichier est trouvé. 
     68                  XMLNode _node_inc = getNodeIncludedFile(attributes["src"], name); 
     69                  parse (_node_inc); 
     70               } 
     71                
     72               attributes.clear(); 
    9173            } 
    92              
    93             attributes.clear(); 
    9474                
    9575            /// PARSING POUR GESION DES ENFANTS 
     
    121101                        fgroup = (FieldGroup*)(&createGroup()); 
    122102                        fgroup->parse(_node); 
    123                      } 
    124                          
     103                     }                         
    125104                     continue; 
    126105                         
    127106                  } 
    128107                  else if (name.compare("field") == 0) 
    129                   { // Parsing pour les champs 
     108                  { // Parsing pour les champs. 
    130109                   
    131                      Field* field = NULL; 
     110                     CField* field = NULL; 
    132111                   
    133112                     if (attributes.end() != attributes.find("id")) 
    134113                     {// Si l'identifiant est défini. 
    135                         if (Field::HasObject(attributes["id"])) 
     114                        if (CField::HasObject(attributes["id"])) 
    136115                           WARNING("Dans le context actuel, un champ du même nom existe déjà, le second fera référence au premier par défaut !");  // TODO TODO 
    137                         field = (Field*)(&createChild(attributes["id"])); 
     116                        field = (CField*)(&createChild(attributes["id"])); 
    138117                        field->parse(_node); 
    139118                     } 
    140119                     else 
    141120                     {// Si l'identifiant n'est pas défini. 
    142                         field = (Field*)(&createChild()); 
     121                        field = (CField*)(&createChild()); 
    143122                        field->parse(_node); 
    144                      }          
    145                      
     123                     }                   
    146124                     continue; 
    147125                  }  
Note: See TracChangeset for help on using the changeset viewer.