Skip to content

Commit 6fa8df2

Browse files
Egor Martsynkovskyyulian-gaponenko
authored andcommitted
Update fingerprint logic
DEVSIX-5712
1 parent fc2402d commit 6fa8df2

File tree

8 files changed

+84
-153
lines changed

8 files changed

+84
-153
lines changed

commons/src/main/java/com/itextpdf/commons/actions/data/ProductData.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.commons.actions.data;
2424

25+
import java.util.Objects;
26+
2527
/**
2628
* Class is used to describe used product information.
2729
*/
@@ -94,4 +96,31 @@ public int getSinceCopyrightYear() {
9496
public int getToCopyrightYear() {
9597
return toCopyrightYear;
9698
}
99+
100+
@Override
101+
public boolean equals(Object o) {
102+
if (this == o) {
103+
return true;
104+
}
105+
106+
if (o == null || getClass() != o.getClass()) {
107+
return false;
108+
}
109+
110+
final ProductData other = (ProductData) o;
111+
return Objects.equals(publicProductName, other.publicProductName) && Objects
112+
.equals(productName, other.productName) &&
113+
Objects.equals(version, other.version) && sinceCopyrightYear == other.sinceCopyrightYear
114+
&& toCopyrightYear == other.toCopyrightYear;
115+
}
116+
117+
@Override
118+
public int hashCode() {
119+
int result = publicProductName != null ? publicProductName.hashCode() : 0;
120+
result += 31 * result + (productName != null ? productName.hashCode() : 0);
121+
result += 31 * result + (version != null ? version.hashCode() : 0);
122+
result += 31 * result + sinceCopyrightYear;
123+
result += 31 * result + toCopyrightYear;
124+
return result;
125+
}
97126
}

kernel/src/main/java/com/itextpdf/kernel/ProductInfo.java

Lines changed: 0 additions & 101 deletions
This file was deleted.

