#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 // string: entweder der name des Elements oder ein XML Text der geparsed werden soll __declspec( dllexport ) Element( Text string ); // Erstellt ein XML Element // string: entweder der name des Elements oder ein XML Text der geparsed werden soll // 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 // attribut: Der Name des Attributes // value: Der Wert des Attributes __declspec( dllexport ) void setAttribute( Text attribut, Text value ); // entfernt ein attribut // attribut: Der Name des Attributes __declspec( dllexport ) void removeAttribute( Text attribut ); // fügt ein child hinzu // child: Das neue Child Element __declspec( dllexport ) void addChild( Element *child ); // entfernt ein child // zChild: das zu entfernende Child __declspec( dllexport ) void removeChild( Element *child ); // entfernt das i-te child // 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 // 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 // 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 // name: der name der Childs __declspec( dllexport ) Editor selectChildsByName( Text name ) const; // gibt eine Liste mit childs zurück, die ein bestimmtes Attribut haben // 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 // attribute: der name des Attributes // 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 // 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) // attribut: Der Name des Attributes // value: Der Wert des Attributes __declspec( dllexport ) void setAttribute( Text attribut, Text value ); // entfernt ein attribut (auf allen elementen in der Liste) // attribut: Der Name des Attributes __declspec( dllexport ) void removeAttribute( Text attribut ); // fügt ein child hinzu (auf allen elementen in der Liste) // child: Das neue Child Element __declspec( dllexport ) void addChild( Element *child ); // entfernt ein child (auf allen elementen in der Liste) // zChild: das zu entfernende Child __declspec( dllexport ) void removeChild( Element *child ); // entfernt das i-te child (auf allen elementen in der Liste) // 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) // 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) // 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 // name: der name der Childs __declspec( dllexport ) Editor whereNameEquals( Text name ) const; // gibt eine Liste mit elementen zurück, die ein bestimmtes child haben // name: der name des childs __declspec( dllexport ) Editor whereChildWithNameExists( Text name ) const; // gibt eine Liste mit elementen zurück, die ein bestimmtes child haben // attribute: der name des attributes __declspec( dllexport ) Editor whereChildWithAttributeExists( Text attribute ) const; // gibt eine Liste mit elementen zurück, die ein bestimmtes child haben // attribute: der name des attributes // 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 // 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 // attribute: der name des Attributes // 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 // 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) // f: die funktion __declspec( dllexport ) void forEach( std::function< void( Element * ) > f ) const; }; } }