#pragma once #include "Array.h" #include namespace Framework { class Text; namespace XML { class Editor; //! Ein XML element der Form text oder childs class Element { private: int ref; 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 __declspec( 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) __declspec( dllexport ) Element( Text string, Element *zParent ); __declspec( dllexport ) ~Element(); //! ändert ein attribut oder fügt eines hinzu //! \param attribut Der Name des Attributes //! \param value Der Wert des Attributes __declspec( dllexport ) void setAttribute( Text attribut, Text value ); //! entfernt ein attribut //! \param attribut Der Name des Attributes __declspec( dllexport ) void removeAttribute( Text attribut ); //! fügt ein child hinzu //! \param child Das neue Child Element __declspec( dllexport ) void addChild( Element *child ); //! fügt ein child hinzu //! \param child Das neue Child Element __declspec( dllexport ) void addChildAtFront( Element *child ); //! entfernt ein child //! \param zChild das zu entfernende Child __declspec( dllexport ) void removeChild( Element *child ); //! entfernt das i-te child //! \param i der Index des childs (bei 0 beginnend) __declspec( dllexport ) void removeChild( int i ); //! entfernt alle childs __declspec( dllexport ) void removeAllChilds(); //! entfernt eine Liste mit childs //! \param childs alle Childs die entfernt werden sollen __declspec( dllexport ) void removeChilds( RCArray *childs ); //! entfernt dieses Element vom Eltern element __declspec( dllexport ) void remove(); //! setzt den Text in dem Element falls es keine childs gibt //! \param text dert Text __declspec( dllexport ) void setText( Text text ); //! gibt den Text im Element zurück __declspec( dllexport ) Text getText() const; //! gibt die Anzahl der Childs zurück __declspec( dllexport ) int getChildCount() const; //! gibt das i-te child zurück __declspec( dllexport ) Element *getChild( int i ) const; //! gibt das i-te child zurück (ohne erhöhten reference Counter) __declspec( dllexport ) Element *zChild( int i ) const; //! gibt das parent element zurück __declspec( dllexport ) Element *getParent() const; //! gibt das parent element zurück (ohne erhöhten reference Counter) __declspec( dllexport ) Element *zParent() const; //! gibt einen iterator zurück mit dem durch alle childs iteriert werden kann __declspec( dllexport ) Iterator< Element* > getChilds() const; //! gibt einen selector zurück der alle childs beinhaltet __declspec( dllexport ) Editor selectChildren() const; //! gibt eine Liste mit childs zurück, die einen bestimmten Namen haben //! \param name der name der Childs __declspec( dllexport ) Editor selectChildsByName( Text name ) const; //! gibt eine Liste mit childs zurück, die ein bestimmtes Attribut haben //! \param attribute der name des Attributes __declspec( 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 __declspec( dllexport ) Editor selectChildsByAttribute( Text attribute, Text value ) const; //! gibt 1 zurück, falls ein Attribut Name existiert, 0 sonnst __declspec( dllexport ) bool hasAttribute( Text name ) const; //! gibt die Anzahl der Attribute zurück __declspec( dllexport ) int getAttributeCount() const; //! gibt den Namen des i-ten Attributes zurück __declspec( dllexport ) Text getAttributeName( int i ) const; //! gibt den Wert des i-ten Attributes zurück __declspec( dllexport ) Text getAttributeValue( int i ) const; //! gibt den Wert eines Attributes zurück //! \param attribut Der Name des Attributes __declspec( dllexport ) Text getAttributeValue( Text attribut ) const; //! gibt einen iterator zurück mit dem durch alle Attribut Namen iteriert werden kann __declspec( dllexport ) Iterator< Text* > getAttributeNames() const; //! gibt einen iterator zurück mit dem durch alle Attribut Werte iteriert werden kann __declspec( dllexport ) Iterator< Text* > getAttributeValues() const; //! gibt den Namen des Elementes zurück zurück __declspec( dllexport ) Text getName() const; //! erzeugt einen XML Text der dieses Element und alle childs beinhaltet __declspec( dllexport ) Text toString() const; //! Erzeugt eine Kopie ohne referenzen auf dieses objekt __declspec( dllexport ) Element *dublicate() const; //! erhöht den reference Counter um 1 und gibt this zurück __declspec( dllexport ) Element *getThis(); //! verringert den reference Counter um 1 und gibt 0 zurück __declspec( dllexport ) Element *release(); friend Editor; }; //! Ein XML Editor der immer gleich mehrere Elemente editieren kann class Editor { private: RCArray< Element > *elements; public: //! Erzeugt einen neuen XML Editor mit einer Liste von Objekten die editiert werden sollen __declspec( dllexport ) Editor( RCArray< Element > *elements ); __declspec( dllexport ) Editor( const Editor &e ); __declspec( 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 __declspec( dllexport ) void setAttribute( Text attribut, Text value ); //! entfernt ein attribut (auf allen elementen in der Liste) //! \param attribut Der Name des Attributes __declspec( dllexport ) void removeAttribute( Text attribut ); //! fügt ein child hinzu (auf allen elementen in der Liste) //! \param child Das neue Child Element __declspec( dllexport ) void addChild( Element *child ); //! entfernt ein child (auf allen elementen in der Liste) //! \param zChild das zu entfernende Child __declspec( 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) __declspec( dllexport ) void removeChild( int i ); //! entfernt alle childs (auf allen elementen in der Liste) __declspec( dllexport ) void removeAllChilds(); //! entfernt eine Liste mit childs (auf allen elementen in der Liste) //! \param childs alle Childs die entfernt werden sollen __declspec( dllexport ) void removeChilds( RCArray *childs ); //! entfernt dieses Element vom Eltern element (auf allen elementen in der Liste) __declspec( dllexport ) void remove(); //! setzt den Text in dem Element falls es keine childs gibt (auf allen elementen in der Liste) //! \param text dert Text __declspec( dllexport ) void setText( Text text ); //! Gibt ein Iterator durch alle Elemente zurück __declspec( dllexport ) Iterator getIterator(); //! gibt einen selector zurück der alle childs beinhaltet __declspec( dllexport ) Editor selectChildren() const; //! gibt einen selector zurück der alle parents beinhaltet __declspec( dllexport ) Editor selectParents() const; //! gibt eine Liste mit elementen zurück, die einen bestimmten Namen haben //! \param name der name der Childs __declspec( dllexport ) Editor whereNameEquals( Text name ) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes child haben //! \param name der name des childs __declspec( dllexport ) Editor whereChildWithNameExists( Text name ) const; //! gibt eine Liste mit elementen zurück, die ein bestimmtes child haben //! \param attribute der name des attributes __declspec( 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 __declspec( 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 __declspec( 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 __declspec( 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 __declspec( 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 __declspec( dllexport ) void forEach( std::function< void( Element * ) > f ) const; }; } }