kernel/src/main/java/com/itextpdf/kernel/actions/events/FlushPdfDocumentEvent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ protected void doAction() {
7878

7979
final Set<String> products = new HashSet<>();
8080
for (final AbstractProductProcessITextEvent event : events) {
81+
pdfDocument.getFingerPrint().registerProduct(event.getProductData());
8182
if (event.getConfirmationType() == EventConfirmationType.ON_CLOSE) {
8283
EventManager.getInstance().onEvent(new ConfirmEvent(pdfDocument.getDocumentIdWrapper(), event));
8384
}

kernel/src/main/java/com/itextpdf/kernel/pdf/FingerPrint.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ This file is part of the iText (R) project.
4343
*/
4444
package com.itextpdf.kernel.pdf;
4545

46-
import com.itextpdf.kernel.ProductInfo;
46+
import com.itextpdf.commons.actions.data.ProductData;
4747

4848
import java.util.Collection;
49+
import java.util.Collections;
4950
import java.util.HashSet;
51+
import java.util.LinkedHashSet;
5052
import java.util.Set;
5153

5254
/**
@@ -56,34 +58,34 @@ This file is part of the iText (R) project.
5658
*/
5759
public class FingerPrint {
5860

59-
private Set<ProductInfo> productInfoSet;
61+
private Set<ProductData> productDataSet;
6062

6163
/**
62-
* Default constructor. Initializes the productInfoSet.
64+
* Default constructor. Initializes the productDataSet.
6365
*/
6466
public FingerPrint() {
65-
this.productInfoSet = new HashSet<>();
67+
this.productDataSet = new LinkedHashSet<>();
6668
}
6769

6870
/**
6971
* Registers a product to be added to the fingerprint or other debugging info.
7072
*
71-
* @param productInfo ProductInfo to be added
73+
* @param productData ProductData to be added
7274
* @return true if the fingerprint did not already contain the specified element
7375
*/
74-
public boolean registerProduct(final ProductInfo productInfo) {
75-
int initialSize = productInfoSet.size();
76-
productInfoSet.add(productInfo);
77-
return initialSize != productInfoSet.size();
76+
public boolean registerProduct(final ProductData productData) {
77+
int initialSize = productDataSet.size();
78+
productDataSet.add(productData);
79+
return initialSize != productDataSet.size();
7880
}
7981

8082
/**
8183
* Returns the registered products.
8284
*
8385
* @return registered products.
8486
*/
85-
public Collection<ProductInfo> getProducts() {
86-
return this.productInfoSet;
87+
public Collection<ProductData> getProducts() {
88+
return Collections.unmodifiableSet(new LinkedHashSet<>(this.productDataSet));
8789
}
8890

8991
}

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfDocument.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,18 @@ This file is part of the iText (R) project.
4343
*/
4444
package com.itextpdf.kernel.pdf;
4545

46-
import com.itextpdf.commons.actions.EventManager;
47-
import com.itextpdf.commons.actions.confirmations.ConfirmEvent;
48-
import com.itextpdf.commons.actions.confirmations.EventConfirmationType;
49-
import com.itextpdf.commons.actions.sequence.SequenceId;
50-
import com.itextpdf.commons.utils.MessageFormatUtil;
46+
import com.itextpdf.commons.actions.data.ProductData;
5147
import com.itextpdf.io.LogMessageConstant;
5248
import com.itextpdf.io.source.ByteUtils;
5349
import com.itextpdf.io.source.RandomAccessFileOrArray;
50+
import com.itextpdf.commons.utils.MessageFormatUtil;
5451
import com.itextpdf.kernel.PdfException;
55-
import com.itextpdf.kernel.ProductInfo;
52+
import com.itextpdf.commons.actions.EventManager;
5653
import com.itextpdf.kernel.actions.data.ITextCoreProductData;
54+
import com.itextpdf.commons.actions.confirmations.ConfirmEvent;
55+
import com.itextpdf.commons.actions.confirmations.EventConfirmationType;
5756
import com.itextpdf.kernel.actions.events.FlushPdfDocumentEvent;
57+
import com.itextpdf.commons.actions.sequence.SequenceId;
5858
import com.itextpdf.kernel.actions.events.ITextCoreProductEvent;
5959
import com.itextpdf.kernel.crypto.BadPasswordException;
6060
import com.itextpdf.kernel.events.EventDispatcher;
@@ -1812,11 +1812,11 @@ public PdfFont addFont(PdfFont font) {
18121812
/**
18131813
* Registers a product for debugging purposes.
18141814
*
1815-
* @param productInfo product to be registered.
1815+
* @param productData product to be registered.
18161816
* @return true if the product hadn't been registered before.
18171817
*/
1818-
public boolean registerProduct(final ProductInfo productInfo) {
1819-
return this.fingerPrint.registerProduct(productInfo);
1818+
public boolean registerProduct(final ProductData productData) {
1819+
return this.fingerPrint.registerProduct(productData);
18201820
}
18211821

18221822
/**

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfXrefTable.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ This file is part of the iText (R) project.
4343
*/
4444
package com.itextpdf.kernel.pdf;
4545

46+
import com.itextpdf.commons.actions.data.ProductData;
4647
import com.itextpdf.io.LogMessageConstant;
4748
import com.itextpdf.io.source.ByteUtils;
4849
import com.itextpdf.commons.utils.MessageFormatUtil;
49-
import com.itextpdf.kernel.ProductInfo;
5050
import com.itextpdf.kernel.actions.data.ITextCoreProductData;
5151

5252
import org.slf4j.Logger;
@@ -514,17 +514,14 @@ protected static void writeKeyInfo(PdfDocument document) {
514514
PdfWriter writer = document.getWriter();
515515
FingerPrint fingerPrint = document.getFingerPrint();
516516

517-
//TODO DEVSIX-5712 in the scope of this ticket we will discuss, what information we would write.
518-
//String platform = "";
519-
//VersionInfo versionInfo = document.getVersionInfo();
520-
//String k = versionInfo.getKey();
521-
//if (k == null) {
522-
// k = "iText";
523-
//}
524-
//writer.writeString(MessageFormatUtil.format("%{0}-{1}{2}\n", k, versionInfo.getRelease(), platform));
525-
526-
for (ProductInfo productInfo : fingerPrint.getProducts() ) {
527-
writer.writeString(MessageFormatUtil.format("%{0}\n", productInfo));
517+
if (fingerPrint.getProducts().isEmpty()) {
518+
writer.writeString(MessageFormatUtil
519+
.format("%iText-{0}-no-registered-products", ITextCoreProductData.getInstance().getVersion()));
520+
} else {
521+
for (ProductData productData : fingerPrint.getProducts()) {
522+
writer.writeString(MessageFormatUtil
523+
.format("%iText-{0}-{1}\n", productData.getPublicProductName(), productData.getVersion()));
524+
}
528525
}
529526
}
530527

kernel/src/test/java/com/itextpdf/kernel/pdf/FingerPrintTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ This file is part of the iText (R) project.
4242
*/
4343
package com.itextpdf.kernel.pdf;
4444

45-
import com.itextpdf.kernel.ProductInfo;
45+
import com.itextpdf.commons.actions.data.ProductData;
4646
import com.itextpdf.test.ExtendedITextTest;
4747

4848
import com.itextpdf.test.annotations.type.IntegrationTest;
@@ -54,28 +54,30 @@ This file is part of the iText (R) project.
5454
@Category(IntegrationTest.class)
5555
public class FingerPrintTest extends ExtendedITextTest {
5656

57-
private ProductInfo productInfo;
58-
private ProductInfo productInfo2;
57+
private ProductData productData;
58+
private ProductData productData2;
59+
private ProductData duplicateProductData;
5960

6061
@Before
6162
public void beforeTest() {
62-
this.productInfo = new ProductInfo("pdfProduct", 1, 0, 0, true);
63-
this.productInfo2 = new ProductInfo("pdfProduct2", 1, 0, 0, true);
63+
this.productData = new ProductData("pdfProduct", "pdfProduct", "7.0.0", 1900, 2000);
64+
this.productData2 = new ProductData("pdfProduct2", "pdfProduct2", "7.0.0", 1900, 2000);
65+
this.duplicateProductData =new ProductData("pdfProduct", "pdfProduct", "7.0.0", 1900, 2000);
6466
}
6567

6668
@Test
6769
public void normalAddTest() {
6870
FingerPrint fingerPrint = new FingerPrint();
69-
Assert.assertTrue(fingerPrint.registerProduct(productInfo));
70-
Assert.assertTrue(fingerPrint.registerProduct(productInfo2));
71+
Assert.assertTrue(fingerPrint.registerProduct(productData));
72+
Assert.assertTrue(fingerPrint.registerProduct(productData2));
7173
Assert.assertEquals(2, fingerPrint.getProducts().size());
7274
}
7375

7476
@Test
7577
public void duplicateTest() {
7678
FingerPrint fingerPrint = new FingerPrint();
77-
fingerPrint.registerProduct(productInfo);
78-
Assert.assertFalse(fingerPrint.registerProduct(productInfo));
79+
fingerPrint.registerProduct(productData);
80+
Assert.assertFalse(fingerPrint.registerProduct(duplicateProductData));
7981
}
8082
}
8183

0 commit comments

Comments
 (0)