From d867afc227834e86e18518777a4df2abf6c0f113 Mon Sep 17 00:00:00 2001
From: vharseko <vharseko@openam.org.ru>
Date: Wed, 19 Dec 2018 08:42:13 +0000
Subject: [PATCH] add LDIF write attribute order by attribute:value (source control) (#30)
---
opendj-ldap-toolkit/src/test/resources/ldifdiff/ldifDiffAndModifyTestCase.ldif | 4 ++--
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 | 8 ++++----
5 files changed, 34 insertions(+), 16 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..fa00f1f 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, new AbstractMap.SimpleEntry<String,ByteSequence>(attributeDescription,ByteString.empty()) );
} else {
for (final ByteString value : attribute) {
- writeKeyAndValue(attributeDescription, value);
+ attr.put(attributeDescription+value, 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..894bb46 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: five six",
+ "description: one two",
+ "description: three four",
+ "givenName: John",
+ "localized;lang-fr:: w6dlZGlsbGE=",
+ "objectClass: inetOrgPerson",
+ "objectClass: person",
+ "objectClass: top",
+ "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..378c557 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
-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"]}
+coretokenstring07: Bearer
+coretokenstring08: /myrealm
+objectClass: frCoreToken
+objectClass: top
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..7568330 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: frCoreToken
+objectClass: top
diff --git a/opendj-ldap-toolkit/src/test/resources/ldifdiff/ldifDiffAndModifyTestCase.ldif b/opendj-ldap-toolkit/src/test/resources/ldifdiff/ldifDiffAndModifyTestCase.ldif
index b2163ea..be7f129 100644
--- a/opendj-ldap-toolkit/src/test/resources/ldifdiff/ldifDiffAndModifyTestCase.ldif
+++ b/opendj-ldap-toolkit/src/test/resources/ldifdiff/ldifDiffAndModifyTestCase.ldif
@@ -1,5 +1,5 @@
dn: dc=example,dc=com
-objectClass: top
-objectClass: domain
dc: example
+objectClass: domain
+objectClass: top
--
Gitblit v1.10.0