Vous êtes sur la page 1sur 28

Sommaire

1. Introduction....................................................................................................................................2
2. Outils de réalisation :......................................................................................................................3
 Langage J2ME.........................................................................................................................3
 Pourquoi J2ME ?.....................................................................................................................3
 Emulateurs d’appareils Mobiles :...........................................................................................3
 Emulateur NOKIA Series 60 Content Authoring......................................................................3
3. Structure de travail :.......................................................................................................................4
 Vue d'ensemble......................................................................................................................4
 Définition de l'interface à distance.........................................................................................4
3.2. Irisimobile.model.Avis.java :...............................................................................................8
3.3. irisimobile.vue.Avis.java :..................................................................................................10
3.4. Irisimobile.ModuleInterf.java :.........................................................................................11
3.5. Irisimobile.model.Module.java :........................................................................................11
3.6. Irisimobile.vue.Module.java :............................................................................................13
3.7. Irisimobile.vue.Emploi.java :.............................................................................................15
4. La traduction :.............................................................................................................................21
5. L’embarqué :................................................................................................................................26
6. Conclusion :..................................................................................................................................27

2
1. Introduction

Le rapport technique est un outil contenant une description rapide des classes utilisées
dans l’application (qui jouent un rôle important dans le code).
Dans ce rapport, il faut décrire le rôle de chaque classe, et aussi commenter toutes les
fonctions qu’elle contient, afin de connaitre l’utilité de chacune.
Le lecteur peut ainsi prendre connaissance des grandes lignes sans aller plus loin que la
première page.

3
2. Outils de réalisation :
 Langage J2ME
Puisque notre projet est une application mobile, nous devons le réaliser avec un langage
convenable : J2ME - Java 2 Micro Edition - Version de la plate-forme Java 2 destinée aux
appareils électroniques et terminaux intégrés (téléphones, assistants personnels, cartes à puce).

 Pourquoi J2ME ?
Java 2 Micro Edition est une architecture technique dont le but est de fournir un socle de
développement aux applications embarquées. L’intérêt étant de proposer toute la puissance d’un
langage tel que Java associé aux services proposés par une version bridée du Framework
J2SE :J2ME.

Les terminaux n’ayant pas la même capacité en termes de ressources que les ordinateurs
de bureau classiques (mémoire, disque et puissance de calcul), la solution passe par la fourniture
d’un environnement allégé afin de s’adapter aux différentes contraintes d’exécution. Cependant,
comment faire en sorte d’intégrer la diversité de l’offre à un socle technique dont le cible n’est
pas définie à priori ? La solution proposée par J2ME consiste à regrouper par catégories certaines
familles de produits tout en proposant la possibilité d’implémenter des routines spécifiques à un
terminal donné.

 Emulateurs d’appareils Mobiles :


Un émulateur d’appareils mobiles permet de créer un appareil virtuel dans l’ordinateur.
L'émulateur du mobile fonctionne de la même façon que lorsqu’on utilise un PC virtuel, son
avantage est la dématérialisation tout en ayant un environnement similaire à celui de l’appareil
physique. Plusieurs émulateurs mobiles existent et offrent des fonctionnalités presque similaires
parmi les plus connus :
- Emulateur Wireless ToolKit proposé par Sun Microsystems.
- Emulateur NOKIA Series 60 Content Authoring et qui présente des fonctionnalités
adoptées aux développeurs d’applications pour les appareils NOKIA.

 Emulateur NOKIA Series 60 Content Authoring 

Nokia Series 60 est un émulateur qui permet de reproduire d'une façon très proche de la
réalité les principales fonctions et caractéristiques des téléphones mobiles compatibles MMS
notamment la gamme Série 60 NOKIA. C'est un outil professionnel destiné aux développeurs
d'applications WAP et MMS qui nous permet de voir comment le message sera affiché sur le
navigateur d'un terminal mobile. Cet émulateur possède la possibilité de détecter et d'afficher
automatiquement les messages stockés dans son répertoire.

4
3. Structure de travail :
Dans cette section, vous apprendrez comment accéder et mettre en œuvre la fonctionnalité
côté serveur avec Invocation J2ME Polish Remote Method (RMI) cadre. 

 Vue d'ensemble

Le J2ME Polish RMI mise en œuvre utilise soit un binaire protocole slim ou le XML-
RPC protocole d'accès à la fonctionnalité de serveur à partir de votre application mobile.

Il est très facile d'utiliser le cadre du RMI - Voici les étapes nécessaires. Vous allez
apprendre à leur sujet en détail dans les sections suivantes.

 Définir l'interface: définir une interface qui étend de.enough.polish.rmi.Remote et


comprendre les méthodes que vous voulez accéder sur le serveur.
 Utilisez l'interface: à l'intérieur de votre application mobile, vous pouvez accéder au
serveur distant en appelantde.enough.polish.rmi.RemoteClient.open (..) .
 Mettre en œuvre le serveur: Mettre en place le serveur en
étendant de.enough.polish.rmi.RemoteHttpServlet et mettre en œuvre votre interface
serveur - ou mettre en place un serveur XML-RPC en utilisant n'importe quel langage
de programmation comme PHP, Ruby ou Perl.
 Packager et déployer: Créez un fichier WAR qui contient votre servlet et la déployer
