import java.io.File;
import java.io.FileInputStream;
import java.io.StringReader;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.Map;
import javax.json.Json;
// import javax.json.JsonReader;
* @author Nicolas LE GRAND - Conseil General du Finistere
* @author Stephane Vast - Adullact Projet
*/
-public class ProxyParapheur {
+class ProxyParapheur {
- static InterfaceParapheur service;
+ private static InterfaceParapheur service;
- public ProxyParapheur(String endpoint, String username, String password, String trustStorePath, String trustStorePass, String keyStorePath, String keyStorePass) {
+ ProxyParapheur(String endpoint, String username, String password, String trustStorePath, String trustStorePass, String keyStorePath, String keyStorePass) {
//Initialisation du contexte et du service d'acces
System.setProperty("javax.net.ssl.trustStore", trustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePass);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
}
- public static GetListeTypesResponse appelGetTypes() {
+ /*public static GetListeTypesResponse appelGetTypes() {
GetListeTypesResponse getListeTypesResponse = service.getListeTypes("");
return getListeTypesResponse;
- }
+ } */
- public static GetListeSousTypesResponse appelGetSousTypes(String stype) {
+ /*public static GetListeSousTypesResponse appelGetSousTypes(String stype) {
return service.getListeSousTypes(stype);
- }
+ } */
/* public static GetListeMetaDonneesResponse appelGetListeMetaDonnees() {
return service.getListeMetaDonnees("");
} */
- public static ListeMetaDonnees appelGetListeMetaDonnees() {
+ private static ListeMetaDonnees appelGetListeMetaDonnees() {
return new ListeMetaDonnees(service.getListeMetaDonnees(""));
}
- public static String appelEcho(String str) {
+ String appelEcho(String str) {
return service.echo(str);
}
- public static GetHistoDossierResponse appelGetHistogramme(String id) {
+ /*public static GetHistoDossierResponse appelGetHistogramme(String id) {
return (service.getHistoDossier(id));
- }
+ } */
- public static GetDossierResponse appelGetDossier(String id) {
+ /* public static GetDossierResponse appelGetDossier(String id) {
return (service.getDossier(id));
- }
+ } */
- public static RechercherDossiersResponse appelRechercheDossier(String type, String status) {
+ /*public static RechercherDossiersResponse appelRechercheDossier(String type, String status) {
RechercherDossiersRequest rechercherDossiersRequest = new RechercherDossiersRequest();
if (type != null) {
rechercherDossiersRequest.setTypeTechnique(type);
}
rechercherDossiersRequest.setStatus(status);
return service.rechercherDossiers(rechercherDossiersRequest);
- }
+ } */
- public static String appelArchiverDossier(String id) {
+ /*public static String appelArchiverDossier(String id) {
ArchiverDossierRequest archiverDossierRequest = new ArchiverDossierRequest();
archiverDossierRequest.setArchivageAction(ArchivageAction.ARCHIVER);
archiverDossierRequest.setDossierID(id);
ArchiverDossierResponse res = service.archiverDossier(archiverDossierRequest);
return res.getMessageRetour().getMessage();
- }
+ } */
- public static String appelPurgerDossier(String id) {
+ /*public static String appelPurgerDossier(String id) {
ArchiverDossierRequest archiverDossierRequest = new ArchiverDossierRequest();
archiverDossierRequest.setArchivageAction(ArchivageAction.EFFACER);
archiverDossierRequest.setDossierID(id);
ArchiverDossierResponse res = service.archiverDossier(archiverDossierRequest);
return res.getMessageRetour().getMessage();
- }
+ } */
/**
* Requete SOAP vers i-Parapheur pour creation de dossier bureautique (non XML)
* @param mdataJson : metadonnees format JSON
* @param dateLimite : date limite format JJ-MM-AAAA
* @param annexesJson : les annexes, liste formattee JSON
+ * @param utilisateur : compte utilisateur tiers
* @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,
+ static String appelCreerDossier(String type, String sType, String emailEmetteur, String dossierID,
String dossierTitre, String docPrincipal, String nomDocPrincipal,
String visibilite, String mdataJson, String dateLimite,
- String annexesJson){
+ String annexesJson, String utilisateur) throws Exception {
+ // le comportement est different selon le parametre utilisateur
+ boolean addUserChecks = false;
+ if (utilisateur != null && !utilisateur.trim().isEmpty()) {
+ // check existence
+ if (isUtilisateurExiste(utilisateur.trim())) {
+ addUserChecks =true;
+ }
+ else {
+ System.out.println("should not ever come here...");
+ }
+ }
CreerDossierRequest creerDossierRequest = new CreerDossierRequest();
+
+ if (addUserChecks) {
+ GetListeTypesPourUtilisateurResponse types = service.getListeTypesPourUtilisateur(utilisateur.trim());
+ if (types.getTypeTechnique().isEmpty() || !types.getTypeTechnique().contains(type)) {
+ throw new Exception("type impossible pour utilisateur " + utilisateur);
+ }
+ GetListeSousTypesPourUtilisateurRequest gstReq = new GetListeSousTypesPourUtilisateurRequest();
+ gstReq.setIdUtilisateur(utilisateur);
+ gstReq.setTypeTechnique(type);
+ GetListeSousTypesPourUtilisateurResponse ssTypes = service.getListeSousTypesPourUtilisateur(gstReq);
+ if (ssTypes.getSousType().isEmpty() || !ssTypes.getSousType().contains(sType)) {
+ throw new Exception("sousType impossible pour utilisateur " + utilisateur);
+ }
+ GetCircuitPourUtilisateurRequest gcReq = new GetCircuitPourUtilisateurRequest();
+ gcReq.setTypeTechnique(type);
+ gcReq.setSousType(sType);
+ gcReq.setIdUtilisateur(utilisateur);
+ GetCircuitPourUtilisateurResponse circuit = service.getCircuitPourUtilisateur(gcReq);
+ if (circuit.getEtapeCircuit().isEmpty()) {
+ throw new Exception("circuit inconnu pour les parametres fournis et utilisateur " + utilisateur);
+ }
+ creerDossierRequest.setCircuitObligatoire(overrideCircuitWith(circuit));
+ }
+
creerDossierRequest.setTypeTechnique(type);
creerDossierRequest.setSousType(sType);
creerDossierRequest.setEmailEmetteur(emailEmetteur);
}
//creerDossierRequest.setAnnotationPrivee();
//creerDossierRequest.setAnnotationPublique();
- if (dateLimite != null) {
- // TODO: faire la date limite !
- // creerDossierRequest.setDateLimite();
+ if (dateLimite != null && !dateLimite.trim().isEmpty()) {
+ creerDossierRequest.setDateLimite(checkAndFormatDateLimite(dateLimite));
}
if (annexesJson != null) {
File file = new File(docPrincipal);
return res.getMessageRetour().getMessage();
}
- public static String appelCreerDossierXML(String type, String sType, String emailEmetteur, String dossierID,
+ static String appelCreerDossierXML(String type, String sType, String emailEmetteur, String dossierID,
String dossierTitre, String docPrincipal, String nomDocPrincipal,
String visuelPdf, String xPathSig, String visibilite,
- String mdataJson, String dateLimite){
+ String mdataJson, String dateLimite) throws Exception {
CreerDossierRequest creerDossierRequest = new CreerDossierRequest();
creerDossierRequest.setTypeTechnique(type);
creerDossierRequest.setSousType(sType);
creerDossierRequest.setMetaData(mdata);
}
}
- if (dateLimite != null) {
- // TODO: faire la date limite !
- // creerDossierRequest.setDateLimite();
+ if (dateLimite != null && !dateLimite.trim().isEmpty()) {
+ creerDossierRequest.setDateLimite(checkAndFormatDateLimite(dateLimite));
}
CreerDossierResponse res = service.creerDossier(creerDossierRequest);
return res.getMessageRetour().getMessage();
}
- public static TypeDoc GetTypeDoc(String path, String contentType){
+ private static String checkAndFormatDateLimite(String dateLimite) throws Exception {
+ if (dateLimite.trim().startsWith("+")) {
+ // pattern +nnnn
+ if (!dateLimite.trim().matches("^\\+\\d{1,4}$")) {
+ throw new Exception("date limite mal formattee, ne respecte pas le pattern +nn .");
+ }
+ Date now = new Date();
+ Calendar cal = new GregorianCalendar();
+ cal.setTime(now);
+ cal.add(Calendar.DATE, Integer.parseInt(dateLimite.trim().substring(1)));
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+ return (sdf.format(cal.getTime()));
+ } else {
+ // pattern doit etre: AAAA-MM-JJ
+ String daDatePattern="(^(19|[2-9][0-9])\\d\\d[\\-](((0[1-9]|1[012])[\\-](0[1-9]|1[0-9]|2[0-8]))|((0[13578]|1[02])[\\-](29|30|31))|((0[4,6,9]|11)[\\-](29|30)))$)|(^(19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)[\\-]02[\\-]29$)";
+ if (dateLimite.trim().length()!="AAAA-MM-JJ".length()
+ || !dateLimite.trim().matches(daDatePattern)) {
+ throw new Exception("date limite mal formattee, respecter la forme AAAA-MM-JJ .");
+ }
+ return (dateLimite);
+ }
+ }
+
+ static boolean isUtilisateurExiste(String user) {
+ IsUtilisateurExisteResponse res = service.isUtilisateurExiste(user);
+ return res.getMessageRetour().getCodeRetour().equals("OK");
+ }
+
+ private static TypeDoc GetTypeDoc(String path, String contentType){
TypeDoc doc = new TypeDoc();
doc.setContentType(contentType);
try {
return md;
}
+ private static TypeCircuit overrideCircuitWith(GetCircuitPourUtilisateurResponse circuit) {
+ TypeCircuit forcedWorkflow = new TypeCircuit();
+
+ java.util.Iterator<EtapeCircuit> it = circuit.getEtapeCircuit().iterator();
+ while (it.hasNext()) {
+ // EtapeCircuit etapeCircuit = it.next();
+ forcedWorkflow.getEtapeCircuit().add(it.next());
+ }
+ return forcedWorkflow;
+ }
+
/**
* A partir d'un JSON du genre {"1": "nomdefichier.pdf", "2": "nomdefichier2.pdf"}
* créer la structure de données qui va bien...
/**
* MIME TYPE DEFINITIONS
*/
- public static final String MIMETYPE_TEXT_PLAIN = "text/plain";
+ private 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";
// public static final String MIMETYPE_TEXT_CSV = "text/csv";
// public static final String MIMETYPE_TEXT_JAVASCRIPT = "text/javascript";
- public static final String MIMETYPE_XML = "text/xml";
+ private static final String MIMETYPE_XML = "text/xml";
// public static final String MIMETYPE_HTML = "text/html";
// public static final String MIMETYPE_XHTML = "application/xhtml+xml";
- public static final String MIMETYPE_PDF = "application/pdf";
+ private static final String MIMETYPE_PDF = "application/pdf";
// public static final String MIMETYPE_JSON = "application/json";
- public static final String MIMETYPE_WORD = "application/msword";
- public static final String MIMETYPE_EXCEL = "application/vnd.ms-excel";
+ private static final String MIMETYPE_WORD = "application/msword";
+ private static final String MIMETYPE_EXCEL = "application/vnd.ms-excel";
// public static final String MIMETYPE_BINARY = "application/octet-stream";
- public static final String MIMETYPE_PPT = "application/vnd.ms-powerpoint";
+ private static final String MIMETYPE_PPT = "application/vnd.ms-powerpoint";
// public static final String MIMETYPE_APP_DWG = "application/dwg";
// public static final String MIMETYPE_IMG_DWG = "image/vnd.dwg";
// Images
- public static final String MIMETYPE_IMAGE_GIF = "image/gif";
- public static final String MIMETYPE_IMAGE_JPEG = "image/jpeg";
+ private static final String MIMETYPE_IMAGE_GIF = "image/gif";
+ private static final String MIMETYPE_IMAGE_JPEG = "image/jpeg";
// public static final String MIMETYPE_IMAGE_RGB = "image/x-rgb";
// public static final String MIMETYPE_IMAGE_SVG = "image/svg";
- public static final String MIMETYPE_IMAGE_PNG = "image/png";
+ private static final String MIMETYPE_IMAGE_PNG = "image/png";
// Open Document
- public static final String MIMETYPE_OPENDOCUMENT_TEXT = "application/vnd.oasis.opendocument.text";
+ private static final String MIMETYPE_OPENDOCUMENT_TEXT = "application/vnd.oasis.opendocument.text";
// public static final String MIMETYPE_OPENDOCUMENT_TEXT_TEMPLATE = "application/vnd.oasis.opendocument.text-template";
// public static final String MIMETYPE_OPENDOCUMENT_GRAPHICS = "application/vnd.oasis.opendocument.graphics";
// public static final String MIMETYPE_OPENDOCUMENT_GRAPHICS_TEMPLATE= "application/vnd.oasis.opendocument.graphics-template";
- public static final String MIMETYPE_OPENDOCUMENT_PRESENTATION= "application/vnd.oasis.opendocument.presentation";
+ private static final String MIMETYPE_OPENDOCUMENT_PRESENTATION= "application/vnd.oasis.opendocument.presentation";
// public static final String MIMETYPE_OPENDOCUMENT_PRESENTATION_TEMPLATE= "application/vnd.oasis.opendocument.presentation-template";
- public static final String MIMETYPE_OPENDOCUMENT_SPREADSHEET= "application/vnd.oasis.opendocument.spreadsheet";
+ private static final String MIMETYPE_OPENDOCUMENT_SPREADSHEET= "application/vnd.oasis.opendocument.spreadsheet";
// public static final String MIMETYPE_OPENDOCUMENT_SPREADSHEET_TEMPLATE= "application/vnd.oasis.opendocument.spreadsheet-template";
// public static final String MIMETYPE_OPENDOCUMENT_CHART= "application/vnd.oasis.opendocument.chart";
// public static final String MIMETYPE_OPENDOCUMENT_CHART_TEMPLATE= "applicationvnd.oasis.opendocument.chart-template";
// public static final String MIMETYPE_OPENOFFICE1_DRAW = "application/vnd.sun.xml.draw";
// public static final String MIMETYPE_OPENOFFICE1_IMPRESS = "application/vnd.sun.xml.impress";
// Open XML
- public static final String MIMETYPE_OPENXML_WORDPROCESSING = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
- public static final String MIMETYPE_OPENXML_SPREADSHEET = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
- public static final String MIMETYPE_OPENXML_PRESENTATION = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
+ private static final String MIMETYPE_OPENXML_WORDPROCESSING = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+ private static final String MIMETYPE_OPENXML_SPREADSHEET = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+ private static final String MIMETYPE_OPENXML_PRESENTATION = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
}