• Aucun résultat trouvé

6.2 Le point de vue de l'utilisateur

6.2.1 Décrire un état

Les éléments de code que nous allons présenter ici sont destinés à être, à terme, générés par un outil d'intégration construit autour du Fill-In-The- Gaps Toolkit.

Pour décrire un état il faut disposer des trois éléments suivants :

 une classe décrivant l'architecture de l'état : ses données propres, ses sous-états, et ses ensembles d'états duplicata ;

 une classe fabrique, permettant au framework de créer des instances de la classe précédente ;

 un texte de conguration qui permettra de paramétrer l'utilisation de la fabrique.

Nous allons décrire dans cette partie les responsabilités de ces diérents élé- ments, et les illustrer par des exemples.

6.2.1.1 Classe de description d'un état

Un état est une instance d'une classe héritant de la classe abstraite State, ne l'étendant qu'avec des attributs et leurs accesseurs. Les paramètres du

constructeur de la classe sont à passer au constructeur de la super-classe, et seront fournis par la fabrique.

Les attributs représentant les données propres de l'état sont dans l'implé- mentation actuelle les types Java int, boolean et String.

Les autres attributs d'un état sont ses sous-états, ou des ensembles d'états duplicata.

Exemple de classe étendant la classe State :

public class MyState extends State{ private int x ;

private int y ;

private MySubState subState ;

public MyState(String key, DataAccessList dataAccessList,

String subStatesKeys ,StateAccessList stateSetterList , String datasInitialization , String replicationKeys , String behaviorKeys , String substateInitialization , StateFactory stateFactory){

super(key, dataAccessList, subStatesKeys , stateSetterList , datasInitialization , replicationKeys , behaviorKeys , substateInitialization, stateFactory) ;

}

public synchronized int getX() { return x;

}

public synchronized void setX(int x) { this.x = x;

}

public synchronized int getY() { return y;

}

public synchronized void setY(int y) { this.y = y;

}

public synchronized MySubState getSubState() { return subState;

}

6.2. LE POINT DE VUE DE L'UTILISATEUR 159

this.subState = subState; }

}

6.2.1.2 La fabrique d'états

An d'instancier un état, le framework utilise des fabriques dédiées, implé- mentant l'interface StateFactory. Cette organisation correspond au patron de conception classique Fabrique Abstraite décrite dans [46]. Il y a donc une fabrique par classe de description d'états.

La méthode de création de l'état prend en paramètres les éléments du chier de conguration décrivant comment l'état doit être créé et qui com- prend :

 l'identication de l'instance d'état créée dans l'arborescence de l'appli- cation ;

 la liste des identiants de ses données propres et de leurs valeurs d'ini- tialisation ;

 la liste des identiants de ses modèles de réplication et des ordonnan- çables comportementaux qui lui sont associés ;

 la liste des identiants de ses sous-états, et de ceux d'entre eux qui doivent être instanciés dès la création de l'état ;

Ces éléments sont utilisés pour construire les paramètres du constructeur de la classe State.

L'objectif de la fabrique est de fournir à la carte de l'application, un des composants du framework que nous étudierons plus loin, la dénition des sous-états et des ordonnançables de l'état créé.

Il est également de faire le lien entre les identiants des composants d'un état (ses données propres et ses sous-états) et les accesseurs dénis pour ces mêmes composants dans la classe le représentant.

Pour ce faire, la méthode de création de la fabrique doit constituer des associations entre les clés des composants et les méthodes qui permettent d'y accéder. Ce sont les paramètres DataAccessList dataAccessList et StateAccessList stateSetterList du constructeur de la classe State.

Par exemple, la méthode de création de la fabrique de l'état MyState comportera donc le code suivant, la classe DataAccess dénissant l'associa-

tion de l'identiant d'une donnée propre pour nos types de base avec ses accesseurs, et la classe StateAccessInState dénissant l'association d'un composant d'état avec ses accesseurs.

Exemple de créations d'associations entre les attributs d'un état et ses accesseurs dans la fabrique d'un état :

DataAccessList dataAccessList = new DataAccessList() ; // association de l'identifiant de l'attribut x de type int // avec ses accesseurs

dataAccessList.put(idX, new DataAccess(DataAccess.INTEGER_TYPE){ protected void setData(State state, int value) {

((MyState)state).setX(value) ; }

protected int getInt(State state){ return ((MyState)state).getX() ; }

}) ;

// association de l'identifiant de l'attribut y de type int // avec ses accesseurs

dataAccessList.put(idY, new DataAccess(DataAccess.INTEGER_TYPE){ protected void setData(State state, int value) {

((MyState)state).setY(value) ; }

protected int getInt(State state){ return ((MyState)state).getY() ; }

}) ;

StateAccessList stateSetterList = new StateAccessList() ; // association de l'identifiant de l'attribut subState de type // MySubState avec ses accesseurs

stateSetterList.put(idSubstate,new StateAccessInState() { public StateComponent getState(StateCreationObserver

stateCreationObserver) {

return ((MyState)stateCreationObserver).getSubState(); }

public void setState(StateCreationObserver

6.2. LE POINT DE VUE DE L'UTILISATEUR 161

((MyState)stateCreationObserver).setSubState((MySubState) state) ; }

}) ;

Ces associations seront ensuite utilisées par le framework pour répercuter les changements d'état local de l'application lorsqu'elles proviennent d'un hôte distant, ou lors de la création des sous-états.

Le code des fabriques d'états doit également être à terme généré par un environnement de développement futur.

6.2.1.3 Paramétrer l'utilisation de la fabrique d'un état à l'aide d'un texte de conguration :

Les paramètres utilisés par la méthode de création de la fabrique d'un état sont issus d'un chier de conguration fourni par l'utilisateur. Nous en donnons un exemple qui correspond à ceux que nous avons présentés pour la classe de description de l'état et sa fabrique :

STATE stateKey stateFactoryKey

KEYSUBSTATE substateKey KEYDATA xKey yKey DATAINITIALIZE xKey.100.int yKey.200.int

SUBSTATEINITIALIZE substateKey

REPLICATIONMODELS stateChangedReplication Ce texte de conguration décrit un état :

 dont l'identiant est stateKey, et dont l'identiant de la fabrique abs- traite est stateFactoryKey ;

 qui a comme attributs le sous-état d'identiant substateKey et les données propres d'identiants xKey et yKey ;

 dont les données propres sont initialisées à la création de l'état par les valeurs respectives 100 et 200 et sont de type int ;

 dont le sous-état d'identiant substateKey devra être créé également lors de la création de l'état stateKey ;

 qui a un modèle de réplication, dont l'identiant est stateChangeReplication