• Aucun résultat trouvé

Développement et traitement des sorties d'un modèle de ferme « farmsim »

N/A
N/A
Protected

Academic year: 2021

Partager "Développement et traitement des sorties d'un modèle de ferme « farmsim »"

Copied!
42
0
0

Texte intégral

(1)

HAL Id: hal-02803571

https://hal.inrae.fr/hal-02803571

Submitted on 5 Jun 2020

HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci-entific research documents, whether they are pub-lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.

Développement et traitement des sorties d’un modèle de

ferme “ farmsim ”

Arthur Forest, Ludovic Drugbert

To cite this version:

Arthur Forest, Ludovic Drugbert. Développement et traitement des sorties d’un modèle de ferme “ farmsim ”. [Stage] ISIMA. 2013, 41 p. �hal-02803571�

(2)

Institut Supérieur d'Informatique de Modélisation et de leurs Applications.

BP 10125 63 173 Aubière Cedex

Institut Nationale de la Recherche Agronomique.

234 avenue du Brezet 63100 CLERMONT-FERRAND

Rapport de projet de troisième Année Filière Systèmes d'Information et Aide à la Décision

DÉVELOPPEMENT ET TRAITEMENT DES SORTIES D'UN

MODELE DE FERME « FARMSIM »

Présenté par : Ludovic DRUGBERT & Arthur FOREST

Responsable INRA : Monsieur Raphaël Martin

(3)

Institut Supérieur d'Informatique de Modélisation et de leurs Applications.

BP 10125 63 173 Aubière Cedex

Institut Nationale de la Recherche Agronomique.

234 avenue du Brezet 63100 CLERMONT-FERRAND

Rapport de projet de troisième Année Filière Systèmes d'Information et Aide à la Décision

DÉVELOPPEMENT ET TRAITEMENT DES SORTIES D'UN

MODELE DE FERME « FARMSIM »

Présenté par : Ludovic DRUGBERT & Arthur FOREST

(4)

Remerciements

Avant tout développement sur notre travail, nous souhaitons commencer ce rapport par des remerciements et tenons à assurer de toute notre gratitude ceux qui nous ont aidés pour ce projet de troisième année.

C’est dans ce cadre que nous tenons a remercier très sincèrement, M. Raphaël MARTIN, responsable INRA, pour sont accueil et pour nous avoir suivi tout au long de ces cinq mois ainsi que pour nous avoir propose ce sujet et donne toutes les informations nécessaires pour le réaliser.

Nous tenons également à remercier M. Bruno Bachelet, notre tuteur ISIMA, qui s’est assure que notre projet se déroulait dans de bonnes conditions.

Nous leur sommes très reconnaissants de nous avoir toujours accompagnés à chaque fois dont nous avons eu besoin. Leurs remarques, leurs disponibilités ainsi que leurs conseils nous ont été très bénéfiques.

(5)

Table des illustrations

Figure 1 : Source d'émissions de GES en France en 2008 ... 3

Figure 2 : Planning du déroulement du projet ... 7

Figure 3 : Modification de la destination des fichiers de sorties ... 8

Figure 4 : Visualisation des deux zones principales de l'onglet Résultats ... 9

Figure 5 : Capture d'écran d'Eclipse sous Windows 7 ... 10

Figure 6 : Exemple d'une interface graphique réaliser avec la bibliothèque swing ... 11

Figure 7 : Exemple d'un graphe sous JFreeChart ... 12

Figure 8 : Résultat d'un exemple simple de graphique ... 13

Figure 9 : Résultat final de l'interface graphique ... 16

Figure 10 : BorderLayout ... 17

Figure 11 : La barre d'outils ... 18

Figure 12 : Diagramme UML des classes représentant les graphes ... 20

Figure 13 : Exemple de la fonctionnalité de déplacement d'un graphe ... 22

Figure 14 : Utilisation de l'internalisation ... 23

Figure 15 : Fichier XML anglais ... 23

(6)

Résumé et Abstract

Résumé

Dans un monde se voulant de plus en plus écologique, l’émission de gaz à effets de serre est devenue un problème récurant. Cependant, il est difficile de calculer avec exactitude la quantité de gaz émis par un organisme lorsque celui-ci est complexe. Dans ce projet, nous nous intéresserons au secteur primaire, et plus particulièrement aux exploitations agricoles.

FarmSim (Farm Simulation Model) est un modèle permettant de simuler une ferme d’élevage dans son intégralité. Il permet ainsi de calculer les différents flux de gaz à effets de serre à l’échelle de l’exploitation sur une année. Les résultats obtenus sont présentés au sein de feuilles Excel sous la forme de tableau et de graphiques.

L’objectif de ce projet est double. Il vise tout d’abord à améliorer la mise en forme de ces résultats afin qu’ils soient plus facilement utilisable par l’utilisateur. Nous utiliserons pour cela la bibliothèque graphique JreeChart qui nous permettra d’insérer des graphiques dans le code Java existant. De plus, il est maintenant possible de lancer des simulations sur plusieurs années. Cela n’a été que trop légèrement intégré dans les sorties. Il faudra donc veiller à mettre à disposition de l’utilisateur l’ensemble des résultats obtenus.

