Institut numerique

5.3 Le composant Implementation-ScriptCOM.WSC

Nous avons utilisé notre propre modèle pour le développement de son implémentation, c.à.d, le composant implementation-ScriptCOM.WSC est un composant ScripCOM. Ce dernier fournit quinze méthodes représentant les opérations des trois contrôleurs CI, CS et CP.

Nous avons choisi de développer ces contrôleurs sous forme d‟un composant afin de réduire le nombre de ligne qui représente la partie de contrôle dans les composants ScriptCOM développés par les utilisateurs. Comme les fichiers WSC sont dans le format XML, nous avons utilisé la technologie DOM (Document Object Model) pour les manipuler.

Cette technologie, qui est une spécification du W3C, a pour principal rôle de fournir une représentation mémoire d’un document XML sous la forme d’un arbre d’objets et de permettre sa manipulation (parcours, recherche et mise à jour).

Dans le script de ce composant, il y a trois fonctions très importantes et très utilisées par d‟autres fonctions existantes dans ce même script. Nous allons détailler ces fonctions dans ce qui suit, avant la description de l‟implémentation des opérations des trois contrôleurs. La méthode Action_getFunc(action,text,NameFunc) : Cette méthode représente le coeur des fonctions getFunc(), RemoveFunc() et Modif_Func() qui réalise tous des traitements très complexes. Elle possède trois paramètres ; une chaine de caractère action suivant laquelle la méthode choisie la valeur de retour qui peut être la définition de la fonction à rechercher, c.à.d, le code de la fonction qui a comme nom la valeur du paramètre NameFunc.

Aussi, la valeur de retour de cette fonction peut être un tableau indiquant les cordonnés de la fonction à rechercher, c.à.d, le numéro de la ligne et la position de la sous chaine dans cette ligne à partir desquels la définition de la fonction commence, ainsi que le numéro de la ligne qui contient la dernière accolade de la définition de la fonction, plus la position de la sous chaine qui contient cette accolade et la position de cette dernière dans cette sous chaine.

Cette méthode peut retourner aussi la valeur false si la fonction n‟est pas trouvée. Le troisième paramètre est appelé text. Il représente le contenu de la balise

Dans ce cas là, la fonction Action_getFunc() retourne le résultat, c.à.d, la définition ou les cordonnés de la fonction recherchée à la méthode appelante. Si la fonction n‟est pas trouvée, la fonction Action_getFunc() retourne la valeur false. Le parcours du script pour la recherche de la fonction est effectué une seul fois.

De plus, la recherche est très optimisée. La méthode save_change(implementation,FILE) : cette méthode permet de sauvegarder les modifications effectuées sur un fichier chaque fois qu‟une mise à jour est effectuée.

Pour cela, elle possède deux paramètres appelés respectivement implementation et FILE. Le premier indique la nouvelle implémentation et le deuxième indique le chemin du fichier que nous souhaitons modifier. La fonction ouvre le fichier indiqué par le paramètre FILE en écriture et fait par la suite l‟écriture de la chaine indiquée par le paramètre implementation dans ce fichier ouvert.

La méthode Modif_Prop(action,text,NameVar) : Cette méthode représente le coeur des fonctions SetProp() et RemoveProp qui réalise des traitements très complexes concernant la modification et la suppression d‟une propriété.

Elle possède trois paramètres ; une chaine de caractère action suivant laquelle la méthode choisie la valeur à retourner. Cette dernière peut être un tableau indiquant les coordonnées de la propriété à rechercher, c.à.d, le numéro de la ligne et la position de la sous-chaine contenant le caractère „=‟ qui suit la variable que nous souhaitons modifier et qui est indiqué par le paramètre NameVar, ainsi que la position de ce caractère « = » dans cette sous-chaine. Ce tableau indique de plus, le numéro de la ligne et de la sous-chaine contenant le point virgule qui indique la fin de l‟opération de l‟affectation. Il indique aussi la position du point virgule dans cette sous-chaine.

La valeur de retour de cette méthode peut être aussi un tableau indiquant le numéro de la ligne et de la sous-chaine « var » qui précède la variable qui à comme nom la valeur du paramètre NameVar dans cette ligne. Il indique, de plus, le numéro de la ligne et de la sous-chaine (dans cette ligne) qui

