From: Mathieu Baudier Date: Sun, 27 Oct 2019 11:03:55 +0000 (+0100) Subject: Make writing of member and uniqueMember nicer in LDIF writer. X-Git-Tag: argeo-commons-2.1.82~10 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=80ab395d2f6adfd07114321ce8b009eeca3d4e13 Make writing of member and uniqueMember nicer in LDIF writer. --- diff --git a/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java b/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java index 6a3fea12f..98d2df055 100644 --- a/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java +++ b/org.argeo.enterprise/src/org/argeo/naming/LdifWriter.java @@ -1,5 +1,10 @@ package org.argeo.naming; +import static org.argeo.naming.LdapAttrs.DN; +import static org.argeo.naming.LdapAttrs.member; +import static org.argeo.naming.LdapAttrs.objectClass; +import static org.argeo.naming.LdapAttrs.uniqueMember; + import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -8,6 +13,8 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Map; +import java.util.SortedSet; +import java.util.TreeSet; import javax.naming.NamingEnumeration; import javax.naming.NamingException; @@ -42,16 +49,24 @@ public class LdifWriter { throw new UserDirectoryException( "Attribute " + nameAttr.getID() + "=" + nameAttr.get() + " not consistent with DN " + name); - writer.append(LdapAttrs.DN + ": ").append(name.toString()).append('\n'); - Attribute objectClassAttr = attributes.get("objectClass"); + writer.append(DN + ": ").append(name.toString()).append('\n'); + Attribute objectClassAttr = attributes.get(objectClass.name()); if (objectClassAttr != null) writeAttribute(objectClassAttr); - for (NamingEnumeration attrs = attributes.getAll(); attrs.hasMore();) { + attributes: for (NamingEnumeration attrs = attributes.getAll(); attrs.hasMore();) { Attribute attribute = attrs.next(); - if (attribute.getID().equals(LdapAttrs.DN) || attribute.getID().equals("objectClass")) - continue;// skip DN attribute + if (attribute.getID().equals(DN) || attribute.getID().equals(objectClass.name())) + continue attributes;// skip DN attribute + if (attribute.getID().equals(member.name()) || attribute.getID().equals(uniqueMember.name())) + continue attributes;// skip member and uniqueMember attributes, so that they are always written last writeAttribute(attribute); } + // write member and uniqueMember attributes last + for (NamingEnumeration attrs = attributes.getAll(); attrs.hasMore();) { + Attribute attribute = attrs.next(); + if (attribute.getID().equals(member.name()) || attribute.getID().equals(uniqueMember.name())) + writeMemberAttribute(attribute); + } writer.append('\n'); writer.flush(); } catch (NamingException e) { @@ -75,4 +90,17 @@ public class LdifWriter { } } } + + protected void writeMemberAttribute(Attribute attribute) throws NamingException, IOException { + // Note: duplicate entries will be swallowed + SortedSet values = new TreeSet<>(); + for (NamingEnumeration attrValues = attribute.getAll(); attrValues.hasMore();) { + String value = attrValues.next().toString(); + values.add(value); + } + + for (String value : values) { + writer.append(attribute.getID()).append(": ").append(value).append('\n'); + } + } }