/**
* @author Jean-Philippe TESSIER
- *
- * Permet d'appeler les contrôles unitaires afin de
- * traiter les anomalies rencontrées que renvoient ces controles.
- * Ces anomalies sont envoyées à un serializer qui les ajoutent au fichier contôler
- * par l'intermédiares de tags namespacisés en anos afin de pouvoir les traités dans XéMèLios
+ *
+ * Permet d'appeler les contrôles unitaires afin de traiter les anomalies rencontrées que renvoient ces controles. Ces anomalies sont envoyées à un
+ * serializer qui les ajoutent au fichier contôler par l'intermédiares de tags namespacisés en anos afin de pouvoir les traités dans XéMèLios
*/
public abstract class AbstractControlContentHandler extends DefaultHandler implements ContentHandler {
- private static final Logger logger = Logger.getLogger(AbstractControlContentHandler.class);
-
- private static final String ControlProviderId = "CTRLPROV";
- protected Pair collectivite, budget;
- public int MAX_ANOS = 300;
- private ArrayList<AbstractUnitControl> controlsToCall;
- private HashMap<String,AbstractUnitControl> controlsToCallById;
- private DocumentControlModel docControlMod;
- private String documentId;
- private Hashtable<String, Object> hParams;
- private Stack<String> stack;
-// protected MainWindow owner;
- private ArrayList<ControlReturn> anos = new ArrayList<ControlReturn>();
- private ArrayList<ControlReturn> vTotalAnomalies;
- private ArrayList<Pair> vControlStatus;
- private ArrayList<ControlModel> controlsModel;
- private SaxXmlWriter saxXmlWriter;
- private NamespaceContext nsCtx;
- private boolean startEtatPassed = false;
- public boolean importInterupted = false;
- private String fileName;
- private ControlProgressListener cpl;
- ArrayList<AddOnModel> addOns = null;
- private MessagesProvider messagesProvider = null;
- private Vector<Pair> donneesFlux = null;
-
+ private static final Logger logger = Logger.getLogger(AbstractControlContentHandler.class);
+
+ private static final String ControlProviderId = "CTRLPROV";
+ protected Pair collectivite, budget;
+ public int MAX_ANOS = 300;
+ private ArrayList<AbstractUnitControl> controlsToCall;
+ private HashMap<String, AbstractUnitControl> controlsToCallById;
+ private DocumentControlModel docControlMod;
+ private String documentId;
+ private Hashtable<String, Object> hParams;
+ private Stack<String> stack;
+ // protected MainWindow owner;
+ private ArrayList<ControlReturn> anos = new ArrayList<ControlReturn>();
+ private ArrayList<ControlReturn> vTotalAnomalies;
+ private ArrayList<Pair> vControlStatus;
+ private SaxXmlWriter saxXmlWriter;
+ private NamespaceContext nsCtx;
+ public boolean importInterupted = false;
+ private String fileName;
+ private ControlProgressListener cpl;
+ ArrayList<AddOnModel> addOns = null;
+ private MessagesProvider messagesProvider = null;
+ private Vector<Pair> donneesFlux = null;
public void setControlProgressListener(ControlProgressListener cpl) {
- this.cpl = cpl;
- }
-
- public AbstractControlContentHandler(
- String documentId,
- NamespaceContext nsCtx,
- DocumentControlModel docCtrlMod,
- Hashtable<String, Object> parameters,
- String file,
- ControlProgressListener cpl) {
- super();
- setControlProgressListener(cpl);
- this.documentId = documentId;
- this.docControlMod = docCtrlMod;
- this.fileName = file;
- this.nsCtx = nsCtx;
- vTotalAnomalies = new ArrayList<ControlReturn>();
- vControlStatus = new ArrayList<Pair>();
- stack = new Stack<String>();
- controlsToCall = new ArrayList<AbstractUnitControl>();
- controlsToCallById = new HashMap<String, AbstractUnitControl>();
- messagesProvider = new MessagesProvider(docControlMod.getMessagesRessource());
- hParams = parameters;
- if (docCtrlMod.getEngine() != null) {
- addOns = docCtrlMod.getEngine().getAddOns();
- }
- if (addOns == null) {
- addOns = new ArrayList<AddOnModel>();
- }
- for (AddOnModel addOn : addOns) {
- addOn.getProcessor().setNamespaceContext(nsCtx);
- }
-
- // Le premier contrôle lit le code collectivité ainsi que le code budgétaire.
- try {
- COLLBUDG cbc = new COLLBUDG();
- cbc.setDocumentModel(docControlMod);
- cbc.setCch(this);
- cbc.setColl_path(docCtrlMod.getCollectivitePath().getCodePath().getPath());
- cbc.setColl_lib(docCtrlMod.getCollectivitePath().getLibellePath().getPath());
- cbc.setBudg_path(docCtrlMod.getBudgetPath().getCodePath().getPath());
- cbc.setBudg_lib(docCtrlMod.getBudgetPath().getLibellePath().getPath());
- controlsToCall.add(cbc);
- } catch (Exception e) {
- e.printStackTrace();
- }
- for (ControlModel ctrlm : docCtrlMod.getControls()) {
- try {
- Object o = new Object();
- if (!ctrlm.id.startsWith("TECH")) {
- o = Class.forName(ctrlm.getClasse()).newInstance();
- }
- if (o instanceof AbstractUnitControl) {
- AbstractUnitControl auc = (AbstractUnitControl) o;
- auc.setParameters(getParameters());
- auc.setDocumentModel(docControlMod);
- auc.setFileName(fileName);
- controlsToCall.add(auc);
- controlsToCallById.put(ctrlm.id, auc);
- }
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- }
-
- public void setFileName(String fileName) {
- for (AbstractUnitControl auc : controlsToCall) {
- auc.setFileName(fileName);
- }
- }
-
- @Override
- public void startDocument() throws SAXException {
- for(AddOnModel addOn:addOns) {
- if(addOn.isConcernedBy(Processor.EVENT.START_DOCUMENT, null, null, null))
- addOn.process(Processor.EVENT.START_DOCUMENT);
- }
- for (AbstractUnitControl auc : controlsToCall) {
- try {
- auc.setCch(this);
- auc.startDocument();
- } catch (SAXException saxEx) {
- logger.debug("in startDocument cch !!!", saxEx);
- }
- }
- saxXmlWriter.startDocument();
- }
-
- @Override
- public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
- stack.push(localName);
- String xpath = getXpathExpression();
- XmlAttributesImpl attrs = new XmlAttributesImpl();
- for (int i = 0; i < atts.getLength(); i++) {
- attrs.addAttribute(atts.getURI(i), atts.getLocalName(i), atts.getQName(i), atts.getType(i), atts.getValue(i));
- }
- if (stack.size() == 1) {
- // Ajout du namespace ano: au document
- startEtatPassed = true;
- saxXmlWriter.startPrefixMapping(nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI), Anomalie.ANOMALY_NS_URI);
- }
- attrs.addAttribute(Anomalie.ANOMALY_NS_URI, "node-id",
- (nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI) != null ? nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI) + ":" : "") + "node-id",
- "CDATA",
- IdGenerator.nextId());
- for (AddOnModel addOn : addOns) {
- if (addOn.isConcernedBy(Processor.EVENT.START_ELEMENT, uri, localName, qName)) {
- addOn.process(Processor.EVENT.START_ELEMENT, uri, localName, qName, attrs);
- }
- }
- for (AbstractUnitControl auc : controlsToCall) {
- auc.startElement(uri, localName, qName, attrs, getXpathExpression());
- }
- saxXmlWriter.startElement(uri, localName, qName, attrs);
- }
-
- @Override
- public void endElement(String uri, String localName, String qName) throws SAXException {
- String xPath = getXpathExpression();
- ArrayList<ControlReturn> vAno = new ArrayList<ControlReturn>();
- for (AbstractUnitControl auc : controlsToCall) {
- try {
- anos = auc.endElement(uri, localName, qName, xPath);
- if(auc.getControlId()!=null) vControlStatus.add(new Pair(auc.getControlId(), String.valueOf(auc.getStatusControle())));
- if (anos != null && !anos.isEmpty()) {
- if (!(vTotalAnomalies.size() > MAX_ANOS)) {
- vTotalAnomalies.addAll(anos);
- vAno.addAll(anos);
- }
- }
- } catch (Exception ex) {
- if(ex instanceof SAXException){
- logger.debug("in endElement!!!", ex);
- } else {
- // an exception during schema loading
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw, true);
- ex.printStackTrace(pw);
- Anomalie ano = new Anomalie(IdGenerator.nextId(),
- auc.getControlId(),
- "Erreur d'execution du " + auc.getControlId(),
- auc.getControlId(),
- "",
- "",
- "",
- "",
- "",
- new StringBuilder("<![CDATA[<b>Erreur critique lors de l'analyse du flux</b> : Veuillez contacter votre support technique.<p style='font-size: 10px; padding-left: 75px;'>").append(sw.toString()).append("</p>]]>").toString(),
- "Erreur d'execution du contrôle " + auc.getControlId(),
- "BLOQUANT",
- "xpath namespacise",
- new Hashtable<String, Object>());
- //ano.addNode(new Node(null));
- if(anos!=null){
- anos.add(ano);
- if (!(vTotalAnomalies.size() > MAX_ANOS)) {
- vTotalAnomalies.addAll(anos);
- vAno.addAll(anos);
- }
- }
- }
- }
- }
- if (!vAno.isEmpty()) {
- for (ControlReturn ano : vAno) {
- saxXmlWriter.writeAnomally(ano);
- }
- }
- if (stack.size() == 1) {
- saxXmlWriter.endPrefixMapping(nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI));
- }
-
- saxXmlWriter.endElement(uri, localName, qName);
- stack.pop();
-
- }
-
- @Override
- public void endDocument() throws SAXException {
- for (AbstractUnitControl auc : controlsToCall) {
- try {
- auc.endDocument();
- if(auc.getControlId()!=null) vControlStatus.add(new Pair(auc.getControlId(), String.valueOf(auc.getStatusControle())));
- } catch (Exception ex) {
- logger.debug("in endDocument!!!", ex);
- }
- }
- if (collectivite == null || collectivite.key == null || collectivite.libelle == null) {
- try {
- collectivite = getCollectivite(documentId, fileName);
- // on déplace ce contrôle vers le potentiel import
-// if (!owner.getConnectedUser().hasCollectivite(collectivite.key, xxx)) {
-// throw new UnauthorizedException("Voux n'êtes pas autorisé à contrôler des fichier de cette collectivite" + collectivite.libelle != null ? " (" + collectivite.libelle + ")" : "");
-// }
- } catch (Exception e) {
- e.printStackTrace();
- if(e instanceof UnauthorizedException) throw new SAXException(e);
- }
- }
- if (budget == null || budget.key == null || budget.libelle == null || budget.libelle.equals("")) {
- try {
- budget = getBudget(documentId, collectivite, fileName);
- } catch (Exception e) {
- e.printStackTrace();
- if(e instanceof UnauthorizedException) throw new SAXException(e);
- }
-
- }
- saxXmlWriter.endDocument();
- }
-
- private Hashtable<String, Object> getParameters() {
- return hParams;
- }
-
- public void setParameters(Hashtable<String, Object> ho) {
- hParams = ho;
- }
-
- private String getXpathExpression() {
- StringBuffer sb = new StringBuffer();
- for (String s : stack) {
- sb.append(s + "/");
- }
- return sb.toString();
- }
-
- public void setControlsModel(ArrayList<ControlModel> cm) {
- this.controlsModel = cm;
- }
-
- public void setSaxWriter(SaxXmlWriter sxw) {
- saxXmlWriter = sxw;
- }
-
- public ArrayList<ControlReturn> getVTotalAnomalies() {
- return vTotalAnomalies;
- }
-
- public abstract Pair getCollectivite(String documentModelId, String fileName) throws Exception;
-
- public abstract Pair getBudget(String documentModelId, Pair collectivite, String fileName) throws Exception, UnauthorizedException;
-
-
- @Override
- public void startPrefixMapping(String prefix, String uri) throws SAXException {
- super.startPrefixMapping(prefix, uri);
- for (AbstractUnitControl auc : controlsToCall) {
- auc.startPrefixMapping(prefix, uri, getXpathExpression());
- }
- saxXmlWriter.startPrefixMapping(prefix, uri);
- }
-
- @Override
- public void endPrefixMapping(String prefix) throws SAXException {
- super.endPrefixMapping(prefix);
- for (AbstractUnitControl auc : controlsToCall) {
- auc.endPrefixMapping(prefix, getXpathExpression());
- }
- saxXmlWriter.endPrefixMapping(prefix);
- }
-
- @Override
- public void characters(char[] ch, int start, int length) throws SAXException {
- for (AbstractUnitControl auc : controlsToCall) {
- try {
- auc.characters(ch, start, length, getXpathExpression());
- } catch (SAXException saxEx) {
- logger.debug("in characters!!!", saxEx);
- }
- }
- saxXmlWriter.characters(ch, start, length);
- }
-
- @Override
- public void setDocumentLocator(Locator locator) {
- saxXmlWriter.setDocumentLocator(locator);
- }
-
- @Override
- public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
- saxXmlWriter.ignorableWhitespace(ch, start, length);
- }
-
- @Override
- public void processingInstruction(String target, String data) {
- try {
- saxXmlWriter.processingInstruction(target, data);
- } catch (SAXException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void skippedEntity(String name) throws SAXException {
- saxXmlWriter.skippedEntity(name);
- }
-
- public void setNamespaceContext(NamespaceContext nsCtx) {
- this.nsCtx = nsCtx;
- }
-
- public Pair getBudget() {
- return budget;
- }
-
- public void setBudget(Pair budget) {
- this.budget = budget;
- }
-
- public Pair getCollectivite() {
- return collectivite;
- }
-
- public void setCollectivite(Pair collectivite) {
- this.collectivite = collectivite;
- logger.debug("setting collectivite: " + collectivite);
- }
-
- public ControlProgressListener getControlProgressListener() {
- return cpl;
- }
+ this.cpl = cpl;
+ }
+
+ public AbstractControlContentHandler(String documentId, NamespaceContext nsCtx, DocumentControlModel docCtrlMod, Hashtable<String, Object> parameters, String file, ControlProgressListener cpl) {
+ super();
+ setControlProgressListener(cpl);
+ this.documentId = documentId;
+ this.docControlMod = docCtrlMod;
+ this.fileName = file;
+ this.nsCtx = nsCtx;
+ vTotalAnomalies = new ArrayList<ControlReturn>();
+ vControlStatus = new ArrayList<Pair>();
+ stack = new Stack<String>();
+ controlsToCall = new ArrayList<AbstractUnitControl>();
+ controlsToCallById = new HashMap<String, AbstractUnitControl>();
+ messagesProvider = new MessagesProvider(docControlMod.getMessagesRessource());
+ hParams = parameters;
+ if (docCtrlMod.getEngine() != null) {
+ addOns = docCtrlMod.getEngine().getAddOns();
+ }
+ if (addOns == null) {
+ addOns = new ArrayList<AddOnModel>();
+ }
+ for (AddOnModel addOn : addOns) {
+ addOn.getProcessor().setNamespaceContext(nsCtx);
+ }
+
+ // Le premier contrôle lit le code collectivité ainsi que le code budgétaire.
+ try {
+ COLLBUDG cbc = new COLLBUDG();
+ cbc.setDocumentModel(docControlMod);
+ cbc.setCch(this);
+ cbc.setColl_path(docCtrlMod.getCollectivitePath().getCodePath().getPath());
+ cbc.setColl_lib(docCtrlMod.getCollectivitePath().getLibellePath().getPath());
+ cbc.setBudg_path(docCtrlMod.getBudgetPath().getCodePath().getPath());
+ cbc.setBudg_lib(docCtrlMod.getBudgetPath().getLibellePath().getPath());
+ controlsToCall.add(cbc);
+ } catch (Exception e) {
+ logger.error(e, e);
+ }
+ for (ControlModel ctrlm : docCtrlMod.getControls()) {
+ try {
+ Object o = new Object();
+ if (!ctrlm.id.startsWith("TECH")) {
+ o = Class.forName(ctrlm.getClasse()).newInstance();
+ }
+ if (o instanceof AbstractUnitControl) {
+ AbstractUnitControl auc = (AbstractUnitControl) o;
+ auc.setParameters(getParameters());
+ auc.setDocumentModel(docControlMod);
+ auc.setFileName(fileName);
+ controlsToCall.add(auc);
+ controlsToCallById.put(ctrlm.id, auc);
+ }
+ } catch (Exception e) {
+ logger.error(e, e);
+ }
+ }
+ }
+
+ public void setFileName(String fileName) {
+ for (AbstractUnitControl auc : controlsToCall) {
+ auc.setFileName(fileName);
+ }
+ }
+
+ @Override
+ public void startDocument() throws SAXException {
+ for (AddOnModel addOn : addOns) {
+ if (addOn.isConcernedBy(Processor.EVENT.START_DOCUMENT, null, null, null))
+ addOn.process(Processor.EVENT.START_DOCUMENT);
+ }
+ for (AbstractUnitControl auc : controlsToCall) {
+ try {
+ auc.setCch(this);
+ auc.startDocument();
+ } catch (SAXException saxEx) {
+ logger.error("in startDocument cch !!!", saxEx);
+ }
+ }
+ saxXmlWriter.startDocument();
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+ stack.push(localName);
+ getXpathExpression();
+ XmlAttributesImpl attrs = new XmlAttributesImpl();
+ for (int i = 0; i < atts.getLength(); i++) {
+ attrs.addAttribute(atts.getURI(i), atts.getLocalName(i), atts.getQName(i), atts.getType(i), atts.getValue(i));
+ }
+ if (stack.size() == 1) {
+ saxXmlWriter.startPrefixMapping(nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI), Anomalie.ANOMALY_NS_URI);
+ }
+ attrs.addAttribute(Anomalie.ANOMALY_NS_URI, "node-id", (nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI) != null ? nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI) + ":" : "") + "node-id", "CDATA", IdGenerator.nextId());
+ for (AddOnModel addOn : addOns) {
+ if (addOn.isConcernedBy(Processor.EVENT.START_ELEMENT, uri, localName, qName)) {
+ addOn.process(Processor.EVENT.START_ELEMENT, uri, localName, qName, attrs);
+ }
+ }
+ for (AbstractUnitControl auc : controlsToCall) {
+ auc.startElement(uri, localName, qName, attrs, getXpathExpression());
+ }
+ saxXmlWriter.startElement(uri, localName, qName, attrs);
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ String xPath = getXpathExpression();
+ ArrayList<ControlReturn> vAno = new ArrayList<ControlReturn>();
+ for (AbstractUnitControl auc : controlsToCall) {
+ try {
+ anos = auc.endElement(uri, localName, qName, xPath);
+ if (auc.getControlId() != null)
+ vControlStatus.add(new Pair(auc.getControlId(), String.valueOf(auc.getStatusControle())));
+ if (anos != null && !anos.isEmpty()) {
+ if (!(vTotalAnomalies.size() > MAX_ANOS)) {
+ vTotalAnomalies.addAll(anos);
+ vAno.addAll(anos);
+ }
+ }
+ } catch (SAXException ex) {
+ logger.error("in endElement!!!", ex);
+ } catch (Exception ex) {
+ // an exception during schema loading
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw, true);
+ ex.printStackTrace(pw);
+ Anomalie ano = new Anomalie(IdGenerator.nextId(), auc.getControlId(), "Erreur d'execution du " + auc.getControlId(), auc.getControlId(), "", "", "", "", "", new StringBuilder(
+ "<![CDATA[<b>Erreur critique lors de l'analyse du flux</b> : Veuillez contacter votre support technique.<p style='font-size: 10px; padding-left: 75px;'>").append(sw.toString()).append("</p>]]>").toString(), "Erreur d'execution du contrôle " + auc.getControlId(), "BLOQUANT",
+ "xpath namespacise", new Hashtable<String, Object>());
+ // ano.addNode(new Node(null));
+ if (anos != null) {
+ anos.add(ano);
+ if (!(vTotalAnomalies.size() > MAX_ANOS)) {
+ vTotalAnomalies.addAll(anos);
+ vAno.addAll(anos);
+ }
+ }
+
+ }
+ }
+ if (!vAno.isEmpty()) {
+ for (ControlReturn ano : vAno) {
+ saxXmlWriter.writeAnomally(ano);
+ }
+ }
+ if (stack.size() == 1) {
+ saxXmlWriter.endPrefixMapping(nsCtx.getPrefix(Anomalie.ANOMALY_NS_URI));
+ }
+
+ saxXmlWriter.endElement(uri, localName, qName);
+ stack.pop();
+
+ }
+
+ @Override
+ public void endDocument() throws SAXException {
+ for (AbstractUnitControl auc : controlsToCall) {
+ try {
+ auc.endDocument();
+ if (auc.getControlId() != null)
+ vControlStatus.add(new Pair(auc.getControlId(), String.valueOf(auc.getStatusControle())));
+ } catch (Exception ex) {
+ logger.error("in endDocument!!!", ex);
+ }
+ }
+ if (collectivite == null || collectivite.key == null || collectivite.libelle == null) {
+ try {
+ collectivite = getCollectivite(documentId, fileName);
+ } catch (Exception e) {
+ logger.error(e, e);
+ throw new SAXException(e);
+ }
+ }
+ if (budget == null || budget.key == null || budget.libelle == null || budget.libelle.equals("")) {
+ try {
+ budget = getBudget(documentId, collectivite, fileName);
+ } catch (Exception e) {
+ logger.error(e, e);
+ throw new SAXException(e);
+ }
+ }
+ saxXmlWriter.endDocument();
+ }
+
+ private Hashtable<String, Object> getParameters() {
+ return hParams;
+ }
+
+ public void setParameters(Hashtable<String, Object> ho) {
+ hParams = ho;
+ }
+
+ private String getXpathExpression() {
+ StringBuffer sb = new StringBuffer();
+ for (String s : stack) {
+ sb.append(s + "/");
+ }
+ return sb.toString();
+ }
+
+ public void setControlsModel(ArrayList<ControlModel> cm) {
+ }
+
+ public void setSaxWriter(SaxXmlWriter sxw) {
+ saxXmlWriter = sxw;
+ }
+
+ public ArrayList<ControlReturn> getVTotalAnomalies() {
+ return vTotalAnomalies;
+ }
+
+ public abstract Pair getCollectivite(String documentModelId, String fileName) throws Exception;
+
+ public abstract Pair getBudget(String documentModelId, Pair collectivite, String fileName) throws Exception, UnauthorizedException;
+
+ @Override
+ public void startPrefixMapping(String prefix, String uri) throws SAXException {
+ super.startPrefixMapping(prefix, uri);
+ for (AbstractUnitControl auc : controlsToCall) {
+ auc.startPrefixMapping(prefix, uri, getXpathExpression());
+ }
+ saxXmlWriter.startPrefixMapping(prefix, uri);
+ }
+
+ @Override
+ public void endPrefixMapping(String prefix) throws SAXException {
+ super.endPrefixMapping(prefix);
+ for (AbstractUnitControl auc : controlsToCall) {
+ auc.endPrefixMapping(prefix, getXpathExpression());
+ }
+ saxXmlWriter.endPrefixMapping(prefix);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length) throws SAXException {
+ for (AbstractUnitControl auc : controlsToCall) {
+ try {
+ auc.characters(ch, start, length, getXpathExpression());
+ } catch (SAXException saxEx) {
+ logger.error("in characters!!!", saxEx);
+ }
+ }
+ saxXmlWriter.characters(ch, start, length);
+ }
+
+ @Override
+ public void setDocumentLocator(Locator locator) {
+ saxXmlWriter.setDocumentLocator(locator);
+ }
+
+ @Override
+ public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+ saxXmlWriter.ignorableWhitespace(ch, start, length);
+ }
+
+ @Override
+ public void processingInstruction(String target, String data) {
+ try {
+ saxXmlWriter.processingInstruction(target, data);
+ } catch (SAXException e) {
+ logger.error(e, e);
+ }
+ }
+
+ @Override
+ public void skippedEntity(String name) throws SAXException {
+ saxXmlWriter.skippedEntity(name);
+ }
+
+ public void setNamespaceContext(NamespaceContext nsCtx) {
+ this.nsCtx = nsCtx;
+ }
+
+ public Pair getBudget() {
+ return budget;
+ }
+
+ public void setBudget(Pair budget) {
+ this.budget = budget;
+ }
+
+ public Pair getCollectivite() {
+ return collectivite;
+ }
+
+ public void setCollectivite(Pair collectivite) {
+ this.collectivite = collectivite;
+ logger.debug("setting collectivite: " + collectivite);
+ }
+
+ public ControlProgressListener getControlProgressListener() {
+ return cpl;
+ }
/**
* @return the controlsToCall
*/
public ArrayList<AbstractUnitControl> getControlsToCall() {
return controlsToCall;
- }
+ }
- public Document getTableReferenceResource(String ctrlId){
- return ((ControlProvider)controlsToCallById.get(ControlProviderId)).getTableReference(ctrlId);
- }
+ public Document getTableReferenceResource(String ctrlId) {
+ return ((ControlProvider) controlsToCallById.get(ControlProviderId)).getTableReference(ctrlId);
+ }
- public ArrayList<Document> getTablesReferenceResource(String ressources){
- return ((ControlProvider)controlsToCallById.get(ControlProviderId)).getTablesReference(ressources);
- }
- /**
+ public ArrayList<Document> getTablesReferenceResource(String ressources) {
+ return ((ControlProvider) controlsToCallById.get(ControlProviderId)).getTablesReference(ressources);
+ }
+
+ /**
* @return the messagesProvider
*/
public MessagesProvider getMessagesProvider() {
public void setDonneesFlux(Vector<Pair> donneesFlux) {
this.donneesFlux = donneesFlux;
}
-
+
}
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.math.BigDecimal;
import java.nio.charset.Charset;
-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 javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.xml.sax.InputSource;
import fr.gouv.finances.cp.utils.xml.marshal.XmlOutputter;
-import fr.gouv.finances.dgfip.utils.HostUtils;
+import fr.gouv.finances.dgfip.utils.ClassPathUtils;
+import fr.gouv.finances.dgfip.utils.ClassPathUtils.JarContentValue;
+import fr.gouv.finances.dgfip.utils.ClassPathUtils.JarDescription;
import fr.gouv.finances.dgfip.utils.Pair;
import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
import fr.gouv.finances.dgfip.xemelios.common.config.DocumentModel;
import fr.gouv.finances.dgfip.xemelios.controls.core.models.DocumentControlModel;
-import fr.gouv.finances.dgfip.xemelios.controls.core.models.ParamModel;
import fr.gouv.finances.dgfip.xemelios.controls.core.models.ParamModelTech;
import fr.gouv.finances.dgfip.xemelios.controls.core.tech.TECH01;
import fr.gouv.finances.dgfip.xemelios.controls.core.tech.TECH02;
public static final int STATUS_NOT_SCHEMA_VALID = 3;
public static final int STATUS_HAS_UNIT_CONTROL_ERRORS = 4;
public static final int STATUS_CONTROL_NO_ERROR = 5;
+
private final static Logger logger = Logger.getLogger(MainControl.class);
private File fichierAController, rapport, inputXmlFile;
private String documentModelId;
private NamespaceContext nameSpaces;
private SaxXmlWriter saxWriter = null;
public static final String ID_DOCUMENT_RAPPORT = "rapport";
- // private ControlsModel cm;
private String IDrapport = "", domainesControles = "";
private RapportWriter rapportWriter;
private boolean hasTech01Error = false;
private int status = STATUS_NOT_CONTROLLED;
private ArrayList<ControlReturn> anomaliesTechniques;
private SAXParserFactory factorySAX = null;
- // private String documentTitre;
private File schemaLocation;
private String textToXmlTransformer = null;
private DocumentModel documentModel;
this.documentModelId = documentModelId;
}
- // public String getDocumentTitre() {
- // return documentTitre;
- // }
- //
- // public void setDocumentTitre(String documentTitre) {
- // this.documentTitre = documentTitre;
- // }
-
public File getSchemaLocation() {
return schemaLocation;
}
if (pBudg == null || pBudg.key == null || pBudg.libelle == null) {
pBudg = new Pair("00", "Budget de Contrôle");
}
+
try {
- writeRapport(pColl, pBudg, anomaliesTechniques, cch.MAX_ANOS);
+ IDrapport = datecontrole.getTime() + rapport.getName();
+ boolean tropAno = (anomaliesTechniques != null && anomaliesTechniques.size() >= cch.MAX_ANOS && !anomaliesTechniques.get(0).getControleID().startsWith("TECH"));
+
+ try {
+ JarDescription coreJd = ClassPathUtils.getJarDescriptionByContentValue(JarContentValue.CORE);
+ JarDescription controlCoreJd = ClassPathUtils.getJarDescriptionByContentValue(JarContentValue.CONTROL_CORE);
+ JarDescription controlJd = ClassPathUtils.getJarDescriptionByContentValue(documentModelId);
+ rapportWriter.writeVersions(coreJd.getVersion(), controlCoreJd.getVersion(), (controlJd == null ? "" : controlJd.getVersion()));
+ } catch (Exception e) {
+ //Peux être on est en debug, donc pas de JAR
+ logger.warn("Unable to add module version", e);
+ }
+
+ rapportWriter.writeHeader(documentModelId, datecontrole, rapport, fichierAController, pColl, pBudg, tropAno);
+ rapportWriter.writeDomains(domainesControles.split(" / "));
+ rapportWriter.writeParameters(dcm.getParams(), hashParams);
+ rapportWriter.writeControls(cch.getControlsToCall(), anomaliesTechniques);
+ rapportWriter.writeExtraData(cch.getDonneesFlux());
+ rapportWriter.writeReportData(datecontrole, rapport, anomaliesTechniques, (dcm.getMessage() != null ? dcm.getMessage().getContent() : null));
+ rapportWriter.endRapport();
} catch (IOException ioEx) {
logger.error(ioEx, ioEx);
}
+
cpl.stopWaiting();
if (technicalValidationFailed)
cpl.notifyTechniqueValidationFailed();
this.hashParams = params;
}
- private void writeRapport(Pair collec, Pair budg, ArrayList<ControlReturn> vano, int maxanos) throws IOException {
- logger.debug("writing rapport: \n\tcollectivite = " + collec + "\n\tbuget=" + budg);
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
- String msgAno = "";
- if (vano != null && vano.size() >= maxanos && !vano.get(0).getControleID().startsWith("TECH")) {
- msgAno = "true";
- } else {
- msgAno = "false";
- }
-
- IDrapport = datecontrole.getTime() + rapport.getName();
- // Entete du rapport
- Pair docid = new Pair("V", documentModelId);
- rapportWriter.writeElement("DocId", docid);
- rapportWriter.writeElement("NomFichier", new Pair("V", fichierAController.getName()), new Pair("fullPath", fichierAController.getAbsolutePath()), new Pair("host", HostUtils.getHostName()));
- // rapportWriter.writeElement("DateControle",new Pair("V",simpleDateFormat.format(new Date())));
- rapportWriter.writeElement("DateControle", new Pair("V", simpleDateFormat.format(datecontrole)));
-
- rapportWriter.openElement("Collectivite");
- rapportWriter.writeElement("Siret", new Pair("V", collec.key));
- rapportWriter.writeElement("Libelle", new Pair("V", collec.libelle));
- rapportWriter.closeElement("Collectivite");
-
- rapportWriter.openElement("Budget");
- rapportWriter.writeElement("Code", new Pair("V", budg.key));
- rapportWriter.writeElement("Libelle", new Pair("V", budg.libelle));
- rapportWriter.closeElement("Budget");
-
- rapportWriter.writeElement("TropAnos", new Pair("V", msgAno));
-
- rapportWriter.openElement("Domaines");
- String domaines[] = domainesControles.split(" / ");
- for (String domain : domaines) {
- rapportWriter.writeElement("Domaine", new Pair("V", domain));
- }
- rapportWriter.closeElement("Domaines");
- rapportWriter.openElement("Params");
- writeParameters();
- rapportWriter.closeElement("Params");
-
- rapportWriter.openElement("Controls");
- writeControls();
- rapportWriter.closeElement("Controls");
-
- // ajout des données supplémentaires récupérées dans le flux
- Vector<Pair> donneesFlux = new Vector<Pair>();
- donneesFlux = cch.getDonneesFlux();
- if (donneesFlux != null && donneesFlux.size() > 0) {
- rapportWriter.openElement("DonneesFlux");
- for (int i = 0; i < donneesFlux.size(); i++) {
- Pair id = donneesFlux.get(i);
- rapportWriter.writeElement(id.key, new Pair("V", id.libelle));
- }
- rapportWriter.closeElement("DonneesFlux");
- }
-
- // Corps du rapport
- rapportWriter.openElement("DonneesRapport");
- rapportWriter.openElement("Rapport");
- rapportWriter.writeElement("Id", new Pair("V", datecontrole.getTime() + rapport.getName()));
- if (vano != null) {
- Collections.sort(vano, Collections.reverseOrder());
- for (ControlReturn anomalie : vano) {
- // writeAnomalie(anomalie);
- anomalie.marshall(rapportWriter);
- }
- }
- rapportWriter.closeElement("Rapport");
- rapportWriter.closeElement("DonneesRapport");
- if (dcm.getMessage() != null) {
- rapportWriter.openElement("Message");
- rapportWriter.writeData(dcm.getMessage().getHtmlContent());
- rapportWriter.closeElement("Message");
- }
- rapportWriter.endRapport();
- logger.debug("Le rapport se trouve dans : " + rapport.getParent());
- }
-
- private String writeParameters() {
- StringBuffer params = new StringBuffer();
- for (ParamModel param : dcm.getParams()) {
- 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());
- }
- rapportWriter.writeElement("Param", new Pair("Name", param.getName()), new Pair("Value", paramValue));
- }
- return params.toString();
- }
-
- private void writeControls() {
-
- ArrayList<AbstractUnitControl> listeControls = cch.getControlsToCall();
-
- 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
- rapportWriter.openElement("Technique");
- for (ControlReturn ctrlRet : anomaliesTechniques) {
- Anomalie ano = (Anomalie) ctrlRet;
- if (ano.getControleID().startsWith("TECH")) {
- rapportWriter.writeElement("Control", new Pair("Name", ano.getControleID()), new Pair("Regle", ano.getRegle()), new Pair("Value", "KO"));
- }
- }
- rapportWriter.closeElement("Technique");
- rapportWriter.openElement("Depense");
- writeDetails(dep, regles);
- rapportWriter.closeElement("Depense");
- rapportWriter.openElement("Recette");
- writeDetails(rec, regles);
- rapportWriter.closeElement("Recette");
- rapportWriter.openElement("Commun");
- writeDetails(com, regles);
- rapportWriter.closeElement("Commun");
- rapportWriter.openElement("Tiers");
- writeDetails(tie, regles);
- rapportWriter.closeElement("Tiers");
- rapportWriter.openElement("PJ");
- writeDetails(pj, regles);
- rapportWriter.closeElement("PJ");
- rapportWriter.openElement("Signature");
- writeDetails(sign, regles);
- rapportWriter.closeElement("Signature");
- rapportWriter.openElement("Completude");
- writeDetails(comp, regles);
- rapportWriter.closeElement("Completude");
- }
-
- private 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();
- rapportWriter.writeElement("Control", new Pair("Name", name), new Pair("Regle", listeRegles.get(name)), new Pair("Value", AbstractUnitControl.vStatuts[h.get(name)]));
- }
-
- }
-
- // public abstract void writeControlConfigFile() throws IOException;
-
public int getControlStatus() {
return status;
}
rapportLocation = absoluteFileName;
}
- // public AbstractControlContentHandler getControlContentHandler(DocumentModel dm, DocumentControlModel docCtrlMod, Hashtable<String, Object> parameters,
- // MainWindow owner, String file, ControlProgressListener cpl) {
- // return new DefaultControlContentHandler(dm, docCtrlMod, parameters, owner, file, cpl);
- // }
public abstract AbstractControlContentHandler getControlContentHandler(String documentModelId, DocumentControlModel docCtrlMod, Hashtable<String, Object> parameters, String file, ControlProgressListener cpl);
/**
*/
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 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(){
+
+ private 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();
+ 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);
- }
+
+ 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 closeElement(String name){
- rapport.endTag("ano:"+name);
+ public void writeVersions(String coreVersion, String controlEngineVersion, String controlVersion){
+ openElement("Versions");
+ writeElement("Core", new Pair("V", coreVersion));
+ writeElement("ControlEngine", new Pair("V", controlEngineVersion));
+ writeElement("Control", new Pair("V", controlVersion));
+ 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 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");
+ }
+ }
}