5
Compléments CORBA
Compléments CORBA © 2005-06 Th. Desprats 17
17
Type générique, Meta-type (8/17)
Utilisation d’un TypeCode (2/3):
Connaître les membres d’un type composé :
(structures, unions, énumérations, exceptions, value types)
member_count() retourne le nombre de membres présents dans le type
member_name() retourne le nom du type dont l’index est précisé
member_type() retourne le type code du membre dont l’index est précisé
Exemple : à partir de cette description :
qu’afficherait à l’écran le code suivant ?
struct individu {string nom; string prenom; string adresse;};
org.omg.CORBA.TypeCode tc = individuHelper.type();
if (tc.kind().value() = = org.omg.CORBA.TCKind._tk_struct)
{ System.out.println(“Nom de la structure: “+tc.name());
System.out.println(“ID de la structure: “+tc.id());
System.out.println(“Nombre de membres : “+tc.member_count());
for( int i=0; i<tc.member_count(); i++)
{ System.out.println(“Nom du membre : “+tc.member_name(i));
System.out.println(“Type du membre : “+tc.member_type(i));
}}
Compléments CORBA
Compléments CORBA © 2005-06 Th. Desprats 18
18
Type générique, Meta-type (9/17)
Utilisation d’un TypeCode (3/3):
Connaître le type de référence d’un alias :
Content_type() retourne un TypeCode
Connaître le type de référence d’un tableau :
Content_type() retourne un TypeCode
Connaître la taille d’un tableau :
length() retourne la taille
Comparer des TypeCodes :
equal() retourne un booléen (égalité stricte)
equivalent() retourne un booléen (égalité indirecte)
Connaître le type d’une valeur Any :
type() retourne le TypeCode de la valeur contenue dans un any
Compléments CORBA
Compléments CORBA © 2005-06 Th. Desprats 19
19
Type générique, Meta-type (10/17)
Exemple:
Interface polymorphe :
Servant Java :
typedef sequence <long> longSeq
struct individu {string nom; string prenom; string adresse;};
exception TypeInconnu { };
interface Polymorphe { void pass(in any valeur) raises TypeInconnu); };
public class PolymorpheImpl extends PolymorphePOA
{ public void pass(org.omg.CORBA.Any val) throws TypeInconnu
{ org.omg.CORBA.TypeCode tc = valeur.type();
switch (getEquivalentKind(tc))
{ case org.omg.CORBA.TCKind_tk_long :
int l = valeur.extract_long();
System.out.println(“recu un entier de valeur: “+l);
break;
case org.omg.CORBA.TCKind_tk_string :
String s = valeur.extract_string();
System.out.println(“recu une string de valeur: “+s);
break;
Compléments CORBA
Compléments CORBA © 2005-06 Th. Desprats 20
20
Type générique, Meta-type (11/17)
Exemple : Servant Java
case org.omg.CORBA.TCKind_tk_string :
String s = valeur.extract_string();
System.out.println(“recu une string de valeur: “+s);
break;
case org.omg.CORBA.TCKind_tk_struct :
if (tc.equal(individuHelper.type()))
{ individu i = individuHelper.extract(valeur);
System.out.println(“recu un individu : “+i.nom+” “
+i.prenom”+” “+i.adresse); }
else throw new TypeInconnu();
break;
case org.omg.CORBA.TCKind_tk_sequence :
if (tc.equal(longSeqHelper.type()))
{ int [] seq = longSeqHelper.extract(valeur);
System.out.println(“recu une sequence d’entiers :”);
for (int = i; i<seq.length; i++)
System.out.println(“Elt n° “+i+“:”+seq[i]); }
else throw new TypeInconnu();
break;
default
throw new TypeInconnu(); } }