#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 getIterator(); //! 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; }; } }