#ifndef __ATTRIBUT_REGISTRAR__ #define __ATTRIBUT_REGISTRAR__ #include "attribut.hpp" using XMLIOSERVER::XML::THashAttributes; namespace XMLIOSERVER { class AttributRegistrar { protected : AttributRegistrar():attrList() {/* Ne rien faire de plus */} void RegisterAttribut(BaseAttribut* attribut){ attrList.addObject(attribut); } const StrHashMap& getAttributList(void) const { return (attrList); } size_t getNbAttributes() const {return (attrList.getSize()); } bool hasAttribut(const string& _id) const { return (attrList.hasMappedValue(_id)); } BaseAttribut* getAttribut(const string& _id) throw (XMLIOUndefinedValueException) { return (attrList[_id]); } friend ostream& operator<< (ostream& out, const AttributRegistrar& c) { for(unsigned int i = 0; i < c.attrList.getVectorSize(); i++) out << *c.attrList.getVector()[i]; return (out); } void setAttributes(const THashAttributes& _attr) { for (THashAttributes::ConstIterator it = _attr.begin(); it != _attr.end(); it++) if ((*it).first.compare(string("id"))!= 0 and (*it).first.compare(string("src"))!=0) // (Au dessus) Non prise en compte de l'identifiant et de l'inclusion de fichiers externes lors de l'affectation des attributs. this->setSAttribut((*it).first, (*it).second); return; } void addAttributes(const AttributRegistrar& _parent) { const StrHashMap& _pattr = _parent.getAttributList(); const StrHashMap& _lattr = getAttributList(); //_pattr contient les attributs du parent, _lattr les attributs locaux. for(unsigned int i = 0; i < _lattr.getVectorSize(); i++) { if(_lattr.getVector()[i]->_hasValue() or !_pattr.getVector()[i]->_hasValue()) continue; _lattr.getVector()[i]->assignValue(_pattr.getVector()[i]); } } void setSAttribut(const string& att_name, const std::string& value) { if (hasAttribut(att_name)) getAttribut(att_name)->setFromString(value); else throw XMLIOUndefinedValueException("Impossible de trouver l'attribut nommé \"" + att_name +"\" dans la liste des attributs enregistrés !"); } ~AttributRegistrar(void) {/* Ne rien faire de plus */} private : StrHashMap attrList; }; // class AttributRegistrar } // namespace XMLIOSERVER #endif //__ATTRIBUT_REGISTRAR__