#pragma once #include #include "Array.h" #include "Maybe.h" #include "RCPointer.h" #include "ReferenceCounter.h" 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* children; RCArray* attributes; RCArray* 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; /// /// returns the index of the zChild in the list of children or -1 if /// zChild is not a child of this element /// /// the child element to search for /// the index of zChild in the list of children or -1 if /// zChild is not a child of this element DLLEXPORT int getChildIndex(Element* zChild) 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 ArrayIterator getChilds() const; //! gibt einen Editor für dieses Element zurück DLLEXPORT Editor select(); //! 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 ArrayIterator getAttributeNames() const; //! gibt einen iterator zurück mit dem durch alle Attribut Werte //! iteriert werden kann DLLEXPORT ArrayIterator 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* elements; public: //! Erzeugt einen neuen XML Editor mit einer Liste von Objekten die //! editiert werden sollen DLLEXPORT Editor(RCArray* elements); DLLEXPORT Editor(const Editor& e); DLLEXPORT ~Editor(); /// /// returns the first element in the list /// /// the first element of a list or an empty object if no /// elements are present DLLEXPORT Maybe> getFirstElement() const; //! ä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 ArrayIterator begin(); //! Gibt das ende des iterators zurück DLLEXPORT ArrayIterator end(); //! Gibt einen selector zurück der alle elemente beinhaltet die in //! diesem selector vorkommen und rekursiv alle Kinder der elemente //! Enthält DLLEXPORT Editor selectAllElements(); //! 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 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; //! assignment operator DLLEXPORT Editor& operator=(const Editor& e); }; } // namespace XML } // namespace Framework