Aide - Recherche - Membres - Calendrier
Version complète : [bean / config] configuration via un xml
Forum Développeur - Administration serveur, programmation et base de données > Programmation > ASP
wox-xion
Voilà, je ne sais pas si ce que j'ai fait à un intérêt, ou s'il vaut mieux que je reforme mon code dans mon java chaque fois...

J'ai mon bean de traitement de texte, et lorsqu'il il s'initialise (voir post de mon monologue) statiquement, les tableaux contenant les smilies et acronymes utilisés sont recherché dans un fichier xml externe.

Voic ce que ça donne :
CODE
   ...





   // smilies

   static String[] _$smiley;

   static Pattern[] _smiley;

   // wcode acronym

   static String[] _$acrstr;

   static Pattern[] _acrstr;

   static{

       try{

           setInfos();

       }catch(Exception e){

           

       }

       // on crée les tableaux de chaînes de caractères

       _smiley = new Pattern[_$smiley.length];

       _acrstr = new Pattern[_$acrstr.length];

       for(int i = 0; i < _$smiley.length; i++){

           _smiley[i] = Pattern.compile("(^| |\\n|\\r)" + _$smiley[i]);

       }

       for(int i = 0; i < _$acrstr.length; i++){

           _acrstr[i] = Pattern.compile("(^| |\\n|\\r|\\>)" + _$acrstr[i]);

       }

   }

   static String[] acrrep;

   static String[] replace;

   static String[] title;







   ...

   ... dans la fonction de traitement :



       for(int i = 0; i < _smiley.length; i++){

           str = _smiley[i].matcher(str).replaceAll("$1<img src='/smiley:"+replace[i]+"' class='smiley' title='"+title[i]+"' alt='"+title[i]+"' />");

       }



       for(int i = 0; i < _acrstr.length; i++){

           str = _acrstr[i].matcher(str).replaceAll("$1<acronym title='" + acrrep[i] + "'>" + _$acrstr[i] + "</acronym>");

       }











   ...

   ... la fonction de gestion du xml :



   public static void setInfos()

   throws Exception {

       

       DocumentBuilderFactory documentbuilderfactory = DocumentBuilderFactory.newInstance();

       DocumentBuilder documentbuilder = documentbuilderfactory.newDocumentBuilder();

       Document document = documentbuilder.parse(new ByteArrayInputStream(getXml().getBytes()));

       // node : wxconfig

       Node node = document.getChildNodes().item(0);

       // node : wxconfig>smilies

       Node smilies = node.getChildNodes().item(0);

       Node nsmilies = smilies.getChildNodes().item(0);

       NamedNodeMap nnmsmilies = nsmilies.getAttributes();

       Node nsmiliesrep = smilies.getChildNodes().item(1);

       NamedNodeMap nnmsmiliesrep = nsmiliesrep.getAttributes();

       Node nsmiliestitle = smilies.getChildNodes().item(2);

       NamedNodeMap nnmsmiliestitle = nsmiliestitle.getAttributes();

       // node : wxconfig>acronyms

       Node acronyms = node.getChildNodes().item(1);

       Node nsacronyms = acronyms.getChildNodes().item(0);

       NamedNodeMap nnmacronyms = nsacronyms.getAttributes();

       Node nsacronymsrep = acronyms.getChildNodes().item(1);

       NamedNodeMap nnmacronymsrep = nsacronymsrep.getAttributes();

       

       _$smiley = new String[nnmsmilies.getLength()];

       for(int i = 0; i < nnmsmilies.getLength(); i++){

           _$smiley[i] = nnmsmilies.item(i).getNodeValue();

       }

       replace = new String[nnmsmiliesrep.getLength()];

       for(int i = 0; i < nnmsmiliesrep.getLength(); i++){

           replace[i] = nnmsmiliesrep.item(i).getNodeValue();

       }

       title = new String[nnmsmiliestitle.getLength()];

       for(int i = 0; i < nnmsmiliestitle.getLength(); i++){

           title[i] = nnmsmiliestitle.item(i).getNodeValue();

       }

       _$acrstr = new String[nnmacronyms.getLength()];

       for(int i = 0; i < nnmacronyms.getLength(); i++){

           _$acrstr[i] = nnmacronyms.item(i).getNodeValue();

       }

       acrrep = new String[nnmacronymsrep.getLength()];

       for(int i = 0; i < nnmacronymsrep.getLength(); i++){

           acrrep[i] = nnmacronymsrep.item(i).getNodeValue();

       }

   }









   ...

   ... la fonction de lecture du fichier config.xml :



   private static String getXml()

   throws Exception {

       String sep = File.separator;

       File _$setting = new File((new StringBuilder()).append("config.xml").toString());

       // System.out.println((new StringBuilder()).append("AbsolutePath : ").append((new File("./config.xml")).getAbsolutePath()).toString());

       BufferedReader bufferedreader = new BufferedReader(new FileReader(_$setting));

       String s1;

       String s2;

       for(s1 = ""; (s2 = bufferedreader.readLine()) != null; s1 = (new StringBuilder()).append(s1).append(s2).toString()) { }

       return s1;

   }


Et le fichier config.xml ressemble à ça :
CODE
<?xml version="1.0" encoding="UTF-8"?>

<wxconfig>

<smilies>

<smiley s1=":\)" s2=":\-\-\>:" ...  />

<title s1="smile" s2="arrow" ...   />

<replace s1=":)" s2=":-->:" ...   />

</smilies>

<acronyms>

<acronym s1="asp" ...   />

<replace s1="Active Server Page" ...   />

</acronyms>

</wxconfig>


Voilà, qu'y a-t-il à améliorer ?
J'aimerai aussi savoir si ce que j'ai fait m'est utile :roll:
Vu qu'il ne s'initialise qu'une fois, je me vois mal aller changer le fichier de configuration... ça ne changera rien ^^

Ai-je intérêt à utiliser cela ou plutôt changer dans mon fichier .java et recompiler ?
Tout en sachant que je ne vais pas souvent modifier les infos qu'il contient...

Par contre, le problème réel que je me pose, c'est quand est-ce que le bean est initialisé ?
Y a-t-il un moyen de le forcer (externement) à s'initialiser, sans le supprimer bien sûr wink.gif ?
liguorien
salut
QUOTE
Voilà, qu'y a-t-il à améliorer ?
la structure de ton XML est un peu bizarre je trouve tongue.gif :mrgreen:

au lieu de :
CODE
<smilies>

  <smiley s1=":\)" s2=":\-\-\>:" ...  />

  <title s1="smile" s2="arrow" ...   />

  <replace s1=":)" s2=":-->:" ...   />

</smilies>


je verrais plutot ceci :
CODE
<smilies>

  <smiley match=":\)" title="smile" replace=":)" />

  <smiley match=":\)" title="smile" replace=":)" />

</smilies>


et ensuite ça facilitera l'usage des XPath qui réduit énormément la quantité de code ^^

CODE
import org.w3c.dom.*;

import org.apache.xpath.*;



//exemple basique d'utilisation :

NodeList list = XPathAPI.selectNodeList(doc, "/wxconfig/smilies/smiley");


@++
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.