package org.medias.eccad.metier.generationRaster; import java.util.HashMap; import java.util.Map; import org.medias.eccad.helpers.LoggerPerso; import org.medias.eccad.helpers.SpringBeanFactory; import org.medias.eccad.metier.generationRaster.colorMap.ColorMapping; import org.medias.eccad.metier.statistique.GrapheCGI; import org.medias.eccad.metier.traducteur.TraducteurStat; import org.medias.eccad.modele.ColorTab; import org.medias.eccad.modele.Grille; import org.medias.eccad.modele.StatReponse; import org.medias.eccad.modele.Zone; import org.medias.eccad.persistance.dao.ColorTabDAO; import org.medias.eccad.persistance.dao.GrilleDAO; import org.medias.eccad.persistance.exception.PersistanceException; import org.springframework.beans.factory.xml.XmlBeanFactory; public class ServiceRaster implements IntServiceRaster { private XmlBeanFactory xmlbean; //private GenerateurMapRaster gen_carte = null; private GenerateurLegendRaster gen_legend = null; private GenerateurWorldFile gen_worldfile = null; private ColorMapping colormap = null; /** * Constructeur par défaut * */ public ServiceRaster() { // LoggerPerso.log(ServiceRaster.class, LoggerPerso.DEBUG, "création du service"); xmlbean = SpringBeanFactory.getXmlFactory(); gen_worldfile = (GenerateurWorldFile) xmlbean.getBean("worldfile"); colormap = (ColorMapping) xmlbean.getBean("colormap"); //gen_carte = new GenerateurRasterImg(); gen_legend = new GenerateurLegendeImg(); } /** * Permet la création de l'image représentant la légende */ public String genereLegend(long id_grille, long id_colormap, long id_classdis, String fichier) { colormap = getColorMap(id_colormap,id_classdis); InformationLegend info_legend = new InformationLegend(); String infoSup = info_legend.getInfoSup(id_grille,null); gen_legend.genereLegendVertical(colormap, info_legend.getLegendText(id_grille, colormap.getColorTable(), infoSup), infoSup); gen_legend.enregistreLegend(fichier+".legend.png"); return fichier+".legend.png"; } /** * Demande au CGI eccad de générer un raster pour la grille passée en paramètre. */ public StatReponse genereRaster(long id_grille, long id_colormap, long id_classdis, Zone zone, String nomProd, long id_sector, long id_mask) { float centerValue = 0, centerLat = 0, centerLon = 0; String requete = ""; GrilleDAO grilleDAO = (GrilleDAO) xmlbean.getBean("grilleDAO"); Grille grille = null; try { grille = grilleDAO.getGrille(id_grille); }catch (PersistanceException e) { LoggerPerso.log(ServiceRaster.class, LoggerPerso.ERROR, "ERROR generateRaster " + e.getM_message(), e); } GrapheCGI rasterdao = new GrapheCGI(); Map critere = new HashMap(); if (zone != null) { //*************************// String northbcN = zone.getNorthbcN().replace(",","."); String southbcN = zone.getSouthbcN().replace(",","."); String eastbcN = zone.getEastbcN().replace(",","."); String westbcN = zone.getWestbcN().replace(",","."); critere.put("lat-max", northbcN); critere.put("lat-min", southbcN); critere.put("lon-max", eastbcN); critere.put("lon-min", westbcN); } else { critere.put("lat-max", "90"); critere.put("lat-min", "-90"); critere.put("lon-max", "180"); critere.put("lon-min", "-180"); } critere.put("beg-date", grille.getDate().toString()); critere.put("end-date", grille.getDate().toString()); TraducteurStat traducteur = new TraducteurStat(); // Pour le produit IPCC, si le secteur est 0, cela signifie qu'on souhaite afficher la carte résultante de la somme des grilles associés à tous les secteurs // Sinon, on affiche une seule grille sur la carte if (nomProd.equals("IPCC") && id_sector==0) { requete = traducteur.encodeCritere(critere, grille.getId_param(), grille.getId_produit(), id_colormap, id_classdis, 0, grille.getId_rcp(), "0", "getGridsRaster", id_grille, id_mask); } else { requete = traducteur.encodeCritere(critere, grille.getId_param(), grille.getId_produit(), id_colormap, id_classdis, grille.getId_secteur(), grille.getId_rcp(), grille.getLegend(), "getGridRaster", id_grille, id_mask); } StatReponse reponse = traducteur.getReponse(rasterdao.getStatistique(requete)); if (zone != null) { centerValue = (reponse.getCenter()==null?0:reponse.getCenter().floatValue()); centerLat = (reponse.getCenterLat()==null?0:reponse.getCenterLat().floatValue()); centerLon = (reponse.getCenterLon()==null?0:reponse.getCenterLon().floatValue()); reponse.setCenter(centerValue); reponse.setCenterLat(centerLat); reponse.setCenterLon(centerLon); } //String result = rasterdao.getRaster(infoconnect.getDb_url().trim(), infoconnect.getDb_name().trim(), infoconnect.getDb_login().trim(), (int)id_grille, (int)id_colormap); return reponse; } /** * Interroge la base de données pour obtenir la table de couleur de la grille * * @param colormapid l'identifiant de la colormap * @return la table de couleur par défaut */ private ColorMapping getColorMap(long colormapid, long classdisid) { ColorTabDAO colorDAO = (ColorTabDAO) xmlbean.getBean("colorTabDAO"); ColorTab colortab = null; try { colortab = colorDAO.getColorMapByID(colormapid,classdisid); } catch (PersistanceException e) { e.printStackTrace(); } colormap.setColorTable(colortab); return colormap; } /* * Getter and Setter */ public GenerateurLegendRaster getGen_legend() { return gen_legend; } public void setGen_legend(GenerateurLegendRaster gen_legend) { this.gen_legend = gen_legend; } public GenerateurWorldFile getGen_worldfile() { return gen_worldfile; } public void setGen_worldfile(GenerateurWorldFile gen_worldfile) { this.gen_worldfile = gen_worldfile; } }