contient le point virgule qui indique la fin de l‟opération de l‟affectation plus sa position dans cette sous-chaine. Cette méthode peut retourner aussi la valeur false si la propriété recherchée n‟existe pas dans le fichier. Le paramètre text représente le contenu de la balise

Si le paramètre action a comme valeur « remove » Cette méthode effectue une recherche sur la propriété demandée en éliminant les commentaires d‟une seule ligne et aussi les commentaires multi-ligne et en effectuant la concaténation à chaque fois que le mot clé « var » est trouvé jusqu‟à l‟obtention de la variable demandée. Si c‟est le cas, une autre opération de concaténation et aussi d‟élimination des commentaires est commencée jusqu‟à que le caractère point virgule est trouvé. Dans ce cas là, la méthode retourne le tableau des positions.

Sinon, si le paramètre action a comme valeur « set », la méthode va effectuer une recherche sur la propriété demandée en éliminant toujours les commentaires et en effectuant la concaténation à chaque fois que le mot clé « var » est trouvé jusqu‟à l‟obtention de la variable demandée. Si c‟est le cas, une autre opération de concaténation est commencée jusqu‟à que le caractère „=‟ est trouvé.

Dans ce cas là, la position de ce dernier est enregistré et le parcours est continué jusqu‟à l‟obtention du caractère point virgule. La méthode retourne ici le tableau des positions. Si la propriété n‟est pas trouvée, la méthode retourne la valeur false. Le parcours du script (la variable text) pour la recherche de la variable est effectué une seul fois. De plus, la recherche est très optimisée dans cette fonction.

Dans ce qui suit, nous allons présenter en détail la mise en oeuvre des trois contrôleurs que nous avons proposés ; à savoir, le contrôleur d‟interfaces « CI », le contrôleur de propriétés « CP » et le contrôleur de scripts « CS ».

5.3.1 La description de l’implémentation du contrôleur d’interfaces

Nous présentant dans cette section la description de l‟implémentation des trois méthodes du contrôleur d‟interfaces.
La méthode addMethod(nameMethod,parametre,FILE): cette méthode permet l‟ajout d‟une méthode à une interface. Elle ajouter une balise à la balise . Pour cela, elle possède trois paramètres.

Le premier appelé nameMethod qui représente le nom de la méthode à ajouter, le deuxième appelé parametre indique la liste des paramètres de cette méthode et le troisième appelé FILE précise le chemin du fichier WSC du composant sujet de l‟adaptation. Cette méthode crée en premier un objet xmlDoc qui est une représentation dans la mémoire du fichier de code indiqué par le paramètre FILE. Par la suite, si la variable parametre n‟est pas nulle, un élément est crée pour chaque paramètre de la liste des paramètres. L‟attribut name de chaque élément reçoit un élément de la liste des paramètres.

Par la suite, un autre élément est crée avec la variable nameMethod comme valeur pour son attribut name. L‟étape suivante consiste à ajouter les éléments crées précédemment à l‟élément . Finalement, celui-ci est ajouté à l‟élément via l‟objet xmlDoc et les mises à jour sont sauvegardées.

La méthode getMethod_Names(FILE) : Comme son nom l‟indique elle permet de retourner la liste de toutes les méthodes d‟une interface exposée par le composant. Cette méthode a comme paramètre le chemin du fichier WSC du composant concerné par l‟opération de l‟adaptation. Elle

permet de parcourir tous les sous-éléments de l‟élément et d‟enregistrer la valeur de leurs attributs name dans un tableau dynamique. Finalement, elle retourne ce tableau.

La méthode removeFunction(action,nameFunc,FILE) : Comme son nom l‟indique, elle permet la suppression d‟une méthode. Pour cela, elle possède trois paramètres. Le premier représente l‟action à entreprendre, c.à.d, la suppression de la déclaration de la fonction et de sa définition, ou la suppression seulement de la définition de la fonction, ou encore, la suppression de toutes les déclarations et les définitions des fonctions existantes dans le fichier du code.

Le deuxième paramètre représente le nom de la fonction à supprimer, et le troisième paramètre précise le chemin du fichier WSC du composant sujet à l‟adaptation. Cette méthode crée comme toutes les autres méthodes un objet xmlDoc, qui est une représentation dans la mémoire du fichier de code. Par la suite, cet objet est utilisé pour récupérer le contenu de la balise

