/** * */ package at.gv.egiz.pdfas.impl.input; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.gv.egiz.pdfas.exceptions.ErrorCode; import at.gv.egiz.pdfas.framework.input.PdfDataSource; import at.gv.egiz.pdfas.framework.input.PdfDataSourceHolder; import at.gv.egiz.pdfas.framework.input.correction.Corrector; import at.gv.egiz.pdfas.framework.input.correction.CorrectorFactory; import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException; import at.knowcenter.wag.exactparser.ParseDocument; /** * Parses the given PDF document into a list of Incremental Update blocks. * @author wprinz */ public class IncrementalUpdateParser { /** * The log. */ private static final Log log = LogFactory.getLog(IncrementalUpdateParser.class); public static List parsePdfIntoIUBlocks (PdfDataSourceHolder pdfDataSource) throws PDFDocumentException { log.trace("parsePdfIntoIUBlocks:"); List blocks = null; try { byte [] pdf = DataSourceHelper.convertDataSourceToByteArray(pdfDataSource.getDataSource()); blocks = ParseDocument.parseDocument(pdf); } catch (Exception e) { try { log.debug("Error while parsing Document.", e); boolean tryToCorrect = SettingsReader.getInstance().getSetting("correct_document_on_verify_if_necessary", "false").equals("true"); if (tryToCorrect) { log.info("Correcting document..."); Corrector cor = CorrectorFactory.createCorrector(); PdfDataSource correctedDS = cor.correctDocument(pdfDataSource.getDataSource()); log.info("Correction finished."); byte [] pdf = DataSourceHelper.convertDataSourceToByteArray(correctedDS); blocks = ParseDocument.parseDocument(pdf); pdfDataSource.setDataSource(correctedDS); } else { makeError(e); } } catch (Exception e1) { makeError(e); } } log.trace("parsePdfIntoIUBlocks finished."); return blocks; } private static void makeError(Exception e) throws PDFDocumentException { log.error("Error while parsing Document into IU blocks.", e); throw new PDFDocumentException(ErrorCode.DOCUMENT_CANNOT_BE_READ, e); } }