• Aucun résultat trouvé

UPnP Device Generator : génération de code de pilotes raffinés

L'outil UPnP Device Generator implémente les exigences techniques décrites dans le RFP OSGi [2006-3] et les concepts développés dans la section Chapitre V.4.3. L'outil permet de générer des interfaces Java spécifiques ("Generated Interface" de la Figure 78) à partir d'une description XML UPnP. Les sections suivantes introduisent la projection des différentes définitions UPnP sur les éléments de programmation Java.

Figure 78 Génération de code d'interfaces Java à partir de descriptions UPnP 4.3.1 Projection des structures UPnP sur les structures Java

L'architecture UPnP [UPnP06] définit 3 entités distinctes : l'Equipement (Device), le Service, et le Point de contrôle (Control Point). L'Equipement embarque des Services et d'autres Equipements. Les Services sont des listes d'actions et de variables d'états. Le Point de Contrôle invoque les actions et souscrit à la notification des changements de variables

d'états des services (cf. Chapitre III.1.1.1). Le Tableau 6 montre les équivalences faites par l'outil UPnP Device Generator entre structures UPnP et structures Java/OSGi.

Tableau 6 Equivalence entre structures UPnP et structures Java/OSGi

UPnP Java/OSGi

Equipement du type:

urn:schemas-upnp-org:device:<DeviceType>:V

Objet Java implémentant l'interface Java <Device-Type>Device et enregistré dans le registre de service. Propriétés de l'Equipement (paires attribut-valeur) Propriétés (paires attribut-valeur) de service OSGi attachées

à l'objet enregistré avec l'interface <DeviceType>Device. Liste de services décrite dans la description de

l'Equipement aux types :

urn:schemas-upnp-org:device:<ServiceType>:V

Liste de méthodes get<ServiceType> dans l'interface <DeviceType>Device.

Service du type :

urn:schemas-upnp-org:service:<ServiceType>:V

Objet Java implémentant l'interface Java <Service-Type>Service et enregistré dans le registre de service. Point de contrôle découvrant et contrôlant les

équi-pements du type

urn:schemas-upnp-org:device:<DeviceType>:V et/ou les services du type urn:schemas-upnp-org:service:<ServiceType>:V.

Composant de service (modèle Declarative Services) de-mandeur des services OSGi à l'interface <Device-Type>Device et/ou l'interface <ServiceType>Service.

4.3.2 Projection des types UPnP sur les types Java

Une projection naturelle des types d'arguments UPnP est proposée par la spécification OSGi UPnP Device Service [OSGi05]. La spécification propose l'utilisation d'objets mais l'utilisation de types Java primitifs semble plus simple (cf. Tableau 7).

Tableau 7 Equivalence entre types UPnP et types Java

UPnP Java/OSGi

ui1, ui2, i1, i2, i4, int int.class

ui4, time, time.tz long.class

r4, float float.class

r8, number, fixed.14.4 double.class

char char.class

string, uri, uuid java.lang.String

date, dateTime, dateTime.tz java.util.Date

boolean boolean.class

bin.base64, bin.hex byte[].class

4.3.3 Projection des actions UPnP sur les méthodes Java

Les actions UPnP définissent une liste d'attributs de sortie qui ne correspond pas directement à l'objet unique retourné par les méthodes Java. Le Tableau 8 spécifie les équivalences entre éléments d'actions et éléments de méthodes.

Tableau 8 Equivalence entre actions UPnP et méthodes Java

UPnP Java/OSGi

Actions SOAP nommées <ActionName> Méthodes Java nommées <actionName> Zéro, un ou plusieurs arguments d'entrée nommés

<Argument> qualifié par un type UPnP

Zéro, un ou plusieurs arguments d'entrée nommés <argu-ment> qualifié par un type simple Java

Zéro, un ou plusieurs arguments de sortie nommés <Argument> qualifié par un type UPnP

void, un argument d'un type simple Java ou un Object aux attributs d'objets définis par les noms <arguments> et les types simples Java équivalents. Les attributs sont privés et accessibles via des méthodes get (getters) publiques. Ils sont tous configurables initialement par le constructeur.

4.3.4 Projection de la notification UPnP sur le mécanisme Java

La souscription et la notification d'événements définies par le protocole GENA d'UPnP trouve son correspondant dans le patron "Tableau Blanc" (cf. Chapitre V.2.4.2). Le Tableau 9 définit les équivalences.

Tableau 9 Equivalence entre mécanismes de notification UPnP et notification Java/OSGi

UPnP Java/OSGi

Variables d'état déclarées comme "notifiables" ("evented"). Chaque fois que la valeur d'une variable change, les valeurs des variables changées sont envoyées dans un message à tous les Points de Contrôle abonnés. Un Point de Contrôle peut sous-crire à un service mais pas à une variable spécifique.

