#pragma once #include "Array.h" #include "ReferenceCounter.h" #include namespace Framework { class Text; namespace XML { class Editor; //! Ein XML element der Form \code text oder childs \endcode class Element : public virtual ReferenceCounter { private: RCArray< Element >* children; RCArray< Text >* attributes; RCArray< Text >* attributeValues; Text* name; Text* text; Element* parent; public: //! Erstellt ein XML Element //! \param string entweder der name des Elements oder ein XML Text der geparsed werden soll DLLEXPORT Element(Text string); //! Erstellt ein XML Element //! \param string entweder der name des Elements oder ein XML Text der geparsed werden soll //! \param zParent Ein Zeiger auf das eltern element (ohne erhöhten reference Counter) DLLEXPORT Element(Text string, Element* zParent); DLLEXPORT ~Element(); //! ändert ein attribut oder fügt eines hinzu //! \param attribut Der Name des Attributes //! \param value Der Wert des Attributes DLLEXPORT void setAttribute(Text attribut, Text value); //! entfernt ein attribut //! \param attribut Der Name des Attributes DLLEXPORT void removeAttribute(Text attribut); //! fügt ein child hinzu //! \param child Das neue Child Element DLLEXPORT void addChild(Element* child); //! fügt ein child hinzu //! \param child Das neue Child Element DLLEXPORT void addChildAtFront(Element* child); //! entfernt ein child //! \param zChild das zu entfernende Child DLLEXPORT void removeChild(Element* child); //! entfernt das i-te child //! \param i der Index des childs (bei 0 beginnend) DLLEXPORT void removeChild(int i); //! entfernt alle childs DLLEXPORT void removeAllChilds(); //! entfernt eine Liste mit childs //! \param childs alle Childs die entfernt werden sollen DLLEXPORT void removeChilds(RCArray* childs); //! entfernt dieses Element vom Eltern element DLLEXPORT void remove(); //! setzt den Text in dem Element falls es keine childs gibt //! \param text dert Text DLLEXPORT void setText(Text text); //! gibt den Text im Element zurück DLLEXPORT Text getText() const; //! gibt die Anzahl der Childs zurück DLLEXPORT int getChildCount() const; //! gibt das i-te child zurück DLLEXPORT Element* getChild(int i) const; //! gibt das i-te child zurück (ohne erhöhten reference Counter) DLLEXPORT Element* zChild(int i) const; //! gibt das parent element zurück DLLEXPORT Element* getParent() const; //! gibt das parent element zurück (ohne erhöhten reference Counter) DLLEXPORT Element* zParent() const; //! gibt einen iterator zurück mit dem durch alle childs iteriert werden kann DLLEXPORT Iterator< Element* > getChilds() const; //! gibt einen selector zurück der alle childs beinhaltet DLLEXPORT Editor selectChildren() const; //! gibt eine Liste mit childs zurück, die einen bestimmten Namen haben //! \param name der name der Childs DLLEXPORT Editor selectChildsByName(Text name) const; //! gibt eine Liste mit childs zurück, die ein bestimmtes Attribut haben //! \param attribute der name des Attributes DLLEXPORT Editor selectChildsByAttribute(Text attribute) const; //! gibt eine Liste mit childs zurück, die ein bestimmtes Attribut mit einem bestimmten wert haben //! \param attribute der name des Attributes //! \param value der Wert des Attributes DLLEXPORT Editor selectChildsByAttribute(Text attribute, Text value) const; //! gibt 1 zurück, falls ein Attribut Name existiert, 0 sonnst DLLEXPORT bool hasAttribute(Text name) const; //! gibt die Anzahl der Attribute zurück DLLEXPORT int getAttributeCount() const; //! gibt den Namen des i-ten Attributes zurück DLLEXPORT Text getAttributeName(int i) const; //! gibt den Wert des i-ten Attributes zurück DLLEXPORT Text getAttributeValue(int i) const; //! gibt den Wert eines Attributes zurück //! \param attribut Der Name des Attributes DLLEXPORT Text getAttributeValue(Text attribut) const; //! gibt einen iterator zurück mit dem durch alle Attribut Namen iteriert werden kann DLLEXPORT Iterator< Text* > getAttributeNames() const; //! gibt einen iterator zurück mit dem durch alle Attribut Werte iteriert werden kann DLLEXPORT Iterator< Text* > getAttributeValues() const; //! gibt den Namen des Elementes zurück zurück DLLEXPORT Text getName() const; //! erzeugt einen XML Text der dieses Element und alle childs beinhaltet DLLEXPORT Text toString() const; //! Erzeugt eine Kopie ohne referenzen auf dieses objekt DLLEXPORT Element* dublicate() const; friend Editor; }; //! Ein XML Editor der immer gleich mehrere Elemente editieren kann class Editor : public virtual ReferenceCounter { private: RCArray< Element >* elements; public: //! Erzeugt einen neuen XML Editor mit einer Liste von Objekten die editiert werden sollen DLLEXPORT Editor(RCArray< Element >* elements); DLLEXPORT Editor(const Editor& e); DLLEXPORT ~Editor(); //! ändert ein attribut oder fügt eines hinzu (auf allen elementen in der Liste) //! \param attribut Der Name des Attributes //! \param value Der Wert des Attributes DLLEXPORT void setAttribute(Text attribut, Text value); //! entfernt ein attribut (auf allen elementen in der Liste) //! \param attribut Der Name des Attributes DLLEXPORT void removeAttribute(Text attribut); //! fügt ein child hinzu (auf allen elementen in der Liste) //! \param child Das neue Child Element DLLEXPORT void addChild(Element* child); //! entfernt ein child (auf allen elementen in der Liste) //! \param zChild das zu entfernende Child DLLEXPORT void removeChild(Element* child); //! entfernt das i-te child (auf allen elementen in der Liste) //! \param i der Index des childs (bei 0 beginnend) DLLEXPORT void removeChild(int i); //! entfernt alle childs (auf allen elementen in der Liste) DLLEXPORT void removeAllChilds(); //! entfernt eine Liste mit childs (auf allen elementen in der Liste) //! \param childs alle Childs die entfernt werden sollen DLLEXPORT void removeChilds(RCArray* childs); //! entfernt dieses Element vom Eltern element (auf allen elementen in der Liste) DLLEXPORT void remove(); //! setzt den Text in dem Element falls es keine childs gibt (auf allen elementen in der Liste) //! \param text dert Text DLLEXPORT void setText(Text text); //! Gibt ein Iterator durch alle Elemente zurück DLLEXPORT Iterator begin(); //! Gibt das ende des iterators zurück DLLEXPORT Iterator end(); //! gibt einen selector zurück der alle childs beinhaltet DLLEXPORT Editor selectChildren() const; //! gibt einen selector zurück der alle parents beinhaltet DLLEXPORT Editor selectParents() const; //! gibt eine Liste mit elementen zurück, die einen bestimmten Namen haben //! \param name der name der Childs DLLEXPORT Editor whereNameEquals(Text name) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes child haben //! \param name der name des childs DLLEXPORT Editor whereChildWithNameExists(Text name) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes child haben //! \param attribute der name des attributes DLLEXPORT Editor whereChildWithAttributeExists(Text attribute) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes child haben //! \param attribute der name des attributes //! \param value der Wert des Attributes DLLEXPORT Editor whereChildWithAttributeExists(Text attribute, Text value) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes Attribut haben //! \param attribute der name des Attributes DLLEXPORT Editor whereAttributeExists(Text attribute) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes Attribut mit einem bestimmten wert haben //! \param attribute der name des Attributes //! \param value der Wert des Attributes DLLEXPORT Editor whereAttributeEquals(Text attribute, Text value) const; //! Gibt einen Editor zurück welcher nurnoch die Elemente enthält die nicht in e sind //! \param e Ein Editor mit elementen die nicht enthalten sein sollen DLLEXPORT Editor without(Editor e) const; //! Ruft eine funktion für jedes Element auf (nimmt als argument ein Element objekt ohne erhöhten reference Counter) //! \param f die funktion DLLEXPORT void forEach(std::function< void(Element*) > f) const; //! gibt 1 zurück, wenn mindestens ein Element gefunden wurde DLLEXPORT bool exists() const; //! gibt die anzahl der ausgewählten elemente zurück DLLEXPORT int getSize() const; }; } }