180 lines
7.5 KiB
Plaintext
180 lines
7.5 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<!-- Updated by Blorec Hervé le 2013-09-09-->
|
|
<!-- Copyright Bob Jacobsen 2004, 2007, 2008 -->
|
|
<head>
|
|
<title>JMRI: Persistence XML</title>
|
|
<meta name="author" content="Bob Jacobsen">
|
|
<meta name="keywords" content="JMRI technical code xml persistance">
|
|
<!--#include virtual="/help/fr/parts/Style.shtml" -->
|
|
</head>
|
|
|
|
<body>
|
|
<!--#include virtual="/help/fr/parts/Header_fr.shtml" -->
|
|
<div id="mBody">
|
|
<!--#include virtual="Sidebar.shtml" -->
|
|
<div id="mainContent">
|
|
<!-- Page Body -->
|
|
|
|
<h1>JMRI: Persistence XML</h1>
|
|
|
|
<p>JMRI utilise XML pour la persistance des structures
|
|
internes, en particulier lors du stockage des
|
|
préférences et des fichiers de panneau.</p>
|
|
|
|
<p>La persistance de XML se fait via un code écrit
|
|
explicitement. Fondamentalement, certaines catégories
|
|
s'enregistrent auprès d'une instance de la
|
|
"ConfigureManager". La mise en oeuvre de l'un de ceux que
|
|
nous avons est celui pour le chargement et le stockage des
|
|
fichiers XML: jmri.configurexml. ConfigXmlManager. Quand il
|
|
est temps d'enregistrer, on dit au ConfigureXmlManager de le
|
|
faire. Il va au travers des objets enregistrés et
|
|
trouve la classe responsable de la persistance du stockage de
|
|
l'objet. Par exemple, abFoo class aura la classe
|
|
a.b.configurexml.FooXml localisée. Si cette
|
|
catégorie est trouvée, elle est dite pour
|
|
enregistrer l'objet Foo, et il ajoute un contenu Xml dans un
|
|
document JDOM pour le faire. Si ce n'est pas localisé,
|
|
un message d'erreur est émis.</p>
|
|
|
|
<p>En charge, un fichier XML est lu par le gestionnaire.
|
|
Chaque élément est examiné par un
|
|
attribut "class". S'il est trouvé, cette classe est
|
|
chargée et à remis l'élément
|
|
à traiter. Etc</p>
|
|
|
|
<p>C'est assez une méthode de hackers, et pas
|
|
très proprement tenu . Il y a une bonne
|
|
quantité de duplication de code, mais peut-être
|
|
parce qu'il vient d'un C + + de base et que le
|
|
développeur souhaite le garder pour des modèles
|
|
et classes mixin. Mais il marche!</p>
|
|
|
|
<h3>Exemple</h3>Un LightManager connaît Lights.
|
|
|
|
<p>Il y a beaucoup de classes concrètes mettant en
|
|
oeuvre l'interface Light:</p>
|
|
|
|
<ul>
|
|
<li>jmri.jmrix.loconet.LnLight</li>
|
|
|
|
<li>jmri.jmrix.cmri.serial.SerialLight</li>
|
|
|
|
<li>jmri.jmrix.powerline.SerialLight</li>
|
|
</ul>Celles-ci ont leurs propres informations internes, ce
|
|
qui n'est pas toujours le cas.
|
|
|
|
<p>Il ya aussi plusieurs classes concrètes
|
|
LightManager pour les traiter</p>
|
|
|
|
<ul>
|
|
<li>jmri.jmrix.loconet.LnLightManager</li>
|
|
|
|
<li>jmri.jmrix.cmri.serial.SerialLightManager</li>
|
|
|
|
<li>jmri.jmrix.powerline.SerialLightManager</li>
|
|
</ul>
|
|
|
|
<p>Chaque type de gestionnaire est stocké et
|
|
chargé par l'intermédiaire d'une classe de
|
|
persistance, qui se trouve en consultant la classe A avec
|
|
"XML" ajouté au nom, dans un sous-paquet direct
|
|
"configurexml" :</p>
|
|
|
|
<ul>
|
|
<li>jmri.jmrix.loconet.configurexml.LnLightManagerXml</li>
|
|
|
|
<li>
|
|
jmri.jmrix.cmri.serial.configurexml.SerialLightManagerXml</li>
|
|
|
|
<li>
|
|
jmri.jmrix.powerline.configurexml.SerialLightManagerXml</li>
|
|
</ul>Dans le cas des classes concrètes Light, le code
|
|
de persistance du gestionnaire enregistre directement et
|
|
charge même directement les lumières
|
|
individuelles. Ceci est parce qu' (à ce jour) un
|
|
gestionnaire donné a un seul type de Light (par
|
|
exemple LnLightManager n'a pas à se soucier de
|
|
LnLight). Dans les cas où cela n'est pas vrai, par
|
|
exemple, SignalHeads qui ont plusieurs classes, ils sont
|
|
classes de persistance pour les objets individuels, en plus
|
|
du gestionnaire.
|
|
|
|
<h3>Ajout d'informations à une Classe</h3>Si vous
|
|
souhaitez enregistrer plus de renseignements sur
|
|
l'état, trouver la classe persistante et ajouter du
|
|
code pour créer et lire des attributs ou des
|
|
éléments.
|
|
|
|
<p>Peut-être la meilleure façon de faire est de
|
|
créer un fichier de panneau de l'échantillon de
|
|
l'objet que vous souhaitez stocker dedans:</p>
|
|
<pre>
|
|
<sensors class="jmri.jmrix.cmri.serial.configurexml.SerialSensorManagerXml" />
|
|
<sensor systemName="CS3001" />
|
|
</sensor>
|
|
<sensors class="jmri.managers.configurexml.InternalSensorManagerXml" />
|
|
<sensor systemName="IS21" />
|
|
</sensors>
|
|
<signalheads class="jmri.configurexml.AbstractSignalHeadManagerXml">
|
|
<signalhead class="jmri.configurexml.DoubleTurnoutSignalHeadXml" systemName="IH1P">
|
|
<turnout systemName="CT10" userName="1-bit pulsed green" />
|
|
<turnout systemName="CT2" userName="1-bit pulsed red" />
|
|
</signalhead>
|
|
</signalheads>
|
|
</pre>
|
|
|
|
<p>Notez la "classe" attributs. Elle donne le nom pleinement
|
|
qualifié de la classe qui permet de charger ou stocker
|
|
cet élément particulier. Dans le cas de
|
|
capteurs, nous voyons qu'il y a deux gestionnaires en
|
|
service: un pour C/MRI, et un pour les capteurs internes.
|
|
Pour SignalHeads, il n'y a qu'un seul gérant,
|
|
jmri.configurexml.AbstractSignalHeadManager persisté
|
|
par jmri.configurexml.AbstractSignalHeadManager, mais chaque
|
|
SignalHead notamment la mise en oeuvre de classe a sa propre
|
|
classe persistante.</p>
|
|
|
|
<p>Par exemple pour ajouter des données sur un
|
|
capteur, le
|
|
jmri.jmrix.cmri.serial.configurexml.SerialSensorManagerXml et
|
|
les classes
|
|
jmri.managers.configurexml.InternalSensorManagerXml devraient
|
|
être modifiées.</p>
|
|
|
|
<p>Notez que dans certains cas, il y a une relation
|
|
d'héritage entre la persistance des classes qui peut
|
|
aider. Par exemple, la classe LocoNet <a href=
|
|
"https://jmri.org/JavaDoc/doc/jmri/jmrix/loconet/configurexml/LnSensorManagerXml.html">
|
|
LnSensorManagerXml</a> hérite de <a href=
|
|
"https://jmri.org/JavaDoc/doc/jmri/configurexml/AbstractTurnoutManagerConfigXML.html">
|
|
jmri.configurexml.AbstractSensorManagerConfigXML</a> , qui
|
|
fait presque tout le travail d'enregistrement et de
|
|
chargement des capteurs.</p>
|
|
|
|
<p>Si vous ajoutez des attributs ou des
|
|
éléments nouveaux, n'oubliez pas de mettre
|
|
à jour la définition du format, voir
|
|
ci-dessous..</p>
|
|
|
|
<h2><a id="schema" name="schema">Schéma de
|
|
Gestion</a></h2>JMRI contrôle la sémantique
|
|
de XML utilisant le
|
|
<a href="XmlSchema.shtml">Schéma XML</a>.
|
|
|
|
<p>Par exemple, l'information mise en page est
|
|
enregistrée dans des fichiers XML en tant qu'un
|
|
élément de "schéma de configuration" ,
|
|
dont le contenu est alors défini par un fichier de
|
|
schéma. Ces fichiers sont conservés dans le
|
|
répertoire <a href=
|
|
"https://jmri.org/xml/schema">xml/schema</a>.</p>
|
|
|
|
<!--#include virtual="/help/fr/parts/Footer_fr.shtml" -->
|
|
</div><!-- closes #mainContent-->
|
|
</div><!-- closes #mBody-->
|
|
<script src="/js/help.js"></script>
|
|
</body>
|
|
</html>
|