public void execute(AbstractParsedCommand parsedCommand) throws ConsoleException {
if((parsedCommand != null) && (parsedCommand instanceof DecryptParsedCommand)){
DecryptParsedCommand inputCommand = (DecryptParsedCommand) parsedCommand;
setPercentageOfWorkDone(0);
PrefixParser prefixParser;
try{
PdfFile[] fileList = inputCommand.getInputFileList();
for(int i = 0; i<fileList.length; i++){
try{
prefixParser = new PrefixParser(inputCommand.getOutputFilesPrefix(), fileList[i].getFile().getName());
File tmpFile = FileUtility.generateTmpFile(inputCommand.getOutputFile());
pdfReader = new PdfReader(new RandomAccessFileOrArray(fileList[i].getFile().getAbsolutePath()),fileList[i].getPasswordBytes());
pdfReader.removeUnusedObjects();
pdfReader.consolidateNamedDestinations();
//version
LOG.debug("Creating a new document.");
Character pdfVersion = inputCommand.getOutputPdfVersion();
if(pdfVersion != null){
pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(tmpFile), inputCommand.getOutputPdfVersion().charValue());
}else{
pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(tmpFile), pdfReader.getPdfVersion());
}
HashMap meta = pdfReader.getInfo();
meta.put("Creator", ConsoleServicesFacade.CREATOR);
setCompressionSettingOnStamper(inputCommand, pdfStamper);
pdfStamper.setMoreInfo(meta);
pdfStamper.close();
pdfReader.close();
File outFile = new File(inputCommand.getOutputFile() ,prefixParser.generateFileName());
FileUtility.renameTemporaryFile(tmpFile, outFile, inputCommand.isOverwrite());
LOG.debug("Decrypted file "+outFile.getCanonicalPath()+" created.");
setPercentageOfWorkDone(((i+1)*WorkDoneDataModel.MAX_PERGENTAGE)/fileList.length);
}
catch(Exception e){
LOG.error("Error decrypting file "+fileList[i].getFile().getName(), e);
}
}
LOG.info("Pdf files decrypted in "+inputCommand.getOutputFile().getAbsolutePath()+".");
}finally{
setWorkCompleted();
}
}else{
throw new ConsoleException(ConsoleException.ERR_BAD_COMMAND);