(7)

Abstract

In a world which wants to be more and more ecological, greenhouse gases emissions have become a recurring problem. However, it is difficult to accurately calculate the amount of gas emitted by an organism when this one is complex. In this project, we focus on the primary sector, and more particularly on farms.

FarmSim (Farm Simulation Model) is a model which simulates a farm in its entirety. It allows to calculate the various streams of greenhouse gases of the exploitation over a year. The obtained results are presented within Excel spreadsheets under the form of table and graphs.

The objective of this project is twofold. It aims first to improve the formatting of these results to make them more easily used by the user. We will use the graphics library JreeChart which will allow us to insert graphics into the existing Java code. In addition, it is now possible to run simulations over several years. This was too slightly integrated into outputs. Therefore, we'll have to make sure that all the results are available to the user.

(8)

Table des matières

INTRODUCTION ... 1

CONTEXTE ... 2

I.L'INRA ... 2

II.CONTEXTE AGRONOMIQUE ... 3

1. Émissions de gaz à effet de serre ... 3

2. Modèles ... 4 2.1. FarmSim ... 4 2.2. PASIM ... 5 2.3. CERES-EGC ... 5 III.DEMARCHE ... 6 1. Planning prévisionnel ... 6 CONCEPTION ET REALISATION ... 8

I.MODIFICATIONS DE LA DESTINATION DES FICHIERS DE SORTIE ... 8

II.TRAITEMENT DES DONNEES DE SORTIES ... 9

1. Présentation des outils de travail ... 9

1.1. Eclipse... 10

1.2. Bibliothèque swing ... 11

1.3. JFreeChart ... 12

1.4. IText ... 14

2. Construction de l'interface graphique (GUI) ... 16

2.1. La barre d'outils ... 18

2.1.1. Fonctions principales ... 19

2.1.1.1. Chargement des données ... 19

2.1.1.2. Ajout d'un graphe, choix du type de graphe et choix des variables ... 20

2.1.1.3. Génération d'un rapport au format .pdf ... 21

2.1.2. Fonctions de gestion des graphes ... 22

2.1.2.1. Monter et Descendre un graphe ... 22

2.1.2.2. Suppression des graphes ... 22

III.INTERNALISATION ... 23

RESULTATS ET PROLONGEMENT ... 25

I.BUGS CONNUS ... 25

II.AMELIORATIONS POSSIBLES ... 25

(9)

CONCLUSION ... 27

LEXIQUE ... 28

REFERENCES WEBOGRAPHIQUES ... 29

(10)

Introduction

Un des enjeux des recherches menées en agroenvironnement est de réduire les émissions de gaz à effet de serre (GES) liées à l’agriculture. Ces recherches visent notamment à concevoir des outils pour réaliser des bilans de GES et évaluer des scénarios de gestion des cultures, des prairies et des animaux permettant de réduire les émissions de dioxyde de carbone (CO2), de protoxyde d’azote (N2O) et de méthane (CH4). C’est dans ce cadre que le modèle d’exploitation agricole FARMSIM a vu le jour.

FarmSim est un logiciel permettant de simuler l’activité d’une ferme, il s’intéresse plus particulièrement aux différents GES qui sont émis durant l’activité de la ferme. Jusqu’à présent, les résultats obtenus sont représentés sous la forme de tableau, et de quelques graphiques. L’objectif de ce projet est de mettre en forme ces résultats afin d’être facilement utilisables par l’utilisateur. Une simulation s’effectue sur un an, et les graphiques actuels représentent une information condensée de ce qu’il s’est passé durant cette période. Or, il faudrait que les résultats puissent être exploités à une échelle de temps plus fine (par jour ou par mois). De plus, il est désormais possible de lancer une simulation sur plusieurs années (modèles pluriannuel). Cependant, cette extension n’a été que partiellement traitée, et les fichiers de générés en sortit ne garde que les résultats de la dernière année simulée. Il est donc impossible d’accéder à l’historique de l’exploitation. Il faudra corriger cela afin d’obtenir des résultats complets et une vision globale de la simulation.

(11)

Contexte

I. L'Inra

L’INRA, Institut Nationale de Recherche Agronomique, a été fondé en 1946. Il s’agit d’un organisme français public de recherche en agronomie. Cet institut mène des recherches pour obtenir une alimentation saine et de qualité ainsi qu’une agriculture durable et compétitive.

L’INRA comprend 14 départements scientifiques et 21 centres disséminés dans toute la France. L’INRA comprend 115 Unités de Recherche (UR) et 146 Unités Mixtes de Recherche (UMR) associant l’INRA à d’autres organismes de recherche ou d’enseignement supérieur. Notre travail a été associé à une de ces UR : l’UREP.

L'UREP, L'Unité de Recherche sur l'Ecosystème Prairial, étudie l'écologie fonctionnelle, la biodiversité et les cycles biogéochimiques (carbone et azote) des prairies permanentes pâturées dans un contexte de changement global. Elle possède une expertise