sur votre serveur.
 Construisez et exécutez votre application mobile: Terminer le client et le serveur de
pièces de votre application et exécutez-le, c'est tout!

Vous pouvez également accéder à un XML-RPC serveur à l'aide de cette technologie et de


tordre le cadre du RMI à vos besoins. Maintenant, nous allons jeter un oeil sur les détails!

 Définition de l'interface à distance

Au début, vous avez à s'entendre sur une interface entre le serveur et votre application
mobile. Pour ce faire, en étendant le vide  « de.enough.polish.rmi.Remote » 

5
Dans l'exemple suivant, nous envoyons un nom, un numéro de téléphone et un mot de
passe pour registrer un utilisateur. Lorsque l'enregistrement réussit, le serveur doit retourner
true:

Dans ce type de projet on a un fichier XML qui permet l’interaction entre le client et le
serveur c’est lui qui se charge de la communication et qui encapsule la servelet du projet
<?xml version="1.0" encoding="ISO-8859-1"?>

<!--

Copyright 2006, 2007 Enough Software

Licensed under the GPL (the "License");

Unless required by applicable law or agreed to in writing, software


distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Contains the servlet definition for the game server.

-->

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<display-name>IRISI Embarque Server</display-name>


<description>
Une application ambarquee pour la connexion distante a son profile
IRISI.
</description>

<!-- servlet mappings start -->

<servlet>
<servlet-name>RemoteHttpServlet</servlet-name>
<servlet-class>irisimobile.ConnexionImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet</servlet-name>
<url-pattern>/connexion</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->

<!-- servlet mappings start -->

6
<servlet>
<servlet-name>RemoteHttpServlet_trp</servlet-name>
<servlet-class>irisimobile.TrombinoscopeImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet_trp</servlet-name>
<url-pattern>/trombinoscope</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->

<!-- servlet mappings start -->

<servlet>
<servlet-name>RemoteHttpServlet_maj</servlet-name>
<servlet-class>irisimobile.MAJImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet_maj</servlet-name>
<url-pattern>/updates</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->

<!-- servlet mappings start -->

<servlet>
<servlet-name>RemoteHttpServlet_stage</servlet-name>
<servlet-class>irisimobile.StageImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet_stage</servlet-name>
<url-pattern>/stages</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->


<!-- servlet mappings start -->
<servlet>
<servlet-name>RemoteHttpServlet_mdl</servlet-name>
<servlet-class>irisimobile.ModuleImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet_mdl</servlet-name>
<url-pattern>/modules</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->

<!-- servlet mappings start -->


<servlet>
<servlet-name>RemoteHttpServlet_avis</servlet-name>

7
<servlet-class>irisimobile.AvisImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet_avis</servlet-name>
<url-pattern>/avis</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->


<!-- servlet mappings start -->
<servlet>
<servlet-name>RemoteHttpServlet_nots</servlet-name>
<servlet-class>irisimobile.ResultatImpl</servlet-class>
<!-- use init-params for configuring your service -->
</servlet>

<servlet-mapping>
<servlet-name>RemoteHttpServlet_nots</servlet-name>
<url-pattern>/notes</url-pattern>
</servlet-mapping>

<!-- servlet mappings end -->

</web-app>

3.1. Interface AvisInterf .java :


La classe AvisIterf permet la définition des fonctions et des méthodes utilisé par le client :

package irisimobile;

import irisimobile.model.Avis;
import irisimobile.model.Classe;

import java.util.Vector;

import de.enough.polish.rmi.Remote;
import de.enough.polish.rmi.RemoteException;

public interface AvisInterf extends Remote {

public Vector<Avis> getAvis(Classe classe) throws RemoteException;


}

classe AvisImpl.java :

Classe implémentation ou classe coté serveur permet l’implémentation des méthodes et des
fonction qui sont définit dans l’interface.

package irisimobile;

8
import irisimobile.model.Avis;
import irisimobile.model.Classe;

import java.util.Date;
import java.util.Vector;

import de.enough.polish.rmi.RemoteException;
import de.enough.polish.rmi.RemoteHttpServlet;

public class AvisImpl extends RemoteHttpServlet implements AvisInterf {

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
public Vector<Avis> getAvis(Classe classe) throws RemoteException {
Vector<Avis> avis=new Vector<Avis>();
Object[][] rs=SQL.executeQuerySelect("SELECT *" +
" FROM avis WHERE id_classe="+classe.getIdClass());
for(int i=0;i<rs.length;i++){
Object[] r=rs[i];
avis.add(
new Avis((Integer) r[0], (String)r[3],
(Date)r[5],classe.getNiveau())
);
}

return avis;
}
}

3.2. Irisimobile.model.Avis.java :
Classe avis Serializable c’est une classe permet l’instanciation des objets avis pour assurer la
communication des objets dans le réseau :

package irisimobile.model;

import java.util.Date;

import de.enough.polish.io.Serializable;

/**
* @author naoual
*
*/

