import java.io.File;
import java.io.FileInputStream;
+import java.io.StringReader;
import java.util.Map;
+import javax.json.Json;
+// import javax.json.JsonReader;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParserFactory;
import javax.xml.ws.BindingProvider;
import org.adullact.spring_ws.iparapheur._1.*;
return service.getListeSousTypes(stype);
}
+ /* public static GetListeMetaDonneesResponse appelGetListeMetaDonnees() {
+ return service.getListeMetaDonnees("");
+ } */
+ public static ListeMetaDonnees appelGetListeMetaDonnees() {
+ return new ListeMetaDonnees(service.getListeMetaDonnees(""));
+ }
+
public static String appelEcho(String str) {
return service.echo(str);
}
return res.getMessageRetour().getMessage();
}
- public static String appelCreerDossier(String type, String sType, String emailEmetteur, String dossierID, String docPrincipal, String nomDocPrincipal, String visibilite){
+ /**
+ * Requete SOAP vers i-Parapheur pour creation de dossier bureautique (non XML)
+ *
+ * @param type : le type metier du dossier
+ * @param sType : le sous-type metier du dossier
+ * @param emailEmetteur : e-mail de notification pour l'emetteur, peut etre une chaine vide
+ * @param dossierID : ID du dossier
+ * @param docPrincipal : chemin vers document principal (unique pour le moment)
+ * @param nomDocPrincipal : nom du document principal pour affichage dans i-parapheur
+ * @param visibilite : visibilite souhaitee dans i-Parapheur (PUBLIC, CONFIDENTIEL, GROUPE)
+ * @param mdataJson : metadonnees format JSON
+ * @param dateLimmite : date limite format JJ-MM-AAAA
+ * @param annexesJson : les annexes, liste formattee JSON
+ * @return : le message de succes ou non de l'operation de creation de dossier
+ */
+ public static String appelCreerDossier(String type, String sType, String emailEmetteur, String dossierID, String docPrincipal, String nomDocPrincipal, String visibilite, String mdataJson, String dateLimmite, String annexesJson){
CreerDossierRequest creerDossierRequest = new CreerDossierRequest();
creerDossierRequest.setTypeTechnique(type);
creerDossierRequest.setSousType(sType);
creerDossierRequest.setNomDocPrincipal(nomDocPrincipal);
//inutile! creerDossierRequest.setVisuelPDF(GetTypeDoc(visuelPdf, "application/pdf"));
creerDossierRequest.setVisibilite(Visibilite.fromValue(visibilite));
+ if (mdataJson != null) {
+ TypeMetaDonnees mdata = jsonToMetadonnees(mdataJson);
+ if (mdata != null) {
+ creerDossierRequest.setMetaData(mdata);
+ }
+ }
+ //creerDossierRequest.setAnnotationPrivee();
+ //creerDossierRequest.setAnnotationPublique();
+ if (dateLimmite != null) {
+ // TODO: faire la date limite !
+ // creerDossierRequest.setDateLimite();
+ }
+ if (annexesJson != null) {
+ File file = new File(docPrincipal);
+
+ TypeDocAnnexes annexes = jsonToAnnexes(file.getParent(), annexesJson);
+ creerDossierRequest.setDocumentsAnnexes(annexes);
+ }
+
CreerDossierResponse res = service.creerDossier(creerDossierRequest);
return res.getMessageRetour().getMessage();
}
- public static String appelCreerDossierXML(String type, String sType, String emailEmetteur, String dossierID, String docPrincipal, String nomDocPrincipal, String visuelPdf, String xPathSig, String visibilite){
+ public static String appelCreerDossierXML(String type, String sType, String emailEmetteur, String dossierID, String docPrincipal, String nomDocPrincipal, String visuelPdf, String xPathSig, String visibilite, String mdataJson, String dateLimmite){
CreerDossierRequest creerDossierRequest = new CreerDossierRequest();
creerDossierRequest.setTypeTechnique(type);
creerDossierRequest.setSousType(sType);
creerDossierRequest.setVisuelPDF(GetTypeDoc(visuelPdf, "application/pdf"));
creerDossierRequest.setXPathPourSignatureXML(xPathSig);
creerDossierRequest.setVisibilite(Visibilite.fromValue(visibilite));
+ if (mdataJson != null) {
+ TypeMetaDonnees mdata = jsonToMetadonnees(mdataJson);
+ if (mdata != null) {
+ creerDossierRequest.setMetaData(mdata);
+ }
+ }
+ if (dateLimmite != null) {
+ // TODO: faire la date limite !
+ // creerDossierRequest.setDateLimite();
+ }
CreerDossierResponse res = service.creerDossier(creerDossierRequest);
return res.getMessageRetour().getMessage();
return doc;
}
+ private static TypeMetaDonnees jsonToMetadonnees(String json) {
+ // controles d'entree vide
+ if (json == null || json.trim().isEmpty()) {
+ return null;
+ }
+ System.out.println("INFO: json=" + json);
+
+ /**
+ * TODO : choper la liste des metadata du i-parapheur, autres que String
+ */
+ ListeMetaDonnees listeMetaDonnees = appelGetListeMetaDonnees();
+
+
+ TypeMetaDonnees md = new TypeMetaDonnees();
+ JsonParserFactory factory = Json.createParserFactory(null);
+ JsonParser parser = factory.createParser(new StringReader(json));
+ // JsonReader reader = new JsonReader(new StringReader(json));
+ String key = null, valueStr;
+ while (parser.hasNext()) {
+ JsonParser.Event event = parser.next();
+ switch (event){
+ case KEY_NAME:
+ key = parser.getString();
+ break;
+ case VALUE_STRING:
+ valueStr = parser.getString();
+ MetaDonnee m = new MetaDonnee();
+ if (key != null) {
+ if (listeMetaDonnees.isKeyExists(key)) {
+ m.setNom(key);
+ m.setValeur(valueStr);
+ md.getMetaDonnee().add(m);
+
+ } else {
+ // padbol: metadata inconnue.
+ System.out.println("WARN: MetaData '" + key + "' est inconnue de i-Parapheur.");
+ }
+ key = null;
+ }
+ break;
+ }
+ }
+
+ return md;
+ }
+
+ /**
+ * A partir d'un JSON du genre {"1": "nomdefichier.pdf", "2": "nomdefichier2.pdf"}
+ * créer la structure de données qui va bien...
+ *
+ * @param repSource le repertoire où sont stockees les annexes
+ * @param json la liste des annexes.
+ * @return
+ */
+ private static TypeDocAnnexes jsonToAnnexes(String repSource, String json) {
+ // controles d'entree vide
+ if (json == null || json.trim().isEmpty()) {
+ return null;
+ }
+ //System.out.println("INFO: json=" + json);
+
+ TypeDocAnnexes annexes = new TypeDocAnnexes();
+ JsonParserFactory factory = Json.createParserFactory(null);
+ JsonParser parser = factory.createParser(new StringReader(json));
+ String key = null, valueStr;
+ while (parser.hasNext()) {
+ JsonParser.Event event = parser.next();
+ switch (event){
+ case KEY_NAME: // on s'en fout
+ key = parser.getString();
+ break;
+ case VALUE_STRING:
+ valueStr = parser.getString();
+
+ if (key != null) {
+ if (valueStr!=null && !valueStr.trim().isEmpty()) {
+ DocAnnexe ann = new DocAnnexe();
+ ann.setEncoding("UTF-8");
+ ann.setMimetype(guessMimeType(valueStr));
+ ann.setFichier(GetTypeDoc(repSource + '/' + valueStr, ann.getMimetype()));
+ ann.setNom(valueStr);
+
+ annexes.getDocAnnexe().add(ann);
+ } else {
+ // padbol.
+ System.out.println("WARN: fichier annexe incorrect, ignoré.");
+ }
+ key = null;
+ }
+ break;
+ }
+ }
+
+ return annexes;
+ }
+
+ /**
+ * Determine le type MIME en fonction de l'extension du nom de fichier
+ * fourni en parametre de la methode.
+ *
+ * @param nomDeFichier est le nom de fichier a tester
+ * @return le type MIME detecte, 'null' sinon
+ */
private static String guessMimeType(String nomDeFichier) {
String res = null;
if (nomDeFichier != null && !nomDeFichier.trim().isEmpty()) {
else if (pattern.endsWith(".ppt")) {
res = MIMETYPE_PPT;
}
+ else if (pattern.endsWith(".docx")) {
+ res = MIMETYPE_OPENXML_WORDPROCESSING;
+ }
+ else if (pattern.endsWith(".xlsx")) {
+ res = MIMETYPE_OPENXML_SPREADSHEET;
+ }
+ else if (pattern.endsWith(".pptx")) {
+ res = MIMETYPE_OPENXML_PRESENTATION;
+ }
else if (pattern.endsWith(".jpg")) {
res = MIMETYPE_IMAGE_JPEG;
}
return res;
}
+ // MIME TYPE DEFINITIONS
public static final String MIMETYPE_TEXT_PLAIN = "text/plain";
public static final String MIMETYPE_TEXT_MEDIAWIKI = "text/mediawiki";
public static final String MIMETYPE_TEXT_CSS = "text/css";