From 4c6a4c3e78a13b9237a46cc1e7ef8680c1c55a90 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 22 Nov 2013 07:57:26 +0000
Subject: [PATCH] LDIFReader.java: Extracted methods findFirstNonSpaceCharPosition(), base64Decode() and decodeDN(). In readAttribute(), moved common code out of if/else branches. Used early exits. Removed useless parenthesis. Condensed code and comments on one line where possible.
---
opends/src/server/org/opends/server/util/LDIFWriter.java | 215 ++++++++++++++++++-----------------------------------
1 files changed, 74 insertions(+), 141 deletions(-)
diff --git a/opends/src/server/org/opends/server/util/LDIFWriter.java b/opends/src/server/org/opends/server/util/LDIFWriter.java
index 4517388..85f3e7a 100644
--- a/opends/src/server/org/opends/server/util/LDIFWriter.java
+++ b/opends/src/server/org/opends/server/util/LDIFWriter.java
@@ -27,15 +27,13 @@
*/
package org.opends.server.util;
-
-
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.IOException;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
-import java.util.Collection;
import org.opends.messages.Message;
import org.opends.server.tools.makeldif.TemplateEntry;
@@ -44,7 +42,6 @@
import static org.opends.server.util.StaticUtils.*;
import static org.opends.server.util.Validator.*;
-
/**
* This class provides a mechanism for writing entries in LDIF form to a file or
* an output stream.
@@ -59,15 +56,13 @@
// FIXME -- Add support for generating a hash when writing the data.
// FIXME -- Add support for signing the hash that is generated.
-
-
- // The writer to which the LDIF information will be written.
+ /** The writer to which the LDIF information will be written. */
private BufferedWriter writer;
- // The configuration to use for the export.
+ /** The configuration to use for the export. */
private LDIFExportConfig exportConfig;
- // Regular expression used for splitting comments on line-breaks.
+ /** Regular expression used for splitting comments on line-breaks. */
private static final Pattern SPLIT_NEWLINE = Pattern.compile("\\r?\\n");
@@ -151,7 +146,7 @@
outerLoop:
while (startPos < l.length())
{
- if ((startPos+breakColumn) >= l.length())
+ if (startPos + breakColumn >= l.length())
{
writer.write("# ");
@@ -210,15 +205,17 @@
* @throws LDIFException If a problem occurs while trying to determine
* whether to include the entry in the export.
*/
-public boolean writeEntries(Collection <Entry> entries)
- throws IOException, LDIFException {
-
- boolean ret=true;
- Iterator<Entry> i = entries.iterator();
- while(ret && i.hasNext()) {
- ret=writeEntry(i.next());
- }
- return ret;
+ public boolean writeEntries(Collection<Entry> entries) throws IOException,
+ LDIFException
+ {
+ for (Entry entry : entries)
+ {
+ if (!writeEntry(entry))
+ {
+ return false;
+ }
+ }
+ return true;
}
@@ -265,8 +262,6 @@
throws IOException, LDIFException
{
ensureNotNull(templateEntry);
-
- // Delegate to TemplateEntry.toLDIF(...)
return templateEntry.toLDIF(exportConfig);
}
@@ -286,15 +281,11 @@
// Get the information necessary to write the LDIF.
BufferedWriter writer = exportConfig.getWriter();
int wrapColumn = exportConfig.getWrapColumn();
- boolean wrapLines = (wrapColumn > 1);
+ boolean wrapLines = wrapColumn > 1;
// First, write the DN.
- StringBuilder dnLine = new StringBuilder();
- dnLine.append("dn");
- appendLDIFSeparatorAndValue(dnLine,
- ByteString.valueOf(changeRecord.getDN().toString()));
- writeLDIFLine(dnLine, writer, wrapLines, wrapColumn);
+ writeDN("dn", changeRecord.getDN(), writer, wrapLines, wrapColumn);
// Figure out what type of change it is and act accordingly.
@@ -308,10 +299,8 @@
{
for (AttributeValue v : a)
{
- StringBuilder line = new StringBuilder();
- line.append(a.getNameWithOptions());
- appendLDIFSeparatorAndValue(line, v.getValue());
- writeLDIFLine(line, writer, wrapLines, wrapColumn);
+ final String attrName = a.getNameWithOptions();
+ writeAttribute(attrName, v, writer, wrapLines, wrapColumn);
}
}
}
@@ -342,10 +331,9 @@
for (ByteString s : a.getValues())
{
- StringBuilder valueLine = new StringBuilder();
+ StringBuilder valueLine = new StringBuilder(attrName);
String stringValue = s.toString();
- valueLine.append(attrName);
if (needsBase64Encoding(stringValue))
{
valueLine.append(":: ");
@@ -375,28 +363,18 @@
ModifyDNChangeRecordEntry modifyDNRecord =
(ModifyDNChangeRecordEntry) changeRecord;
- StringBuilder newRDNLine = new StringBuilder();
- newRDNLine.append("newrdn: ");
+ StringBuilder newRDNLine = new StringBuilder("newrdn: ");
modifyDNRecord.getNewRDN().toString(newRDNLine);
writeLDIFLine(newRDNLine, writer, wrapLines, wrapColumn);
- StringBuilder deleteOldRDNLine = new StringBuilder();
- deleteOldRDNLine.append("deleteoldrdn: ");
- if (modifyDNRecord.deleteOldRDN())
- {
- deleteOldRDNLine.append("1");
- }
- else
- {
- deleteOldRDNLine.append("0");
- }
+ StringBuilder deleteOldRDNLine = new StringBuilder("deleteoldrdn: ");
+ deleteOldRDNLine.append(modifyDNRecord.deleteOldRDN() ? "1" : "0");
writeLDIFLine(deleteOldRDNLine, writer, wrapLines, wrapColumn);
DN newSuperiorDN = modifyDNRecord.getNewSuperiorDN();
if (newSuperiorDN != null)
{
- StringBuilder newSuperiorLine = new StringBuilder();
- newSuperiorLine.append("newsuperior: ");
+ StringBuilder newSuperiorLine = new StringBuilder("newsuperior: ");
newSuperiorDN.toString(newSuperiorLine);
writeLDIFLine(newSuperiorLine, writer, wrapLines, wrapColumn);
}
@@ -428,15 +406,11 @@
// Get the information necessary to write the LDIF.
BufferedWriter writer = exportConfig.getWriter();
int wrapColumn = exportConfig.getWrapColumn();
- boolean wrapLines = (wrapColumn > 1);
+ boolean wrapLines = wrapColumn > 1;
// First, write the DN.
- StringBuilder dnLine = new StringBuilder();
- dnLine.append("dn");
- appendLDIFSeparatorAndValue(dnLine,
- ByteString.valueOf(entry.getDN().toString()));
- writeLDIFLine(dnLine, writer, wrapLines, wrapColumn);
+ writeDN("dn", entry.getDN(), writer, wrapLines, wrapColumn);
// Next, the changetype.
@@ -457,8 +431,7 @@
// Finally, the set of user attributes.
for (AttributeType attrType : entry.getUserAttributes().keySet())
{
- List<Attribute> attrList = entry.getUserAttribute(attrType);
- for (Attribute a : attrList)
+ for (Attribute a : entry.getUserAttribute(attrType))
{
StringBuilder attrName = new StringBuilder(a.getName());
for (String o : a.getOptions())
@@ -469,10 +442,7 @@
for (AttributeValue v : a)
{
- StringBuilder attrLine = new StringBuilder();
- attrLine.append(attrName);
- appendLDIFSeparatorAndValue(attrLine, v.getValue());
- writeLDIFLine(attrLine, writer, wrapLines, wrapColumn);
+ writeAttribute(attrName, v, writer, wrapLines, wrapColumn);
}
}
}
@@ -505,15 +475,11 @@
// Get the information necessary to write the LDIF.
BufferedWriter writer = exportConfig.getWriter();
int wrapColumn = exportConfig.getWrapColumn();
- boolean wrapLines = (wrapColumn > 1);
+ boolean wrapLines = wrapColumn > 1;
// Add the DN and changetype lines.
- StringBuilder dnLine = new StringBuilder();
- dnLine.append("dn");
- appendLDIFSeparatorAndValue(dnLine,
- ByteString.valueOf(entry.getDN().toString()));
- writeLDIFLine(dnLine, writer, wrapLines, wrapColumn);
+ writeDN("dn", entry.getDN(), writer, wrapLines, wrapColumn);
StringBuilder changeTypeLine = new StringBuilder("changetype: delete");
writeLDIFLine(changeTypeLine, writer, wrapLines, wrapColumn);
@@ -535,8 +501,7 @@
// Write the set of user attributes.
for (AttributeType attrType : entry.getUserAttributes().keySet())
{
- List<Attribute> attrList = entry.getUserAttribute(attrType);
- for (Attribute a : attrList)
+ for (Attribute a : entry.getUserAttribute(attrType))
{
StringBuilder attrName = new StringBuilder();
attrName.append("# ");
@@ -549,10 +514,7 @@
for (AttributeValue v : a)
{
- StringBuilder attrLine = new StringBuilder();
- attrLine.append(attrName);
- appendLDIFSeparatorAndValue(attrLine, v.getValue());
- writeLDIFLine(attrLine, writer, wrapLines, wrapColumn);
+ writeAttribute(attrName, v, writer, wrapLines, wrapColumn);
}
}
}
@@ -591,14 +553,11 @@
// Get the information necessary to write the LDIF.
BufferedWriter writer = exportConfig.getWriter();
int wrapColumn = exportConfig.getWrapColumn();
- boolean wrapLines = (wrapColumn > 1);
+ boolean wrapLines = wrapColumn > 1;
// Write the DN and changetype.
- StringBuilder dnLine = new StringBuilder();
- dnLine.append("dn");
- appendLDIFSeparatorAndValue(dnLine, ByteString.valueOf(dn.toString()));
- writeLDIFLine(dnLine, writer, wrapLines, wrapColumn);
+ writeDN("dn", dn, writer, wrapLines, wrapColumn);
StringBuilder changeTypeLine = new StringBuilder("changetype: modify");
writeLDIFLine(changeTypeLine, writer, wrapLines, wrapColumn);
@@ -620,36 +579,14 @@
String name = nameBuffer.toString();
StringBuilder modTypeLine = new StringBuilder();
- switch (m.getModificationType())
- {
- case ADD:
- modTypeLine.append("add: ");
- modTypeLine.append(name);
- break;
- case DELETE:
- modTypeLine.append("delete: ");
- modTypeLine.append(name);
- break;
- case REPLACE:
- modTypeLine.append("replace: ");
- modTypeLine.append(name);
- break;
- case INCREMENT:
- modTypeLine.append("increment: ");
- modTypeLine.append(name);
- break;
- default:
- // We have no idea what the changetype is, so we can't write anything.
- continue;
- }
+ modTypeLine.append(m.getModificationType().getLDIFName());
+ modTypeLine.append(": ");
+ modTypeLine.append(name);
writeLDIFLine(modTypeLine, writer, wrapLines, wrapColumn);
for (AttributeValue v : a)
{
- StringBuilder valueLine = new StringBuilder();
- valueLine.append(name);
- appendLDIFSeparatorAndValue(valueLine, v.getValue());
- writeLDIFLine(valueLine, writer, wrapLines, wrapColumn);
+ writeAttribute(name, v, writer, wrapLines, wrapColumn);
}
@@ -658,12 +595,8 @@
if (iterator.hasNext())
{
writer.write("-");
- writer.newLine();
}
- else
- {
- writer.newLine();
- }
+ writer.newLine();
}
}
@@ -695,14 +628,11 @@
// Get the information necessary to write the LDIF.
BufferedWriter writer = exportConfig.getWriter();
int wrapColumn = exportConfig.getWrapColumn();
- boolean wrapLines = (wrapColumn > 1);
+ boolean wrapLines = wrapColumn > 1;
// Write the current DN.
- StringBuilder dnLine = new StringBuilder();
- dnLine.append("dn");
- appendLDIFSeparatorAndValue(dnLine, ByteString.valueOf(dn.toString()));
- writeLDIFLine(dnLine, writer, wrapLines, wrapColumn);
+ writeDN("dn", dn, writer, wrapLines, wrapColumn);
// Write the changetype. Some older tools may not support the "moddn"
@@ -721,8 +651,7 @@
// Write the newRDN element.
- StringBuilder rdnLine = new StringBuilder();
- rdnLine.append("newrdn");
+ StringBuilder rdnLine = new StringBuilder("newrdn");
appendLDIFSeparatorAndValue(rdnLine, ByteString.valueOf(newRDN.toString()));
writeLDIFLine(rdnLine, writer, wrapLines, wrapColumn);
@@ -735,11 +664,7 @@
if (newSuperior != null)
{
- StringBuilder newSuperiorLine = new StringBuilder();
- newSuperiorLine.append("newsuperior");
- appendLDIFSeparatorAndValue(newSuperiorLine,
- ByteString.valueOf(newSuperior.toString()));
- writeLDIFLine(newSuperiorLine, writer, wrapLines, wrapColumn);
+ writeDN("newsuperior", newSuperior, writer, wrapLines, wrapColumn);
}
@@ -747,7 +672,22 @@
writer.newLine();
}
+ private void writeDN(String attrType, DN dn, BufferedWriter writer,
+ boolean wrapLines, int wrapColumn) throws IOException
+ {
+ final StringBuilder newLine = new StringBuilder(attrType);
+ appendLDIFSeparatorAndValue(newLine, ByteString.valueOf(dn.toString()));
+ writeLDIFLine(newLine, writer, wrapLines, wrapColumn);
+ }
+ private void writeAttribute(CharSequence attrName, AttributeValue v,
+ BufferedWriter writer, boolean wrapLines, int wrapColumn)
+ throws IOException
+ {
+ StringBuilder newLine = new StringBuilder(attrName);
+ appendLDIFSeparatorAndValue(newLine, v.getValue());
+ writeLDIFLine(newLine, writer, wrapLines, wrapColumn);
+ }
/**
* Flushes the data written to the output stream or underlying file.
@@ -767,6 +707,7 @@
*
* @throws IOException If a problem occurs while closing the writer.
*/
+ @Override
public void close()
throws IOException
{
@@ -815,32 +756,22 @@
// If the value is empty, then just append a single colon (the URL '<' if
// required) and a single space.
- if ((valueBytes == null) || (valueBytes.length() == 0))
- {
- if (isURL)
- {
- buffer.append(":< ");
- }
- else if (isBase64)
- {
- buffer.append(":: ");
- }
- else
- {
- buffer.append(": ");
- }
- return;
- }
-
+ final boolean valueIsEmpty = valueBytes == null || valueBytes.length() == 0;
if (isURL)
{
buffer.append(":< ");
- buffer.append(valueBytes.toString());
+ if (!valueIsEmpty)
+ {
+ buffer.append(valueBytes.toString());
+ }
}
else if (isBase64)
{
buffer.append(":: ");
- buffer.append(valueBytes.toString());
+ if (!valueIsEmpty)
+ {
+ buffer.append(valueBytes.toString());
+ }
}
else if (needsBase64Encoding(valueBytes))
{
@@ -850,7 +781,10 @@
else
{
buffer.append(": ");
- buffer.append(valueBytes.toString());
+ if (!valueIsEmpty)
+ {
+ buffer.append(valueBytes.toString());
+ }
}
}
@@ -875,7 +809,7 @@
ensureNotNull(line, writer);
int length = line.length();
- if (wrapLines && (length > wrapColumn))
+ if (wrapLines && length > wrapColumn)
{
writer.write(line.substring(0, wrapColumn));
writer.newLine();
@@ -898,4 +832,3 @@
}
}
}
-
--
Gitblit v1.10.0