internationale dans le domaine de l'écologie prairiale et plus particulièrement sur l'impact du changement climatique, les bilans de gaz à effet de serre, la séquestration de carbone, les cycles carbone et azote, les interactions plantes-sol (microorganismes) et herbe-animal, ou encore les effets des pratiques de gestion sur la dynamique prairiale.

(12)

II. Contexte agronomique

1. Émissions de gaz à effet de serre

L'agriculture contribue de manière importante aux émissions de gaz à effet de serre (GES). En France, elle est responsable de 21% des émissions de GES comme nous le montre la figure 1.

Figure 1 : Source d'émissions de GES en France en 2008

L’agriculture est à la fois un des secteurs les plus vulnérables aux impacts des changements climatiques et un contributeur net aux émissions de gaz à effet de serre. L’agriculture rejette du méthane – CH4 (élevage et sols), du protoxyde d’azote – N2O (fertilisation azotée et gestion des déjections animales) et du dioxyde de carbone – CO2 (consommation d’énergie).

(13)

2. Modèles

[L’ensemble de cette partie a été inspiré du rapport de stage de Charlène FUSIS, effectué en 2010 : Analyse de sensibilité d'un modèle de bilans de gaz à effet de serre au sein d'exploitations agricoles]

Le modèle permettant de réaliser des bilans de GES sur lequel nous avons travaillé est en fait un couplage de trois modèles. Le premier, FarmSim, est modèle d’exploitation agricole qui calcule les émissions de GES produits par les animaux et les bâtiments d’élevage. Le second, PaSim, est un modèle de prairie qui simule l’activité végétale des prairies et l’activité des animaux mis en pâturage. Le dernier, Ceres-EGC, est un modèle de culture qui modélise la croissance des cultures.

2.1. FarmSim

Le modèle d'exploitation FarmSim a été développé en Visual Basic par l'UREP dans le cadre du projet GREENGRASS (2002-2004). Il a été par la suite recodé en JAVA en 2007. FarmSim est un outil permettant de décrire de manière standardisée une ferme d’élevage et d’en modéliser les flux de GES. Il s’appuie sur deux modèles indépendants : PASIM et CERES-EGC. FarmSim a plusieurs buts :

 Décrire de manière cohérente et standardisée les flux de carbone et d'azote des fermes.

 Structurer la collecte de l'ensemble des données nécessaires au calcul du bilan des GES à l'échelle de l'exploitation.

(14)

2.2. PASIM

Le modèle de prairie PASIM est un modèle de simulation d'un écosystème prairial géré. Il simule, à l'échelle d'une parcelle, les flux de carbone, d'azote, d'eau et d'énergie entre le sol, la végétation, les animaux et l'atmosphère. Dans le cadre de FarmSim, les sorties considérées sont les émissions de GES (CO2, CH4, N2O) liées à l'activité végétale des prairies (photosynthèse et respiration) et à l'activité des animaux au pâturage (respiration, fermentation entérique...). Ces simulations nécessitent, en entrée, des variables climatiques et d'autres paramètres d'entrée concernant le sol et la gestion par l'éleveur (fauche, pâture, fertilisation…).

2.3. CERES-EGC

Le modèle de culture CERES-EGC (Gabrielle et al., 2006; Fig. 7), codé en Fortran, est un modèle mécaniste adapté d'une famille de modèles de culture développés aux Etats-Unis (Jones and Kiniry, 1986). C'est à l'origine un modèle d'aide à la décision, uniquement destiné à augmenter les rendements. Il a été repris par l'UMR EGC pour y ajouter des modules de bilans environnementaux qui calculent par exemple le lessivage des nitrates ou les émissions de N2O, NH3 et NOx. Il modélise la croissance et le développement de la plante, les transferts de chaleur, d'eau et de solutés et les différents flux de carbone et de nitrates lors des phases de minéralisation, immobilisation par la plante, nitrification et dénitrification à partir d'informations sur l'atmosphère, le sol, le sous-sol et la gestion du couvert végétal.

(15)

III. Démarche

1. Planning prévisionnel

La planification du projet doit bien entourer toutes les étapes d'études et de réalisation. Le projet étant réparti sur plusieurs domaines, il nous a fallut adopter une planification pour bien cerner les étapes de réalisation. Avant même de nous lancer dans la conception, nous avons commencé par dresser un planning prévisionnel du déroulement de notre projet.

Cette planification est conforme aux phases du projet ainsi qu'aux objectifs attendus. Au cours de cette période, un ensemble de réunion ont été mise en place pour établir un suivie du déroulement de notre projet. Cependant, la planification du début n'était pas aussi détaillée que le diagramme ci-dessous, où nous avons rajouté, au fur et à mesure, les détails et les fonctions pour chaque étape.

(16)
(17)

Conception et réalisation

Dans ce chapitre, nous présenterons dans deux sections, les deux objectifs principaux du projet. A savoir la modification de la destination des fichiers de sortie et le traitement de ceux-ci grâce à un onglet qui permet de faire du reporting.

Il s'agit d'une description synthétique du travail effectué. Certaines parties sont plus détaillées que d'autres, du fait d'avoir passé plus de temps à leurs réalisations.

Le prochain chapitre présentera les modifications effectué sur les outputs de nos fichiers de sortie.

