From 7c89f83b59f19eb7726df89e79ea5f277f935b1d Mon Sep 17 00:00:00 2001 From: Andrea Vacondio Date: Sun, 17 Jan 2016 12:33:42 +0100 Subject: [PATCH] ref #179: added a smooth transition between single digit to two digits pdf version --- .../cli/model/CliArgumentsWithPdfOutput.java | 4 +- .../BaseCliArgumentsTransformer.java | 2 +- .../PdfVersionAdapterWithFallback.java | 52 +++++++++++++++++++ .../PdfVersionAdapterWithFallbackTest.java | 47 +++++++++++++++++ 4 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 sejda-conversion/src/main/java/org/sejda/conversion/PdfVersionAdapterWithFallback.java create mode 100644 sejda-conversion/src/test/java/org/sejda/conversion/PdfVersionAdapterWithFallbackTest.java diff --git a/sejda-console/src/main/java/org/sejda/cli/model/CliArgumentsWithPdfOutput.java b/sejda-console/src/main/java/org/sejda/cli/model/CliArgumentsWithPdfOutput.java index 2b117f946..fc3b333d6 100644 --- a/sejda-console/src/main/java/org/sejda/cli/model/CliArgumentsWithPdfOutput.java +++ b/sejda-console/src/main/java/org/sejda/cli/model/CliArgumentsWithPdfOutput.java @@ -19,7 +19,7 @@ */ package org.sejda.cli.model; -import org.sejda.conversion.PdfVersionAdapter; +import org.sejda.conversion.PdfVersionAdapterWithFallback; import uk.co.flamingpenguin.jewel.cli.Option; @@ -35,5 +35,5 @@ public interface CliArgumentsWithPdfOutput extends TaskCliArguments { boolean getCompressed(); @Option(shortName = "v", description = "pdf version of the output document/s {1.2, 1.3, 1.4, 1.5, 1.6 or 1.7}. Default is 1.6. (optional)", defaultValue = "1.6") - PdfVersionAdapter getPdfVersion(); + PdfVersionAdapterWithFallback getPdfVersion(); } diff --git a/sejda-console/src/main/java/org/sejda/cli/transformer/BaseCliArgumentsTransformer.java b/sejda-console/src/main/java/org/sejda/cli/transformer/BaseCliArgumentsTransformer.java index 9b99ac8b1..4cce9f086 100644 --- a/sejda-console/src/main/java/org/sejda/cli/transformer/BaseCliArgumentsTransformer.java +++ b/sejda-console/src/main/java/org/sejda/cli/transformer/BaseCliArgumentsTransformer.java @@ -130,7 +130,7 @@ private void populateCommonImageOutputParameters(AbstractPdfToImageParameters pa private void populateCommonPdfOutputParameters(AbstractPdfOutputParameters parameters, CliArgumentsWithPdfOutput taskCliArguments) { parameters.setCompress(taskCliArguments.getCompressed()); - parameters.setVersion(taskCliArguments.getPdfVersion().getEnumValue()); + parameters.setVersion(taskCliArguments.getPdfVersion().getVersion()); } /** diff --git a/sejda-conversion/src/main/java/org/sejda/conversion/PdfVersionAdapterWithFallback.java b/sejda-conversion/src/main/java/org/sejda/conversion/PdfVersionAdapterWithFallback.java new file mode 100644 index 000000000..9ffebb6ab --- /dev/null +++ b/sejda-conversion/src/main/java/org/sejda/conversion/PdfVersionAdapterWithFallback.java @@ -0,0 +1,52 @@ +/* + * Created on 17 gen 2016 + * Copyright 2015 by Andrea Vacondio (andrea.vacondio@gmail.com). + * This file is part of Sejda. + * + * Sejda is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Sejda is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Sejda. If not, see . + */ +package org.sejda.conversion; + +import org.sejda.model.pdf.PdfVersion; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Adapter providing a smooth transition between single digit pdf versions (7 for pdf version 1.7) used in sejda-console v1.x to double digit pdf version (1.7 for pdf version 1.7) + * used in sejda-console v2.x + * + * @author Andrea Vacondio + * + */ +public class PdfVersionAdapterWithFallback { + private static final Logger LOG = LoggerFactory.getLogger(PdfVersionAdapterWithFallback.class); + + private PdfVersion version; + + public PdfVersionAdapterWithFallback(String userFriendlyName) { + if (userFriendlyName.matches("[01234567]{1}")) { + LOG.warn( + "Single digit PDF version '{}' is deprecated and will be removed in future releases, please use the two digits '1.{}' format", + userFriendlyName, userFriendlyName); + this.version = new PdfVersionAdapter("1." + userFriendlyName).getEnumValue(); + } else { + this.version = new PdfVersionAdapter(userFriendlyName).getEnumValue(); + } + } + + public PdfVersion getVersion() { + return version; + } + +} diff --git a/sejda-conversion/src/test/java/org/sejda/conversion/PdfVersionAdapterWithFallbackTest.java b/sejda-conversion/src/test/java/org/sejda/conversion/PdfVersionAdapterWithFallbackTest.java new file mode 100644 index 000000000..40044f017 --- /dev/null +++ b/sejda-conversion/src/test/java/org/sejda/conversion/PdfVersionAdapterWithFallbackTest.java @@ -0,0 +1,47 @@ +/* + * Created on 17 gen 2016 + * Copyright 2015 by Andrea Vacondio (andrea.vacondio@gmail.com). + * This file is part of Sejda. + * + * Sejda is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Sejda is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Sejda. If not, see . + */ +package org.sejda.conversion; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.sejda.model.exception.SejdaRuntimeException; +import org.sejda.model.pdf.PdfVersion; + +/** + * @author Andrea Vacondio + * + */ +public class PdfVersionAdapterWithFallbackTest { + @Test + public void testPositiveFallback() { + assertEquals(PdfVersion.VERSION_1_4, new PdfVersionAdapterWithFallback("4").getVersion()); + } + + @Test + public void testPositive() { + assertEquals(PdfVersion.VERSION_1_6, new PdfVersionAdapterWithFallback("1.6").getVersion()); + } + + @Test(expected = SejdaRuntimeException.class) + public void missingPoint() { + new PdfVersionAdapterWithFallback("9").getVersion(); + } + +}