Export-Import des fichiers cas au format XML

Les données à exporter / importer

Comme décrit dans le paragraphe 5.3 de l'appel d'offre, les données à exporter concernent la partie cas. Techniquement, ces données sont entièrement contenues dans la structure org.fudaa.dodico.corba.mascaret.SParametresCAS.

 

Solution technique

Fudaa/Java

L'outil Xstream, version 1.4.2,sera utilisé pour convertir les objets java en XML. Cet outil est déjà intégré à Fudaa ( utilisé pour Fudaa-Prepro et Fudaa-Crue) et est compatible avec le JRE 1.7.

Une nouvelle classe EdamoxXmlReaderWriter sera ajoutée au package org.fudaa.dodico.mascaret. Cette classe sera chargée de configurer Xstream et d'opérer les opérations d'écriture/lecture.

Cette classe sera également chargée de valider la xsd ou dtd du fichier xml.

La configuration de Xstream pouvant être longue, elle pourra être effectuée dans une classe à part.

Comme les classes en question sont générées par IDLJ, il ne faut pas configurer l'outil de mapping XML<-> Objet par annotations, qui seraient perdues à chaque re-génération des classes.

 

Pourquoi utiliser XStream ?

L'outil XStream est utilisé pour plusieurs projets de Fudaa dont Fudaa-Prepro et Fudaa-Mascaret. Les outils alternatifs sont nombreux (JAXB, XMLBean,...) et présentent tous des avantages inconvéniant.

Le concurrent majeur de XStream serait JAXB qui est inclus avec le JRE.

Dans notre cas, les 2 outils présentent les mêmes fonctionnalités pour lire/écrire un fichier XML à partir d'une série d'objets. Voir par exemple:

Pour le mapping XML<->Object, l'utilisation de JAXB utilise uniquement des annotations si on veut modifier le comportement initial ( changement de noms,....). Cette restriction élimine JAXB dans notre cas ou une configuration "externe" aux classes est requis.

Au sujet des performances, on peut lire plusieurs rapports et notamment:

qui place XStream comme étant le plus rapide ( attention, les tests de performances sont toujours à prendre avec des "pincettes").

XStream a été préféré car il avait déjà été validé sur d'autres projets de Fudaa et car la configuration sans annotations n'est pas possible avec JAXB.

 

Fortran

Pour la partie Fortran, 2 librairies ont été évaluées.

FOX http://www1.gly.bris.ac.uk/~walker/FoX/

Projet actif ( voir GitHub https://github.com/andreww/fox) qui supporte la lecture des XML et de la DTD. Les 2 approches SAX ( par évènvement) et DOM ( lecture complète de l'arbre) sont disponible.


XML-Fortran http://xml-fortran.sourceforge.net/

Ce projet XML-Fortran comporte plus de limitations que FOX ( pas de support de la DTD. taille du fichier XML < 1000 caractères). Le projet est moins vivante que FOX ( dernière livraison en 2010).

Voici un extrait du site concernant les limitations du projet:

Basic limitations:

  • The lines in the XML-file should not exceed 1000 characters. For tags that span more than one line, the limit holds for all the lines together (without leading or trailing blanks).

  • There is no support for DTDs or namespaces, XSLT, XPath and other more advanced features around XML.

  • There is currently no support for the object-oriented approach. It is up to the application to store the information that is needed, while the parsing is going on.

  • No support (yet) for a single quote as delimiter

  • No support (yet) for conversion of escape sequences (&gt. for instance)

  • The parser may not handle malformed XML-files properly

  • The parser does not (yet) handle different line-endings properly (that is: reading XML-files that were written under MS Windows in a UNIX or Linux environment)


Solution retenue

Le constat est clairement en faveur de FOX de part ses fonctionnalités et la vitalité du développement.

 

Modifications apportées à Fudaa-Mascaret

Modification de la partie « lancement de calcul »

Actuellement, un fichier cas est écrit pour lancer le calcul. A terme, ce fichier cas sera remplacé par le fichier xcas. Genesis laissera en commentaire le code nécessaire permettant de générer le fichier xcas à la place du fichier cas.

 

Modification de l’interface de Fudaa-Mascaret

2 nouvelles entrées doivent être intégrées à l’interface permettant l’export/import des fichiers cas au format XML soit les fichiers xcas.

Importation

 

Au cours de ce développement, l’entrée « XML » sera renommée « .masc (XML) ».

Exportation

Il s’agit d’ajouter une case à cocher « Fichier cas XML ( xcas) » au panneau d’exportation existant :

 

L'entrée ajoutée sera "Fichier cas xml (xcas)" avec comme traduction "Data simulation in xml format (xcas)"

Modification de la partie « lancement de calcul »

Actuellement, un fichier cas est écrit pour lancer le calcul. A terme, ce fichier cas sera remplacé par le fichier xcas. Genesis laissera en commentaire le code nécessaire permettant de générer le fichier xcas à la place du fichier cas.

Les modifications ont été apportées à la classe DCalculMascaret. Les modifications à décommenter sont encadrées par les comentaires:

 

//XCAS start

//XCAS end

 

 

Tests

Pour tester l’application (tests unitaires et d’intégration), Genesis utilisera les fichiers « masc » présents dans les sources Fudaa-Mascaret.

Le LNHE fournira également des fichiers masc plus volumineux permettant de tester les performances de l’export XML.

Les tests unitaires seront ajoutés au dossier de test et dans la package org.fudaa.dodico.mascaret ( identique à celui des classes testées).