I. Modifications de la destination des fichiers de sortie

La première étape du travail consiste à trouver dans le code où sont générer les fichiers de sorties et de changer leurs destinations. Cette étape est primordiale pour la suite du projet. En effet, sans cette modification, les fichiers de données étaient écraser à chaque nouvelle simulation d'une ferme et étaient écraser à chaque simulation d'une nouvelle année pour chaque ferme.

Il s'agit de la partie la plus difficile et délicate du projet. L'application est composer de beaucoup de classe. Il nous a fallut comprendre le fonctionnement ce celle-ci afin de parvenir à nos objectifs.

(18)

Une fois la partie du code modifier, les données sont prêtre à être traiter. Il s'agit de la seconde étape du projet.

II.

Traitement des données de sorties

La deuxième étape consiste à crée un nouveau onglet "Résultats" qui contiendra deux zones :

 l'ensemble des graphes dans un JScrollPane

 l'ensemble des outils pour la gestion des graphes dans un deuxième JScrollPane

Figure 4 : Visualisation des deux zones principales de l'onglet Résultats

L'interface doit permettre :

- de visualiser l'émission de C02 par parcelles et par variables pour toutes les années simulées pour les 'grass' et les 'crops'

- d'ajouter et supprimer des graphes - générer des rapports .pdf

- modifier la position des graphes - de modifier un graphe déjà créé

1. Présentation des outils de travail

Pour développer notre partie du programme, nous avons utilisé l'IDE eclipse. Pour la représentation des graphes nous avons choisi d'utiliser la librairie JFreeChart qui permet de créer des graphiques en toute simplicité. Et enfin, pour le rendu version papier, nous avons choisi la librairie IText, qui permet de créer des fichiers au format .pdf.

(19)

1.1. Eclipse

Eclipse est un environnement de développement (IDE) historiquement destiné au langage Java, même si grâce à un système de plugins il peut également être utilisé avec d'autres langages de programmation.

Eclipse est un projet de la Fondation Eclipse visant à développer un environnement de développement intégré libre, extensible, universel et polyvalent.

Son objectif est de produire et fournir des outils pour la réalisation de logiciels, englobant les activités de programmation (notamment au moyen d’un environnement de développement intégré) mais aussi de modélisation, de conception, de test et de reporting. Son environnement de développement intégré vise à supporter tout langage de programmation.

Eclipse nécessite une machine virtuelle Java pour fonctionner. Mais pour compiler du code Java, un kit de développement est indispensable.

(20)

1.2. Bibliothèque swing

Pour la conception de l'interface graphique de l'onglet, nous avons choisi la bibliothèque swing du package javax.swing.*. Swing est une bibliothèque graphique pour le langage de programmation Java, faisant partie du package Java Foundation Classes (JFC), inclus dans J2SE. Swing offre la possibilité de créer des interfaces graphiques identiques quelque soit le système d'exploitation sous-jacent, au prix de performances moindres qu'en utilisant Abstract Window Toolkit (AWT). Il utilise le principe Modèle-Vue-Contrôleur (MVC) et dispose de plusieurs choix d'apparence (de vue) pour chacun des composants standard.

(21)

1.3. JFreeChart

JFreeChart est une bibliothèque graphique libre en Java qui permet aux développeurs d'afficher des graphiques de qualité professionnelle dans leurs applications. JFreeChart est un ensemble de fonctionnalités étendu qui comprend :

 une API cohérente et bien documentée, en soutenant un large éventail de types de graphiques

 une conception flexible qui est facile à étendre, et vise à la fois côté serveur et côté client des applications

 support pour de nombreux types de sortie, y compris les composants Swing, les fichiers image (y compris PNG et JPEG) et les formats de fichiers vectoriels graphiques (y compris PDF, EPS et SVG)

 JFreeChart est "open source" ou, plus précisément, le logiciel libre. Il est distribué sous les termes de la licence GNU Lesser General Public Licence (LGPL).

(22)

Exemple de création d'un graphe simple : import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries;

import org.jfree.data.xy.XYSeriesCollection; public void creerGraphe()

{

JFreeChart chartGraphe; // Le graphe (librairie JFreeChart)

XYSeriesCollection dataset = new XYSeriesCollection(); // Contient l'ensemble des séries

// On Crée deux courbres

XYSeries series1 = new XYSeries("Series 1");

XYSeries series2 = new XYSeries("Series 2");

// On ajoutes des points à nos séries

series1.add(10, 10); series1.add(20, 20); series1.add(30, 30);

series2.add(10, 20); series2.add(20, 10); series2.add(30, 30);

// Ajout des séries au dataset

dataset.addSeries(series1);

dataset.addSeries(series2);

chartGraphe = ChartFactory.createXYLineChart("Titre graphe", // Le titre du graphe

"Label X", // Le label de l'axe des abssices

"Label Y", // Le label de l'axe des ordonnées

dataset, // Le dataset avec les séries

PlotOrientation.VERTICAL, // L'orientation (vertical ou horizontale)

true, // Avec ou sans légende

true, // info-bulles

false); // urls

panelGraphe.add(new ChartPanel(chartGraphe)); // Le panelGraphe est le panel qui contient les graphes et est définie précédement.

}

