Skip to content

Commit 0b0db0b

Browse files
committed
Moved Compress from a boolean to a 3 values Enum
1 parent 90029a1 commit 0b0db0b

File tree

34 files changed

+278
-212
lines changed

34 files changed

+278
-212
lines changed

pdfsam-core/src/main/java/org/pdfsam/core/context/BooleanPersistentProperty.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public enum BooleanPersistentProperty implements PersistentProperty<Boolean> {
4343
CHECK_UPDATES(() -> Boolean.parseBoolean(System.getProperty(CHECK_FOR_UPDATES_PROP, Boolean.TRUE.toString()))),
4444
CHECK_FOR_NEWS(() -> Boolean.parseBoolean(System.getProperty(CHECK_FOR_NEWS_PROP, Boolean.TRUE.toString()))),
4545
OVERWRITE_OUTPUT(() -> Boolean.parseBoolean(System.getProperty(OVERWRITE_OUTPUT_PROP, Boolean.FALSE.toString()))),
46+
@Deprecated
4647
PDF_COMPRESSION_ENABLED(
4748
() -> Boolean.parseBoolean(System.getProperty(PDF_COMPRESSION_PROP, Boolean.TRUE.toString()))),
4849
CLEAR_CONFIRMATION(() -> Boolean.TRUE),

pdfsam-core/src/main/java/org/pdfsam/core/context/StringPersistentProperty.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.pdfsam.core.context;
2020

21+
import org.sejda.model.output.CompressionPolicy;
2122
import org.sejda.model.pdf.PdfVersion;
2223

2324
import java.util.function.Supplier;
@@ -50,7 +51,8 @@ public enum StringPersistentProperty implements PersistentProperty<String> {
5051
return PdfVersion.VERSION_1_5.name();
5152
}
5253
}),
53-
PREFIX(() -> System.getProperty(PREFIX_PROP, "PDFsam_"));
54+
PREFIX(() -> System.getProperty(PREFIX_PROP, "PDFsam_")),
55+
COMPRESSION_POLICY(CompressionPolicy.COMPRESS::name);
5456

5557
private final Supplier<String> defaultSupplier;
5658

pdfsam-core/src/main/java/org/pdfsam/core/support/params/AbstractPdfOutputParametersBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,28 @@
1818
*/
1919
package org.pdfsam.core.support.params;
2020

21+
import org.sejda.model.output.CompressionPolicy;
2122
import org.sejda.model.parameter.base.AbstractPdfOutputParameters;
2223
import org.sejda.model.pdf.PdfVersion;
2324

