Skip to content

Commit a5497fd

Browse files
Egor Martsynkovskyyulian-gaponenko
authored andcommitted
Update fingerprint logic
DEVSIX-5712 Autoported commit. Original commit hash: [40c73bd2f]
1 parent 1b5571f commit a5497fd

File tree

8 files changed

+71
-143
lines changed

8 files changed

+71
-143
lines changed

itext.tests/itext.kernel.tests/itext/kernel/pdf/FingerPrintTest.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,34 +40,37 @@ source product.
4040
For more information, please contact iText Software Corp. at this
4141
4242
*/
43-
using iText.Kernel;
43+
using iText.Commons.Actions.Data;
4444
using iText.Test;
4545

4646
namespace iText.Kernel.Pdf {
4747
public class FingerPrintTest : ExtendedITextTest {
48-
private ProductInfo productInfo;
48+
private ProductData productData;
4949

50-
private ProductInfo productInfo2;
50+
private ProductData productData2;
51+
52+
private ProductData duplicateProductData;
5153

5254
[NUnit.Framework.SetUp]
5355
public virtual void BeforeTest() {
54-
this.productInfo = new ProductInfo("pdfProduct", 1, 0, 0, true);
55-
this.productInfo2 = new ProductInfo("pdfProduct2", 1, 0, 0, true);
56+
this.productData = new ProductData("pdfProduct", "pdfProduct", "7.0.0", 1900, 2000);
57+
this.productData2 = new ProductData("pdfProduct2", "pdfProduct2", "7.0.0", 1900, 2000);
58+
this.duplicateProductData = new ProductData("pdfProduct", "pdfProduct", "7.0.0", 1900, 2000);
5659
}
5760

5861
[NUnit.Framework.Test]
5962
public virtual void NormalAddTest() {
6063
FingerPrint fingerPrint = new FingerPrint();
61-
NUnit.Framework.Assert.IsTrue(fingerPrint.RegisterProduct(productInfo));
62-
NUnit.Framework.Assert.IsTrue(fingerPrint.RegisterProduct(productInfo2));
64+
NUnit.Framework.Assert.IsTrue(fingerPrint.RegisterProduct(productData));
65+
NUnit.Framework.Assert.IsTrue(fingerPrint.RegisterProduct(productData2));
6366
NUnit.Framework.Assert.AreEqual(2, fingerPrint.GetProducts().Count);
6467
}
6568

6669
[NUnit.Framework.Test]
6770
public virtual void DuplicateTest() {
6871
FingerPrint fingerPrint = new FingerPrint();
69-
fingerPrint.RegisterProduct(productInfo);
70-
NUnit.Framework.Assert.IsFalse(fingerPrint.RegisterProduct(productInfo));
72+
fingerPrint.RegisterProduct(productData);
73+
NUnit.Framework.Assert.IsFalse(fingerPrint.RegisterProduct(duplicateProductData));
7174
}
7275
}
7376
}

itext.tests/itext.kernel.tests/itext/kernel/pdf/TrailerTest.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ source product.
4242
*/
4343
using System;
4444
using System.IO;
45+
using iText.Commons.Actions.Data;
4546
using iText.Commons.Utils;
46-
using iText.Kernel;
4747
using iText.Kernel.Font;
4848
using iText.Kernel.Pdf.Canvas;
4949
using iText.Test;
5050

