*/
package fr.gouv.finances.dgfip.xemelios.controls.core;
+import java.io.File;
import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.apache.commons.lang.StringUtils;
-import fr.gouv.finances.dgfip.utils.Pair;
import fr.gouv.finances.cp.utils.xml.marshal.XmlOutputter;
+import fr.gouv.finances.dgfip.utils.HostUtils;
+import fr.gouv.finances.dgfip.utils.Pair;
+import fr.gouv.finances.dgfip.xemelios.controls.core.models.ParamModel;
public class RapportWriter {
-
private XmlOutputter rapport;
-
- public RapportWriter(XmlOutputter rapportxml){
+
+ public RapportWriter(XmlOutputter rapportxml) {
rapport = rapportxml;
- startRapport();
}
-
- private void startRapport(){
+
+ public void startRapport() {
rapport.startTag("ano:DocumentRapport");
- rapport.addAttribute("xmlns:ano",Anomalie.ANOMALY_NS_URI);
-// rapport.addAttribute("xmlns:n",Anomalie.ANOMALY_NS_URI);
+ rapport.addAttribute("xmlns:ano", Anomalie.ANOMALY_NS_URI);
}
-
- public void endRapport() throws IOException{
+
+ public void endRapport() throws IOException {
rapport.endTag("ano:DocumentRapport");
- rapport.close();
- }
-
- public void writeElement(String name,Pair... attrs){
- rapport.startTag("ano:"+name);
- if(attrs.length != 0){
- for(Pair p:attrs){
- rapport.addAttribute("ano:"+p.key,p.libelle);
- }
+ rapport.close();
+ }
+
+ public void writeElement(String name, Pair... attrs) {
+ rapport.startTag("ano:" + name);
+ if (attrs.length != 0) {
+ for (Pair p : attrs) {
+ rapport.addAttribute("ano:" + p.key, p.libelle);
+ }
}
- rapport.endTag("ano:"+name);
+ rapport.endTag("ano:" + name);
}
-
- public void writeData(String data){
+
+ public void writeData(String data) {
rapport.addCharacterData(data);
}
-
- public void openElement(String name,Pair... attrs){
- rapport.startTag("ano:"+name);
- if(attrs.length != 0){
- for(Pair p:attrs){
- rapport.addAttribute(p.libelle,p.key);
- }
+
+ public void openElement(String name, Pair... attrs) {
+ rapport.startTag("ano:" + name);
+ if (attrs.length != 0) {
+ for (Pair p : attrs) {
+ rapport.addAttribute(p.libelle, p.key);
+ }
}
}
-
- public void openElement(String name){
- rapport.startTag("ano:"+name);
+
+ public void openElement(String name) {
+ rapport.startTag("ano:" + name);
+ }
+
+ public void closeElement(String name) {
+ rapport.endTag("ano:" + name);
+ }
+
+ public XmlOutputter getWriter() {
+ return rapport;
+ }
+
+ public void writeVersions(String coreVersion, String controlEngineVersion, String controlVersion) {
+ openElement("Versions");
+ writeElement("Core", new Pair("V", StringUtils.defaultIfEmpty(coreVersion, "N/A")));
+ writeElement("ControlEngine", new Pair("V", StringUtils.defaultIfEmpty(controlEngineVersion, "N/A")));
+ writeElement("Control", new Pair("V", StringUtils.defaultIfEmpty(controlVersion, "N/A")));
+ closeElement("Versions");
+ }
+
+ public void writeHeader(String documentModelId, Date datecontrole, File rapport, File fichierAController, Pair collec, Pair budg, boolean tropAno) {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");// TODO à paramétrer
+
+ // Entete du rapport
+ Pair docid = new Pair("V", documentModelId);
+ writeElement("DocId", docid);
+ writeElement("NomFichier", new Pair("V", fichierAController.getName()), new Pair("fullPath", fichierAController.getAbsolutePath()), new Pair("host", HostUtils.getHostName()));
+ // writeElement("DateControle",new Pair("V",simpleDateFormat.format(new Date())));
+ writeElement("DateControle", new Pair("V", simpleDateFormat.format(datecontrole)));
+
+ openElement("Collectivite");
+ writeElement("Siret", new Pair("V", collec.key));
+ writeElement("Libelle", new Pair("V", collec.libelle));
+ closeElement("Collectivite");
+
+ openElement("Budget");
+ writeElement("Code", new Pair("V", budg.key));
+ writeElement("Libelle", new Pair("V", budg.libelle));
+ closeElement("Budget");
+
+ writeElement("TropAnos", new Pair("V", (tropAno ? "true" : "false")));
}
-
- public void closeElement(String name){
- rapport.endTag("ano:"+name);
+
+ public void writeDomains(String[] domaines) {
+ openElement("Domaines");
+
+ for (String domain : domaines) {
+ writeElement("Domaine", new Pair("V", domain));
+ }
+ closeElement("Domaines");
}
- public XmlOutputter getWriter() { return rapport; }
+ public void writeParameters(Vector<ParamModel> params, Hashtable<String, Object> hashParams) {
+ openElement("Params");
+
+ for (ParamModel param : params) {
+ Object userParam = hashParams.get(param.getId());
+ String paramValue = "";
+
+ if (userParam instanceof Boolean) {
+ paramValue = ((Boolean) userParam ? "Oui" : "Non");
+ } else if (userParam instanceof BigDecimal || userParam instanceof String || userParam instanceof Integer) {
+ paramValue = userParam.toString();
+ } else if (userParam instanceof String[]) {
+ String[] tParam = (String[]) userParam;
+
+ if (tParam.length == 0) {
+ paramValue = "Non Renseigné";
+ } else {
+ for (int i = 0; i < tParam.length; i++) {
+ paramValue += (i != 0 ? ", " : "") + tParam[i];
+ }
+ }
+ } else {
+ paramValue = (userParam == null ? null : userParam.getClass().getName());
+ }
+ writeElement("Param", new Pair("Name", param.getName()), new Pair("Value", paramValue));
+ }
+
+ closeElement("Params");
+ }
+
+ public void writeControls(ArrayList<AbstractUnitControl> listeControls, ArrayList<ControlReturn> anomaliesTechniques) {
+ openElement("Controls");
+
+ Hashtable<String, Integer> dep = new Hashtable<String, Integer>();
+ Hashtable<String, Integer> rec = new Hashtable<String, Integer>();
+ Hashtable<String, Integer> com = new Hashtable<String, Integer>();
+ Hashtable<String, Integer> tie = new Hashtable<String, Integer>();
+ Hashtable<String, Integer> pj = new Hashtable<String, Integer>();
+ Hashtable<String, Integer> sign = new Hashtable<String, Integer>();
+ Hashtable<String, Integer> comp = new Hashtable<String, Integer>();
+ Hashtable<String, String> regles = new Hashtable<String, String>();
+
+ for (int i = 0; i < listeControls.size(); i++) {
+ String regle = null;
+ AbstractUnitControl control = listeControls.get(i);
+ String name = control.getControlId();
+ Integer value = control.getStatusControle();
+
+ if (name != null && name.startsWith("DEP")) {
+ dep.put(name, value);
+ }
+ if (name != null && name.startsWith("REC")) {
+ rec.put(name, value);
+ }
+ if (name != null && name.startsWith("COMM")) {
+ com.put(name, value);
+ }
+ if (name != null && name.startsWith("TIE")) {
+ tie.put(name, value);
+ }
+ if (name != null && name.startsWith("PJ")) {
+ pj.put(name, value);
+ }
+ if (name != null && name.startsWith("SIGN")) {
+ sign.put(name, value);
+ }
+ if (name != null && name.startsWith("COMP")) {
+ comp.put(name, value);
+ }
+
+ if (name != null) {
+ regle = control.getDocumentModel().getControlById(name).getLibelle();
+ regles.put(name, regle);
+ }
+ }
+
+ // on continue avec du code deguexu!!! vive xemelios
+ openElement("Technique");
+ for (ControlReturn ctrlRet : anomaliesTechniques) {
+ Anomalie ano = (Anomalie) ctrlRet;
+ if (ano.getControleID().startsWith("TECH")) {
+ writeElement("Control", new Pair("Name", ano.getControleID()), new Pair("Regle", ano.getRegle()), new Pair("Value", "KO"));
+ }
+ }
+ closeElement("Technique");
+ openElement("Depense");
+ writeDetails(dep, regles);
+ closeElement("Depense");
+ openElement("Recette");
+ writeDetails(rec, regles);
+ closeElement("Recette");
+ openElement("Commun");
+ writeDetails(com, regles);
+ closeElement("Commun");
+ openElement("Tiers");
+ writeDetails(tie, regles);
+ closeElement("Tiers");
+ openElement("PJ");
+ writeDetails(pj, regles);
+ closeElement("PJ");
+ openElement("Signature");
+ writeDetails(sign, regles);
+ closeElement("Signature");
+ openElement("Completude");
+ writeDetails(comp, regles);
+ closeElement("Completude");
+
+ closeElement("Controls");
+ }
+
+ public void writeDetails(Hashtable<String, Integer> h, Hashtable<String, String> listeRegles) {
+
+ Enumeration<String> lName = h.keys();
+
+ for (Enumeration e = lName; e.hasMoreElements();) {
+ String name = e.nextElement().toString();
+ writeElement("Control", new Pair("Name", name), new Pair("Regle", listeRegles.get(name)), new Pair("Value", AbstractUnitControl.vStatuts[h.get(name)]));
+ }
+
+ }
+
+ public void writeReportData(Date datecontrole, File rapport, ArrayList<ControlReturn> vano, String message) {
+ // Corps du rapport
+ openElement("DonneesRapport");
+ openElement("Rapport");
+ writeElement("Id", new Pair("V", datecontrole.getTime() + rapport.getName()));
+ if (vano != null) {
+ Collections.sort(vano, Collections.reverseOrder());
+ for (ControlReturn anomalie : vano) {
+ anomalie.marshall(this);
+ }
+ }
+ closeElement("Rapport");
+ closeElement("DonneesRapport");
+ if (message != null) {
+ openElement("Message");
+ writeData(message);
+ closeElement("Message");
+ }
+ }
+
+ public void writeExtraData(Vector<Pair> donneesFlux) {
+ if (donneesFlux != null && donneesFlux.size() > 0) {
+ openElement("DonneesFlux");
+ for (int i = 0; i < donneesFlux.size(); i++) {
+ Pair id = donneesFlux.get(i);
+ writeElement(id.key, new Pair("V", id.libelle));
+ }
+ closeElement("DonneesFlux");
+ }
+ }
}