source: ether_eccad/trunk/ECCAD_INTERFACE/WEB-INF/src/org/medias/eccad/metier/traducteur/TraducteurStat.java @ 68

Last change on this file since 68 was 68, checked in by cbipsl, 14 years ago

commit v1 eccad

  • Property svn:executable set to *
File size: 7.3 KB
Line 
1package org.medias.eccad.metier.traducteur;
2
3import java.io.ByteArrayInputStream;
4import java.util.HashMap;
5import java.util.LinkedList;
6import java.util.List;
7import java.util.Map;
8import java.util.logging.Logger;
9
10
11import org.dom4j.Document;
12import org.dom4j.Node;
13import org.medias.eccad.helpers.LoggerPerso;
14import org.medias.eccad.helpers.SpringBeanFactory;
15import org.medias.eccad.helpers.XmlHelper;
16import org.medias.eccad.modele.InfoCarte;
17import org.medias.eccad.modele.StatReponse;
18import org.medias.eccad.modele.Temporel;
19import org.medias.eccad.modele.Valeur;
20import org.medias.eccad.modele.Zone;
21import org.medias.eccad.persistance.InfoConnectBean;
22import org.springframework.beans.factory.xml.XmlBeanFactory;
23
24public class TraducteurStat {
25        XmlBeanFactory xmlbean;
26       
27        public TraducteurStat() {
28                xmlbean = SpringBeanFactory.getXmlFactory();
29        }
30       
31        public String encodeCritere(Map<String, String> criteres, long id_param, long id_produit, Long id_colormap, String fonction) {
32                return encodeCritere(criteres, id_param, id_produit, id_colormap, fonction, null);
33        }
34       
35        public String encodeCritere(Map<String, String> criteres, long id_param, long id_produit, Long id_colormap, String fonction, Long id_grille) {
36                String xml = new String();
37                InfoConnectBean infoconnect = (InfoConnectBean) xmlbean.getBean("infoConnect");
38               
39                xml = "<requete>\n";
40               
41                xml += XmlHelper.createNode("parametre", id_param);
42                xml += XmlHelper.createNode("produit", id_produit);
43                xml += XmlHelper.createNode("colormap", id_colormap);
44               
45                xml += "<connexion>\n";
46                xml += XmlHelper.createNode("host", infoconnect.getDb_url());
47                xml += XmlHelper.createNode("dbname", infoconnect.getDb_name());
48                xml += XmlHelper.createNode("user", infoconnect.getDb_login());
49                xml += "</connexion>\n";
50               
51                xml += "<domaine>\n";
52                xml += XmlHelper.createNode("lat-max", getValeur("lat-max", criteres));
53                xml += XmlHelper.createNode("lat-min", getValeur("lat-min", criteres));
54                xml += XmlHelper.createNode("lon-max", getValeur("lon-max", criteres));
55                xml += XmlHelper.createNode("lon-min", getValeur("lon-min", criteres));
56                xml += "</domaine>\n";
57               
58                xml += "<temporel>\n";
59                xml += XmlHelper.createNode("begin", getValeur("beg-date", criteres));
60                xml += XmlHelper.createNode("end", getValeur("end-date", criteres));
61                xml += "</temporel>\n";
62               
63                xml += "<fonction>\n";
64                xml += XmlHelper.createNode("nom", fonction);
65                if (id_grille != null) {
66                        xml += "<params>\n";
67                        xml += "<param>\n";
68                        xml += XmlHelper.createNode("nom", "grille");
69                        xml += XmlHelper.createNode("valeur", id_grille);
70                        xml += "</param>\n";
71                        xml += "</params>\n";
72                }
73                xml += "</fonction>\n";
74               
75               
76                xml += "</requete>\n";
77                //system.out.println(xml);
78                return xml;
79        }
80       
81        private String getValeur(String critere, Map<String, String> criteres) {
82                String valeur = criteres.get(critere);
83                if (valeur == null)
84                        return "";
85                return valeur;
86        }
87       
88        public StatReponse getReponse(String xml) {
89                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "getXMLtoDocument");
90                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "getXMLtoDocument + " + xml + "\n mon xml");
91                Document doc = null;
92                try {
93                        LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "getXMLtoDocument :: " + xml.getBytes("ISO-8859-1").length);
94               
95                doc = XmlHelper.getXMLtoDocument(new ByteArrayInputStream(xml.getBytes("ISO-8859-1")), null);
96                }
97                catch (Exception e) {
98                        LoggerPerso.log(TraducteurStat.class, LoggerPerso.ERROR, "erreur encodage");
99                }
100               
101                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "getXMLtoDocument ok : " + xml);
102                String erreur = getError(doc);
103               
104                if (erreur != null)
105                        return new StatReponse(erreur);
106               
107                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "parse zone");
108                Zone zone = new Zone(Double.parseDouble(getValue(doc, "//domaine/lat-max")),
109                                                         Double.parseDouble(getValue(doc, "//domaine/lat-min")),
110                                                         Double.parseDouble(getValue(doc, "//domaine/lon-max")),
111                                                         Double.parseDouble(getValue(doc, "//domaine/lon-min")));
112               
113                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "parse zone ok");
114                Temporel tempo = new Temporel(getValue(doc, "//temporel/begin"), getValue(doc, "//temporel/end"));
115               
116                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "parse url");
117                String url = getValue(doc, "//image-path");
118                InfoCarte info = null;
119                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "parse info");
120                if (!getValue(doc, "//pas/pas-lon").equals("") || !getValue(doc, "//pas/pas-lat").equals(""))
121                        info = new InfoCarte(Double.parseDouble(getValue(doc, "//pas/pas-lon")), Double.parseDouble(getValue(doc, "//pas/pas-lat")));           
122               
123                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "parse variable");
124                Map<String, String> map = getMapValue(doc, "//statistique/variable", "nom", "valeur");
125               
126                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "recuperation liste point");
127                List<Valeur> graphe     = getListValue(doc, "//graphe/point", "x", "y");
128                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "recuperation liste point ok");
129                Float min = getFloatValue(doc, "//extremes/mini");
130                Float max = getFloatValue(doc, "//extremes/maxi");
131                LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "recuperation min max " + min + " : " + max);
132                StatReponse reponse = new StatReponse(zone, tempo, info, url, map, graphe);
133                reponse.setMaximal(max);
134                reponse.setMinimal(min);
135               
136                Float centerValue = getFloatValue(doc, "//center/center-value");
137                reponse.setCenter(centerValue);
138               
139                Float centerLat = getFloatValue(doc, "//center/center-lat");
140                reponse.setCenterLat(centerLat);
141               
142                Float centerLon = getFloatValue(doc, "//center/center-lon");
143                reponse.setCenterLon(centerLon);
144               
145                return reponse;
146        }
147       
148        private String getError(Document doc) {
149                Node noeud = doc.selectSingleNode("//error");
150                if (noeud == null)
151                        return null;
152                else
153                        return noeud.getText();
154        }
155       
156        private Map<String, String> getMapValue(Document doc, String xpath, String nom, String valeur) {
157                List liste_node = doc.selectNodes(xpath);
158                Map<String, String> map = new HashMap<String, String>();
159               
160                for (Object onode : liste_node) {
161                        map.put(((Node)onode).selectSingleNode("./" + nom).getText(), ((Node)onode).selectSingleNode("./" + valeur).getText());
162                }
163                ////system.out.println(map);
164                return map;
165        }
166       
167        private List<Valeur> getListValue(Document doc, String xpath, String nom, String valeur) {
168                List liste_node = doc.selectNodes(xpath);
169                List<Valeur> liste = new LinkedList<Valeur>();
170               
171                for (Object onode : liste_node) {
172                        //LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "node en cours" + onode.toString());
173                        liste.add(new Valeur(((Node)onode).selectSingleNode("./" + nom).getText(), ((Node)onode).selectSingleNode("./" + valeur).getText()));
174                }
175                ////system.out.println(liste);
176                return liste;
177        }
178       
179        private String getValue(Document doc, String xpath) {
180                Node noeud = doc.selectSingleNode(xpath);
181               
182                if (noeud == null) {
183                        LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "pas de valeur pour : " + xpath);
184                        return "";
185                }
186               
187                return noeud.getText();
188        }
189       
190        private Float getFloatValue(Document doc, String xpath) {
191                Node noeud = doc.selectSingleNode(xpath);
192               
193                if (noeud == null) {
194                        LoggerPerso.log(TraducteurStat.class, LoggerPerso.DEBUG, "pas de valeur pour : " + xpath);
195                        return new Float(0.0);
196                }
197               
198                return Float.parseFloat(noeud.getText());
199        }
200}
Note: See TracBrowser for help on using the repository browser.