Champs d'un objet <ServiceType>StateEvent, argument de la méthode de notification notify<ServiceType>StateEvent de l'interface <ServiceType>StateListener. L'implémentation de cette interface doit être enregistrée en tant que service OSGi afin d'indiquer une souscription. Le tableau blanc nécessite toutefois que le Point de Contrôle indique l'identi-fiant de service dans les propriétés s'il souhaite souscrire à une instance de service précise.

L'observateur, malgré ses défauts, a l'avantage de ne pas demander la précision ci-dessus. L'équivalent de la sous-cription est alors l'appel à la méthode nommée addStateLis-tener(<ServiceType>StateListener).

Des adapteurs d'écouteurs <ServiceType>VariableListener peuvent être proposés dans les deux cas afin que l'applica-tion cliente OSGi puisse n'être virtuellement notifiée que par le changement de quelques variables d'état. Avec l'observa-teur, la méthode add<ServiceType>VariableListener(<Ser-viceType>VariableListener) est alors ajoutée à l'interface <ServiceType>Service interface. (cf. exemples ci-dessous).

Variables d'état Objets Java définies avec une méthode setValue(type)

déclenchant la notification d'objets écouteurs.

Message de notification reçu par tous les abonnés. Objet de type <ServiceType>StateEvent à tous les objets de type <ServiceType>StateListener and et

<Service-Type>VariableListener chaque fois que l'UPnPEventListener du pilote est notifié de l'objet UPnPEvent adéquat.

Voici par exemple l'interface de notification d'un Point de contrôle pour le service UPnP du type standardisé urn:schemas-upnp-org:device:Dimming:1:

public interface DimmingStateListener {

public void notifyDimmingStateEvent(DimmingStateEvent state); }

Et la classe d'événement :

public class DimmingStateEvent { private Dictionary dict;

public DimmingStateEvent(Dictionary dict) {… } public int getRampRate () {dict.get("RampRate");} public int getStepDelta () {dict.get("StepDelta");} public boolean getRampPaused () {dict.get("RampPaused");} public int getLoadLevelStatus () {dict.get("LoadLevelStatus");} public boolean getIsRamping () {dict.get("IsRamping");} }

L'interface DimmingVariableListener à la notification plus naturelle dans la programmation objet. Chaque variable d'état notifiable se voit attachée une méthode :

public interface DimmingVariableListener { public void rampRateChanged(int arg0); public void stepDeltaChanged(int arg0); public void rampPausedChanged(boolean arg0); public void loadLevelStatusChanged(int arg0); public void isRampingChanged(boolean arg0); }

Cela permet la définition d'un adapteur abstrait naturel pour le développeur Java. La classe abstraite ci-dessous implémente toutes les méthodes avec des méthodes vides. Elle peut être étendue et n'implémenter que quelques unes des méthodes afin d'obtenir un écouteur

notifié seulement par le changement de quelques variables spécifiques. De tels adapteurs sont spécifiés pour la notification d'événements d'interfaces graphiques Java Swing par exemple.

public abstract class DimmingVariableAdapter implements DimmingVariableListener { public void rampRateChanged(Integer arg0) {}

public void stepDeltaChanged(Integer arg0) { } public void rampPausedChanged(Boolean arg0) {} public void loadLevelStatusChanged(Integer arg0) {} public void isRampingChanged(Boolean arg0) { } }

4.3.5 Utilisation du UPnP Device Generator

L'outil permet de générer le bundle d'interfaces et le pilote raffiné correspondant à une description XML UPnP. Ce pilote traque dynamiquement les objets UPnPDevice du type UPnP mentionné dans la description. Il transforme ces objets présents sur la plateforme en objets obéissant à l'interface spécifique à la description de l'équipement. Les interfaces, plus intuitives pour un développeur Java, facilitent le développement de Points de Contrôle et d'équipements de ce type UPnP.

Cet outil a été utilisé notamment dans le prototypage d'équipements UPnP DM (cf. section 7). A partir de spécifications XML, il est simple de générer des pilotes raffinés et d'implémenter les interfaces avec l'API de gestion de cycle de vie de la plateforme OSGi.

5 COMMUNICATION INTERPERSONNELLE ENRICHIE

Le prototype de communication interpersonnelle enrichie [2008-6] repose sur la flexibilité du cadriciel Home SOA dans un service innovant séparant un terminal de vidéophonie entre les différents équipements de la maison. Le prototype exploite l'architecture du home cinéma intelligent et les capacités de négociation de flux multimédia du protocole SIP. Ce prototype est utilisé dans le projet national Systerminal labellisé par le pôle français de compétitivité "Images et Réseaux".

Figure 79 Intergiciel pour communication interpersonnelle enrichie