Résultat graphique :

(23)

1.4. IText

iText est une bibliothèque qui nous permet de créer et de manipuler des documents PDF. Il permet aux développeurs qui cherchent à améliorer les applications Web et d'autres avec la génération dynamique de documents PDF et/ou de manipulation. Les développeurs peuvent utiliser iText pour:

 Servir PDF dans un navigateur

 Générer des documents dynamiques à partir de fichiers XML ou de bases de données

 Utilisez PDF de nombreuses fonctions interactives

 Ajouter des signets, des numéros de page, filigranes, etc

 Split, la concaténation, et de manipuler des pages PDF

 Automatiser le remplissage de formulaires PDF

 Ajouter une signature numérique à un fichier PDF

L'exemple suivant permet de créer un PDF contenant une première page de garde et une page contenant un graphe de la librairie JFreeChart :

import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; /*

* Exemple de création d'un .pdf avec la librairie IText */

public void genererPDF() {

int width = (int)PageSize.A4.getHeight(), height = (int)PageSize.A4.getWidth(); // On inverse width/height pour le format paysage

Document PDF; // Le PDF

PdfWriter writer;

PdfContentByte cb;

PdfTemplate tp;

// On récupère la date du jour

Date date = new Date();

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

String dateString = dateFormat.format(date);

try

{

Graphe graphe = listGraphe.get(0); // On récupère un graphe créer précédement

PDF = new Document(PageSize.A4, 50, 50, 50, 50); // Format du PDF : A4

writer = PdfWriter.getInstance(PDF, new

FileOutputStream(System.getProperty("user.dir")+"\\xml\\"+farm.getName()+"\\Outputs\\rapport.p df")); // Destination du .pdf

PDF.open(); // Ouverture du PDF

PDF.addTitle("Rapport FarmSim"); // Titre du PDF

(24)

Titre.setAlignment(1); // Centrer

Paragraph NomFerme = new Paragraph("Nom de la ferme : "+farm.getName());

Paragraph Date = new Paragraph("Date : "+dateString);

// Ajout des 3 paragraphe précédent sur la page de garde

PDF.add(Titre );

PDF.add(NomFerme);

PDF.add(Date );

PDF.setPageSize(PageSize.A4.rotate()); // On met la prochaine page en format portrait

PDF.newPage(); // Ajout d'une nouvelle page

// La zone de dessin avec une marge de 50 sur chaque bords (haut, bas, gauche, droite)

Rectangle2D r2D = new Rectangle2D.Double(50, 50, width - 100, height - 100);

cb = writer.getDirectContent();

tp = cb.createTemplate(width, height);

Graphics2D g2 = tp.createGraphics(width, height);

graphe.getChartGraphe().draw(g2, r2D); // On dessine le graphe

g2.rotate(Math.PI/2); // Rotation du graphe de Pi/2

g2.dispose(); // Libération des ressources internes

cb.addTemplate(tp, 0, 0); // Fermeture du document PDF.close(); } catch (Exception e) { e.printStackTrace(); } }

(25)

2. Construction de l'interface graphique (GUI)

Nous avons décidé de ne pas utiliser de Designer pour éviter d'ajouter module supplémentaire au projet FarmSim. Toute la conception graphique à été coder en dur dans la classe « InterfaceResultats ».

Contrairement aux autres onglets de l'application, l'onglet 'Résultats' à été construit grâce à des layouts, ce qui permet de le redimensionner et d'adapter l'interface à l'écran de l'utilisateur, et donc d'avoir une meilleur visibilité sur les graphiques construits.

(26)

L'onglet 'Résultat' est définie par la classe « InterfaceResultats » qui est de type « JPanel » (extends JPanel). Nous avons choisi d'utiliser un layout de type « BorderLayout » :

Figure 10 : BorderLayout

L'utilisation du « borderLayout » permettra par la suite, d'ajouter des nouvelles zones comme l'on souhaite pour visualiser d'autres fonctionnalités. Au centre (Center) est positionné la zone qui contient les graphes et à droite (East) est positionné la barre d'outil.

Les deux fonctions suivantes permettent d'initialiser de les initialiser :

initBarreOutils(); // Initialise la zone de barre d'outils situé à droite

(27)

2.1. La barre d'outils

La barre d'outils est elle-même découpé en deux zones :

 Les fonctions principales :  Charger les données  Ajouter un graphe

 Modifier le type de graphe  Choisir la variable du graphe  Générer rapport (au format .pdf)

 Les fonctions de gestion des graphes (qui dépendra du type de graphe choisi dans les fonctions principales)

Figure 11 : La barre d'outils

A l'heure actuelle du projet, seule les « Grass » et les « Crop » sont disponible. Les « Ferme » et « Bâtiments » seront probablement traités lors d'un prochain projet.

Les deux fonctions suivantes permettent d'initialiser les deux zones de la barre d'outils :

// Initilisation des deux zones de la barre d'outils initFonctionsPrincipales ();

(28)

2.1.1. Fonctions principales

Les fonctions principales permettent de :

- charger les données de la ferme en cours d'utilisation dans les structures appropriés - Ajouter un graphe en fonction du choix du type de graphe et du type de la variable à afficher

- Générer un rapport au format .pdf

2.1.1.1. Chargement des données

Les fichiers de données sont au format texte et sont de deux type : les fichiers pour les 'grass' et ceux pour 'crop'. Les fichiers pour les 'grass' contiennent l'ensemble des données pour toutes les variables et par colonne pour tous les jours de l'année (le 29 février des années bissextile n'est pas prix en compte). Les fichiers pour les 'crop' sont au même format que pour les 'grass' mise à part le fait qu'il n'y qu'une seul ligne par année, ce qui nous oblige à stocker les données dans deux structure distinctes.

Les structures qui permettent de stocker toutes les données contenus dans les fichiers de données ont été choisies de manière à simplifier au maximum leurs traitements :

Pour les 'Grass' :

// [années][parcelles][typeVariables][liste_valeurs_de_la_variables]

ArrayList<ArrayList<ArrayList<ArrayList<Double>>>> listAllVariablesGrass = new

ArrayList<ArrayList<ArrayList<ArrayList<Double>>>>();

Pour les 'Crop' :

// [années][parcelles][typeVariables][Valeur, Jour]

ArrayList<ArrayList<ArrayList<ArrayList<Double>>>> listAllVariablesCrop = new

ArrayList<ArrayList<ArrayList<ArrayList<Double>>>>();

La fonction qui permet de charger les données et de remplir les structures précédente est la fonction lireFichiers(), dont voici l'algorithme de principe :

(29)

Si les fichiers de données ont été générer alors

Pour chaque année de la simulation faire

Pour chaque fichier représentant une parcelle faire Si 'Grass' alors

Si c'est le premier fichier de type 'Grass' que l'on lit alors récupérer le nom des variables;

allouer les structures; fsi

lire le fichier courant et remplir les structures appropriés; Sinon Si 'Crop' alors

Si c'est le premier fichier de type 'Crop' que l'on lit alors récuperer le nom des variables;

allouer les structures; fsi

lire le fichier courant et remplir les structures appropriés; fsi

fait fait

calculer les différences et mettre à jours les structures appropriés;

fsi

2.1.1.2. Ajout d'un graphe, choix du type de graphe et choix des variables

Il existe deux types de graphe, un pour les « grass » et l'autre pour les « crop ». Ces deux types de graphe sont chacun représenté par deux classes java, « GrapheGrass.java » et « GrapheCrop.java » qui hérite d'une troisième classe « Graphe.java » :

Graphe

GrapheGrass GrapheCrop

Figure 12 : Diagramme UML des classes représentant les graphes

La seule différence entre les graphes pour les « grass » et ceux pour les « crop » est ma manière de les construire. Les données n'étant pas représenter de la même manière, nous avons donc choisi d'implémenter notre solution de cette manière.

(30)

La création d'un graphe est simple. Suivant le type de graphe choisi par l'utilisateur, on créer un objet « Graphe » avec le constructeur adéquat pour ensuite l'ajouter dans une structure de type ArrayList qui permet de sauvegarde nos objets. On l'ajoute ensuite dans le zone des graphes pour l'afficher et enfin on ajoute un item au comboBox qui permettra de le sélectionner (nous avons choisi de sélectionner le graphe automatiquement lorsqu'il est créer pour permettre à l'utilisateur de modifier celui-ci directement).

Pour chaque graphe est attribué une variable et une seule. Le titre du graphe porte le nom de cette variable et il n'est pas possible de changer d'en changer.

Un graphe sélectionner sera avec une couleur de fond (background color) cyan, tandis qu'un graphe non sélectionner sera blanc.

2.1.1.3. Génération d'un rapport au format .pdf

La génération du rapport ce fait en deux temps : lors du clic sur le bouton 'Générer rapport (.pdf)' l'utilisateur accède à la fenêtre 'framePDF' qui lui donne accès à un certains nombre de fonctionnalités pour le PDF. A l'heure actuelle le rapport contient une page de garde (titre, nom de la ferme et date du rapport) en format portrait suivant de tous les graphes à raison d'un graphe par page en format paysage.

(31)

2.1.2. Fonctions de gestion des graphes 2.1.2.1. Monter et Descendre un graphe

Une fonctionnalité importante nous à été demandés durant le projet. La possibilité de modifier la position des graphes. Nous avons décidé de mettre en place deux boutons 'Monter' et 'Descendre' qui permettent de monter ou de descendre le graphe en cours de sélection.

Exemple :

Monter

Figure 13 : Exemple de la fonctionnalité de déplacement d'un graphe

2.1.2.2. Suppression des graphes

Les fonctionnalités de gestion des graphes permettent de supprimer ceux-ci. Voici l'algorithme de principe de suppression d'un graphe :

Si il y a au moins un graphe alors

supprimer le graphe sélectionner supprimer tous les graphes du panel

mettre à jour la comboBox en supprimant l'item correspondant au graphe à supprimer

Si il n'y a plus de graphe alors désélectionner tous les checkBox sinon

ajouter les graphes au panel

mettre à jour les checkBox correspondant au nouveau graphe sélectionné fsi

(32)

III. Internalisation

Il nous à été demander lors de nos réunion, de mettre au point l'internalisation de notre travail. L'internationalisation a pour but de changer la langue de votre application, d’où ce nom. Cela implique un changement de structure pour l’interface dès que l’on veut afficher un mot.

Dans FarmSim ce changement de langue s’effectue dans le menu ‘Mode’ en dessous du mode expert.

Figure 14 : Utilisation de l'internalisation

Tout le vocabulaire utilisé dans FarmSim est stocké dans des fichiers XML. Ainsi, les mots ne sont pas stockés en dur dans le code, mais sont chargés en fonction de la langue sélectionnée par l’utilisateur. Les figures 15 et 16 montrent une partie des fichiers XML respectivement anglais puis français.

<!-- menus -->

<entry key="Mfile">File</entry> <entry key="Mrun">Run</entry> <entry key="Mmode">Mode</entry> <entry key="MLang">Langage</entry>

<!-- menus items -->

<!-- menus 'File' -->

<entry key="MIopen">Open</entry>

<entry key="MIopenxml">Open XML farm</entry> <entry key="MInew">New</entry>

<entry key="MIsave">Save</entry>

<entry key="MIsaveas">Save XML as</entry> <entry key="MIexit">Exit</entry>

(33)

Comme nous le montre les figures 15 et 16, l’arborescence des fichiers XML est identique. Seules les valeurs changent. Ainsi lors de la génération du menu, si la langue sélectionnée est « anglais », alors Mfile retournera « File » tandis que la version française retournera « Fichier ».

<!-- menus -->

<entry key="Mfile">Fichier</entry> <entry key="Mrun">Lancer</entry> <entry key="Mmode">Mode</entry> <entry key="MLang">Langue</entry>

<!-- menus items -->

<!-- menus 'File' -->

<entry key="MIopen">Ouvrir</entry>

<entry key="MIopenxml">Ouvrir ferme XML</entry> <entry key="MInew">Nouveau</entry>

<entry key="MIsave">Enregistrer</entry>

<entry key="MIsaveas">Enregistrer sous XML</entry> <entrykey="MIexit">Quitter</entry>

(34)

Résultats et prolongement

I. Bugs connus

Notre application contient un certain nombre de bugs, il faut donc prendre des précautions avant son utilisation.

Ne pas charger de ferme : Si l'utilisateur n'a pas charger une ferme (pluriannuelle) avec d'utiliser l'onglet de résultats, une erreur se produira lors du chargement des données. Il faut donc veiller à charger une ferme par le menu (Fichier => Ouvrir Ferme XML) avec d'utiliser notre travail.

Fichier ou dossier supplémentaire dans les dossiers outputs : Aucun dossier et/ou fichier supplémentaire ne doit se trouver dans le dossier : farmsim\xml\nomFerme _pluriAnnual\ Outputs\Resultats. Seul les dossiers et fichiers générés par la simulation de l'application doivent être présents. Si ce n'est pas le cas, une erreur se produira lors du chargement des données.

II. Améliorations possibles

Nous proposons, pour améliorer notre travail, de faire en sorte que l'utilisateur puissent choisir le nom du rapport au format .pdf générer. A l'heure actuelle le nom donné est « rapport », ce qui fait qu'a chaque génération, on écrase chaque fois l'ancien rapport.

Une deuxième amélioration possible serait de pouvoir sélectionner un graphe par click au lieu de le sélectionner par une comboBox.

(35)

III. Bilan

Dans l'ensemble, le cahier des charges à été respecté. Toutes les fonctionnalités demandés ont été réalisé et l'application ne subi, a priori, plus aucune erreurs de programmation.

Le temps imparti à bien été respecté, bien que nous aurions pus faire d'avantage. Quant à l'application, elle sera soumise après la remise de ce rapport.

(36)

Conclusion

Au moment de la rédaction de ce rapport, le travail effectuer est fonctionnelle et permet de générer des rapports au format .pdf sur les émissions de gaz à effet de serre des différentes fermes.

Plus largement, ce projet à été l'opportunité pour nous d'appréhender de nouvelles notions qui ne sont pas en lien direct avec notre formation. A contrario, nous avons bien sur pu réutiliser nos connaissances acquises durant ces trois première années à l'ISIMA, comme la programmation orienté objet en java ainsi que l'implémentation d'interface graphique.

Ce projet nous à permis de découvrir le laboratoire de l'INRA ainsi que d'acquérir une grande autonomie. Nous avons pu rencontrer un certain nom de personnes, y compris un ancien étudiant de l'ISIMA, et ainsi découvrir d'autre projet et d'autres domaines sur lesquels ils travaillent.

Nous pouvons donc tirer un bilan positif de ce projet, qui nous à permis d'approfondir nos connaissance en Java, d'aborder les différentes phases de développement d'un projet et de réaliser une application fonctionnelle dans les délais prévus.

(37)

Lexique

API : Une interface de programmation (Application Programming Interface ou API) est une interface fournie par un programme informatique. Elle permet l'interaction des programmes les uns avec les autres, de manière analogue à une interface homme-machine, qui rend possible l'interaction entre un homme et une machine.

Swing : Swing est une bibliothèque graphique pour le langage de programmation Java, faisant partie du package Java Foundation Classes (JFC), inclus dans J2SE. Swing constitue l'une des principales évolutions apportées par Java 2 par rapport aux versions antérieures.

JFreeChart : JFreeChart est une API Java permettant de créer des graphiques et des diagrammes de très bonne qualité. Cette API est open source et sous licence LGPL. En revanche, la documentation est payante.

LGPL : La Licence publique générale limitée GNU, ou GNU LGPL (pour GNU Lesser General Public License) en anglais, est une licence utilisée par certains logiciels libres.

Reporting : Un compte rendu souvent appelé en anglais reporting est l'opération consistant, pour une entreprise, à faire rapport de son activité.

Format vectoriel : Une image vectorielle, en informatique, est une image numérique composée d'objets géométriques individuels (segments de droite, polygones, arcs de cercle, etc.) définis chacun par divers attributs de forme, de position, de couleur, etc. Elle se différencie de cette manière des images matricielles (ou « bitmap »), dans lesquelles on travaille sur des pixels.

(38)

Références webographiques

JFreeChart. (2012, février 10). Wikipédia, l'encyclopédie libre. http://fr.wikipedia.org/wiki/JFreeChart

Swing (Java). (2013, février 5). Wikipédia, l'encyclopédie libre. http://fr.wikipedia.org/wiki/Swing_%28Java%29

Interface de programmation. (2013, février 26). Wikipédia, l'encyclopédie libre. http://fr.wikipedia.org/wiki/Interface_de_programmation

Licence publique générale limitée GNU. (2013, février 6).

http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_limit%C3%A9e_GNU

Eclipse (logiciel). (2013, janvier 27). Wikipédia, l'encyclopédie libre. http://fr.wikipedia.org/wiki/Eclipse_%28logiciel%29

Java : Utilisation de la bibliothèque "Swing" (24 novembre 2010). padigo

http://www.webtutoriaux.com/tutoriel-120-java-utilisation-de-la-bibliotheque-quot-swing-quot.html

Swing and GTK: What a LAF!. Chris Campbell

http://weblogs.java.net/blog/campbell/archive/2007/02/swing_and_gtk_w.html

Reporting. (2012, octobre 31). Wikipédia, l'encyclopédie libre. http://fr.wikipedia.org/wiki/Reporting

Institut national de la recherche agronomique. (2013, février 18). Wikipédia, l'encyclopédie libre.

(39)

Unité de Recherche sur l'Ecosystème Prairial (28 Janvier 2013). Pascal CARRERE https://www1.clermont.inra.fr/urep/index.php

Agriculture et gaz à effet de serre : état des lieux et perspectives (1er novembre 2010). http://www.rac-f.org/Agriculture-et-gaz-a-effet-de

(40)

Références bibliographiques

FUSIS C., Analyse de sensibilité d'un modèle de bilans de gaz à effet de serre au sein d'exploitations agricoles. Stage M1 Ingénierie de la Statistique. Université de Versailles Saint-Quentin-En-Yvelines.

KPAMEGAN SK, Evolution d’un modèle de bilan de gaz à effet de serre et refonte de son paramétrage. Stage 2ème année d’ingénieur. Institut Supérieur d'Informatique, de Modélisation et de leurs Applications.

(41)

Annexe 1

(42)

Annexe 2

Figure

Figure 1 : Source d'émissions de GES en France en 2008
Figure 2 : Planning du déroulement du projet
Figure 4 : Visualisation des deux zones principales de l'onglet Résultats
Figure 5 : Capture d'écran d'Eclipse sous Windows 7
+7

Références

Documents relatifs

Pour recherche dans une même table (même numéro pour quels clients?) utiliser un AS pour renommer .... Le natural join, je dois renommer les champs à ne

Les fichiers de type texte (voir

Le suffixe dta est l'abrégé du mot &#34;data&#34; (données) qui est souvent utilisé pour désigner un fichier qui contient des données. Le suffixe &#34;c&#34; désigne un fichier

Ecrire un programme C permettant de créer, à partir du fichier « ETUDIANT.DAT», supposé déjà créé (voir ci-dessus), le fichier de texte «ADMIS.TXT» des étudiants qui

Notons que le logiciel de traitement de texte WORD intitule sa commande &#34;fichiers&#34; &#34;LIT-ECRIT&#34;, expression qui définit la commande par ses fonctionnalités, mais

Si au contraire la fonction a trouvé un fichier, les caractéristiques de ce fichier (i.e. son nom, sa taille, ses attributs,...) sont inscrits dans une zone de la mémoire appelée

2°) Ouvrir ce fichie r en lecture via open() a fin de l’a fficher dans le shell. 3°) Ouvrir ce fichie r en lecture via open() a fin de l’a fficher dans le shell dans une liste

„ La méthode OnCancel est rarement redéfinie car son implémentation dans la classe CDialog appelle EndDilaog pour fermer la boîte et retourne IDCANCEL. „ De même, la méthode OnOK