Si celle-ci est égale à « toutes», ça conduit à une opération de recherche de la fonction à supprimer dans les sous-éléments de l‟élément . Une fois cette dernière est trouvée, elle sera supprimée. Si le paramètre action est égal à « ALL », ça conduit à la suppression de toutes les déclarations et les définitions des fonctions existantes dans le fichier. Si le paramètre action est différent au deux valeur « tous » et « ALL », dans ce cas là, seulement la fonction indiquée par le paramètre nameFunc est recherchée dans le script par la fonction Action_getFunc().

Cette fonction retourne les coordonnées de la fonction recherchée. Par la suite, ces coordonnées, ainsi que la variable script, vont être transmissent à la fonction set_value_remove() qui va effectuer la modification du script, c.à.d, la suppression de la fonction indiquée par le paramètre nameFunc. Cette fonction retourne une chaine de caractères qui représente le nouvel script. Finalement, et dans tout les cas, les mises à jour sont sauvegardés via la fonction save_change().

5.3.2 La description de l’implémentation du contrôleur de propriétés

Nous présentons dans cette section la description de l‟implémentation des quatre méthodes du contrôleur de propriétés. La méthode getProperties(FILE) : Comme son nom l‟indique, elle permet de retourner la liste de propriétés exposées par le composant. Elle a comme paramètre le chemin du fichier WSC du composant concerné par l‟opération de l‟adaptation. Cette méthode parcoure tous les sous-éléments de l‟élément et d‟enregistre la valeur de leurs attributs name dans un tableau dynamique. A la fin, elle retourne ce tableau.

La méthode addProp(name,type,value,FILE): Cette méthode permet l‟ajout d‟une propriété à un composant. Pour cela, elle possède quatre paramètres. Le premier représente le nom de la propriété à ajouter, le deuxième représente le type de cette propriété. Ce dernier peut prendre les valeurs « get », « set » ou « get-set ». Il permet d‟indiquer respectivement si la propriété est en lecture seule, en écriture seule ou encore en lecture et écriture.

Le paramètre type prend par défaut la valeur « get » car l‟accès à chaque propriété doit être fait par une méthode. Le troisième paramètre indique la valeur de la propriété qui peut être nulle (chaine vide), alors que le dernier indique le chemin du fichier WSC du composant concerné par l‟opération de l‟adaptation.

Cette méthode récupère en premier lieu le contenu de la balise

La deuxième opération de cette méthode est la création d‟un nouvel élément avec le paramètre name comme valeur pour son attribut name. Puis, elle ajoute à cet élément un élément ou ou les deux selon la valeur du paramètre type. Après ces traitements, le nouvel élément est ajouté à l‟élément .

A la fin, les mises à jour effectuées sont sauvegardées via la méthode save_change(). La méthode setProp(nameProp,value,FILE) : Comme son nom l‟indique, elle permet de faire la modification de la valeur d‟une propriété. Cette méthode possède trois paramètres ; nameProp qui indique le nom de la propriété sujet de la modification, value qui indique la nouvelle valeur de la propriété à modifier et FILE qui précise le chemin du fichier de code.

Comme toutes les autres méthodes, celle-ci crée un objet xmlDoc qui représente une représentation en mémoire du fichier indiqué par le paramètre FILE. Par la suite, elle utilise cet objet pour effectuer une recherche sur la propriété nameProp. Si cette dernière n‟existe pas, elle retourne la valeur false. Sinon, elle récupère le contenu de la balise

Cette dernière retourne un tableau dont les éléments représentent les coordonnées de la variable qui correspond à la propriété indiquée par le paramètre nameProp.

Par la suite, le contenu de la balise

Le premier représente le nom de la propriété à supprimer et le deuxième précise le chemin du fichier WSC du composant sujet de l‟adaptation. Cette méthode crée comme toutes les autres méthodes un objet xmlDoc, qui est une représentation dans la mémoire du fichier de code. Celle-ci est utilisée par la suite, pour récupérer le contenu de la balise

Si celle-ci n‟existe pas, la méthode retourne la valeur false. Sinon, la fonction Modif_prop() est appelée avec la valeur « remove » comme valeur pour son paramètre action, plus la variable script pour son paramètre text et nameProp pour son paramètre nameProp, ainsi qu‟une chaine vide pour son paramètre value, car, on ne cherche pas à modifier la propriété mais à la supprimer.

