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