Changeset 106 for XMLIO_V2/dev/dev_rv/src/XMLIO/field_group.hpp
- Timestamp:
- 06/14/10 15:32:15 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/XMLIO/field_group.hpp
r105 r106 2 2 #define __FIELD_GROUP__ 3 3 4 5 using XMLIOSERVER::XML::THashAttributes;6 7 4 namespace XMLIOSERVER 8 5 { 9 class FieldGroup : public GroupTemplate< Field, FieldAttribut>6 class FieldGroup : public GroupTemplate<CField, FieldAttribut> 10 7 { 11 8 public: 12 9 13 FieldGroup(void) : GroupTemplate< Field, FieldAttribut>()10 FieldGroup(void) : GroupTemplate<CField, FieldAttribut>() 14 11 {/* Ne rien faire de plus */} 15 FieldGroup(const string& _id) : GroupTemplate< Field, FieldAttribut>(_id)12 FieldGroup(const string& _id) : GroupTemplate<CField, FieldAttribut>(_id) 16 13 {/* 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 28 15 const char* getName(void) const {return ("Field_Group"); } 29 16 17 18 /// TODO A remonter dans l'arbre des héritages 30 19 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; 36 23 37 24 // Ecriture des sous-groupes. 38 25 for(unsigned int i = 0; i < c.groupList.getVector().size() ; i++) 39 26 out << *((FieldGroup*)c.groupList.getVector()[i]) << std::endl; 40 27 28 // Ecriture des enfants. 41 29 for(unsigned int i = 0; i < c.childList.getVector().size() ; i++) 42 30 out << *(c.childList.getVector()[i]) << std::endl; 43 31 44 32 out << NIndent << "</" << c.getName()<< ">" << DecEndl; 33 45 34 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 } 60 36 61 void resolveDescInheritance(StrHashMap<BaseAttribut>* _pattr = 0) 37 /// TODO A remonter dans l'arbre des héritages 38 void resolveDescInheritance(const AttributRegistrar* _parent = 0) 62 39 { 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(); 65 42 66 43 // On complÚte les propres attributs du groupe. 67 if (_pa ttr!= NULL) addAttributes(*_pattr);44 if (_parent!= NULL) addAttributes(*_parent); 68 45 69 46 for(unsigned int i = 0; i < childvect.size() ; i++) 70 47 // on complÚte les attributs des champs enfants 71 childvect[i] -> addAttributes( this->attrList);48 childvect[i] -> addAttributes(*this); 72 49 73 50 for(unsigned int i = 0; i < groupvect.size() ; i++) 74 51 // on complÚte les attributs des groupes de champs enfants 75 ((FieldGroup*)groupvect[i]) -> resolveDescInheritance( &this->attrList);52 ((FieldGroup*)groupvect[i]) -> resolveDescInheritance(this); 76 53 } 77 54 78 void parse (XMLNode& _node )55 void parse (XMLNode& _node, bool _withAttr = true) 79 56 { 80 57 string name = _node.getElementName(); … … 82 59 83 60 /// 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(); 91 73 } 92 93 attributes.clear();94 74 95 75 /// PARSING POUR GESION DES ENFANTS … … 121 101 fgroup = (FieldGroup*)(&createGroup()); 122 102 fgroup->parse(_node); 123 } 124 103 } 125 104 continue; 126 105 127 106 } 128 107 else if (name.compare("field") == 0) 129 { // Parsing pour les champs 108 { // Parsing pour les champs. 130 109 131 Field* field = NULL;110 CField* field = NULL; 132 111 133 112 if (attributes.end() != attributes.find("id")) 134 113 {// Si l'identifiant est défini. 135 if ( Field::HasObject(attributes["id"]))114 if (CField::HasObject(attributes["id"])) 136 115 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"])); 138 117 field->parse(_node); 139 118 } 140 119 else 141 120 {// Si l'identifiant n'est pas défini. 142 field = ( Field*)(&createChild());121 field = (CField*)(&createChild()); 143 122 field->parse(_node); 144 } 145 123 } 146 124 continue; 147 125 }
Note: See TracChangeset
for help on using the changeset viewer.