Cette méthode retourne les coordonnées de la propriété indiquée par le paramètre nameProp. Ces dernier vont être transmis à la fonction set_values() qui va effectuer la suppression de la propriété dans le script. Par la suite, pour chaque méthode de manipulation de la propriété (get ou set ou les deux), les fonctions Action_getFunc() et set_value_remove() vont être appelées pour rechercher cette (ces) méthode(s) et la (les) supprimée(s). Finalement, et dans tout les cas, les mises à jour sont sauvegardées via la fonction save_change().

5.3.3 La description de l’implémentation du contrôleur de script

Nous présentons dans cette section la description de l‟implémentation des sept méthodes du contrôleur de script. La méthode getScrtip(FILE) : Cette méthode permet de retourner le script du composant. Elle a comme paramètre le chemin du fichier WSC du composant concerné par l‟opération de l‟adaptation. Elle permet, en utilisant la technologie DOM, de retourner le contenu de la balise

Par la suite, elle sélectionne le contenu de la balise

Cette méthode crée dans la première étape un objet xmlDoc qui représente un élément racine du fichier de code. Par la suite, elle remplace le contenu de la balise

La méthode addFuncIMP(function_imp,FILE) : Cette méthode permet d‟ajouter une définition d‟une fonction au script du composant. Pour cela, elle possède deux paramètres. Le premier est une chaine de caractères qui représente la définition de la fonction à ajouter, alors que le deuxième indique une chaine de caractères qui représente le chemin du fichier WSC du composant sujet de l‟adaptation.

Cette méthode crée en premier lieu un objet xmlDoc qui représente un élément racine du fichier de code, par la suite, elle récupère le contenu de la balise

La méthode addVarIMP(nomVar,value,FILE) : Elle permet d‟ajouter une déclaration d‟une variable au script du composant. Pour cela, elle possède trois paramètres. Le premier représente le nom de la variable à ajouter, le deuxième indique la valeur de cette variable, alors que le troisième précise le chemin du fichier WSC du composant concerné par l‟opération de l‟adaptation.

Cette méthode fait en premier la création d‟un objet xmlDoc qui représente un élément racine du fichier de code. Par la suite, elle sélectionne la balise

La méthode getFunc(nameFunc,FILE) : Comme son l‟indique, elle permet de retourner la définition d‟une fonction. Pour cela, elle possède deux paramètres. Le premier représente le nom de la fonction à retourner et le deuxième précise le chemin du fichier WSC du composant. Cette méthode crée un objet xmlDoc qui est une représentation dans la mémoire du fichier de code.

Par la suite, et en utilisant cet objet, elle récupère le contenu de la balise

La méthode Modif_Func(nameFunc,newFunc,FILE) : Comme son nom l‟indique, elle permet de remplacer la définition d‟une méthode par une autre. Cette méthode possède trois paramètres. Le premier représente le nom de la fonction à modifier, le deuxième représente la nouvelle définition de celle-ci et le troisième précise le chemin du fichier WSC du composant que nous souhaitons adapté. Cette méthode crée, comme toutes les autres méthodes, un objet xmlDoc, qui est une représentation dans la mémoire du fichier de code.

Par la suite, elle utilise celui-ci pour récupérer le contenu de la balise

Sinon, les éléments du tableau retournés par la fonction Action_getFunc() vont être transmis à la fonction set_value_remove(), avec aussi le paramètre newFunc et la variable script. Cette fonction est la responsable de la réalisation de l‟opération de modification de la fonction précisée.

Elle effectue pour cela des opérations de lecture de la chaine script, plus aussi, des opérations de concaténation selon les paramètres de position de la fonction. set_value_remove() retourne le nouveau script qui remplace le script précédent du fichier de code. Finalement, la fonction save_change() est appelée par la méthode Modif_Func() pour sauvegarder les mises à jour effectuées.

Page suivante : 5.4. L’implémentation des mécanismes de maintien de la cohérence des applications sujets à des adaptations dynamiques

Retour au menu : UTILISATION DES SCRIPTS POUR LE DEVELOPPEMENT DES COMPOSANTS COM ADAPTABLES