2425
/**
2526
* Abstract builder for {@link AbstractPdfOutputParameters}.
26-
*
27+
*
28+
* @param <P> type of the parameters the builder builds
2729
* @author Andrea Vacondio
28-
* @param <P>
29-
* type of the parameters the builder builds
3030
*/
3131
public abstract class AbstractPdfOutputParametersBuilder<P extends AbstractPdfOutputParameters>
3232
extends AbstractParametersBuilder<P> {
33-
private boolean compress;
33+
private CompressionPolicy compressionPolicy;
3434
private boolean discardBookmarks = false;
3535
private PdfVersion version;
3636

37-
public void compress(boolean compress) {
38-
this.compress = compress;
37+
public void compressionPolicy(CompressionPolicy compressionPolicy) {
38+
this.compressionPolicy = compressionPolicy;
3939
}
4040

41-
protected boolean isCompress() {
42-
return compress;
41+
protected CompressionPolicy compressionPolicy() {
42+
return compressionPolicy;
4343
}
4444

4545
public void version(PdfVersion version) {

pdfsam-core/src/test/java/org/pdfsam/core/context/StringPersistentPropertyTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.junitpioneer.jupiter.ClearSystemProperty;
2424
import org.junitpioneer.jupiter.SetSystemProperty;
2525
import org.pdfsam.core.ConfigurableSystemProperty;
26+
import org.sejda.model.output.CompressionPolicy;
2627
import org.sejda.model.pdf.PdfVersion;
2728

2829
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -71,5 +72,7 @@ public void defaultValue() {
7172
assertEquals("", StringPersistentProperty.WORKING_PATH.defaultSupplier().get());
7273
assertEquals("", StringPersistentProperty.WORKSPACE_PATH.defaultSupplier().get());
7374
assertEquals("", StringPersistentProperty.STARTUP_MODULE.defaultSupplier().get());
75+
assertEquals(CompressionPolicy.COMPRESS.name(),
76+
StringPersistentProperty.COMPRESSION_POLICY.defaultSupplier().get());
7477
}
7578
}

pdfsam-gui/src/main/java/org/pdfsam/gui/components/content/preference/PreferenceConfig.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import jakarta.inject.Named;
2222
import javafx.scene.text.Font;
2323
import javafx.util.Subscription;
24+
import org.pdfsam.core.context.StringPersistentProperty;
2425
import org.pdfsam.core.support.validation.Validators;
2526
import org.pdfsam.gui.components.content.log.MaxLogRowsChangedEvent;
2627
import org.pdfsam.gui.theme.Themes;
@@ -31,6 +32,7 @@
3132
import org.pdfsam.model.ui.DefaultPdfVersionComboItem;
3233
import org.pdfsam.ui.components.support.FXValidationSupport;
3334
import org.pdfsam.ui.components.support.Style;
35+
import org.sejda.model.output.CompressionPolicy;
3436
import org.sejda.model.pdf.PdfVersion;
3537

3638
import java.util.Arrays;
@@ -47,13 +49,13 @@
4749
import static org.pdfsam.core.context.BooleanPersistentProperty.DISCARD_BOOKMARKS;
4850
import static org.pdfsam.core.context.BooleanPersistentProperty.DONATION_NOTIFICATION;
4951
import static org.pdfsam.core.context.BooleanPersistentProperty.OVERWRITE_OUTPUT;
50-
import static org.pdfsam.core.context.BooleanPersistentProperty.PDF_COMPRESSION_ENABLED;
5152
import static org.pdfsam.core.context.BooleanPersistentProperty.PLAY_SOUNDS;
5253
import static org.pdfsam.core.context.BooleanPersistentProperty.PREMIUM_MODULES;
5354
import static org.pdfsam.core.context.BooleanPersistentProperty.SAVE_PWD_IN_WORKSPACE;
5455
import static org.pdfsam.core.context.BooleanPersistentProperty.SAVE_WORKSPACE_ON_EXIT;
5556
import static org.pdfsam.core.context.BooleanPersistentProperty.SMART_OUTPUT;
5657
import static org.pdfsam.core.context.IntegerPersistentProperty.LOGVIEW_ROWS_NUMBER;
58+
import static org.pdfsam.core.context.StringPersistentProperty.COMPRESSION_POLICY;
5759
import static org.pdfsam.core.context.StringPersistentProperty.FONT;
5860
import static org.pdfsam.core.context.StringPersistentProperty.FONT_SIZE;
5961
import static org.pdfsam.core.context.StringPersistentProperty.LOCALE;
@@ -178,16 +180,17 @@ public PreferenceCheckBox checkForNews() {
178180
}
179181

180182
@Provides
181-
@Named("compressionEnabled")
182-
public PreferenceCheckBox compressionEnabled() {
183-
var compressionEnabled = new PreferenceCheckBox(PDF_COMPRESSION_ENABLED, i18n().tr("Enabled PDF compression"),
184-
app().persistentSettings().get(PDF_COMPRESSION_ENABLED));
185-
compressionEnabled.setId("compressionEnabled");
186-
compressionEnabled.setGraphic(
187-
helpIcon(i18n().tr("Set whether \"Compress output file\" should be enabled by default")));
188-
compressionEnabled.getStyleClass().addAll(Style.WITH_HELP.css());
189-
compressionEnabled.getStyleClass().addAll(Style.VITEM.css());
190-
return compressionEnabled;
183+
@Named("compressionPolicy")
184+
public PreferenceComboBox<ComboItem<CompressionPolicy>> compressionEnabled() {
185+
PreferenceComboBox<ComboItem<CompressionPolicy>> compressionPolicy = new PreferenceComboBox<>(
186+
COMPRESSION_POLICY);
187+
compressionPolicy.setId("compressionPolicy");
188+
compressionPolicy.getItems().add(new ComboItem<>(CompressionPolicy.COMPRESS, i18n().tr("Compress")));
189+
compressionPolicy.getItems().add(new ComboItem<>(CompressionPolicy.NEUTRAL, i18n().tr("Unchanged")));
190+
compressionPolicy.getItems().add(new ComboItem<>(CompressionPolicy.UNCOMPRESS, i18n().tr("Uncompress")));
191+
app().persistentSettings().get(StringPersistentProperty.COMPRESSION_POLICY).map(CompressionPolicy::valueOf)
192+
.ifPresent(p -> compressionPolicy.getSelectionModel().select(keyWithEmptyValue(p)));
193+
return compressionPolicy;
191194
}
192195

193196
@Provides

pdfsam-gui/src/main/java/org/pdfsam/gui/components/content/preference/PreferenceOutputPane.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import javafx.scene.layout.GridPane;
2727
import org.pdfsam.model.ui.ComboItem;
2828
import org.pdfsam.ui.components.support.Style;
29+
import org.sejda.model.output.CompressionPolicy;
2930
import org.sejda.model.pdf.PdfVersion;
3031

3132
import static java.util.Objects.isNull;
@@ -41,7 +42,7 @@ class PreferenceOutputPane extends GridPane {
4142

4243
@Inject
4344
public PreferenceOutputPane(@Named("smartRadio") PreferenceRadioButton smartRadio,
44-
@Named("compressionEnabled") PreferenceCheckBox compressionEnabled,
45+
@Named("compressionPolicy") PreferenceComboBox<ComboItem<CompressionPolicy>> compressionPolicy,
4546
@Named("overwriteOutput") PreferenceCheckBox overwriteOutput,
4647
@Named("discardBookmarks") PreferenceCheckBox discardBookmarks,
4748
@Named("pdfVersionCombo") PreferenceComboBox<ComboItem<PdfVersion>> pdfVersionCombo,
@@ -56,14 +57,34 @@ public PreferenceOutputPane(@Named("smartRadio") PreferenceRadioButton smartRadi
5657
pdfVersionCombo.setAccessibleText(i18n().tr("Default PDF version"));
5758
add(helpIcon(i18n().tr("Default PDF version for generated PDF files")), 2, 1);
5859

60+
var compressionPolicyLabel = new Label(i18n().tr("Output files compression") + ":");
61+
compressionPolicyLabel.setLabelFor(compressionPolicy);
62+
add(compressionPolicyLabel, 0, 2);
63+
GridPane.setFillWidth(compressionPolicy, true);
64+
compressionPolicy.setMaxWidth(Double.POSITIVE_INFINITY);
65+
compressionPolicy.setId("compressionPolicy");
66+
add(compressionPolicy, 1, 2);
67+
compressionPolicy.setAccessibleText(
68+
i18n().tr("Sets the default value for the compression policy of the output files"));
69+
var cpHelpIcon = helpIcon("""
70+
- %s: %s
71+
- %s: %s
72+
- %s: %s
73+
""".formatted(i18n().tr("Compress"),
74+
i18n().tr("all streams in the output PDF will be compressed by applying FlateDecode encoding"),
75+
i18n().tr("Neutral"), i18n().tr("streams are left unchanged from the original file"),
76+
i18n().tr("Uncompress"), i18n().tr(
77+
"FlateDecode and LZWDecode filters will be removed from all streams. Useful for debugging or manual inspection")));
78+
add(cpHelpIcon, 2, 2);
79+
5980
ToggleGroup group = new ToggleGroup();
6081

6182
RadioButton manualRadio = new RadioButton(i18n().tr("Manually selected"));
6283
manualRadio.setToggleGroup(group);
6384
manualRadio.getStyleClass().addAll(Style.VITEM.css());
6485
manualRadio.setId("manualRadio");
6586
manualRadio.setAccessibleHelp(i18n().tr("Manually select the output destination directory"));
66-
add(manualRadio, 0, 2, 3, 1);
87+
add(manualRadio, 0, 3, 3, 1);
6788

6889
smartRadio.getStyleClass().addAll(Style.VITEM.css());
6990
smartRadio.setToggleGroup(group);
@@ -72,13 +93,12 @@ public PreferenceOutputPane(@Named("smartRadio") PreferenceRadioButton smartRadi
7293
smartRadio.setGraphic(helpIcon(smartRadioHelpText));
7394
smartRadio.getStyleClass().addAll(Style.WITH_HELP.css());
7495
smartRadio.setAccessibleHelp(smartRadioHelpText);
75-
add(smartRadio, 0, 3, 3, 1);
96+
add(smartRadio, 0, 4, 3, 1);
7697

7798
if (isNull(group.getSelectedToggle())) {
7899
group.selectToggle(manualRadio);
79100
}
80101

81-
add(compressionEnabled, 0, 4, 3, 1);
82102
add(overwriteOutput, 0, 5, 3, 1);
83103
add(discardBookmarks, 0, 6, 3, 1);
84104

pdfsam-gui/src/test/java/org/pdfsam/gui/components/content/preference/PreferenceOutputPaneTest.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.pdfsam.core.context.BooleanPersistentProperty;
3030
import org.pdfsam.core.context.StringPersistentProperty;
3131
import org.pdfsam.model.ui.ComboItem;
32+
import org.sejda.model.output.CompressionPolicy;
3233
import org.sejda.model.pdf.PdfVersion;
3334
import org.testfx.api.FxRobot;
3435
import org.testfx.framework.junit5.ApplicationExtension;
@@ -55,8 +56,8 @@ public void start(Stage stage) {
5556
when(appContext.persistentSettings()).thenReturn(persistentSettings);
5657
var smartRadio = new PreferenceRadioButton(BooleanPersistentProperty.SMART_OUTPUT, "radio", false, appContext);
5758
smartRadio.setId("smartRadio");
58-
var compressionEnabled = new PreferenceCheckBox(BooleanPersistentProperty.PDF_COMPRESSION_ENABLED,
59-
"compression", true, appContext);
59+
var compressionEnabled = new PreferenceComboBox<ComboItem<CompressionPolicy>>(
60+
StringPersistentProperty.COMPRESSION_POLICY, appContext);
6061
compressionEnabled.setId("compressionEnabled");
6162
var overwriteOutput = new PreferenceCheckBox(BooleanPersistentProperty.OVERWRITE_OUTPUT, "overwrite", false,
6263
appContext);
@@ -82,13 +83,6 @@ public void manualRadioIsSelected() {
8283
assertTrue(robot.lookup("#manualRadio").queryAs(RadioButton.class).isSelected());
8384
}
8485

85-
@Test
86-
public void clickCompression() {
87-
robot.clickOn("#compressionEnabled");
88-
WaitForAsyncUtils.waitForFxEvents();
89-
verify(persistentSettings).set(BooleanPersistentProperty.PDF_COMPRESSION_ENABLED, false);
90-
}
91-
9286
@Test
9387
public void clickSmart() {
9488
robot.clickOn("#smartRadio");

pdfsam-tools/pdfsam-alternate-mix/src/main/java/org/pdfsam/tools/alternatemix/AlternateMixParametersBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ boolean hasInput() {
5555
@Override
5656
public AlternateMixMultipleInputParameters build() {
5757
AlternateMixMultipleInputParameters params = new AlternateMixMultipleInputParameters();
58-
params.setCompress(isCompress());
58+
params.setCompressionPolicy(compressionPolicy());
5959
params.setExistingOutputPolicy(existingOutput());
6060
params.setVersion(getVersion());
6161
params.setOutput(output);

pdfsam-tools/pdfsam-alternate-mix/src/test/java/org/pdfsam/tools/alternatemix/AlternateMixParametersBuilderTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.junit.jupiter.api.io.TempDir;
2323
import org.sejda.model.input.PdfFileSource;
2424
import org.sejda.model.input.PdfMixInput;
25+
import org.sejda.model.output.CompressionPolicy;
2526
import org.sejda.model.output.ExistingOutputPolicy;
2627
import org.sejda.model.output.FileTaskOutput;
2728
import org.sejda.model.parameter.AlternateMixMultipleInputParameters;
@@ -44,7 +45,7 @@ public class AlternateMixParametersBuilderTest {
4445
@Test
4546
public void build(@TempDir Path folder) throws IOException {
4647
AlternateMixParametersBuilder victim = new AlternateMixParametersBuilder();
47-
victim.compress(true);
48+
victim.compressionPolicy(CompressionPolicy.COMPRESS);
4849
PdfMixInput first = new PdfMixInput(
4950
PdfFileSource.newInstanceNoPassword(Files.createTempFile(folder, null, ".pdf").toFile()), true, 2);
5051
victim.addInput(first);
@@ -60,7 +61,7 @@ public void build(@TempDir Path folder) throws IOException {
6061
victim.version(PdfVersion.VERSION_1_7);
6162
assertTrue(victim.hasInput());
6263
AlternateMixMultipleInputParameters params = victim.build();
63-
assertTrue(params.isCompress());
64+
assertEquals(CompressionPolicy.COMPRESS, params.compressionPolicy());
6465
assertEquals(ExistingOutputPolicy.OVERWRITE, params.getExistingOutputPolicy());
6566
assertEquals(PdfVersion.VERSION_1_7, params.getVersion());
6667
assertEquals(3, params.getInputList().size());

pdfsam-tools/pdfsam-backpages/src/main/java/org/pdfsam/tools/backpages/AddBackpagesParametersBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void ranges(Set<PageRange> ranges) {
6565
@Override
6666
public AddBackPagesParameters build() {
6767
AddBackPagesParameters params = new AddBackPagesParameters();
68-
params.setCompress(isCompress());
68+
params.setCompressionPolicy(compressionPolicy());
6969
params.setExistingOutputPolicy(existingOutput());
7070
params.setVersion(getVersion());
7171
params.setOutput(output);

0 commit comments

Comments
 (0)