Browse Source

Deprecate Pair<> class and remove all of its usages

DEVSIX-9068

Autoported commit.
Original commit hash: [4099ad739]
Manual files:
sign/src/main/java/com/itextpdf/signatures/validation/report/xml/XmlReportGenerator.java
pull/38/head
Dmitry Radchuk 3 months ago
parent
commit
49a607618f
  1. 3
      itext/itext.commons/itext/commons/utils/Pair.cs
  2. 43
      itext/itext.sign/itext/signatures/validation/DocumentRevisionsValidator.cs
  3. 45
      itext/itext.sign/itext/signatures/validation/report/xml/SignatureValidationStatus.cs
  4. 9
      itext/itext.sign/itext/signatures/validation/report/xml/XmlReportGenerator.cs
  5. 2
      port-hash

3
itext/itext.commons/itext/commons/utils/Pair.cs

@ -20,10 +20,13 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
using System;
namespace iText.Commons.Utils {
/// <summary>Class which represents a pair of key and value.</summary>
/// <typeparam name="K">key parameter type.</typeparam>
/// <typeparam name="V">value parameter type.</typeparam>
[System.ObsoleteAttribute(@"in favour of iText.Commons.Datastructures.Tuple2{T1, T2}")]
public class Pair<K, V> {
private readonly K key;

43
itext/itext.sign/itext/signatures/validation/DocumentRevisionsValidator.cs

@ -25,6 +25,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using iText.Commons.Actions.Contexts;
using iText.Commons.Datastructures;
using iText.Commons.Utils;
using iText.Forms;
using iText.Forms.Fields;
@ -262,7 +263,7 @@ namespace iText.Signatures.Validation {
private ICollection<PdfDictionary> addedTaggedObjects;
private Pair<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects;
private Tuple2<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects;
/// <summary>
/// Creates new instance of
@ -499,8 +500,9 @@ namespace iText.Signatures.Validation {
private bool ValidateRevision(ValidationReport validationReport, ValidationContext context, PdfDocument documentWithoutRevision
, PdfDocument documentWithRevision, DocumentRevision currentRevision) {
usuallyModifiedObjects = new Pair<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>>(CreateUsuallyModifiedObjectsSet
(documentWithoutRevision), CreateUsuallyModifiedObjectsSet(documentWithRevision));
usuallyModifiedObjects = new Tuple2<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>>(
CreateUsuallyModifiedObjectsSet(documentWithoutRevision), CreateUsuallyModifiedObjectsSet(documentWithRevision
));
if (!CompareCatalogs(documentWithoutRevision, documentWithRevision, validationReport, context)) {
return false;
}
@ -1765,21 +1767,21 @@ namespace iText.Signatures.Validation {
// Compare PDF objects util section:
//
//
private static bool ComparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, Pair<ICollection<PdfIndirectReference
private static bool ComparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, Tuple2<ICollection<PdfIndirectReference
>, ICollection<PdfIndirectReference>> usuallyModifiedObjects) {
return ComparePdfObjects(pdfObject1, pdfObject2, new List<Pair<PdfObject, PdfObject>>(), usuallyModifiedObjects
return ComparePdfObjects(pdfObject1, pdfObject2, new List<Tuple2<PdfObject, PdfObject>>(), usuallyModifiedObjects
);
}
private static bool ComparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, IList<Pair<PdfObject, PdfObject
>> visitedObjects, Pair<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects
) {
foreach (Pair<PdfObject, PdfObject> pair in visitedObjects) {
if (pair.GetKey() == pdfObject1) {
return pair.GetValue() == pdfObject2;
private static bool ComparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, IList<Tuple2<PdfObject,
PdfObject>> visitedObjects, Tuple2<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference
>> usuallyModifiedObjects) {
foreach (Tuple2<PdfObject, PdfObject> pair in visitedObjects) {
if (pair.GetFirst() == pdfObject1) {
return pair.GetSecond() == pdfObject2;
}
}
visitedObjects.Add(new Pair<PdfObject, PdfObject>(pdfObject1, pdfObject2));
visitedObjects.Add(new Tuple2<PdfObject, PdfObject>(pdfObject1, pdfObject2));
if (Object.Equals(pdfObject1, pdfObject2)) {
return true;
}
@ -1789,9 +1791,9 @@ namespace iText.Signatures.Validation {
if (pdfObject1.GetType() != pdfObject2.GetType()) {
return false;
}
if (pdfObject1.GetIndirectReference() != null && usuallyModifiedObjects.GetKey().Any((reference) => IsSameReference
if (pdfObject1.GetIndirectReference() != null && usuallyModifiedObjects.GetFirst().Any((reference) => IsSameReference
(reference, pdfObject1.GetIndirectReference())) && pdfObject2.GetIndirectReference() != null && usuallyModifiedObjects
.GetValue().Any((reference) => IsSameReference(reference, pdfObject2.GetIndirectReference()))) {
.GetSecond().Any((reference) => IsSameReference(reference, pdfObject2.GetIndirectReference()))) {
// These two objects are expected to not be completely equal, we check them independently.
// However, we still need to make sure those are same instances.
return IsSameReference(pdfObject1.GetIndirectReference(), pdfObject2.GetIndirectReference());
@ -1837,8 +1839,9 @@ namespace iText.Signatures.Validation {
}
}
private static bool ComparePdfArrays(PdfArray array1, PdfArray array2, IList<Pair<PdfObject, PdfObject>> visitedObjects
, Pair<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects) {
private static bool ComparePdfArrays(PdfArray array1, PdfArray array2, IList<Tuple2<PdfObject, PdfObject>>
visitedObjects, Tuple2<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects
) {
if (array1.Size() != array2.Size()) {
return false;
}
@ -1850,8 +1853,8 @@ namespace iText.Signatures.Validation {
return true;
}
private static bool ComparePdfDictionaries(PdfDictionary dictionary1, PdfDictionary dictionary2, IList<Pair
<PdfObject, PdfObject>> visitedObjects, Pair<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference
private static bool ComparePdfDictionaries(PdfDictionary dictionary1, PdfDictionary dictionary2, IList<Tuple2
<PdfObject, PdfObject>> visitedObjects, Tuple2<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference
>> usuallyModifiedObjects) {
ICollection<KeyValuePair<PdfName, PdfObject>> entrySet1 = dictionary1.EntrySet();
ICollection<KeyValuePair<PdfName, PdfObject>> entrySet2 = dictionary2.EntrySet();
@ -1867,8 +1870,8 @@ namespace iText.Signatures.Validation {
return true;
}
private static bool ComparePdfStreams(PdfStream stream1, PdfStream stream2, IList<Pair<PdfObject, PdfObject
>> visitedObjects, Pair<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects
private static bool ComparePdfStreams(PdfStream stream1, PdfStream stream2, IList<Tuple2<PdfObject, PdfObject
>> visitedObjects, Tuple2<ICollection<PdfIndirectReference>, ICollection<PdfIndirectReference>> usuallyModifiedObjects
) {
return JavaUtil.ArraysEquals(stream1.GetBytes(), stream2.GetBytes()) && ComparePdfDictionaries(stream1, stream2
, visitedObjects, usuallyModifiedObjects);

45
itext/itext.sign/itext/signatures/validation/report/xml/SignatureValidationStatus.cs

@ -22,11 +22,12 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using iText.Commons.Utils;
using iText.Commons.Datastructures;
using iText.IO.Util;
namespace iText.Signatures.Validation.Report.Xml {
//\cond DO_NOT_DOCUMENT
/// <summary>Class which represents signature validation status.</summary>
internal class SignatureValidationStatus {
private static readonly IDictionary<SignatureValidationStatus.MainIndication, String> MAIN_INDICATION_VALUE_MAP
= new Dictionary<SignatureValidationStatus.MainIndication, String>(EnumUtil.GetAllValuesOfEnum<SignatureValidationStatus.MainIndication
@ -36,7 +37,7 @@ namespace iText.Signatures.Validation.Report.Xml {
new Dictionary<SignatureValidationStatus.MessageType, String>(EnumUtil.GetAllValuesOfEnum<SignatureValidationStatus.MessageType
>().Count);
private readonly IList<Pair<String, String>> messages = new List<Pair<String, String>>();
private readonly IList<Tuple2<String, String>> messages = new List<Tuple2<String, String>>();
private SignatureValidationStatus.MainIndication mainIndication;
@ -60,31 +61,59 @@ namespace iText.Signatures.Validation.Report.Xml {
MESSAGE_TYPE_VALUE_MAP.Put(SignatureValidationStatus.MessageType.ERROR, "urn:cef:dss:message:error");
}
/// <summary>
/// Creates an empty
/// <see cref="SignatureValidationStatus"/>
/// instance.
/// </summary>
public SignatureValidationStatus() {
}
// Declaring default constructor explicitly to avoid removing it unintentionally.
/// <summary>Sets the main status indication.</summary>
/// <param name="mainIndication">
///
/// <see cref="MainIndication"/>
/// value
/// </param>
public virtual void SetMainIndication(SignatureValidationStatus.MainIndication mainIndication) {
this.mainIndication = mainIndication;
}
/// <summary>Gets the main status indication.</summary>
public virtual SignatureValidationStatus.MainIndication GetMainIndication() {
return mainIndication;
}
/// <summary>Gets URI representation of the validation status (see ETSI TS 119 102 4.3.4.2).</summary>
/// <returns>validation status as string</returns>
public virtual String GetMainIndicationAsString() {
return MAIN_INDICATION_VALUE_MAP.Get(mainIndication);
}
/// <summary>Sets sub-indication that shall clearly identify the reason for the main status indication.</summary>
/// <param name="subIndication">
///
/// <see cref="SubIndication"/>
/// value
/// </param>
public virtual void SetSubIndication(SignatureValidationStatus.SubIndication subIndication) {
this.subIndication = subIndication;
this.subIndicationSet = true;
}
/// <summary>Gets sub-indication that shall clearly identify the reason for the main status indication.</summary>
/// <returns>
///
/// <see cref="SubIndication"/>
/// value
/// </returns>
public virtual SignatureValidationStatus.SubIndication GetSubIndication() {
return subIndication;
}
/// <summary>Gets sub-indication that shall clearly identify the reason for the main status indication.</summary>
/// <returns>sub-indication value as string</returns>
public virtual String GetSubIndicationAsString() {
if (!subIndicationSet) {
return null;
@ -92,11 +121,19 @@ namespace iText.Signatures.Validation.Report.Xml {
return subIndication.ToString();
}
/// <summary>Adds message for validation report data.</summary>
/// <param name="reason">message reason as string</param>
/// <param name="messageType">
///
/// <see cref="MessageType"/>
/// </param>
public virtual void AddMessage(String reason, SignatureValidationStatus.MessageType messageType) {
this.messages.Add(new Pair<String, String>(reason, MESSAGE_TYPE_VALUE_MAP.Get(messageType)));
this.messages.Add(new Tuple2<String, String>(reason, MESSAGE_TYPE_VALUE_MAP.Get(messageType)));
}
public virtual ICollection<Pair<String, String>> GetMessages() {
/// <summary>Gets all reported messages.</summary>
/// <returns>Collection of reported messages</returns>
public virtual ICollection<Tuple2<String, String>> GetMessages() {
return messages;
}

9
itext/itext.sign/itext/signatures/validation/report/xml/XmlReportGenerator.cs

@ -25,6 +25,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using iText.Commons.Datastructures;
using iText.Commons.Utils;
namespace iText.Signatures.Validation.Report.Xml {
@ -114,21 +115,21 @@ namespace iText.Signatures.Validation.Report.Xml {
subIndicationNode.InnerText = subIndication;
status.AppendChild(subIndicationNode);
}
ICollection<Pair<String, String>> messages = signatureValidation.GetSignatureValidationStatus().GetMessages
ICollection<Tuple2<String, String>> messages = signatureValidation.GetSignatureValidationStatus().GetMessages
();
if (!messages.IsEmpty()) {
XmlNode associatedValidationReportData = doc.CreateElement("AssociatedValidationReportData");
status.AppendChild(associatedValidationReportData);
XmlNode additionalValidationReportData = doc.CreateElement("AdditionalValidationReportData");
associatedValidationReportData.AppendChild(additionalValidationReportData);
foreach (Pair<String, String> message in messages) {
foreach (Tuple2<String, String> message in messages) {
XmlNode reportData = doc.CreateElement("ReportData");
XmlNode type = doc.CreateElement("Type");
type.InnerText = message.GetValue();
type.InnerText = message.GetSecond();
reportData.AppendChild(type);
XmlElement value = doc.CreateElement("Value");
value.SetAttribute("type", XSI_NS, "xs:string");
value.InnerText = message.GetKey();
value.InnerText = message.GetFirst();
reportData.AppendChild(value);
additionalValidationReportData.AppendChild(reportData);
}

2
port-hash

@ -1 +1 @@
624f517e195da0187a94e72cfc4c17035ce9012c
4099ad7399438eb0e94c271ce0d0eb10e36ec326
Loading…
Cancel
Save