/**
   * @param simpleReport
   * @param signature the diagnosticSignature element in the diagnostic data
   * @throws DSSException
   */
  private void addSignature(SimpleReport simpleReport, SignatureWrapper signature)
      throws DSSException {

    totalSignatureCount++;

    String signatureId = signature.getId();
    XmlSignature xmlSignature = new XmlSignature();
    xmlSignature.setId(signatureId);

    addCounterSignature(signature, xmlSignature);
    addSignatureScope(signature, xmlSignature);
    addSigningTime(signature, xmlSignature);
    addSignatureFormat(signature, xmlSignature);
    addSignedBy(signature, xmlSignature);

    XmlConstraintsConclusion constraintsConclusion = null;
    switch (validationLevel) {
      case BASIC_SIGNATURES:
      case TIMESTAMPS:
        constraintsConclusion = getBasicSignatureValidationConclusion(signatureId);
        break;
      case LONG_TERM_DATA:
        constraintsConclusion = getLongTermDataValidationConclusion(signatureId);
        break;
      case ARCHIVAL_DATA:
        constraintsConclusion = getArchivalValidationConclusion(signatureId);
        break;
      default:
        logger.error("Unsupported validation level : " + validationLevel);
        break;
    }

    Indication indication = constraintsConclusion.getConclusion().getIndication();
    SubIndication subIndication = constraintsConclusion.getConclusion().getSubIndication();

    List<String> errorList = xmlSignature.getErrors();

    XmlConclusion conclusion = constraintsConclusion.getConclusion();
    List<XmlName> errors = conclusion.getErrors();
    if (CollectionUtils.isNotEmpty(errors)) {
      for (XmlName error : errors) {
        errorList.add(error.getValue());
      }
    }

    // TODO refactor
    xmlSignature.getWarnings().addAll(getWarnings(signatureId));
    xmlSignature.getInfos().addAll(getInfos(signatureId));

    if (Indication.PASSED.equals(indication)) {
      validSignatureCount++;
      xmlSignature.setIndication(Indication.TOTAL_PASSED);
    } else if (Indication.FAILED.equals(indication)) {
      xmlSignature.setIndication(Indication.TOTAL_FAILED);
    } else {
      xmlSignature.setIndication(indication); // INDERTERMINATE
    }
    xmlSignature.setSubIndication(subIndication);

    addSignatureProfile(signature, xmlSignature);

    simpleReport.getSignature().add(xmlSignature);
  }
 private void addStatistics(SimpleReport simpleReport) {
   simpleReport.setValidSignaturesCount(validSignatureCount);
   simpleReport.setSignaturesCount(totalSignatureCount);
 }
 private void addValidationTime(SimpleReport report) {
   report.setValidationTime(currentTime);
 }
 private void addDocumentName(SimpleReport report) {
   report.setDocumentName(diagnosticData.getDocumentName());
 }
 private void addPolicyNode(SimpleReport report) {
   XmlPolicy xmlpolicy = new XmlPolicy();
   xmlpolicy.setPolicyName(policy.getPolicyName());
   xmlpolicy.setPolicyDescription(policy.getPolicyDescription());
   report.setPolicy(xmlpolicy);
 }