9
public class Avis implements Serializable {

private int id_avis;


private String objet;
private Date date;
private Niveau niveau;

public Avis(int idAvis, String objet, Date date, Niveau niveau) {


super();
id_avis = idAvis;
this.objet = objet;
this.date = date;
this.niveau = niveau;
}
public String getObjet() {
return objet;
}
public void setObjet(String objet) {
this.objet = objet;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Niveau getNiveau() {
return niveau;
}
public void setNiveau(Niveau niveau) {
this.niveau = niveau;
}
public void setId_avis(int id_avis) {
this.id_avis = id_avis;
}
public int getId_avis() {
return id_avis;
}

10
3.3. irisimobile.vue.Avis.java :
L’interface graphique avis permet de présenter l’interface de la classe avis pour faciliter la
manipulation :

package irisimobile.vue;

import java.io.IOException;

import javax.microedition.lcdui.Image;

import irisimobile.lang.LANGUE;
import irisimobile.util.DATE;
import de.enough.polish.ui.Alert;
import de.enough.polish.ui.AlertType;
import de.enough.polish.ui.Command;
import de.enough.polish.ui.CommandListener;
import de.enough.polish.ui.Displayable;
import de.enough.polish.ui.Form;
import de.enough.polish.ui.List;
import de.enough.polish.ui.StyleSheet;

public class Avis extends Form implements CommandListener{

private IRISIMobile midlet;


private irisimobile.model.Avis avis;
private Command masquer;
public Avis(IRISIMobile midlet,irisimobile.model.Avis v) {
super("Les avis");
this.midlet = midlet;
avis=v;
this.setTitle(DATE.getDateEnText(v.getDate()));
try {
this.append(Image.createImage("/info.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.append(avis.getObjet());
masquer=new Command("Masquer", Command.ITEM, 0);

this.addCommand(masquer);
this.addCommand(IRISIMobile.PRECEDENT);
this.addCommand(IRISIMobile.AIDE);
this.addCommand(IRISIMobile.APROPOS);
this.addCommand(IRISIMobile.QUITTER);
this.setCommandListener(this);
//}

11
public void commandAction(Command c, Displayable disp) {
if(c == this.masquer){
Alert alert = new Alert("Avis", "description", null, AlertType.INFO);
midlet.switchDisplayable(alert, this);
}else if(c==IRISIMobile.QUITTER){
midlet.quitter();
}
else if(c==IRISIMobile.PRECEDENT){
midlet.switchDisplayable(null, new Menu(midlet, LANGUE.APPLICATION,
"ecranPrincipale", "rebrique",false));
}

3.4. Irisimobile.ModuleInterf.java :
Cette interface permet la communication avec le serveur pour l’appel et l’instensiation des module

package irisimobile;

import irisimobile.model.Module;
import irisimobile.model.Niveau;

import java.util.Vector;

import de.enough.polish.rmi.Remote;
import de.enough.polish.rmi.RemoteException;

public interface ModuleInterf extends Remote {


public Vector<Module> getModules(Niveau niveau) throws RemoteException;
}

3.5. Irisimobile.model.Module.java :
La classe module permet qui est serializable permet d’instancier des module au niveau Client

package irisimobile.model;

import java.util.Date;
import java.util.Vector;

import de.enough.polish.io.Serializable;

/**
* @author naoual

12
*
*/
public class Module implements Serializable {

private int id_module;


private String libModule;
private int volHor;
private Niveau niveau;
private Vector<Cours> cours;
private Date ddm;

public Module(int idModule, String libModule, int volHor, Niveau niveau,


Vector<Cours> cours,Date ddm) {
super();
id_module = idModule;
this.libModule = libModule;
this.volHor = volHor;
this.niveau = niveau;
this.cours = cours;
this.setDdm(ddm);
}

public String getLibModule() {


return libModule;
}
public void setLibModule(String libModule) {
this.libModule = libModule;
}
public int getVolHor() {
return volHor;
}
public void setVolHor(int volHor) {
this.volHor = volHor;
}
public Niveau getNiveau() {
return niveau;
}
public void setNiveau(Niveau niveau) {
this.niveau = niveau;
}

public Module(int idModule, String libModule, int volHor, Niveau niveau) {


super();
id_module = idModule;
this.libModule = libModule;
this.volHor = volHor;
this.niveau = niveau;
}

public void setId_module(int id_module) {

13
this.id_module = id_module;
}

public int getId_module() {


return id_module;
}

public void setCours(Vector<Cours> cours) {


this.cours = cours;
}

public Vector<Cours> getCours() {


return cours;
}

public void setDdm(Date ddm) {


this.ddm = ddm;
}

public Date getDdm() {


return ddm;
}

3.6. Irisimobile.vue.Module.java :
La classe Module permet de présenter l’interface graphique des modules qui appells lui même
l’interface des cours.

package irisimobile.vue;

import irisimobile.lang.LANGUE;
import irisimobile.model.Etudiant;
import irisimobile.model.Module;
import irisimobile.model.Niveau;
import irisimobile.util.HOST;

import java.io.IOException;
import java.util.Vector;

import javax.microedition.lcdui.Image;

import de.enough.polish.io.RmsStorage;
import de.enough.polish.rmi.RemoteClient;

14
import de.enough.polish.rmi.RemoteException;
import de.enough.polish.ui.Alert;
import de.enough.polish.ui.AlertType;
import de.enough.polish.ui.Command;
import de.enough.polish.ui.CommandListener;
import de.enough.polish.ui.Displayable;
import de.enough.polish.ui.List;
import de.enough.polish.ui.StyleSheet;

public class Modules extends List implements CommandListener{

IRISIMobile midlet;
private Vector<Module> modules;
private boolean maj;

public Modules(IRISIMobile midlet ,boolean mettre_a_jour) {

super(LANGUE.MES_MODULE,List.IMPLICIT);
this.midlet = midlet;
this.maj=mettre_a_jour;

modules=this.getModules();

this.addCommand(IRISIMobile.PRECEDENT);
this.addCommand(IRISIMobile.QUITTER);
this.setSelectCommand(IRISIMobile.SELECT);
this.setCommandListener(this);

//ETABLISSMENT DE LA REQUETTE DES MODULES


//
if(modules==null || modules.size()==0){
this.append(LANGUE.NO_MODULE,null, StyleSheet.getStyle("rebrique"));
}
else{
for(int i=0;i<modules.size();i++){
Module s=modules.elementAt(i);
try {

this.append(s.getLibModule(),Image.createImage("/module.png"),
StyleSheet.getStyle("rebrique"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

private Vector<Module> getModules(){

RmsStorage storage = new RmsStorage();

15
try {
return (Vector<Module>) storage.read( "Modules" );

} catch (IOException e) {
//sa veu dir qu'ocun enregistremen n'existe encor sur le tel
//on va alor du cot� serveur
return null;
}
}

public void commandAction(Command cmd, Displayable disp) {


if(cmd == IRISIMobile.SELECT){
midlet.switchDisplayable(null, new
Cours(midlet,modules.elementAt(this.getSelectedIndex())));
}
if(cmd == IRISIMobile.PRECEDENT){
midlet.switchDisplayable(null, new Menu(midlet,LANGUE.APPLICATION,
"ecranPrincipale", "rebrique",false));
}
if(cmd == IRISIMobile.QUITTER){
midlet.quitter();
}

3.7. Irisimobile.vue.Emploi.java :
La classe emploi est la vue la plus importante dans notre projet, elle peut avoir sa mise a jour
automatiquement ainsi qu’elle utilise des composants graphique un peu complexe comme
Tree.

package irisimobile.vue;

import irisimobile.lang.LANGUE;
import irisimobile.model.Module;
import irisimobile.util.DATE;

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

import javax.microedition.lcdui.Image;

16
import de.enough.polish.io.RmsStorage;
import de.enough.polish.ui.Command;
import de.enough.polish.ui.CommandListener;
import de.enough.polish.ui.Displayable;
import de.enough.polish.ui.Item;
import de.enough.polish.ui.StyleSheet;
import de.enough.polish.ui.TabbedForm;
import de.enough.polish.ui.TreeItem;

public class Emploi extends TabbedForm implements CommandListener{


private static String [] jour = {"Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};
private boolean maj;
private IRISIMobile midlet;
private Date[] dates;
private Command semaine;
private Command semainesuiv;
private Command semaineprec;

public Emploi(IRISIMobile midlet,Date date, boolean maj) {


super("Mon Emplois",jour,null,StyleSheet.getStyle("emploi"));
this.midlet = midlet;
this.maj=maj;
Command cmd=IRISIMobile.SELECT;
setSemaine(date);
Vector<irisimobile.model.Avis> avis=new Vector<irisimobile.model.Avis>();
Vector<irisimobile.model.Cours> cours=new Vector<irisimobile.model.Cours>();
for(int i=0;i<6;i++){
TreeItem tree = new TreeItem(null);
//style fils1
tree.setLabel(DATE.getDateEnText(dates[i]));
avis=getAvis(dates[i]);
cours=getCours(dates[i]);
//#style fils1
tree.appendToRoot("Avis",null);
tree.get(0).setLabel("1");
if(avis==null || avis.size()==0){
tree.appendToNode(tree.get(0),"Aucun Avis",null);
}
else{
int j=1;
for(irisimobile.model.Avis v:avis){
Item
child=tree.appendToNode(tree.get(0),v.getObjet(),null);
child.setLabel(""+j);
child.addCommand(cmd);
j++;
}
}
//#style fils1
tree.appendToRoot("8-10", null);
tree.get(1).setLabel("2");

17
//#style fils1
tree.appendToRoot("10-12", null);
tree.get(2).setLabel("3");
//#style fils1
tree.appendToRoot("14-16", null);
tree.get(3).setLabel("4");
//#style fils1
tree.appendToRoot("16-18", null);
tree.get(4).setLabel("5");
int a=1,b=1,cc=1,d=1;
if(cours!=null || cours.size()!=0)
for(irisimobile.model.Cours c:cours){
if(c.getFaisseau().equalsIgnoreCase("8H-10H")){
Item child=tree.appendToNode(tree.get(1),c.getType()+":
"+c.getLibCours(),null);
child.setLabel(""+a);
child.addCommand(cmd);
a++;
}
else if(c.getFaisseau().equalsIgnoreCase("10H-12H")){
Item child=tree.appendToNode(tree.get(1),c.getType()+":
"+c.getLibCours(),null);
child.setLabel(""+b);
child.addCommand(cmd);
b++;
}
else if(c.getFaisseau().equalsIgnoreCase("14H-16H")){
Item child=tree.appendToNode(tree.get(1),c.getType()+":
"+c.getLibCours(),null);
child.setLabel(""+cc);
child.addCommand(cmd);
cc++;
}
else if(c.getFaisseau().equalsIgnoreCase("16H-18H")){
Item child=tree.appendToNode(tree.get(1),c.getType()+":
"+c.getLibCours(),null);
child.setLabel(""+d);
child.addCommand(cmd);
d++;
}
}

this.append(i, tree);
}

semaine=new Command("Semaine courante", Command.ITEM, 1);


semainesuiv=new Command("Semaine suivante", Command.ITEM, 2);
semaineprec=new Command("Semaine precedente", Command.ITEM, 3);

this.addCommand(semaine);
this.addCommand(semainesuiv);

18
this.addCommand(semaineprec);
this.addCommand(IRISIMobile.SELECT);
this.addCommand(IRISIMobile.PRECEDENT);
this.addCommand(IRISIMobile.AIDE);
this.addCommand(IRISIMobile.APROPOS);
this.addCommand(IRISIMobile.QUITTER);
this.setCommandListener(this);

public void commandAction(Command cmd, Displayable disp) {


if(cmd == IRISIMobile.PRECEDENT){
midlet.switchDisplayable(null, new Menu(midlet, LANGUE.APPLICATION,
"ecranPrincipale", "rebrique",false));
}
else if(cmd==this.semainesuiv){
Date date=DATE.getNextDate(DATE.getNextDate(dates[5]));
midlet.switchDisplayable(null,new Emploi(midlet,date,false));
}else if(cmd==this.semaine){
midlet.switchDisplayable(null,new Emploi(midlet,new Date(),false));
}
else if(cmd==this.semaineprec){
Date date=dates[0];
for(int i=0;i<7;i++){
date=DATE.getPreviousDate(date);
}
midlet.switchDisplayable(null,new Emploi(midlet,date,false));
}
else if(cmd==IRISIMobile.SELECT){
TreeItem tr=(TreeItem) this.get(this.getActiveTab(), 0);
Item[] it=tr.getSelectedPath();
if(it.length>1){
if(it[0].getLabel().equalsIgnoreCase("1")){
System.out.println("avis");

goToAvis(dates[this.getActiveTab()],Integer.parseInt(it[1].getLabel())-1);
}
else if(it[0].getLabel().equalsIgnoreCase("2")){
System.out.println("c1");
goToCours(dates[this.getActiveTab()],"8H-10H");
}
else if(it[0].getLabel().equalsIgnoreCase("3")){
System.out.println("c2");
goToCours(dates[this.getActiveTab()],"10H-12H");
}
else if(it[0].getLabel().equalsIgnoreCase("4")){
System.out.println("c3");
goToCours(dates[this.getActiveTab()],"14H-16H");
}

19
else if(it[0].getLabel().equalsIgnoreCase("5")){
System.out.println("c4");
goToCours(dates[this.getActiveTab()],"16H-18H");
}
}
}else if(cmd==IRISIMobile.QUITTER){
midlet.quitter();
}

private void goToCours(Date date, String faisseau) {


Vector<irisimobile.model.Cours> crs=new Vector<irisimobile.model.Cours>();
crs=getCours(date);
System.out.println("chui là");
System.out.println("//"+crs.size());
for(irisimobile.model.Cours c:crs){
if(c.getFaisseau().equalsIgnoreCase(faisseau)){
System.out.println(c.getSyllabus());
midlet.switchDisplayable(null, new Sylabus(midlet,c));
}
}

private void goToAvis(Date date, int i) {


midlet.switchDisplayable(null, new Avis(midlet,getAvis(date).elementAt(i)));
}

private static Image[] getIcons(){


Image im=null;
try {
im=Image.createImage("/jour.png");
} catch (IOException e) {
e.printStackTrace();
}

return new Image[]{im,im,im,im,im,im};


}

private void setSemaine(Date date){


Calendar c =Calendar.getInstance();
c.setTime(date);
//c.set(Calendar.MONTH, c.get(Calendar.MONTH)+1);
//date=c.getTime();
int dif=c.get(Calendar.DAY_OF_WEEK)-2; //2 pour lundi etant le premier jour de la
semaine
System.out.println(dif);
if(dif>=0)
for(int i=0;i<dif;i++){
date=DATE.getPreviousDate(date);

20
}
else{
for(int i=0;i>dif;i++){
date=DATE.getNextDate(date);
}
}
dates=new Date[6];
System.out.println(date);
for(int i=0;i<6;i++){
dates[i]=date;
date=DATE.getNextDate(date);
}
}

private Vector<irisimobile.model.Cours> getCours(Date date){


RmsStorage storage = new RmsStorage();
Vector<irisimobile.model.Cours> cours=new Vector<irisimobile.model.Cours>();
try {
Vector<Module> mdls=(Vector<Module>)
storage.read( "Modules" );
for(Module m:mdls){
for(irisimobile.model.Cours c:m.getCours()){

if(DATE.equals(DATE.getNextDate(c.getDate()),date))
cours.addElement(c);
}
}

return cours;
} catch (IOException e) {
//sa veu dir qu'ocun enregistremen n'existe encor sur le tel
//on va alor du cot� serveur
return null;
}
}

private Vector<irisimobile.model.Avis> getAvis(Date date){

RmsStorage storage = new RmsStorage();


Vector<irisimobile.model.Avis> avis=new Vector<irisimobile.model.Avis>();
try {
Vector<irisimobile.model.Avis> avs=(Vector<irisimobile.model.Avis>)
storage.read( "Avis" );
for(irisimobile.model.Avis v:avs){
if(DATE.equals(DATE.getNextDate(v.getDate()),date))
avis.addElement(v);
}

return avis;

21
} catch (IOException e) {
//sa veu dir qu'ocun enregistremen n'existe encor sur le tel
//on va alor du cot� serveur
return null;
}
}

4. La traduction :
Dans notre projet, on a réalisé une classe qui permet la traduction en 3 langue cette classe est
la suivante :
package irisimobile.lang;

public class LANGUE {

public static String ARABE="ar";


public static String FRANCAIS="fr";
public static String ANGLAIS="en";

public static String LA_LANGUE=null;


public static String LANGUE_TITRE=null;
public static String BIENVENU=null;
public static String APPLICATION=null;
public static String SELECT=null;
public static String PRECEDENT=null;
public static String AIDE=null;
public static String APROPOS=null;
public static String QUITTER=null;
public static String SAUVEGARDE=null;
public static String ERREUR_SAUVEGARDE=null;
public static String EMPLOIS_TEMP=null;
public static String COURS=null;
public static String NOTES=null;
public static String DEMANDE=null;
public static String STAGE=null;
public static String TROMBINOSCOPE=null;
public static String PROFILE=null;
public static String CONFIG=null;
public static String DECONNEXION=null;
public static String NEW_USER=null;
public static String CONNEXION=null;
public static String LOGIN=null;
public static String PASSWORD=null;
public static String CONNEXION_TITLE=null;
public static String ERR_LOG_PASS_VIDE=null;
public static String ERR_LOGPASS_INVALIDE=null;
public static String ERR_HOTE=null;
public static String NO_ETUDIANT=null;
public static String INFO=null;
public static String CNE=null;
public static String EMAIL=null;
public static String NOM=null;

22
public static String PRENOM=null;
public static String TEL=null;
public static String CLASSE=null;
public static String FILIERE=null;
public static String NIVEAU=null;
public static String ADRESSE=null;
public static String PROFILE_TITLE=null;
public static String CHANGE_ID=null;
public static String VALIDER=null;
public static String CHANGE_TITLE=null;
public static String OLD_PASS=null;
public static String NEW_PASS=null;
public static String CONFIRM_PASS=null;
public static String ERR_ALL_FIELD=null;
public static String ERR_PASS_INVALIDE=null;
public static String ERR_CONF_INVALIDE=null;
public static String SUCCES=null;
public static String SUCCES_CHANG_PASS=null;
public static String ERR_CHANG_PASS=null;
public static String NO_STAGE=null;
public static String INFO_STAGE=null;
public static String INFO_ENTREPRISE=null;
public static String ENTREPRISE=null;
public static String WEBSITE=null;
public static String NO_MODULE=null;
public static String DATE=null;
public static String HORAIRE=null;
public static String MES_MODULE=null;
public static String MES_COURS=null;
public static String TELECHARGER=null;
public static String SYLLABUS=null;
public static String SALLLE=null;
public static String TP=null;
public static String COUR=null;
public static String TD=null;
public static String NO_RATT=null;
public static String NOT_AP_RATT=null;
public static String NOT_AV_RATT=null;
public static String MOYENNE=null;
public static String NO_NOT=null;

public static void setLanguage(String langue){


if(langue.equalsIgnoreCase(LANGUE.ARABE)){

LA_LANGUE="‫;"العربية‬
LANGUE_TITRE="‫;"إعدادات اللغة‬
BIENVENU="‫;"مرحبا‬
APPLICATION=" IRISI ‫;" جوال‬
SELECT="‫;"اختيار‬
PRECEDENT="‫;"رجوع‬
AIDE="‫;"مساعدة‬
APROPOS="‫;"حول‬
QUITTER="‫;"خروج‬
SAUVEGARDE="‫;"حفظ‬
ERREUR_SAUVEGARDE=" ‫خطأ أثناء محاولة حفظ إعدادت‬
‫المستخدم‬.";
EMPLOIS_TEMP="‫;"استعمال الزمن‬
COURS="‫;"دروس‬
NOTES="‫;"نقط‬
DEMANDE="‫;"طلب‬

23
‫;"تدريب"=‪STAGE‬‬
‫;"ألبوم"=‪TROMBINOSCOPE‬‬
‫;"حسابي"=‪PROFILE‬‬
‫;"اعدادات"=‪CONFIG‬‬
‫;"تسجيل الخروج"=‪DECONNEXION‬‬
‫;"مستخدم جديد"=‪NEW_USER‬‬
‫;"دخول"=‪CONNEXION‬‬
‫;"اسم المستخدم"=‪LOGIN‬‬
‫;"كلمة السر"=‪PASSWORD‬‬
‫;"‪ IRISI‬دخول جوال"=‪CONNEXION_TITLE‬‬
‫خطأ‪ ,‬اسم المستخدم أو كلمة المرور "=‪ERR_LOG_PASS_VIDE‬‬
‫;"فارغ‬
‫خطأ‪ ,‬اسم المستخدم أو كلمة المرور "=‪ERR_LOGPASS_INVALIDE‬‬
‫;"‪.‬غير صحيح‬
‫;"‪.‬خطأ‪ ,‬يتعذر اإلتصال بالجهاز الخادم"=‪ERR_HOTE‬‬
‫;"الئحة فارغة"=‪NO_ETUDIANT‬‬
‫;"بيانات"=‪INFO‬‬
‫;"ر‪.‬و‪.‬ط"=‪CNE‬‬
‫;"بريد الكتروني"=‪EMAIL‬‬
‫;"إسم عائلي"=‪NOM‬‬
‫;"إسم شخصي"=‪PRENOM‬‬
‫;"هاتف"=‪TEL‬‬
‫;"قسم"=‪CLASSE‬‬
‫;"شعبة"=‪FILIERE‬‬
‫;"مستوى"=‪NIVEAU‬‬
‫;"عنوان"=‪ADRESSE‬‬
‫;"الحساب الشخصي"=‪PROFILE_TITLE‬‬
‫;"تغيير كلمة السر"=‪CHANGE_ID‬‬
‫;"موافق"=‪VALIDER‬‬
‫;"تغيير كلمة السر"=‪CHANGE_TITLE‬‬
‫;"كلمة السر الحالية"=‪OLD_PASS‬‬
‫;"كلمة السر الجديدة"=‪NEW_PASS‬‬
‫;"تأكيد كلمة السر"=‪CONFIRM_PASS‬‬
‫;"يجب تعبئة جميع الحقول الفارغة"=‪ERR_ALL_FIELD‬‬
‫;"كلمة السر غير صحيحة"=‪ERR_PASS_INVALIDE‬‬
‫;"التأكيد اليطابق"=‪ERR_CONF_INVALIDE‬‬
‫;"تمت العملية بنجاح"=‪SUCCES‬‬
‫;"لقد تم تغيير كلمة السر لحسابكم"=‪SUCCES_CHANG_PASS‬‬
‫;"خطأ أثناء تغيير كلمة السر"=‪ERR_CHANG_PASS‬‬
‫;"تدريب غير متوفر"=‪NO_STAGE‬‬
‫;"‪:‬معلومات الشركة"=‪INFO_ENTREPRISE‬‬
‫;"‪:‬معلومات التدريب"=‪INFO_STAGE‬‬
‫;"الشركة"=‪ENTREPRISE‬‬
‫;"الموقع اإللكتروني"=‪WEBSITE‬‬
‫;"التوجد دروس لهذا المستوى"=‪NO_MODULE‬‬
‫;"تاريخ"=‪DATE‬‬
‫;"توقيت"=‪HORAIRE‬‬
‫;"دروسي"=‪MES_MODULE‬‬
‫;"دروسي"=‪MES_COURS‬‬
‫;"تحميل"=‪TELECHARGER‬‬
‫;"ملخص"=‪SYLLABUS‬‬
‫;"قاعة"=‪SALLLE‬‬
‫;"تطبيق"=‪TP‬‬
‫;"درس"=‪COUR‬‬
‫;"تمرين"=‪TD‬‬
‫;"التوجد دورة استدراكية"=‪NO_RATT‬‬
‫;"نقط ما بعد االستدراكية"=‪NOT_AP_RATT‬‬
‫;" نقط ما قبل االستدراكية ‪NOT_AV_RATT=" :‬‬
‫;"المعدل"=‪MOYENNE‬‬
‫;"ال توجد نقط" =‪NO_NOT‬‬
‫}‬

‫‪24‬‬
else if(langue.equalsIgnoreCase(LANGUE.FRANCAIS)){

LA_LANGUE="Français";
LANGUE_TITRE="Configuration langue";
BIENVENU="Bienvnue";
APPLICATION=" Mobile IRISI";
SELECT="Choisir";
PRECEDENT="Retour";
AIDE="Aide";
APROPOS="Apropos";
QUITTER="Quitter";
SAUVEGARDE="Enregistrer";
ERREUR_SAUVEGARDE="Une erreur est survenue, Les
paramètres de votre profile n'ont pas pu être enregistrées";
EMPLOIS_TEMP="Emploi du temps";
COURS="Cours";
NOTES="Notes";
DEMANDE="Demande";
STAGE="Stage";
TROMBINOSCOPE="Trombinoscope";
PROFILE="Profil";
CONFIG="Configuration";
DECONNEXION="Deconnexion";
NEW_USER="Nouvel utilisateur";
CONNEXION="Connexion";
LOGIN="Nom d'utilisateur";
PASSWORD="Mot de passe";
CONNEXION_TITLE="Connexion Mobile IRISI";
ERR_LOG_PASS_VIDE="Attention, nom d'utilisateur ou mot de
passe vide";
ERR_LOGPASS_INVALIDE="Erreur, nom d'utilisateur ou Mot de
passe incorrect";
ERR_HOTE="Erreur: Impossible de joindre l'hôte distant";
NO_ETUDIANT="Aucun Etudiant";
INFO="Infos ";
CNE="CNE";
EMAIL="E-mail";
NOM="Nom";
PRENOM="Prénom";
TEL="Tel";
CLASSE="Classe";
FILIERE="Filière";
NIVEAU="Niveau";
ADRESSE="Adresse";
PROFILE_TITLE="Mon profile";
CHANGE_ID="Changer Mot de passe";
VALIDER="Valider";
CHANGE_TITLE="Changement mot de passe";
OLD_PASS="Mot de passe actuel";
NEW_PASS="Nouveau mot de passe";
CONFIRM_PASS="Confirmation";
ERR_ALL_FIELD="Attention, vous devez remplir tous les
champs";
ERR_PASS_INVALIDE="Erreur, ot de passe incorrect";
ERR_CONF_INVALIDE="Erreur, Confirmation incorrecte";
SUCCES="Opération términée avec succès";
SUCCES_CHANG_PASS="Votre mot de passe a été changer avec
succès";
ERR_CHANG_PASS="Erreur lors du changement de votre mot de
passe";
NO_STAGE="aucun stage disponible";

25
INFO_ENTREPRISE="Infos Entreprise:";
INFO_STAGE="Inofs Stage:";
ENTREPRISE="Entreprise";
WEBSITE="Site web";
NO_MODULE="Aucun module pour votre niveau";
DATE="Date";
HORAIRE="Horaire";
MES_MODULE="Mes modules";
MES_COURS="Mes cours";
TELECHARGER="Télécharger";
SYLLABUS="Syllabus";
SALLLE="Salle";
TP="TP";
COUR="Cours";
TD="TD";
NO_RATT="Pas de rattrapage";
NOT_AP_RATT="Note après rattrapage";
NOT_AV_RATT="Note avant rattrapage :";
MOYENNE="Moyenne :";
NO_NOT="Pas de notes";

}
else if(langue.equalsIgnoreCase(LANGUE.ANGLAIS)){

LA_LANGUE="English";
LANGUE_TITRE="Language settings";
BIENVENU="Welcome";
APPLICATION="IRISI Mobile";
SELECT="Select";
PRECEDENT="Back";
AIDE="Help";
APROPOS="About";
QUITTER="Exit";
SAUVEGARDE="Saving";
ERREUR_SAUVEGARDE="An error has acured,Your profile
settings may not be saved.";
EMPLOIS_TEMP="Schedule";
COURS="Course";
NOTES="Marks";
DEMANDE="Request";
STAGE="Trainning";
TROMBINOSCOPE="Trombinoscope";
PROFILE="Profile";
CONFIG="Settings";
DECONNEXION="Disconnect";
NEW_USER="New user";
CONNEXION="Connect";
LOGIN="User name";
PASSWORD="Password";
CONNEXION_TITLE="IRISI Mobile Connexion";
ERR_LOG_PASS_VIDE="Attention, Your user name or password
are empty";
ERR_LOGPASS_INVALIDE="Error, incorrect user name or
password";
ERR_HOTE="Error, enable to reach server Host ";
NO_ETUDIANT="No student";
INFO="Info";
CNE="CNE";
EMAIL="E-mail";
NOM="Last name";
PRENOM="First name";

26
TEL="Phone";
CLASSE="Class";
FILIERE="Major";
NIVEAU="Level";
ADRESSE="Address";
PROFILE_TITLE="My ACCOUNT";
CHANGE_ID="Change password";
VALIDER="Validate";
CHANGE_TITLE="Changing password";
OLD_PASS="Current password";
NEW_PASS="New password";
CONFIRM_PASS="Confirm password";
ERR_ALL_FIELD="Attention, All fields must be filled";
ERR_PASS_INVALIDE="Error, invalid password";
ERR_CONF_INVALIDE="Error, incorrect confirmation";
SUCCES="Operation succes";
SUCCES_CHANG_PASS="Your password has been succesfully
changed";
ERR_CHANG_PASS="Error, Can't change your password";
NO_STAGE="No available training";
INFO_ENTREPRISE="Company infos:";
INFO_STAGE="Training infos:";
ENTREPRISE="Company";
WEBSITE="Web site";
NO_MODULE="No available courses for your level";
DATE="Date";
HORAIRE="Time";
MES_MODULE="My Subjects";
MES_COURS="My Courses";
TELECHARGER="Download";
SYLLABUS="Resume";
SALLLE="Room";
TP="PW";
COUR="Course";
TD="DW";
NO_RATT="No catching up";
NOT_AP_RATT="Mark after catching up :";
NOT_AV_RATT="Mark before catching up :";
MOYENNE="Average :";
NO_NOT="No Marks";
}
}

5. L’embarqué :
MIDP ne peut pas utiliser un système de fichiers pour enregistrer les données d'application,et pour
assurer le stockage les informations dans une mémoire non-volatile,on utilise la technique du stockage
appelé Record Management System (RMS).

RMS

La méthode de création :

RecordStore rs = RecordStore.openRecordStore("MyAppointments",true);

27
La méthode de fermeture :

Rs.closeRecordStore();

La suppression d’un enregistrement :

RecordStore.deleteRecordStore("MyAppointments");

L’ajout d’un enregistrement :

String appt = "new record";


byte bytes[] = appt.getBytes();
rs.addRecord(bytes,0,bytes.length);

La mise à jour des données :

String newappt = "update record";


Byte data = newappt.getBytes();
Rs.setRecord(1, data, 0, data.length());

6. Conclusion :

Dans notre projet on a pu réaliser une application embarqué, qui s’appuie sue la
technologie RMS pour le stockage des données dans le portable, ainsi que la communication
avec un serveur distant par la technologie RMI pour assurer les mises à jour des données du
portable.

Pour l’outil de traduction qui permet la navigation entre les trois, l’arabe le français et
l’anglais, on a utilisé une classe qui s’appelle LANGUE qui assure cette navigation.

28

Vous aimerez peut-être aussi