From 8424b75303306daa62423f217e0d1dc5890e814e Mon Sep 17 00:00:00 2001
From: vharseko <vharseko@openam.org.ru>
Date: Tue, 18 Dec 2018 22:52:14 +0000
Subject: [PATCH] Sorted predictive attributes name order for LDIF (version control)
---
opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif | 8 ++++----
opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFEntryWriter.java | 12 ++++++++++--
opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFEntryWriterTestCase.java | 18 ++++++++++++++----
opendj-ldap-toolkit/src/test/resources/expected_output.ldif | 6 +++---
4 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFEntryWriter.java b/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFEntryWriter.java
index 2f15423..1a15741 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFEntryWriter.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIFEntryWriter.java
@@ -20,10 +20,13 @@
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.AbstractMap;
import java.util.List;
+import java.util.TreeMap;
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.AttributeDescription;
+import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Entry;
@@ -269,6 +272,8 @@
}
writeKeyAndValue("dn", entry.getName().toString());
+
+ final TreeMap<String,AbstractMap.SimpleEntry<String,ByteSequence>> attr=new TreeMap<>(); //sort by key:value
for (final Attribute attribute : entry.getAllAttributes()) {
// Filter the attribute if required.
if (isAttributeExcluded(attribute.getAttributeDescription())) {
@@ -277,13 +282,16 @@
final String attributeDescription = attribute.getAttributeDescriptionAsString();
if (attribute.isEmpty()) {
- writeKeyAndValue(attributeDescription, ByteString.empty());
+ attr.put(attributeDescription+attr.size(), new AbstractMap.SimpleEntry<String,ByteSequence>(attributeDescription,ByteString.empty()) );
} else {
for (final ByteString value : attribute) {
- writeKeyAndValue(attributeDescription, value);
+ attr.put(attributeDescription+attr.size(), new AbstractMap.SimpleEntry<String,ByteSequence>(attributeDescription,value));
}
}
}
+ for (AbstractMap.SimpleEntry<String,ByteSequence> kv : attr.values()) {
+ writeKeyAndValue(kv.getKey(), kv.getValue());
+ }
// Make sure there is a blank line after the entry.
impl.println();
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFEntryWriterTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFEntryWriterTestCase.java
index 267756c..f5cd9de 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFEntryWriterTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldif/LDIFEntryWriterTestCase.java
@@ -752,10 +752,20 @@
writer.close();
final String[] expected =
- new String[] { "dn: cn=John Doe,ou=people,dc=example,dc=com", "objectClass: top",
- "objectClass: person", "objectClass: inetOrgPerson", "cn: John Doe", "sn: Doe",
- "givenName: John", "description: one two", "description: three four",
- "description: five six", "typeOnly: ", "localized;lang-fr:: w6dlZGlsbGE=", "", };
+ new String[] { "dn: cn=John Doe,ou=people,dc=example,dc=com",
+ "cn: John Doe",
+ "description: one two",
+ "description: three four",
+ "description: five six",
+ "givenName: John",
+ "localized;lang-fr:: w6dlZGlsbGE=",
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: inetOrgPerson",
+ "sn: Doe",
+ "typeOnly: ",
+
+ "", };
Assert.assertEquals(actual.size(), expected.length);
for (int i = 0; i < expected.length; i++) {
diff --git a/opendj-ldap-toolkit/src/test/resources/expected_output.ldif b/opendj-ldap-toolkit/src/test/resources/expected_output.ldif
index e5095ca..30dd660 100644
--- a/opendj-ldap-toolkit/src/test/resources/expected_output.ldif
+++ b/opendj-ldap-toolkit/src/test/resources/expected_output.ldif
@@ -3,9 +3,9 @@
dn: coretokenid=tokenId,dc=example,dc=com
coretokenid: tokenId
+coretokenobject: {"redirectURI":["http://fake.com"],"acr":[],"clientID":["clientOIDC"],"lineFoldingTest":["This line should have been correctly folded"],"tokenName":["refresh_token"],"authModules":["LDAP"],"realm":["/myrealm"],"id":["fakeid"],"userName":["johndoe"],"tokenType":["Bearer"]}
+coretokenstring07: Bearer
+coretokenstring08: /myrealm
objectClass: top
objectClass: frCoreToken
-coretokenstring08: /myrealm
-coretokenstring07: Bearer
-coretokenobject: {"redirectURI":["http://fake.com"],"acr":[],"clientID":["clientOIDC"],"lineFoldingTest":["This line should have been correctly folded"],"tokenName":["refresh_token"],"authModules":["LDAP"],"realm":["/myrealm"],"id":["fakeid"],"userName":["johndoe"],"tokenType":["Bearer"]}
diff --git a/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif b/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif
index 45e611c..93a7749 100644
--- a/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif
+++ b/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif
@@ -3,12 +3,12 @@
dn: coretokenid=tokenId,dc=example,dc=com
coretokenid: tokenId
-objectClass: top
-objectClass: frCoreToken
-coretokenstring08: /myrealm
-coretokenstring07: Bearer
coretokenobject: {"redirectURI":["http://fake.com"],"acr":[],"clientID":["client
OIDC"],"lineFoldingTest":["This line should have been correctly folded"],"token
Name":["refresh_token"],"authModules":["LDAP"],"realm":["/myrealm"],"id":["fake
id"],"userName":["johndoe"],"tokenType":["Bearer"]}
+coretokenstring07: Bearer
+coretokenstring08: /myrealm
+objectClass: top
+objectClass: frCoreToken
--
Gitblit v1.10.0