From 867e35d3947bd5f2e6c0baaf502312ca618a00ea Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 05 Aug 2016 18:35:35 +0000
Subject: [PATCH] Partial OPENDJ-2625 Convert all code that uses JNDI to use the SDK instead
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java | 166 ++++++++++++++++++++++---------------------------------
1 files changed, 66 insertions(+), 100 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
index 7b87777..e1136ec 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -16,6 +16,8 @@
*/
package org.opends.guitools.controlpanel.task;
+import static org.forgerock.opendj.ldap.ModificationType.*;
+import static org.forgerock.opendj.ldap.requests.Requests.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.server.config.ConfigConstants.*;
@@ -26,11 +28,6 @@
import java.util.Set;
import java.util.TreeSet;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
import javax.swing.SwingUtilities;
import javax.swing.tree.TreePath;
@@ -39,7 +36,12 @@
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.LdapException;
+import org.forgerock.opendj.ldap.LinkedAttribute;
+import org.forgerock.opendj.ldap.Modification;
+import org.forgerock.opendj.ldap.ModificationType;
import org.forgerock.opendj.ldap.RDN;
+import org.forgerock.opendj.ldap.requests.ModifyRequest;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.guitools.controlpanel.browser.BrowserController;
@@ -65,8 +67,8 @@
private boolean hasModifications;
private org.forgerock.opendj.ldap.Entry oldEntry;
private DN oldDn;
- private ArrayList<ModificationItem> modifications;
- private ModificationItem passwordModification;
+ private List<Modification> modifications;
+ private Modification passwordModification;
private Entry newEntry;
private BrowserController controller;
private TreePath treePath;
@@ -109,9 +111,9 @@
modifications = getModifications(newEntry, oldEntry, getInfo());
// Find password modifications
- for (ModificationItem mod : modifications)
+ for (Modification mod : modifications)
{
- if ("userPassword".equalsIgnoreCase(mod.getAttribute().getID()))
+ if ("userPassword".equalsIgnoreCase(mod.getAttribute().getAttributeDescriptionAsString()))
{
passwordModification = mod;
break;
@@ -208,10 +210,6 @@
if (!mustRename)
{
if (!modifications.isEmpty()) {
- ModificationItem[] mods =
- new ModificationItem[modifications.size()];
- modifications.toArray(mods);
-
SwingUtilities.invokeLater(new Runnable()
{
@Override
@@ -226,7 +224,7 @@
}
});
- conn.getLdapContext().modifyAttributes(Utilities.getJNDIName(oldEntry.getName().toString()), mods);
+ conn.getConnection().modify(newModifyRequest0(oldEntry.getName(), modifications));
SwingUtilities.invokeLater(new Runnable()
{
@@ -264,49 +262,25 @@
&& state == State.FINISHED_SUCCESSFULLY
&& passwordModification != null)
{
- try
+ String sPwd = passwordModification.getAttribute().firstValueAsString();
+ ResetUserPasswordTask newTask = new ResetUserPasswordTask(getInfo(),
+ getProgressDialog(), (BasicNode)treePath.getLastPathComponent(),
+ controller, sPwd.toCharArray());
+ if (!modifications.isEmpty() || mustRename)
{
- Object o = passwordModification.getAttribute().get();
- String sPwd;
- if (o instanceof byte[])
- {
- try
- {
- sPwd = new String((byte[])o, "UTF-8");
- }
- catch (Throwable t)
- {
- throw new RuntimeException("Unexpected error: "+t, t);
- }
- }
- else
- {
- sPwd = String.valueOf(o);
- }
- ResetUserPasswordTask newTask = new ResetUserPasswordTask(getInfo(),
- getProgressDialog(), (BasicNode)treePath.getLastPathComponent(),
- controller, sPwd.toCharArray());
- if (!modifications.isEmpty() || mustRename)
- {
- getProgressDialog().appendProgressHtml("<br><br>");
- }
- StatusGenericPanel.launchOperation(newTask,
- INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUMMARY.get(),
- INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_SUMMARY.get(),
- INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_DETAILS.get(),
- ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_SUMMARY.get(),
- ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_DETAILS.get(),
- null,
- getProgressDialog(),
- false,
- getInfo());
- getProgressDialog().setVisible(true);
+ getProgressDialog().appendProgressHtml("<br><br>");
}
- catch (NamingException ne)
- {
- // This should not happen
- throw new RuntimeException("Unexpected exception: "+ne, ne);
- }
+ StatusGenericPanel.launchOperation(newTask,
+ INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUMMARY.get(),
+ INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_SUMMARY.get(),
+ INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_DETAILS.get(),
+ ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_SUMMARY.get(),
+ ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_DETAILS.get(),
+ null,
+ getProgressDialog(),
+ false,
+ getInfo());
+ getProgressDialog().setVisible(true);
}
}
@@ -319,12 +293,12 @@
* @param originalMods the original modifications (these are required since
* we might want to update them).
* @throws CannotRenameException if we cannot perform the modification.
- * @throws NamingException if an error performing the modification occurs.
+ * @throws LdapException if an error performing the modification occurs.
*/
private void modifyAndRename(ConnectionWrapper conn, final DN oldDN,
org.forgerock.opendj.ldap.Entry originalEntry,
- final Entry newEntry, final ArrayList<ModificationItem> originalMods)
- throws CannotRenameException, NamingException
+ final Entry newEntry, final List<Modification> originalMods)
+ throws CannotRenameException, LdapException
{
RDN oldRDN = oldDN.rdn();
RDN newRDN = newEntry.getName().rdn();
@@ -351,8 +325,7 @@
}
});
- conn.getLdapContext().rename(Utilities.getJNDIName(oldDn.toString()),
- Utilities.getJNDIName(newEntry.getName().toString()));
+ conn.getConnection().modifyDN(newModifyDNRequest(oldDn, newRDN));
final TreePath[] newPath = {null};
@@ -372,9 +345,7 @@
}
});
- ModificationItem[] mods = new ModificationItem[originalMods.size()];
- originalMods.toArray(mods);
- if (mods.length > 0)
+ if (originalMods.size() > 0)
{
SwingUtilities.invokeLater(new Runnable()
{
@@ -390,7 +361,7 @@
}
});
- conn.getLdapContext().modifyAttributes(Utilities.getJNDIName(newEntry.getName().toString()), mods);
+ conn.getConnection().modify(newModifyRequest0(newEntry.getName(), originalMods));
SwingUtilities.invokeLater(new Runnable()
{
@@ -408,6 +379,16 @@
}
}
+ private ModifyRequest newModifyRequest0(DN dn, final Collection<Modification> mods)
+ {
+ ModifyRequest modRequest = newModifyRequest(dn);
+ for (Modification mod : mods)
+ {
+ modRequest.addModification(mod);
+ }
+ return modRequest;
+ }
+
private boolean rdnTypeChanged(RDN oldRDN, RDN newRDN)
{
if (newRDN.size() != oldRDN.size())
@@ -437,11 +418,11 @@
return false;
}
- private boolean userChangedObjectclass(final ArrayList<ModificationItem> mods)
+ private boolean userChangedObjectclass(final List<Modification> mods)
{
- for (ModificationItem mod : mods)
+ for (Modification mod : mods)
{
- if (ATTR_OBJECTCLASS.equalsIgnoreCase(mod.getAttribute().getID()))
+ if (ATTR_OBJECTCLASS.equalsIgnoreCase(mod.getAttribute().getAttributeDescriptionAsString()))
{
return true;
}
@@ -469,9 +450,9 @@
* @param info the ControlPanelInfo, used to retrieve the schema for instance.
* @return the modifications to apply between two entries.
*/
- public static ArrayList<ModificationItem> getModifications(Entry newEntry,
+ public static List<Modification> getModifications(Entry newEntry,
org.forgerock.opendj.ldap.Entry oldEntry, ControlPanelInfo info) {
- ArrayList<ModificationItem> modifications = new ArrayList<>();
+ List<Modification> modifications = new ArrayList<>();
Schema schema = info.getServerDescriptor().getSchema();
List<org.opends.server.types.Attribute> newAttrs = newEntry.getAttributes();
@@ -479,7 +460,6 @@
for (org.opends.server.types.Attribute attr : newAttrs)
{
AttributeDescription attrDesc = attr.getAttributeDescription();
- final String attrName = attrDesc.toString();
if (!ViewEntryPanel.isEditable(attrDesc, schema))
{
continue;
@@ -541,9 +521,7 @@
}
if (!vs.isEmpty())
{
- modifications.add(new ModificationItem(
- DirContext.ADD_ATTRIBUTE,
- createAttribute(attrName, newValues)));
+ modifications.add(newModification(ADD, attrDesc, newValues));
}
} else {
final List<ByteString> oldValues = toList(oldAttr);
@@ -560,17 +538,13 @@
if (toDelete.size() + toAdd.size() >= newValues.size() &&
!isAttributeInNewRdn)
{
- modifications.add(new ModificationItem(
- DirContext.REPLACE_ATTRIBUTE,
- createAttribute(attrName, newValues)));
+ modifications.add(newModification(REPLACE, attrDesc, newValues));
}
else
{
if (!toDelete.isEmpty())
{
- modifications.add(new ModificationItem(
- DirContext.REMOVE_ATTRIBUTE,
- createAttribute(attrName, toDelete)));
+ modifications.add(newModification(DELETE, attrDesc, toDelete));
}
if (!toAdd.isEmpty())
{
@@ -581,9 +555,7 @@
}
if (!vs.isEmpty())
{
- modifications.add(new ModificationItem(
- DirContext.ADD_ATTRIBUTE,
- createAttribute(attrName, vs)));
+ modifications.add(newModification(ADD, attrDesc, vs));
}
}
}
@@ -602,14 +574,23 @@
if (!newEntry.hasAttribute(AttributeDescription.valueOf(attrDesc.getNameOrOID())) && !oldAttr.isEmpty())
{
- modifications.add(new ModificationItem(
- DirContext.REMOVE_ATTRIBUTE,
- new BasicAttribute(attrDesc.toString())));
+ modifications.add(newModification(DELETE, attrDesc));
}
}
return modifications;
}
+ private static Modification newModification(ModificationType modType, AttributeDescription attrDesc)
+ {
+ return new Modification(modType, new LinkedAttribute(attrDesc));
+ }
+
+ private static Modification newModification(
+ ModificationType modType, AttributeDescription attrDesc, Collection<?> values)
+ {
+ return new Modification(modType, new LinkedAttribute(attrDesc, values));
+ }
+
private static List<ByteString> toList(org.forgerock.opendj.ldap.Attribute oldAttr)
{
List<ByteString> results = new ArrayList<>();
@@ -620,21 +601,6 @@
return results;
}
- /**
- * Creates a JNDI attribute using an attribute name and a set of values.
- * @param attrName the attribute name.
- * @param values the values.
- * @return a JNDI attribute using an attribute name and a set of values.
- */
- private static Attribute createAttribute(String attrName, List<ByteString> values) {
- Attribute attribute = new BasicAttribute(attrName);
- for (ByteString value : values)
- {
- attribute.add(value.toByteArray());
- }
- return attribute;
- }
-
private static List<ByteString> disjunction(List<ByteString> values2, List<ByteString> values1)
{
List<ByteString> results = new ArrayList<>();
--
Gitblit v1.10.0