You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2010/10/15 17:53:00 UTC
svn commit: r1022976 -
/directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java
Author: pamarcelot
Date: Fri Oct 15 15:52:59 2010
New Revision: 1022976
URL: http://svn.apache.org/viewvc?rev=1022976&view=rev
Log:
Added implementation of the 'modify' operation.
Modified:
directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java
Modified: directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java
URL: http://svn.apache.org/viewvc/directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java?rev=1022976&r1=1022975&r2=1022976&view=diff
==============================================================================
--- directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java (original)
+++ directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java Fri Oct 15 15:52:59 2010
@@ -23,10 +23,10 @@ package org.apache.directory.studio.conn
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
@@ -34,23 +34,24 @@ import javax.naming.ldap.Control;
import org.apache.directory.ldap.client.api.LdapConnectionConfig;
import org.apache.directory.ldap.client.api.LdapNetworkConnection;
-import org.apache.directory.shared.ldap.codec.MessageTypeEnum;
import org.apache.directory.shared.ldap.codec.controls.ControlImpl;
import org.apache.directory.shared.ldap.cursor.Cursor;
+import org.apache.directory.shared.ldap.entry.DefaultModification;
+import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
import org.apache.directory.shared.ldap.exception.LdapException;
import org.apache.directory.shared.ldap.filter.SearchScope;
-import org.apache.directory.shared.ldap.message.AbandonListener;
import org.apache.directory.shared.ldap.message.AddRequest;
import org.apache.directory.shared.ldap.message.AddRequestImpl;
import org.apache.directory.shared.ldap.message.AliasDerefMode;
import org.apache.directory.shared.ldap.message.ArrayNamingEnumeration;
import org.apache.directory.shared.ldap.message.DeleteRequest;
import org.apache.directory.shared.ldap.message.DeleteRequestImpl;
-import org.apache.directory.shared.ldap.message.MessageException;
import org.apache.directory.shared.ldap.message.ModifyDnRequest;
import org.apache.directory.shared.ldap.message.ModifyDnRequestImpl;
+import org.apache.directory.shared.ldap.message.ModifyRequest;
+import org.apache.directory.shared.ldap.message.ModifyRequestImpl;
import org.apache.directory.shared.ldap.message.Response;
-import org.apache.directory.shared.ldap.message.ResultResponse;
import org.apache.directory.shared.ldap.message.SearchRequest;
import org.apache.directory.shared.ldap.message.SearchRequestImpl;
import org.apache.directory.shared.ldap.message.SearchResultEntry;
@@ -359,6 +360,86 @@ public class DirectoryApiConnectionWrapp
public void modifyEntry( final String dn, final ModificationItem[] modificationItems, final Control[] controls,
final StudioProgressMonitor monitor, final ReferralsInfo referralsInfo )
{
+ try
+ {
+ // Preparing the modify request
+ ModifyRequest request = new ModifyRequestImpl();
+ request.setName( new DN( dn ) );
+ Modification[] modifications = convertModificationItems( modificationItems );
+ if ( modifications != null )
+ {
+ for ( Modification modification : modifications )
+ {
+ request.addModification( modification );
+ }
+ }
+ request.addAllControls( convertControls( controls ) );
+
+ // Performing the modify operation
+ getLdapConnection().modify( request );
+ }
+ catch ( Exception e )
+ {
+ monitor.reportError( e );
+ }
+ }
+
+
+ /**
+ * Converts modification items.
+ *
+ * @param modificationItems
+ * an array of modification items
+ * @return
+ * an array of converted modifications
+ */
+ private Modification[] convertModificationItems( ModificationItem[] modificationItems )
+ {
+ if ( modificationItems != null )
+ {
+ List<Modification> modifications = new ArrayList<Modification>();
+
+ for ( ModificationItem modificationItem : modificationItems )
+ {
+ Modification modification = new DefaultModification();
+ modification.setAttribute( AttributeUtils.toClientAttribute( modificationItem.getAttribute() ) );
+ modification.setOperation( convertModificationOperation( modificationItem.getModificationOp() ) );
+ modifications.add( modification );
+ }
+
+ return modifications.toArray( new Modification[0] );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * Converts a modification operation.
+ *
+ * @param modificationOp
+ * a modification operation
+ * @return
+ * the converted modification operation
+ */
+ private ModificationOperation convertModificationOperation( int modificationOp )
+ {
+ if ( modificationOp == DirContext.ADD_ATTRIBUTE )
+ {
+ return ModificationOperation.ADD_ATTRIBUTE;
+ }
+ else if ( modificationOp == DirContext.REPLACE_ATTRIBUTE )
+ {
+ return ModificationOperation.REPLACE_ATTRIBUTE;
+ }
+ else if ( modificationOp == DirContext.REMOVE_ATTRIBUTE )
+ {
+ return ModificationOperation.REMOVE_ATTRIBUTE;
+ }
+
+ return null;
}
@@ -370,12 +451,11 @@ public class DirectoryApiConnectionWrapp
{
try
{
- DN newName = new DN( newDn );
-
// Preparing the rename request
ModifyDnRequest request = new ModifyDnRequestImpl();
request.setName( new DN( oldDn ) );
request.setDeleteOldRdn( deleteOldRdn );
+ DN newName = new DN( newDn );
request.setNewRdn( newName.getRdn() );
request.setNewSuperior( newName.getParent() );
request.addAllControls( convertControls( controls ) );