Tous les fichiers de configuration (exceptés ceux de JMonkeyEngine) sont gérés avec XStream.

Pour l’instant l’architecture consiste à créer une classe contenant les données pour chaque objet. Par exemple pour la classe Boat nous avons la classe associée BoatData qui est sérialisée en XML par XStream.

Je ne sais pas si, à terme, la solution sera pérenne (évolution des classes data et support des anciennes versions de fichier XML).

Le wrapper pour XStream ressemble à ça :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.sailboatsim.utils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.XStream;
 
public class Conf {
    @SuppressWarnings("unchecked")
    public T load(String pSection, String pFile) {
        XStream xStream = new XStream();
        FileInputStream fis;
        try {
            fis = new FileInputStream(Utils.getFilePath(pSection, pFile));
        } catch (Exception e) {
            // Default values
            return null;
        }
        return (T) xStream.fromXML(fis);
    }
 
    public void save(T pObj, String pSection, String pFile) {
        XStream xStream = new XStream();
        try {
            FileOutputStream fos = new FileOutputStream(Utils.getFilePath(pSection, pFile));
            xStream.toXML(pObj, fos);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
}

pour sauver un fichier, par exemple depuis BoatData la sauvegarde est appelée avec :

1
new Conf().save(this, "Boat", boatName);

et la lecture avec création d’un object BoatData :

1
new Conf().load("Boat", boatName);