{"id":205,"date":"2012-10-11T17:14:27","date_gmt":"2012-10-11T16:14:27","guid":{"rendered":"http:\/\/eboreal.com\/devblog\/?p=205"},"modified":"2016-02-28T18:33:08","modified_gmt":"2016-02-28T17:33:08","slug":"xstream","status":"publish","type":"post","link":"https:\/\/eboreal.com\/devblog\/xstream\/","title":{"rendered":"XStream"},"content":{"rendered":"<p><a href=\"https:\/\/eboreal.com\/devblog\/wp-content\/uploads\/2012\/10\/XStream-About-XStream.png\" data-rel=\"lightbox-gallery-QpREgGkZ\" data-rl_title=\"\" data-rl_caption=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-206 alignleft\" style=\"border: 5px solid white;\" title=\"\" src=\"https:\/\/eboreal.com\/devblog\/wp-content\/uploads\/2012\/10\/XStream-About-XStream.png\" alt=\"\" width=\"348\" height=\"114\" srcset=\"https:\/\/eboreal.com\/devblog\/wp-content\/uploads\/2012\/10\/XStream-About-XStream.png 348w, https:\/\/eboreal.com\/devblog\/wp-content\/uploads\/2012\/10\/XStream-About-XStream-300x98.png 300w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/a>Tous les fichiers de configuration (except\u00e9s ceux de JMonkeyEngine) sont g\u00e9r\u00e9s avec <a href=\"http:\/\/x-stream.github.io\/\" target=\"_blank\">XStream<\/a>.<\/p>\n<p>Pour l&rsquo;instant l&rsquo;architecture consiste \u00e0 cr\u00e9er une classe contenant les donn\u00e9es pour chaque objet. Par exemple pour la classe <em>Boat<\/em> nous avons la classe associ\u00e9e <em>BoatData<\/em> qui est s\u00e9rialis\u00e9e en <em>XML<\/em> par <em>XStream<\/em>.<\/p>\n<p>Je ne sais pas si, \u00e0 terme, la solution sera p\u00e9renne (\u00e9volution des classes data et support des anciennes versions de fichier XML).<\/p>\n<p>Le <em>wrapper<\/em> pour <em>XStream<\/em> ressemble \u00e0 \u00e7a :<\/p>\n<pre lang=\"java\" line=\"1\">package com.sailboatsim.utils;\r\nimport java.io.FileInputStream;\r\nimport java.io.FileOutputStream;\r\nimport com.thoughtworks.xstream.XStream;\r\n\r\npublic class Conf {\r\n\u00a0\u00a0\u00a0 @SuppressWarnings(\"unchecked\")\r\n\u00a0\u00a0\u00a0 public T load(String pSection, String pFile) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 XStream xStream = new XStream();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FileInputStream fis;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fis = new FileInputStream(Utils.getFilePath(pSection, pFile));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (Exception e) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Default values\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return null;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return (T) xStream.fromXML(fis);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 public void save(T pObj, String pSection, String pFile) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 XStream xStream = new XStream();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FileOutputStream fos = new FileOutputStream(Utils.getFilePath(pSection, pFile));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xStream.toXML(pObj, fos);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (Exception e1) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 e1.printStackTrace();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>pour sauver un fichier, par exemple depuis <em>BoatData<\/em> la sauvegarde est appel\u00e9e avec :<\/p>\n<pre lang=\"java\" line=\"1\">new Conf().save(this, \"Boat\", boatName);<\/pre>\n<p>et la lecture avec cr\u00e9ation d&rsquo;un object <em>BoatData<\/em> :<\/p>\n<pre lang=\"java\" line=\"1\">new Conf().load(\"Boat\", boatName);<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Tous les fichiers de configuration (except\u00e9s ceux de JMonkeyEngine) sont g\u00e9r\u00e9s avec XStream. Pour l&rsquo;instant l&rsquo;architecture consiste \u00e0 cr\u00e9er une classe contenant les donn\u00e9es pour chaque objet. Par exemple pour la classe Boat nous avons la classe associ\u00e9e BoatData qui est s\u00e9rialis\u00e9e en XML par XStream. Je ne sais pas si, \u00e0 terme, la solution [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":206,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[4,5,13],"tags":[],"class_list":["post-205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-outils","category-sail-boat-sim-race","et-has-post-format-content","et_post_format-et-post-format-standard"],"_links":{"self":[{"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/posts\/205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/comments?post=205"}],"version-history":[{"count":19,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/posts\/205\/revisions"}],"predecessor-version":[{"id":549,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/posts\/205\/revisions\/549"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/media\/206"}],"wp:attachment":[{"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/media?parent=205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/categories?post=205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eboreal.com\/devblog\/wp-json\/wp\/v2\/tags?post=205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}