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;
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;
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);
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("");
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;
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) {
//
// 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;
}
// 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);
currentEntry.append(line);
}
} finally {
- IOUtils.closeQuietly(in);
+ in.close();
}
return res;
}