From ecfbf1be93940d85b5d171145902b0859cf16571 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 05 Nov 2013 16:02:40 +0000
Subject: [PATCH] ECLSearchOperation.java: In createChangelogEntry(), removed duplicate parameters. In createEntryFromMsg(), extracted method addAttribute(). Changed returnECLControl field to boolean (incorrectly was Boolean) Improved formatting. Removed comments paraphrasing the code.
---
opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java | 184 ++++++++++++++++++++-------------------------
1 files changed, 81 insertions(+), 103 deletions(-)
diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index 23720e1..1eb64b7 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -112,13 +112,12 @@
/** The attribute type for the "creatorsName" attribute. */
- private static final AttributeType CREATORS_NAME_TYPE = DirectoryConfig
- .getAttributeType(OP_ATTR_CREATORS_NAME_LC, true);
+ private static final AttributeType CREATORS_NAME_TYPE =
+ DirectoryConfig.getAttributeType(OP_ATTR_CREATORS_NAME_LC, true);
/** The attribute type for the "modifiersName" attribute. */
- private static final AttributeType
- MODIFIERS_NAME_TYPE = DirectoryConfig.getAttributeType(
- OP_ATTR_MODIFIERS_NAME_LC, true);
+ private static final AttributeType MODIFIERS_NAME_TYPE =
+ DirectoryConfig.getAttributeType(OP_ATTR_MODIFIERS_NAME_LC, true);
/** The associated DN. */
@@ -166,7 +165,7 @@
/**
* A flag to know if the ECLControl has been requested.
*/
- private Boolean returnECLControl = false;
+ private boolean returnECLControl = false;
/**
* Creates a new operation that may be used to search for entries in a local
@@ -214,9 +213,9 @@
startECLSessionMsg.setECLRequestType(
StartECLSessionMsg.REQUEST_TYPE_FROM_CHANGE_NUMBER);
- // Set a string operationid that will help correlate any error message
+ // Set a string operationId that will help correlate any error message
// logged for this operation with the 'real' client operation.
- startECLSessionMsg.setOperationId(this.toString());
+ startECLSessionMsg.setOperationId(toString());
// Set a list of excluded domains (also exclude 'cn=changelog' itself)
Set<String> excludedDomains =
@@ -399,7 +398,7 @@
getRequestControl(ExternalChangelogRequestControl.DECODER);
MultiDomainServerState cookie = eclControl.getCookie();
returnECLControl = true;
- if (cookie!=null)
+ if (cookie != null)
{
startECLSessionMsg.setECLRequestType(
StartECLSessionMsg.REQUEST_TYPE_FROM_COOKIE);
@@ -617,8 +616,8 @@
}
}
- if (baseDN.equals(CHANGELOG_ROOT_DN) && getScope().equals(
- SearchScope.BASE_OBJECT))
+ if (baseDN.equals(CHANGELOG_ROOT_DN)
+ && getScope().equals(SearchScope.BASE_OBJECT))
{
// Only the change log root entry was requested. There is no need to
// process other entries.
@@ -727,7 +726,7 @@
public static Entry createEntryFromMsg(ECLUpdateMsg eclMsg)
throws DirectoryException
{
- Entry clEntry = null;
+ Entry entry = null;
// Get the meat from the ecl msg
UpdateMsg msg = eclMsg.getUpdateMsg();
@@ -779,14 +778,10 @@
+ e.getMessage()));
}
- List<RawAttribute> eclAttributes = addMsg.getEclIncludes();
-
- clEntry = createChangelogEntry(eclMsg.getBaseDN(),
- eclMsg.getCookie().toString(), addMsg.getDN(),
- addMsg.getCSN(), ldifChanges, // entry as created (in LDIF format)
- addMsg.getEntryUUID(),
- eclAttributes, // entry attributes
- eclMsg.getChangeNumber(), "add", changeInitiatorsName);
+ entry = createChangelogEntry(eclMsg,
+ addMsg,
+ ldifChanges, // entry as created (in LDIF format)
+ "add", changeInitiatorsName);
}
else if (msg instanceof ModifyCommonMsg)
{
@@ -844,51 +839,43 @@
+ e.getMessage()));
}
- String changeType = (modifyMsg instanceof ModifyDNMsg) ? "modrdn"
- : "modify";
-
- clEntry = createChangelogEntry(eclMsg.getBaseDN(),
- eclMsg.getCookie().toString(), modifyMsg.getDN(),
- modifyMsg.getCSN(), ldifChanges,
- modifyMsg.getEntryUUID(),
- modifyMsg.getEclIncludes(), // entry attributes
- eclMsg.getChangeNumber(), changeType,
+ final boolean isModifyDNMsg = modifyMsg instanceof ModifyDNMsg;
+ entry = createChangelogEntry(eclMsg,
+ modifyMsg,
+ ldifChanges,
+ (isModifyDNMsg ? "modrdn" : "modify"),
changeInitiatorsName);
- if (modifyMsg instanceof ModifyDNMsg)
+ if (isModifyDNMsg)
{
ModifyDNMsg modDNMsg = (ModifyDNMsg) modifyMsg;
- Attribute a = Attributes.create("newrdn", modDNMsg.getNewRDN());
- clEntry.addAttribute(a, null);
-
+ addAttribute(entry, "newrdn", modDNMsg.getNewRDN());
if (modDNMsg.getNewSuperior() != null)
{
- Attribute b = Attributes.create("newsuperior",
- modDNMsg.getNewSuperior());
- clEntry.addAttribute(b, null);
+ addAttribute(entry, "newsuperior", modDNMsg.getNewSuperior());
}
-
- Attribute c = Attributes.create("deleteoldrdn",
+ addAttribute(entry, "deleteoldrdn",
String.valueOf(modDNMsg.deleteOldRdn()));
- clEntry.addAttribute(c, null);
}
}
else if (msg instanceof DeleteMsg)
{
DeleteMsg delMsg = (DeleteMsg) msg;
- clEntry = createChangelogEntry(eclMsg.getBaseDN(),
- eclMsg.getCookie().toString(), delMsg.getDN(),
- delMsg.getCSN(),
+ entry = createChangelogEntry(eclMsg,
+ delMsg,
null, // no changes
- delMsg.getEntryUUID(),
- delMsg.getEclIncludes(), // entry attributes
- eclMsg.getChangeNumber(), "delete",
+ "delete",
delMsg.getInitiatorsName());
}
- return clEntry;
+ return entry;
+ }
+
+ private static void addAttribute(Entry e, String attrType, String attrValue)
+ {
+ e.addAttribute(Attributes.create(attrType, attrValue), null);
}
/**
@@ -898,30 +885,24 @@
*/
private Entry createRootEntry(boolean hasSubordinates)
{
- // Attributes.
+ // Attributes
Map<AttributeType, List<Attribute>> userAttrs =
new LinkedHashMap<AttributeType,List<Attribute>>();
Map<AttributeType, List<Attribute>> operationalAttrs =
new LinkedHashMap<AttributeType,List<Attribute>>();
- // CN.
addAttributeByUppercaseName(ATTR_COMMON_NAME, ATTR_COMMON_NAME,
"changelog", userAttrs, operationalAttrs);
-
- // subSchemaSubentry
addAttributeByUppercaseName(ATTR_SUBSCHEMA_SUBENTRY_LC,
ATTR_SUBSCHEMA_SUBENTRY, ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
userAttrs, operationalAttrs);
// TODO:numSubordinates
- // hasSubordinates
- addAttributeByUppercaseName("hassubordinates", "hasSubordinates", Boolean
- .toString(hasSubordinates), userAttrs, operationalAttrs);
-
- // entryDN
- addAttributeByUppercaseName("entrydn", "entryDN", CHANGELOG_ROOT_DN
- .toNormalizedString(), userAttrs, operationalAttrs);
+ addAttributeByUppercaseName("hassubordinates", "hasSubordinates",
+ Boolean.toString(hasSubordinates), userAttrs, operationalAttrs);
+ addAttributeByUppercaseName("entrydn", "entryDN",
+ CHANGELOG_ROOT_DN.toNormalizedString(), userAttrs, operationalAttrs);
return new Entry(CHANGELOG_ROOT_DN, CHANGELOG_ROOT_OBJECT_CLASSES,
userAttrs, operationalAttrs);
@@ -960,8 +941,7 @@
aType = DirectoryServer.getDefaultAttributeType(attrNameUppercase);
}
Attribute a = Attributes.create(aType, attrValue);
- List<Attribute> attrList = new ArrayList<Attribute>(1);
- attrList.add(a);
+ List<Attribute> attrList = Collections.singletonList(a);
if (aType.isOperational())
{
operationalAttrs.put(aType, attrList);
@@ -973,51 +953,50 @@
}
/**
- * Create an ECL entry from a set of provided information. This is the part
- * of entry creation common to all types of msgs (ADD, DEL, MOD, MODDN).
+ * Create an ECL entry from a set of provided information. This is the part of
+ * entry creation common to all types of msgs (ADD, DEL, MOD, MODDN).
*
- * @param baseDN The provided baseDN value.
- * @param cookie The provided cookie value.
- * @param targetDN The provided targetDN.
- * @param csn The provided replication CSN.
- * @param clearLDIFchanges The provided LDIF changes for ADD and MODIFY
- * @param targetUUID The provided targetUUID.
- * @param includedAttributes The provided attributes to include
- * @param changenumber The provided change number (integer)
- * @param changetype The provided change type (add, ...)
- * @param changeInitiatorsName The provided initiators name
- * @return The created ECL entry.
+ * @param eclMsg
+ * The provided ECLUpdateMsg for which to build the changelog entry.
+ * @param msg
+ * The provided LDAPUpdateMsg for which to build the changelog entry.
+ * @param ldifChanges
+ * The provided LDIF changes for ADD and MODIFY
+ * @param changeType
+ * The provided change type (add, ...)
+ * @param changeInitiatorsName
+ * The provided initiators name
+ * @return The created ECL entry.
* @throws DirectoryException
- * When any error occurs.
+ * When any error occurs.
*/
private static Entry createChangelogEntry(
- DN baseDN,
- String cookie,
- DN targetDN,
- CSN csn,
- String clearLDIFchanges,
- String targetUUID,
- List<RawAttribute> includedAttributes,
- long changenumber,
- String changetype,
+ ECLUpdateMsg eclMsg,
+ LDAPUpdateMsg msg,
+ String ldifChanges,
+ String changeType,
String changeInitiatorsName)
throws DirectoryException
{
+ final DN baseDN = eclMsg.getBaseDN();
+ final long changeNumber = eclMsg.getChangeNumber();
+ final CSN csn = msg.getCSN();
+
String dnString;
- if (changenumber == 0)
+ if (changeNumber == 0)
{
- // Draft uncompat mode
+ // cookie mode
dnString = "replicationCSN=" + csn + "," + baseDN.toNormalizedString()
+ "," + ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT;
}
else
{
// Draft compat mode
- dnString = "changeNumber=" + changenumber + ","
+ dnString = "changeNumber=" + changeNumber + ","
+ ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT;
}
- // Objectclass
+ // Attributes
Map<AttributeType, List<Attribute>> uAttrs =
new LinkedHashMap<AttributeType,List<Attribute>>();
Map<AttributeType, List<Attribute>> operationalAttrs =
@@ -1026,7 +1005,6 @@
// Operational standard attributes
addAttributeByType(ATTR_SUBSCHEMA_SUBENTRY_LC, ATTR_SUBSCHEMA_SUBENTRY_LC,
ConfigConstants.DN_DEFAULT_SCHEMA_ROOT, uAttrs, operationalAttrs);
-
addAttributeByType("numsubordinates", "numSubordinates", "0", uAttrs,
operationalAttrs);
addAttributeByType("hassubordinates", "hasSubordinates", "false", uAttrs,
@@ -1037,29 +1015,29 @@
// REQUIRED attributes
// ECL Changelog change number
- addAttributeByType("changenumber", "changeNumber", String
- .valueOf(changenumber), uAttrs, operationalAttrs);
+ addAttributeByType("changenumber", "changeNumber",
+ String.valueOf(changeNumber), uAttrs, operationalAttrs);
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_GMT_TIME);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // ??
- String format = dateFormat.format(new Date(csn.getTime()));
+ final String format = dateFormat.format(new Date(csn.getTime()));
addAttributeByType("changetime", "changeTime", format, uAttrs,
operationalAttrs);
- addAttributeByType("changetype", "changeType", changetype, uAttrs,
+ addAttributeByType("changetype", "changeType", changeType, uAttrs,
operationalAttrs);
- addAttributeByType("targetdn", "targetDN", targetDN.toNormalizedString(),
+ addAttributeByType("targetdn", "targetDN", msg.getDN().toNormalizedString(),
uAttrs, operationalAttrs);
// NON REQUESTED attributes
- addAttributeByType("replicationcsn", "replicationCSN", csn
- .toString(), uAttrs, operationalAttrs);
- addAttributeByType("replicaidentifier", "replicaIdentifier", Integer
- .toString(csn.getServerId()), uAttrs, operationalAttrs);
+ addAttributeByType("replicationcsn", "replicationCSN",
+ csn.toString(), uAttrs, operationalAttrs);
+ addAttributeByType("replicaidentifier", "replicaIdentifier",
+ Integer.toString(csn.getServerId()), uAttrs, operationalAttrs);
- if (clearLDIFchanges != null)
+ if (ldifChanges != null)
{
- addAttributeByType("changes", "changes", clearLDIFchanges, uAttrs,
+ addAttributeByType("changes", "changes", ldifChanges, uAttrs,
operationalAttrs);
}
@@ -1069,15 +1047,18 @@
changeInitiatorsName, uAttrs, operationalAttrs);
}
+ final String targetUUID = msg.getEntryUUID();
if (targetUUID != null)
{
addAttributeByType("targetentryuuid", "targetEntryUUID", targetUUID,
uAttrs, operationalAttrs);
}
+ final String cookie = eclMsg.getCookie().toString();
addAttributeByType("changelogcookie", "changeLogCookie", cookie, uAttrs,
operationalAttrs);
+ final List<RawAttribute> includedAttributes = msg.getEclIncludes();
if (includedAttributes != null && !includedAttributes.isEmpty())
{
StringBuilder builder = new StringBuilder(256);
@@ -1098,11 +1079,8 @@
}
// at the end build the CL entry to be returned
- return new Entry(
- DN.decode(dnString),
- CHANGELOG_ENTRY_OBJECT_CLASSES,
- uAttrs,
- operationalAttrs);
+ return new Entry(DN.decode(dnString), CHANGELOG_ENTRY_OBJECT_CLASSES,
+ uAttrs, operationalAttrs);
}
/**
--
Gitblit v1.10.0