001package org.nuxeo.ecm.platform.signature.core.sign; 002 003import java.text.SimpleDateFormat; 004import java.util.Date; 005 006import org.apache.commons.io.FilenameUtils; 007import org.apache.commons.logging.Log; 008import org.apache.commons.logging.LogFactory; 009import org.nuxeo.ecm.platform.signature.api.sign.SignatureService.SigningDisposition; 010import org.nuxeo.runtime.api.Framework; 011 012public class SignatureHelper { 013 014 private static final Log log = LogFactory.getLog(SignatureHelper.class); 015 016 /** 017 * If this system property is set to "true", then signature will use PDF/A. 018 */ 019 public static final String SIGNATURE_USE_PDFA_PROP = "org.nuxeo.ecm.signature.pdfa"; 020 021 /** 022 * Signature disposition for PDF files. Can be "replace", "archive" or "attach". 023 */ 024 public static final String SIGNATURE_DISPOSITION_PDF = "org.nuxeo.ecm.signature.disposition.pdf"; 025 026 /** 027 * Signature disposition for non-PDF files. Can be "replace", "archive" or "attach". 028 */ 029 public static final String SIGNATURE_DISPOSITION_NOTPDF = "org.nuxeo.ecm.signature.disposition.notpdf"; 030 031 public static final String SIGNATURE_ARCHIVE_FILENAME_FORMAT_PROP = "org.nuxeo.ecm.signature.archive.filename.format"; 032 033 /** Used with {@link SimpleDateFormat}. */ 034 public static final String DEFAULT_ARCHIVE_FORMAT = " ('archive' yyyy-MM-dd HH:mm:ss)"; 035 036 private SignatureHelper() {} 037 038 public static boolean getPDFA() { 039 return Framework.isBooleanPropertyTrue(SIGNATURE_USE_PDFA_PROP); 040 } 041 042 public static SigningDisposition getDisposition(boolean originalIsPdf) { 043 String disp; 044 if (originalIsPdf) { 045 disp = Framework.getProperty(SIGNATURE_DISPOSITION_PDF, SigningDisposition.ARCHIVE.name()); 046 } else { 047 disp = Framework.getProperty(SIGNATURE_DISPOSITION_NOTPDF, SigningDisposition.ATTACH.name()); 048 } 049 try { 050 return Enum.valueOf(SigningDisposition.class, disp.toUpperCase()); 051 } catch (RuntimeException e) { 052 log.warn("Invalid signing disposition: " + disp); 053 return SigningDisposition.ATTACH; 054 } 055 } 056 057 public static String getArchiveFilename(String filename) { 058 String format = Framework.getProperty(SIGNATURE_ARCHIVE_FILENAME_FORMAT_PROP, DEFAULT_ARCHIVE_FORMAT); 059 return FilenameUtils.getBaseName(filename) + new SimpleDateFormat(format).format(new Date()) + "." 060 + FilenameUtils.getExtension(filename); 061 } 062}