Changeset 91
- Timestamp:
- 06/03/10 12:24:27 (14 years ago)
- Location:
- XMLIO_V2/dev/dev_rv
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/README
r88 r91 2 2 3 3 Ceci est une version expérimentale non fonctionnelle et non documentée. 4 5 * Certaines classes et fonctionnalité sont présentes pour effectuer des tests.6 * Les classes de gestion des grilles, des fichiers et des axes ne sont pas présents dans cete version.7 * Le répertoire old disparaitera dans les versions ultérieures.8 9 <<commit pour sauvegarde uniquement>> -
XMLIO_V2/dev/dev_rv/context.hpp
r88 r91 12 12 {/* Ne rien faire de plus */} 13 13 Context(const string& _id) : ObjectTemplate<Context>(_id) 14 {/* Ne rien faire de plus */} 14 {/* Ne rien faire de plus */} 15 16 static void SetCurrentContext(const string& id) 17 { 18 // On modifie le context courrant pour tout les ObjectTemplate 19 FieldGroup::SetContext(id); 20 Field::SetContext(id); 21 } 15 22 16 23 void parse (XMLNode& _node) … … 30 37 31 38 string name = _node.getElementName(); 32 std::cout << name << std::endl;33 39 attributes.clear(); 34 40 _node.getAttributes(attributes); -
XMLIO_V2/dev/dev_rv/field.hpp
r88 r91 1 1 #ifndef __FIELD__ 2 2 #define __FIELD__ 3 4 using XMLIOSERVER::XML::XMLNode; 3 5 4 6 namespace XMLIOSERVER -
XMLIO_V2/dev/dev_rv/field_attribut.hpp
r88 r91 30 30 { /* Ne rien faire de plus */ } 31 31 32 // TODO Définir un constructeur par copie au lieu de registerAllAttributes (éventuellement)32 // TODO Peut-être définir un constructeur par copie au lieu de registerAllAttributes (éventuellement) 33 33 34 34 virtual void registerAllAttributes(void) -
XMLIO_V2/dev/dev_rv/field_group.hpp
r88 r91 2 2 #define __FIELD_GROUP__ 3 3 4 5 using XMLIOSERVER::XML::THashAttributes; 6 4 7 namespace XMLIOSERVER 5 8 { 6 class FieldGroup : public GroupTemplate<Field >, public FieldAttribut9 class FieldGroup : public GroupTemplate<Field, FieldAttribut> 7 10 { 8 11 public: 9 12 10 FieldGroup(void) : GroupTemplate<Field >(), FieldAttribut()13 FieldGroup(void) : GroupTemplate<Field, FieldAttribut>() 11 14 {/* Ne rien faire de plus */} 12 FieldGroup(const string& _id) : GroupTemplate<Field >(_id), FieldAttribut()15 FieldGroup(const string& _id) : GroupTemplate<Field, FieldAttribut>(_id) 13 16 {/* Ne rien faire de plus */} 14 17 -
XMLIO_V2/dev/dev_rv/main.cpp
r88 r91 9 9 try 10 10 { 11 // Tests de la classe StrHashMap : 12 //StrHashMap<AbstractObject>::CLASS_TEST(); 13 //ObjectTemplate<AbstractObject>::CLASS_TEST(); 14 //GroupTemplate<AbstractObject>::CLASS_TEST(); 15 XMLParser::CLASS_TEST(); 16 17 11 XMLParser::CLASS_TEST(); 18 12 // Code à executer ici 19 13 } -
XMLIO_V2/dev/dev_rv/xmlio.hpp
r88 r91 27 27 // Concernant les attributs ... 28 28 #include "field_attribut.hpp" 29 30 29 #include "xmlio_object.hpp" 30 #include "xmlio_xml_node.hpp" 31 #include "xmlio_object_template.hpp" 32 #include "field.hpp" 33 #include "xmlio_group_template.hpp" 34 #include "field_group.hpp" 35 #include "context.hpp" 36 #include "xmlio_xml_parser.hpp" 31 37 32 38 33 #include "xmlio_object_template.hpp"34 //#include "xmlio_group_template.hpp" // < Inclusion dans "xmlio_xml_parser.hpp35 36 // Les Objets "principaux"37 // #include "field.hpp" // < Inclusion dans "xmlio_xml_parser.hpp"38 39 // Concernant le parsing xml ...40 #include "xmlio_xml_parser.hpp"41 42 //#include "context.hpp" // < Inclusion dans "xmlio_xml_parser.hpp"43 39 44 40 -
XMLIO_V2/dev/dev_rv/xmlio_container.hpp
r88 r91 81 81 82 82 bool addObject(Mapped& element) 83 { if(element.hasId()) return(addValue(element.getId(), element)); return(addValue(element)); 83 { if(element.hasId()) return(addValue(element.getId(), element)); return(addValue(element)); } 84 84 85 85 bool addPtrObject(Mapped element) 86 { if(element->hasId()) return(addValue(element->getId(), element)); return(addValue(element)); 86 { if(element->hasId()) return(addValue(element->getId(), element)); return(addValue(element)); } 87 87 88 88 bool removeObject(const string& kval) … … 95 95 {/* Ne rien faire de plus */} 96 96 97 98 #define STRHASHMAP_TEST(DESC, SIZE, VECTORSIZE) \99 if(map.getSize() != SIZE or map.getVectorSize() != VECTORSIZE) \100 { log << "Test de la classe StrHashMap > " << DESC << "... echec !" << std::endl; return (false); }101 102 /// POUR TESTS ///103 static bool CLASS_TEST(ostream& log = std::clog)104 {105 StrHashMap<Mapped> map;106 Mapped obj0("toto"), obj1("titi"), obj3;107 108 ////////////////////////////////////////////////////////////////////109 map.addObject(obj0); map.addObject(obj1);110 STRHASHMAP_TEST("Ajout d'objets identifiés au conteneur", 2, 2);111 map.removeObject("toto");112 STRHASHMAP_TEST("Suppression d'objets identifiés du conteneur", 1, 1);113 map.addObject(obj3);114 STRHASHMAP_TEST("Ajout d'objets non-identifiés au conteneur", 1, 2);115 // A étoffer en cas de soucis avec cette classe ...116 ////////////////////////////////////////////////////////////////////117 118 log << "Test StrHashMap ... ok !" << std::endl;119 return (true);120 };121 #undef STRHASHMAP_TEST122 123 97 }; // class StrHashMap 124 98 -
XMLIO_V2/dev/dev_rv/xmlio_group_template.hpp
r88 r91 4 4 namespace XMLIOSERVER 5 5 { 6 template <class T >7 class GroupTemplate : public ObjectTemplate<GroupTemplate<T > >6 template <class T, class U> 7 class GroupTemplate : public ObjectTemplate<GroupTemplate<T, U> >, public U 8 8 { 9 9 public: 10 10 11 GroupTemplate(void) : ObjectTemplate<GroupTemplate<T > >(), childList(), groupList()11 GroupTemplate(void) : ObjectTemplate<GroupTemplate<T, U> >(), childList(), groupList(), U() 12 12 {/* Ne rien faire de plus */} 13 GroupTemplate(const string& _id) : ObjectTemplate<GroupTemplate<T > >(_id), childList(), groupList()13 GroupTemplate(const string& _id) : ObjectTemplate<GroupTemplate<T, U> >(_id), childList(), groupList(), U() 14 14 {/* Ne rien faire de plus */} 15 15 … … 18 18 /// Pour les groupes d'objets enfants /// 19 19 20 GroupTemplate<T >& createGroup(const string _id) throw (XMLIOUndefinedValueException)20 GroupTemplate<T, U>& createGroup(const string _id) throw (XMLIOUndefinedValueException) 21 21 { 22 GroupTemplate<T >& obj = GroupTemplate<T>::CreateObject(_id);22 GroupTemplate<T, U>& obj = GroupTemplate<T, U>::CreateObject(_id); 23 23 groupList.addPtrObject(&obj); 24 24 return (obj); 25 25 } 26 26 27 GroupTemplate<T >& createGroup(void)27 GroupTemplate<T, U>& createGroup(void) 28 28 { 29 GroupTemplate<T >& obj = GroupTemplate<T>::CreateObject();29 GroupTemplate<T, U>& obj = GroupTemplate<T, U>::CreateObject(); 30 30 groupList.addPtrObject(&obj); 31 31 return (obj); 32 32 } 33 33 34 GroupTemplate<T >& getGroup(const string _id) throw (XMLIOUndefinedValueException) { return (*groupList[_id]); }34 GroupTemplate<T, U>& getGroup(const string _id) throw (XMLIOUndefinedValueException) { return (*groupList[_id]); } 35 35 bool hasGroup(const string _id) { return (groupList.hasMappedValue(_id)); } 36 36 37 const StrHashMap<GroupTemplate<T >* >& getGroupList(void) { return (groupList); }37 const StrHashMap<GroupTemplate<T, U>* >& getGroupList(void) { return (groupList); } 38 38 39 39 size_t getNbGroup() const {return (groupList.getVectorSize()); } … … 62 62 size_t getNbChild() const {return (childList.getVectorSize()); } 63 63 64 static bool CLASS_TEST(ostream& log = std::clog)65 {66 GroupTemplate<T> group;67 /////////////////////////////////////////68 GroupTemplate<T>& group0 = group.createGroup("toto");69 GroupTemplate<T>& group1 = group.createGroup();70 T& child0 = group.createChild("toto");71 T& child1 = group.createChild();72 log << "Nombre de (groupes) enfants : " << group.getNbChild() << "/" << group.getNbGroup() << " (2/2 attendu)" << std::endl;73 /////////////////////////////////////////74 log << "Test GroupTemplate ... ok !" << std::endl;75 return (true);76 };77 78 64 79 65 ~GroupTemplate() … … 84 70 private: 85 71 StrHashMap<T*> childList; 86 StrHashMap<GroupTemplate<T >* > groupList;72 StrHashMap<GroupTemplate<T, U>* > groupList; 87 73 88 74 }; // class GroupTemplate -
XMLIO_V2/dev/dev_rv/xmlio_object_template.hpp
r88 r91 24 24 // Ajout d'un nouvel objet si l'identifiant n'est pas répertorié. 25 25 T identified_object(_id); 26 ObjectTemplate<T>:: CurrListObj.addObject(identified_object);26 ObjectTemplate<T>::AllListObj[CurrContext].addObject(identified_object); 27 27 ObjectTemplate<T>::GetObject(_id).registerAllAttributes(); 28 28 return (ObjectTemplate<T>::GetObject(_id)); … … 35 35 } 36 36 37 static T& GetObject(const string _id) throw (XMLIOUndefinedValueException) { return (ObjectTemplate<T>::CurrListObj[_id]); }38 static bool HasObject(const string _id) { return (ObjectTemplate<T>::CurrListObj.hasMappedValue(_id)); }37 static T& GetObject(const string _id) throw (XMLIOUndefinedValueException) 38 { return (ObjectTemplate<T>::AllListObj[CurrContext][_id]); } 39 39 40 static const StrHashMap<T> GetCurrentListObject(void) { return (CurrListObj); } 40 static bool HasObject(const string _id) 41 { return (ObjectTemplate<T>::AllListObj[CurrContext].hasMappedValue(_id)); } 41 42 42 virtual void registerAllAttributes(void) {}; 43 static const StrHashMap<T> GetCurrentListObject(void) { return (AllListObj[CurrContext]); } 44 45 static void SetContext(const string& id) 46 { ObjectTemplate<T>::CurrContext = id; } 43 47 44 48 virtual const char* getName(void) const {return ("ObjectTemplate"); } 45 46 /// POUR TESTS ///47 48 #define OBJECTTEMPLATE_TEST(DESC, SIZE, VECTORSIZE) \49 if(ObjectTemplate<T>::CurrListObj.getSize() != SIZE or ObjectTemplate<T>::CurrListObj.getVectorSize() != VECTORSIZE) \50 { log << "Test de la classe ObjectTemplate > " << DESC << "... echec !" << std::endl; return (false); }51 52 static bool CLASS_TEST(ostream& log = std::clog)53 {54 ////////////////////////////////////////////////////////////////////55 T& obj0= ObjectTemplate<T>::CreateObject("toto");56 T& obj1= ObjectTemplate<T>::CreateObject("tata");57 OBJECTTEMPLATE_TEST("Ajout d'objets identifiés au conteneur", 2, 2);58 T& obj2= ObjectTemplate<T>::CreateObject("tata");59 OBJECTTEMPLATE_TEST("Ajout d'objets identifiés déjà existants au conteneur", 2, 2);60 T& obj3= ObjectTemplate<T>::CreateObject();61 OBJECTTEMPLATE_TEST("Ajout d'objets non-identifiés au conteneur", 2, 3);62 ////////////////////////////////////////////////////////////////////63 64 log << "Test ObjectTemplate ... ok !" << std::endl;65 return (true);66 };67 #undef OBJECTTEMPLATE_TEST68 69 49 70 50 virtual ~ObjectTemplate(void) … … 79 59 80 60 private : 81 static StrHashMap<T> CurrListObj; 61 62 static string CurrContext; 63 static HashMap<string, StrHashMap<T> > AllListObj; 82 64 83 65 };// class ObjectTemplate 84 66 85 template <class T> StrHashMap<T> ObjectTemplate<T>::CurrListObj ; 67 template <class T> string ObjectTemplate<T>::CurrContext ; 68 template <class T> HashMap<string, StrHashMap<T> > ObjectTemplate<T>::AllListObj; 86 69 87 70 }// namespace XMLIOSERVER -
XMLIO_V2/dev/dev_rv/xmlio_xml_parser.hpp
r88 r91 1 1 #ifndef __XMLIO_XML_PARSER__ 2 2 #define __XMLIO_XML_PARSER__ 3 4 // Entêtes Poco DOM5 #include <Poco/DOM/DOMParser.h>6 #include <Poco/DOM/Document.h>7 #include <Poco/DOM/Element.h>8 9 #include <Poco/DOM/NamedNodeMap.h>10 11 //#include <Poco/DOM/AutoPtr.h>12 13 // Entêtes Poco SAX14 #include <Poco/SAX/InputSource.h>15 3 16 4 // Utilisation de la STL 17 5 using std::string; 18 6 19 using std::pair;20 using std::vector;21 using std::deque;22 23 using std::istream;24 using std::ostream;25 using std::ostringstream;26 using std::ifstream;27 28 // Utilisation de la biliothÚque POCO29 using Poco::XML::DOMParser;30 using Poco::XML::InputSource;31 32 using Poco::XML::Document;33 using Poco::XML::Node;34 using Poco::XML::Element;35 36 using Poco::XML::NamedNodeMap;37 38 using Poco::HashMap;39 40 7 namespace XMLIOSERVER 41 8 { 42 9 namespace XML 43 { 44 45 typedef HashMap<string, string> THashAttributes; 46 47 // TODO Mettre des auto_ptr ici car gestion de la mémoire lamentable sans. 48 typedef Document* PDocument; 49 typedef Node* PNode; 50 51 class XMLNode 52 { 53 protected : 54 55 XMLNode(const string& _rootName) : rootName(_rootName) { this->cNode = NULL ; } 56 57 public : 58 59 static XMLNode CreateNode(istream& _istr, const string& _rootName = string("simulation")) 60 { 61 XMLNode node(_rootName); 62 63 if ((_istr.good())) 64 { // S'il est possible de lire le flux en entrée ... 65 InputSource src(_istr); 66 DOMParser parser; 67 68 // On parse la source XML et on vérifie que le premier noeud (racine) est du type "Element" 69 // ... et à pour valeur la chaîne rootName. 70 PDocument pDoc = parser.parse(&src); 71 if (!(pDoc->documentElement()->nodeName().compare(_rootName))) 72 { 73 node.cNode = pDoc->documentElement(); 74 node.goToChildElement(); 75 } 76 else 77 { 78 ostringstream oss; 79 oss << "L'élément racine doit avoir pour valeur <" << _rootName << "> (\"" << (pDoc->documentElement()->nodeName()) <<"\" lue)"; 80 throw XMLParsingException(oss.str()); 81 } 82 } 83 else 84 throw XMLIOStreamException("Impossible de lire le flux en entrée pour le parsing XML !"); 85 86 return (node); 87 } 88 89 string getElementName(void) const {return (this->cNode->nodeName());} 90 91 bool goToNextElement(Node* nextElement = 0) 92 { 93 nextElement = (!nextElement)? this->cNode->nextSibling() : nextElement; 94 95 // On parcourt la liste des "siblings" jusqu'à trouver un élément quelconque. 96 for(; ; nextElement = nextElement->nextSibling()) 97 if (nextElement == NULL) break; 98 else if (nextElement->nodeType() == 1) 99 {// Si l'un des noeuds est un élément... 100 this->cNode = nextElement ; 101 return (true); 102 } 103 return (false); 104 } 105 106 bool goToChildElement(void) 107 { 108 // On parcourt la liste des enfants jusqu'à trouver un élément quelconque. 109 if (this->cNode->firstChild()) 110 if (this->goToNextElement(this->cNode->firstChild())) 111 return (true); 112 113 return (false); 114 } 115 116 bool goToParentElement(void) 117 { 118 // Pas de retour au parent si on est à la racine. 119 if (!(this->getElementName().compare(rootName))) return (false); 120 this->cNode = this->cNode->parentNode(); 121 return (true); 122 } 123 124 bool getAttributes(THashAttributes& attributes) const 125 { 126 if(!this->cNode->hasAttributes()) return (false); 127 NamedNodeMap* map = this->cNode->attributes(); 128 129 for(unsigned int i = 0; i< map->length(); i++) 130 attributes[map->item(i)->nodeName()] = map->item(i)->nodeValue(); 131 132 return (true); 133 } 134 135 ~XMLNode() 136 { /* Ne rien faire de plus */ } 137 138 private : 139 140 PNode cNode; 141 string rootName; 142 143 };// class XMLNode 144 145 #include "field.hpp" 146 147 #include "xmlio_group_template.hpp" 148 #include "field_group.hpp" 149 150 #include "context.hpp" 151 10 { 152 11 using XMLIOSERVER::Context; 153 12 … … 155 14 { 156 15 public : 16 157 17 static void Parse(XMLNode& _node) 158 18 { … … 161 21 do { 162 22 // Traitement de l'identifiant 163 _node.getAttributes(attributes); 23 _node.getAttributes(attributes); 24 164 25 if (attributes.end() == attributes.find("id")) 165 { WARNING("L'un des contexts ne sera pas traité car il n'est pas identifié !"); continue; } 26 { WARNING("Le context ne sera pas traité car il n'est pas identifié !"); continue; } 27 28 if( Context::HasObject(attributes["id"])) 29 { WARNING("Le context ne sera pas traité car il existe déjà !"); continue; } 30 31 Context::SetCurrentContext(attributes["id"]); 166 32 Context& context = Context::CreateObject(attributes["id"]); 33 167 34 context.parse(_node); 168 35 attributes.clear(); … … 171 38 } 172 39 173 static bool CLASS_TEST( ostream& log = std::clog)40 static bool CLASS_TEST(const string& file = string("/local/testsuite/iodef_test.xml"), ostream& log = std::clog) 174 41 { 175 ifstream istr( "/local/testsuite/iodef_test.xml" , ifstream::in ); // Modifier le répertoire de test ici42 ifstream istr( file.c_str() , ifstream::in ); 176 43 XMLNode node = XMLNode::CreateNode(istr); 177 44 XMLParser::Parse(node);
Note: See TracChangeset
for help on using the changeset viewer.