+++ /dev/null
-package fr.mbdx.parapheur;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.activiti.engine.delegate.DelegateExecution;
-import org.activiti.engine.delegate.JavaDelegate;
-import org.activiti.engine.impl.util.json.JSONException;
-import org.activiti.engine.impl.util.json.JSONObject;
-import org.alfresco.cmis.client.AlfrescoDocument;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.log4j.Logger;
-
-import fr.mbdx.parapheur.client.Statut;
-import fr.mbdx.service.ServiceCMIS;
-import fr.mbdx.service.ServiceRestAlfresco;
-
-/**
- * Tache de cloture d'une demande de signature.
- *
- */
-// @Component("clotureParapheur")
-public class TaskClotureParapheur implements JavaDelegate {
- protected static Logger log = Logger.getLogger(TaskClotureParapheur.class);
-
- public static DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy 'à' HH:mm");
- public static String SPACES_STORE_PREFIX = "workspace://SpacesStore/";
-
- protected ServiceCMIS serviceCMIS;
- protected ServiceRestAlfresco serviceRestAlfresco;
-
- @Override
- public void execute(DelegateExecution execution) {
-
- // Extract param
- String pdfNodeRef = (String) execution.getVariable("pdfNodeRef");
- final String nodeRef = (String) execution.getVariable("nodeRef");
- final byte[] contentValue = (byte[]) execution.getVariable("contentValue");
- final String contentType = (String) execution.getVariable("contentType");
- final String dossierTitre = (String) execution.getVariable("dossierTitre");
- final String pdfName = (String) execution.getVariable("pdfName");
- final String annotationPrivee = (String) execution.getVariable("annotationPrivee");
- final String annotationPublique = (String) execution.getVariable("annotationPublique");
- final byte[] fichierPESContent = (byte[]) execution.getVariable("fichierPESContent");
- final String fichierPESContentType = (String) execution.getVariable("fichierPESContentType");
- final byte[] signatureDocPrincipalContent = (byte[]) execution.getVariable("signatureDocPrincipalContent");
- final String signatureDocPrincipalContentType = (String) execution.getVariable("signatureDocPrincipalContentType");
- final String xpathSignatureXML = (String) execution.getVariable("xpathSignatureXML");
- String statutDossier = (String) execution.getVariable("statutDossier");
- final String nomSignataire = (String) execution.getVariable("nomSignataire");
- final String fonctionSignataire = (String) execution.getVariable("fonctionSignataire");
- final String emetteur = (String) execution.getVariable("emetteur");
- final String typeGed = (String) execution.getVariable("typeGed");
-
- log.debug("Cloture d'une demande au parapheur");
- try {
- serviceCMIS.createSession();
-
- AlfrescoDocument doc = serviceCMIS.getDocument(nodeRef);
- log.debug("Document original récupéré : " + doc.getName());
-
- // TODO vérifier que ce getParents renvoie bien le dossier parent en premier
- Folder parent = doc.getParents().get(0);
- log.debug("Parent du document : " + parent.getName());
-
- // Enregistrement du visuel PDF
- if (!statutDossier.equals("RejetSignataire")) {
- AlfrescoDocument newDoc = null;
- if (pdfNodeRef != null) {
- log.debug("Récupération du visuel PDF Alfresco");
- newDoc = serviceCMIS.getDocument(pdfNodeRef);
- log.debug("Nom du visuel PDF : " + newDoc.getName());
- InputStream stream = new ByteArrayInputStream(contentValue);
- ContentStream contentStream = serviceCMIS.createContentStream(pdfName, contentValue.length, contentType, stream);
- newDoc.setContentStream(contentStream, true);
- log.debug("Enregistrement du PDF : " + newDoc.getName());
- } else {
- log.debug("Enregistrement du visuel PDF iParapheur");
- newDoc = serviceCMIS.createDocument(parent, pdfName, contentValue, contentType);
- pdfNodeRef = newDoc.getId();
- log.debug("Enregistrement du visuel PDF iParapheur -> Fin()");
- }
- }
-
- String fichierPESRef = null;
- if (fichierPESContent != null) {
- String nomFichierPES = dossierTitre;
- if (typeGed.equals("delib")) {
- nomFichierPES = nomFichierPES + "_fichier PES.xml";
- } else {
- nomFichierPES = nomFichierPES + "_fichier PES publicité.xml";
- }
- AlfrescoDocument fichierPES = serviceCMIS.createDocument(parent, nomFichierPES, fichierPESContent, fichierPESContentType);
- fichierPESRef = fichierPES.getId();
- }
-
- String signatureDocPrincipalRef = null;
- if (signatureDocPrincipalContent != null) {
- log.debug("Création du fichier de signature");
- String nomFichierSignature = dossierTitre;
- if (typeGed.equalsIgnoreCase("publicites")) {
- nomFichierSignature = nomFichierSignature + "_publicité";
- }
- if (signatureDocPrincipalContentType.contains("zip")) {
- nomFichierSignature = nomFichierSignature + ".zip";
- } else {
- nomFichierSignature = nomFichierSignature + ".p7s";
- }
- AlfrescoDocument fichierSignature = serviceCMIS.createDocument(parent, nomFichierSignature, signatureDocPrincipalContent,
- signatureDocPrincipalContentType);
- signatureDocPrincipalRef = fichierSignature.getId();
- log.debug("Création du fichier de signature -> Fin()");
- }
-
- if (sendToRepository(nodeRef, pdfNodeRef, statutDossier, nomSignataire, fonctionSignataire, emetteur, typeGed, fichierPESRef,
- signatureDocPrincipalRef, xpathSignatureXML, annotationPublique, annotationPrivee)) {
- log.debug("L'archivage du dossier de signature s'est correctement effectué sur l'entrepôt de documents");
- }
- } catch (Exception e) {
- log.error("Erreur au cours du renvoi du contenu du document signé à Alfresco pour le document " + nodeRef);
- log.error(e.getMessage(), e);
- }
- }
-
- boolean sendToRepository(String nodeRef, String pdfNodeRef, String statutDossier, String nomSignataire, String fonctionSignataire,
- String emetteur, String typeGed, String fichierPESRef, String signatureDocPrincipalRef, String xpathSignatureXML,
- String annotationPublique, String annotationPrivee) {
- boolean result = false;
-
- final String req = "/wcs/fr/mbdx/noyau/signature/archive";
-
- Map<String, String> param = new HashMap<String, String>();
- param.put("nodeRef", getObjectKey(nodeRef));
- param.put("pdfRef", getObjectKey(pdfNodeRef));
- statutDossier = Statut.RejetSignataire.value().equals(statutDossier) ? Statut.Signe.value() : statutDossier; // FIXME A SUPPRIMER
- param.put("statutDossier", statutDossier);
- param.put("nomSignataire", nomSignataire);
- param.put("fonctionSignataire", fonctionSignataire);
- param.put("emetteur", emetteur);
- param.put("typeFlux", typeGed);
- if (fichierPESRef != null) {
- param.put("fichierPESRef", getObjectKey(fichierPESRef));
- }
- if (signatureDocPrincipalRef != null) {
- param.put("fichierSignatureRef", getObjectKey(signatureDocPrincipalRef));
- }
- if (xpathSignatureXML != null) {
- param.put("xpathSignatureXML", xpathSignatureXML);
- }
- if (annotationPublique != null) {
- param.put("annotationPublique", annotationPublique);
- }
- if (annotationPrivee != null) {
- param.put("annotationPrivee", annotationPrivee);
- }
-
- log.debug("Appel au webscript Alfresco d'archivage");
- JSONObject json = serviceRestAlfresco.get(req, param);
- try {
- String res = json.getString("result");
- result = (res != null && res.equalsIgnoreCase("ok"));
- } catch (JSONException e) {
- log.error("Appel au webscript Alfresco d'archivage -> Echec !!!!");
- log.error(e.getMessage(), e);
- }
- log.debug("Appel au webscript Alfresco d'archivage -> Fin()");
- if (!result) {
- log.error("Une erreur a eu lieu au cours de l'archivage du dossier de signature.");
- }
-
- return result;
- }
-
- public String getObjectKey(String id) {
- if (id == null) {
- return null;
- } else if (id.startsWith(SPACES_STORE_PREFIX)) {
- return id;
- } else {
- return SPACES_STORE_PREFIX + id;
- }
- }
-
- /**
- * @param serviceCMIS
- * the serviceCMIS to set
- */
- public void setServiceCMIS(ServiceCMIS serviceCMIS) {
- this.serviceCMIS = serviceCMIS;
- }
-
- /**
- * @param serviceRestAlfresco
- * the serviceRestAlfresco to set
- */
- public void setServiceRestAlfresco(ServiceRestAlfresco serviceRestAlfresco) {
- this.serviceRestAlfresco = serviceRestAlfresco;
- }
-}