Improve and simplify OSGi Boot
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / util / naming / LdifParser.java
index 66e529e5e6857d8d4b58b4909084064bbcace687..ec73e8accb29734c401b754d6684d2f92ffb0a3b 100644 (file)
@@ -2,8 +2,12 @@ package org.argeo.util.naming;
 
 import static org.argeo.osgi.useradmin.LdifName.dn;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Base64;
 import java.util.List;
 import java.util.SortedMap;
 import java.util.TreeMap;
@@ -17,8 +21,6 @@ import javax.naming.directory.BasicAttributes;
 import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.osgi.useradmin.UserDirectoryException;
@@ -27,19 +29,17 @@ import org.argeo.osgi.useradmin.UserDirectoryException;
 public class LdifParser {
        private final static Log log = LogFactory.getLog(LdifParser.class);
 
-       protected Attributes addAttributes(SortedMap<LdapName, Attributes> res,
-                       int lineNumber, LdapName currentDn, Attributes currentAttributes) {
+       protected Attributes addAttributes(SortedMap<LdapName, Attributes> res, int lineNumber, LdapName currentDn,
+                       Attributes currentAttributes) {
                try {
                        Rdn nameRdn = currentDn.getRdn(currentDn.size() - 1);
                        Attribute nameAttr = currentAttributes.get(nameRdn.getType());
                        if (nameAttr == null)
                                currentAttributes.put(nameRdn.getType(), nameRdn.getValue());
                        else if (!nameAttr.get().equals(nameRdn.getValue()))
-                               throw new UserDirectoryException("Attribute "
-                                               + nameAttr.getID() + "=" + nameAttr.get()
-                                               + " not consistent with DN " + currentDn
-                                               + " (shortly before line " + lineNumber
-                                               + " in LDIF file)");
+                               throw new UserDirectoryException(
+                                               "Attribute " + nameAttr.getID() + "=" + nameAttr.get() + " not consistent with DN " + currentDn
+                                                               + " (shortly before line " + lineNumber + " in LDIF file)");
                        Attributes previous = res.put(currentDn, currentAttributes);
                        if (log.isTraceEnabled())
                                log.trace("Added " + currentDn);
@@ -52,7 +52,15 @@ public class LdifParser {
        public SortedMap<LdapName, Attributes> read(InputStream in) throws IOException {
                SortedMap<LdapName, Attributes> res = new TreeMap<LdapName, Attributes>();
                try {
-                       List<String> lines = IOUtils.readLines(in);
+                       List<String> lines = new ArrayList<>();
+                       try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
+                               String line;
+                               while ((line = br.readLine()) != null) {
+                                       lines.add(line);
+                               }
+                       }
+                       if (lines.size() == 0)
+                               return res;
                        // add an empty new line since the last line is not checked
                        if (!lines.get(lines.size() - 1).equals(""))
                                lines.add("");
@@ -79,8 +87,7 @@ public class LdifParser {
                                        readAttrId: for (int i = 0; i < currentEntry.length(); i++) {
                                                char c = currentEntry.charAt(i);
                                                if (c == ':') {
-                                                       if (i + 1 < currentEntry.length()
-                                                                       && currentEntry.charAt(i + 1) == ':')
+                                                       if (i + 1 < currentEntry.length() && currentEntry.charAt(i + 1) == ':')
                                                                isBase64 = true;
                                                        currentEntry.delete(0, i + (isBase64 ? 2 : 1));
                                                        break readAttrId;
@@ -91,8 +98,7 @@ public class LdifParser {
 
                                        String attributeId = attrId.toString();
                                        String cleanValueStr = currentEntry.toString().trim();
-                                       Object attributeValue = isBase64 ? Base64
-                                                       .decodeBase64(cleanValueStr) : cleanValueStr;
+                                       Object attributeValue = isBase64 ? Base64.getDecoder().decode(cleanValueStr) : cleanValueStr;
 
                                        // manage DN attributes
                                        if (attributeId.equals(dn.name()) || isLastLine) {
@@ -100,23 +106,19 @@ public class LdifParser {
                                                        //
                                                        // ADD
                                                        //
-                                                       Attributes previous = addAttributes(res,
-                                                                       lineNumber, currentDn, currentAttributes);
+                                                       Attributes previous = addAttributes(res, lineNumber, currentDn, currentAttributes);
                                                        if (previous != null) {
-                                                               log.warn("There was already an entry with DN "
-                                                                               + currentDn
+                                                               log.warn("There was already an entry with DN " + currentDn
                                                                                + ", which has been discarded by a subsequent one.");
                                                        }
                                                }
 
                                                if (attributeId.equals(dn.name()))
                                                        try {
-                                                               currentDn = new LdapName(
-                                                                               attributeValue.toString());
+                                                               currentDn = new LdapName(attributeValue.toString());
                                                                currentAttributes = new BasicAttributes(true);
                                                        } catch (InvalidNameException e) {
-                                                               log.error(attributeValue
-                                                                               + " not a valid DN, skipping the entry.");
+                                                               log.error(attributeValue + " not a valid DN, skipping the entry.");
                                                                currentDn = null;
                                                                currentAttributes = null;
                                                        }
@@ -124,8 +126,7 @@ public class LdifParser {
 
                                        // store attribute
                                        if (currentAttributes != null) {
-                                               Attribute attribute = currentAttributes
-                                                               .get(attributeId);
+                                               Attribute attribute = currentAttributes.get(attributeId);
                                                if (attribute == null) {
                                                        attribute = new BasicAttribute(attributeId);
                                                        currentAttributes.put(attribute);
@@ -137,7 +138,7 @@ public class LdifParser {
                                currentEntry.append(line);
                        }
                } finally {
-                       IOUtils.closeQuietly(in);
+                       in.close();
                }
                return res;
        }