From cd4bf1fc9fdb26496d211ce205042c797fbdd915 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 08 Apr 2009 10:03:27 +0000
Subject: [PATCH] Fix for issue 3686 (makeldif does not parse redirect to file based attribute)
---
opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateEntry.java | 256 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 247 insertions(+), 9 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateEntry.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateEntry.java
index 496f3b4..b610632 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateEntry.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateEntry.java
@@ -22,19 +22,24 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.tools.makeldif;
+import java.io.BufferedWriter;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.*;
+import org.opends.server.util.LDIFException;
+import static org.opends.server.util.LDIFWriter.appendLDIFSeparatorAndValue;
+import static org.opends.server.util.LDIFWriter.writeLDIFLine;
import static org.opends.server.util.StaticUtils.*;
@@ -273,21 +278,36 @@
}
-
/**
- * Retrieves this template entry as an <CODE>Entry</CODE> object.
+ * Writes this entry in LDIF form. No filtering will be
+ * performed for this entry, nor will any export plugins be invoked.
*
- * @return The <CODE>Entry</CODE> object for this template entry.
+ * @param exportConfig The configuration that specifies how the
+ * entry should be written.
+ *
+ * @return <CODE>true</CODE> if the entry is actually written, or
+ * <CODE>false</CODE> if it is not for some reason.
+ *
+ * @throws IOException If a problem occurs while writing the
+ * information.
+ *
+ * @throws LDIFException If a problem occurs while trying to
+ * determine whether to write the entry.
*/
- public Entry toEntry()
+ public boolean toLDIF(LDIFExportConfig exportConfig)
+ throws IOException, LDIFException
{
- // Process all of the attributes for this entry.
+// Process all of the attributes for this entry.
LinkedHashMap<ObjectClass,String> objectClasses =
new LinkedHashMap<ObjectClass,String>();
LinkedHashMap<AttributeType,List<Attribute>> userAttributes =
new LinkedHashMap<AttributeType,List<Attribute>>();
LinkedHashMap<AttributeType,List<Attribute>> operationalAttributes =
new LinkedHashMap<AttributeType,List<Attribute>>();
+ LinkedHashMap<AttributeType, List<Attribute>> urlAttributes =
+ new LinkedHashMap<AttributeType, List<Attribute>>();
+ LinkedHashMap<AttributeType, List<Attribute>> base64Attributes =
+ new LinkedHashMap<AttributeType, List<Attribute>>();
for (AttributeType t : attributes.keySet())
{
@@ -316,19 +336,237 @@
else
{
AttributeBuilder builder = new AttributeBuilder(t, t.getNameOrOID());
+ AttributeBuilder urlBuilder = null;
+ AttributeBuilder base64Builder = null;
for (TemplateValue v : valueList)
{
- builder.add(AttributeValues.create(t, v.getValue().toString()));
+ AttributeValue value =
+ AttributeValues.create(t, v.getValue().toString());
+ builder.add(value);
+ if (v.getTemplateLine().isURL())
+ {
+ if (urlBuilder == null)
+ {
+ urlBuilder = new AttributeBuilder(t, t.getNameOrOID());
+ }
+ urlBuilder.add(value);
+ }
+ else if (v.getTemplateLine().isBase64())
+ {
+ if (base64Builder == null)
+ {
+ base64Builder = new AttributeBuilder(t, t.getNameOrOID());
+ }
+ base64Builder.add(value);
+ }
}
ArrayList<Attribute> attrList = new ArrayList<Attribute>(1);
attrList.add(builder.toAttribute());
userAttributes.put(t, attrList);
+
+ if (urlBuilder != null)
+ {
+ ArrayList<Attribute> urlAttrList = new ArrayList<Attribute>(1);
+ urlAttrList.add(urlBuilder.toAttribute());
+ urlAttributes.put(t, urlAttrList);
+ }
+
+ if (base64Builder != null)
+ {
+ ArrayList<Attribute> base64AttrList = new ArrayList<Attribute>(1);
+ base64AttrList.add(base64Builder.toAttribute());
+ base64Attributes.put(t, base64AttrList);
+ }
}
}
- return new Entry(getDN(), objectClasses, userAttributes,
- operationalAttributes);
+ // Get the information necessary to write the LDIF.
+ BufferedWriter writer = exportConfig.getWriter();
+ int wrapColumn = exportConfig.getWrapColumn();
+ boolean wrapLines = (wrapColumn > 1);
+
+
+ // First, write the DN. It will always be included.
+ StringBuilder dnLine = new StringBuilder();
+ dnLine.append("dn");
+ appendLDIFSeparatorAndValue(dnLine,
+ ByteString.valueOf(getDN().toString()));
+ writeLDIFLine(dnLine, writer, wrapLines, wrapColumn);
+
+
+ // Next, the set of objectclasses.
+ final boolean typesOnly = exportConfig.typesOnly();
+ if (exportConfig.includeObjectClasses())
+ {
+ if (typesOnly)
+ {
+ StringBuilder ocLine = new StringBuilder("objectClass:");
+ writeLDIFLine(ocLine, writer, wrapLines, wrapColumn);
+ }
+ else
+ {
+ for (String s : objectClasses.values())
+ {
+ StringBuilder ocLine = new StringBuilder();
+ ocLine.append("objectClass: ");
+ ocLine.append(s);
+ writeLDIFLine(ocLine, writer, wrapLines, wrapColumn);
+ }
+ }
+ }
+
+
+ // Now the set of user attributes.
+ for (AttributeType attrType : userAttributes.keySet())
+ {
+ if (exportConfig.includeAttribute(attrType))
+ {
+ List<Attribute> attrList = userAttributes.get(attrType);
+ for (Attribute a : attrList)
+ {
+ if (a.isVirtual() &&
+ (! exportConfig.includeVirtualAttributes()))
+ {
+ continue;
+ }
+
+ if (typesOnly)
+ {
+ StringBuilder attrName = new StringBuilder(a.getName());
+ for (String o : a.getOptions())
+ {
+ attrName.append(";");
+ attrName.append(o);
+ }
+ attrName.append(":");
+
+ writeLDIFLine(attrName, writer, wrapLines, wrapColumn);
+ }
+ else
+ {
+ StringBuilder attrName = new StringBuilder(a.getName());
+ for (String o : a.getOptions())
+ {
+ attrName.append(";");
+ attrName.append(o);
+ }
+
+ List<Attribute> urlAttrList = urlAttributes.get(attrType);
+ List<Attribute> base64AttrList = base64Attributes.get(attrType);
+
+ for (AttributeValue v : a)
+ {
+ StringBuilder attrLine = new StringBuilder();
+ attrLine.append(attrName);
+ boolean isURLValue = false;
+ if (urlAttrList != null)
+ {
+ for (Attribute urlAttr : urlAttrList)
+ {
+ for (AttributeValue urlValue : urlAttr)
+ {
+ if (urlValue.equals(v))
+ {
+ isURLValue = true;
+ break;
+ }
+ }
+ if (isURLValue)
+ {
+ break;
+ }
+ }
+ }
+ boolean isBase64Value = false;
+ if (base64AttrList != null)
+ {
+ for (Attribute base64Attr : base64AttrList)
+ {
+ for (AttributeValue base64Value : base64Attr)
+ {
+ if (base64Value.equals(v))
+ {
+ isBase64Value = true;
+ break;
+ }
+ }
+ if (isBase64Value)
+ {
+ break;
+ }
+ }
+ }
+ appendLDIFSeparatorAndValue(attrLine,
+ v.getValue(),
+ isURLValue,
+ isBase64Value);
+ writeLDIFLine(attrLine, writer, wrapLines, wrapColumn);
+ }
+ }
+ }
+ }
+ }
+
+
+ // Next, the set of operational attributes.
+ if (exportConfig.includeOperationalAttributes())
+ {
+ for (AttributeType attrType : operationalAttributes.keySet())
+ {
+ if (exportConfig.includeAttribute(attrType))
+ {
+ List<Attribute> attrList =
+ operationalAttributes.get(attrType);
+ for (Attribute a : attrList)
+ {
+ if (a.isVirtual() &&
+ (! exportConfig.includeVirtualAttributes()))
+ {
+ continue;
+ }
+
+ if (typesOnly)
+ {
+ StringBuilder attrName = new StringBuilder(a.getName());
+ for (String o : a.getOptions())
+ {
+ attrName.append(";");
+ attrName.append(o);
+ }
+ attrName.append(":");
+
+ writeLDIFLine(attrName, writer, wrapLines, wrapColumn);
+ }
+ else
+ {
+ StringBuilder attrName = new StringBuilder(a.getName());
+ for (String o : a.getOptions())
+ {
+ attrName.append(";");
+ attrName.append(o);
+ }
+
+ for (AttributeValue v : a)
+ {
+ StringBuilder attrLine = new StringBuilder();
+ attrLine.append(attrName);
+ appendLDIFSeparatorAndValue(attrLine,
+ v.getValue());
+ writeLDIFLine(attrLine, writer, wrapLines,
+ wrapColumn);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Make sure there is a blank line after the entry.
+ writer.newLine();
+
+
+ return true;
}
}
--
Gitblit v1.10.0