package org.eparapher.rcp.actions; import java.io.File; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eparapher.core.EParapherManager; import org.eparapher.core.signature.DefaultSignatureParameters; import org.eparapher.core.signature.GenericSigner; import org.eparapher.core.signature.PDFSignatureParameters; import org.eparapher.core.tools.PDFConverterWrapper; import org.eparapher.rcp.tools.GUIIcons; import org.eparapher.rcp.wizards.PDFSigningWizard; public class ToPDFAndSignDocumentAction extends GenericSignatureAction { private static Logger log = Logger.getLogger(ToPDFAndSignDocumentAction.class); private PDFConverterWrapper pdfconverter; public ToPDFAndSignDocumentAction() { super(null, true, "PDF converter & signer"); } public ToPDFAndSignDocumentAction(TreeViewer mviewer, boolean museWizard) { super(mviewer, museWizard, "PDF converter & signer"); } public ToPDFAndSignDocumentAction(IWorkbenchWindow mwindow) { super(mwindow, "PDF converter & signer"); } public ToPDFAndSignDocumentAction(String[] files, boolean museWizard) { super(null, museWizard, "PDF converter & signer"); filesForAction = files; } @Override void buildAction() { this.setId("ToPDFAndSignDocumentAction"); this.setImageDescriptor(GUIIcons.PDF_ICON); if (!usewizard) { this.setText("Convert to PDF and Sign"); this.setToolTipText("Convert to PDF and Sign CMS with default parameters"); this.setAccelerator(SWT.CTRL | 'G'); } else { this.setText("Convert to PDF and Sign (wizard)"); this.setToolTipText("Convert to PDF and Sign using a wizard"); this.setAccelerator(SWT.CTRL | 'H'); } } @Override DefaultSignatureParameters getParameters() { PDFSignatureParameters pdfsignparams = new PDFSignatureParameters(); pdfsignparams.setPdfsignatureParamsFromPreferences(); if (viewer !=null) pdfsignparams.setFileSelection(getFileSelectionFromView()); if (filesForAction != null) pdfsignparams.setFileSelection(getFileSelectionFromParameters()); if (usewizard) { //Launch Wizard to get PDF Signature Parameters from user PDFSigningWizard pdfWizard = new PDFSigningWizard(pdfsignparams); if (window==null) window=PlatformUI.getWorkbench().getActiveWorkbenchWindow(); WizardDialog dialog = new WizardDialog(window.getShell(), pdfWizard); if ( dialog.open() != Window.OK ) { log.info("PDF converter ans signature option wizard cancelled"); return null; } pdfsignparams = pdfWizard.getPdfsignatureparams(); } return pdfsignparams; } @Override GenericSigner getSigner() { if (pdfconverter==null) pdfconverter = new PDFConverterWrapper(); return (GenericSigner) pdfconverter; } @Override boolean isFileWithCorrectFormat(File file2verify) { return PDFConverterWrapper.isConvertibleToPDF(file2verify); } @Override void presignature(IProgressMonitor monitor, GenericSigner signer, DefaultSignatureParameters signparams) { File[] f2s = signparams.getFileSelection(); int nbOfNonPDFFiles = 0; for (File file : f2s) { if (!file.getName().toLowerCase().endsWith(".pdf")) nbOfNonPDFFiles++; } if ( nbOfNonPDFFiles>=2 && !EParapherManager.getInstance().getSettings().isOpenOfficeAutostart() ) { String msg = "We recommend you to start the openoffice daemon at startup if you convert to PDF more than one file.\r\n" + "Simply go to : Preferences -> ePArapher -> OpenOffice Settings -> check 'Start OpenOffice PDF converter at startup'"; EParapherManager.getInstance().getUI().infoMessage(msg); } } @Override void signFile(IProgressMonitor monitor, File file, GenericSigner signer, DefaultSignatureParameters signparams) { PDFSignatureParameters pdfsp = (PDFSignatureParameters) signparams; //If it's already a PDF file, sign it directly if (file.getName().toLowerCase().endsWith(".pdf")) { monitor.subTask("Signing "+file.getName()); pdfsp.setGeneratedOnTheFly(false); signer.sign(file.getAbsolutePath(), pdfsp); monitor.worked(1); } else { //Or Convert it with JOD/OpenOffice and sign it monitor.subTask("Converting "+file.getName()+" to PDF"); String converted_unsigned_pdf = null; try { converted_unsigned_pdf = pdfconverter.convert(file.getAbsolutePath()); if (converted_unsigned_pdf!=null) { monitor.subTask("Signing "+converted_unsigned_pdf); pdfsp.setGeneratedOnTheFly(true); signer.sign( converted_unsigned_pdf, pdfsp ); } else { final String message = "Cannot apply PDF Signature on : " + file.getAbsolutePath() ; EParapherManager.getInstance().getUI().warnMessage(message); } } catch (Exception e) { EParapherManager.getInstance().getUI().errorMessage( e.getMessage(), e ); } finally { monitor.worked(1); } } } @Override void postsignature(IProgressMonitor monitor, GenericSigner signer, DefaultSignatureParameters signparams) { } }