5151
namespace iText.Kernel.Pdf {
5252
/// <author>Michael Demey</author>
5353
public class TrailerTest : ExtendedITextTest {
54-
private ProductInfo productInfo;
54+
private ProductData productData;
5555

5656
public static readonly String destinationFolder = NUnit.Framework.TestContext.CurrentContext.TestDirectory
5757
+ "/test/itext/kernel/pdf/TrailerTest/";
@@ -63,30 +63,31 @@ public static void BeforeClass() {
6363

6464
[NUnit.Framework.SetUp]
6565
public virtual void BeforeTest() {
66-
this.productInfo = new ProductInfo("pdfProduct", 1, 0, 0, true);
66+
this.productData = new ProductData("pdfProduct", "pdfProduct", "1.0.0", 1900, 2000);
6767
}
6868

6969
[NUnit.Framework.Test]
7070
public virtual void TrailerFingerprintTest() {
7171
FileStream fos = new FileStream(destinationFolder + "output.pdf", FileMode.Create);
7272
PdfDocument pdf = new PdfDocument(new PdfWriter(fos));
73-
pdf.RegisterProduct(this.productInfo);
73+
pdf.RegisterProduct(this.productData);
7474
PdfPage page = pdf.AddNewPage();
7575
PdfCanvas canvas = new PdfCanvas(page);
7676
canvas.BeginText().SetFontAndSize(PdfFontFactory.CreateFont(), 12f).ShowText("Hello World").EndText();
7777
pdf.Close();
7878
NUnit.Framework.Assert.IsTrue(DoesTrailerContainFingerprint(new FileInfo(destinationFolder + "output.pdf")
79-
, productInfo.ToString()));
79+
, MessageFormatUtil.Format("%iText-{0}-{1}\n", productData.GetProductName(), productData.GetVersion())
80+
));
8081
}
8182

8283
private bool DoesTrailerContainFingerprint(FileInfo file, String fingerPrint) {
8384
FileStream raf = FileUtil.GetRandomAccessFile(file);
8485
// put the pointer at the end of the file
8586
raf.Seek(raf.Length);
86-
// look for startxref
87-
String startxref = "startxref";
87+
// look for coreProductData
88+
String coreProductData = "%iText-Core-7.2.0-SNAPSHOT";
8889
String templine = "";
89-
while (!templine.Contains(startxref)) {
90+
while (!templine.Contains(coreProductData)) {
9091
templine = (char)raf.ReadByte() + templine;
9192
raf.Seek(raf.Position - 2);
9293
}

itext/itext.commons/itext/commons/actions/data/ProductData.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,27 @@ public int GetSinceCopyrightYear() {
7979
public int GetToCopyrightYear() {
8080
return toCopyrightYear;
8181
}
82+
83+
public override bool Equals(Object o) {
84+
if (this == o) {
85+
return true;
86+
}
87+
if (o == null || GetType() != o.GetType()) {
88+
return false;
89+
}
90+
iText.Commons.Actions.Data.ProductData other = (iText.Commons.Actions.Data.ProductData)o;
91+
return Object.Equals(publicProductName, other.publicProductName) && Object.Equals(productName, other.productName
92+
) && Object.Equals(version, other.version) && sinceCopyrightYear == other.sinceCopyrightYear && toCopyrightYear
93+
== other.toCopyrightYear;
94+
}
95+
96+
public override int GetHashCode() {
97+
int result = publicProductName != null ? publicProductName.GetHashCode() : 0;
98+
result += 31 * result + (productName != null ? productName.GetHashCode() : 0);
99+
result += 31 * result + (version != null ? version.GetHashCode() : 0);
100+
result += 31 * result + sinceCopyrightYear;
101+
result += 31 * result + toCopyrightYear;
102+
return result;
103+
}
82104
}
83105
}

itext/itext.kernel/itext/kernel/ProductInfo.cs

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

itext/itext.kernel/itext/kernel/actions/events/FlushPdfDocumentEvent.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ protected internal override void DoAction() {
6464
}
6565
ICollection<String> products = new HashSet<String>();
6666
foreach (AbstractProductProcessITextEvent @event in events) {
67+
pdfDocument.GetFingerPrint().RegisterProduct(@event.GetProductData());
6768
if (@event.GetConfirmationType() == EventConfirmationType.ON_CLOSE) {
6869
EventManager.GetInstance().OnEvent(new ConfirmEvent(pdfDocument.GetDocumentIdWrapper(), @event));
6970
}

itext/itext.kernel/itext/kernel/pdf/FingerPrint.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ source product.
4242
4343
*/
4444
using System.Collections.Generic;
45-
using iText.Kernel;
45+
using iText.Commons.Actions.Data;
46+
using iText.Commons.Utils;
4647

4748
namespace iText.Kernel.Pdf {
4849
/// <summary>Data container for debugging information.</summary>
@@ -52,27 +53,27 @@ namespace iText.Kernel.Pdf {
5253
/// logger or to the file.
5354
/// </remarks>
5455
public class FingerPrint {
55-
private ICollection<ProductInfo> productInfoSet;
56+
private ICollection<ProductData> productDataSet;
5657

5758
/// <summary>Default constructor.</summary>
58-
/// <remarks>Default constructor. Initializes the productInfoSet.</remarks>
59+
/// <remarks>Default constructor. Initializes the productDataSet.</remarks>
5960
public FingerPrint() {
60-
this.productInfoSet = new HashSet<ProductInfo>();
61+
this.productDataSet = new LinkedHashSet<ProductData>();
6162
}
6263

6364
/// <summary>Registers a product to be added to the fingerprint or other debugging info.</summary>
64-
/// <param name="productInfo">ProductInfo to be added</param>
65+
/// <param name="productData">ProductData to be added</param>
6566
/// <returns>true if the fingerprint did not already contain the specified element</returns>
66-
public virtual bool RegisterProduct(ProductInfo productInfo) {
67-
int initialSize = productInfoSet.Count;
68-
productInfoSet.Add(productInfo);
69-
return initialSize != productInfoSet.Count;
67+
public virtual bool RegisterProduct(ProductData productData) {
68+
int initialSize = productDataSet.Count;
69+
productDataSet.Add(productData);
70+
return initialSize != productDataSet.Count;
7071
}
7172

7273
/// <summary>Returns the registered products.</summary>
7374
/// <returns>registered products.</returns>
74-
public virtual ICollection<ProductInfo> GetProducts() {
75-
return this.productInfoSet;
75+
public virtual ICollection<ProductData> GetProducts() {
76+
return JavaCollectionsUtil.UnmodifiableSet(new LinkedHashSet<ProductData>(this.productDataSet));
7677
}
7778
}
7879
}

itext/itext.kernel/itext/kernel/pdf/PdfDocument.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ source product.
4747
using iText.Commons;
4848
using iText.Commons.Actions;
4949
using iText.Commons.Actions.Confirmations;
50+
using iText.Commons.Actions.Data;
5051
using iText.Commons.Actions.Sequence;
5152
using iText.Commons.Utils;
5253
using iText.IO.Source;
@@ -1860,10 +1861,10 @@ public virtual PdfFont AddFont(PdfFont font) {
18601861
}
18611862

18621863
/// <summary>Registers a product for debugging purposes.</summary>
1863-
/// <param name="productInfo">product to be registered.</param>
1864+
/// <param name="productData">product to be registered.</param>
18641865
/// <returns>true if the product hadn't been registered before.</returns>
1865-
public virtual bool RegisterProduct(ProductInfo productInfo) {
1866-
return this.fingerPrint.RegisterProduct(productInfo);
1866+
public virtual bool RegisterProduct(ProductData productData) {
1867+
return this.fingerPrint.RegisterProduct(productData);
18671868
}
18681869

18691870
/// <summary>Returns the object containing the registered products.</summary>

itext/itext.kernel/itext/kernel/pdf/PdfXrefTable.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ source product.
4646
using System.Text;
4747
using Microsoft.Extensions.Logging;
4848
using iText.Commons;
49+
using iText.Commons.Actions.Data;
4950
using iText.Commons.Utils;
5051
using iText.IO.Source;
51-
using iText.Kernel;
52+
using iText.Kernel.Actions.Data;
5253

5354
namespace iText.Kernel.Pdf {
5455
/// <summary>A representation of a cross-referenced table of a PDF document.</summary>
@@ -473,16 +474,15 @@ private int GetOffsetSize(long startxref) {
473474
protected internal static void WriteKeyInfo(PdfDocument document) {
474475
PdfWriter writer = document.GetWriter();
475476
FingerPrint fingerPrint = document.GetFingerPrint();
476-
//TODO DEVSIX-5712 in the scope of this ticket we will discuss, what information we would write.
477-
//String platform = "";
478-
//VersionInfo versionInfo = document.getVersionInfo();
479-
//String k = versionInfo.getKey();
480-
//if (k == null) {
481-
// k = "iText";
482-
//}
483-
//writer.writeString(MessageFormatUtil.format("%{0}-{1}{2}\n", k, versionInfo.getRelease(), platform));
484-
foreach (ProductInfo productInfo in fingerPrint.GetProducts()) {
485-
writer.WriteString(MessageFormatUtil.Format("%{0}\n", productInfo));
477+
if (fingerPrint.GetProducts().IsEmpty()) {
478+
writer.WriteString(MessageFormatUtil.Format("%iText-{0}-no-registered-products", ITextCoreProductData.GetInstance
479+
().GetVersion()));
480+
}
481+
else {
482+
foreach (ProductData productData in fingerPrint.GetProducts()) {
483+
writer.WriteString(MessageFormatUtil.Format("%iText-{0}-{1}\n", productData.GetPublicProductName(), productData
484+
.GetVersion()));
485+
}
486486
}
487487
}
488488

0 commit comments

Comments
 (0)