You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2008/08/15 01:12:13 UTC
svn commit: r686082 [4/7] - in /directory:
apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/
apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/
apacheds/branches/bigbang/c...
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogEvent.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogEvent.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogEvent.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogEvent.java Thu Aug 14 16:12:09 2008
@@ -20,11 +20,13 @@
package org.apache.directory.server.core.changelog;
-import java.io.Serializable;
-
-import javax.naming.directory.Attribute;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
import org.apache.directory.server.core.authn.LdapPrincipal;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
@@ -34,14 +36,23 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public class ChangeLogEvent implements Serializable
+public class ChangeLogEvent implements Externalizable
{
private static final long serialVersionUID = 1L;
- private final String zuluTime;
- private final long revision;
- private final LdifEntry forwardLdif;
- private final LdifEntry reverseLdif;
- private final LdapPrincipal committer;
+ private String zuluTime;
+ private long revision;
+ private LdifEntry forwardLdif;
+ private LdifEntry reverseLdif;
+ private LdapPrincipal committer;
+
+
+ /**
+ * Creates a new instance of ChangeLogEvent, used during the deserialization
+ * process
+ */
+ public ChangeLogEvent()
+ {
+ }
/**
@@ -110,12 +121,107 @@
}
- public Attribute get( String attributeName )
+ public EntryAttribute get( String attributeName )
{
return forwardLdif.get( attributeName );
}
+ /**
+ * @see Externalizable#readExternal(ObjectInput)
+ *
+ * @param in The stream from which the ChangeOlgEvent is read
+ * @throws IOException If the stream can't be read
+ * @throws ClassNotFoundException If the ChangeLogEvent can't be created
+ */
+ public void readExternal( ObjectInput in ) throws IOException , ClassNotFoundException
+ {
+ // Read the committer
+ committer = (LdapPrincipal)in.readObject();
+
+ // Read the revision
+ revision = in.readLong();
+
+ // Read the time
+ boolean hasZuluTime = in.readBoolean();
+
+ if ( hasZuluTime )
+ {
+ zuluTime = in.readUTF();
+ }
+
+ // Read the forward LDIF
+ boolean hasForwardLdif = in.readBoolean();
+
+ if ( hasForwardLdif )
+ {
+ forwardLdif = (LdifEntry)in.readObject();
+ }
+
+ // Read the reverse LDIF
+ boolean hasReverseLdif = in.readBoolean();
+
+ if ( hasReverseLdif )
+ {
+ reverseLdif = (LdifEntry)in.readObject();
+ }
+ }
+
+
+ /**
+ * @see Externalizable#readExternal(ObjectInput)<p>
+ *
+ *@param out The stream in which the ChangeLogEvent will be serialized.
+ *
+ *@throws IOException If the serialization fail
+ */
+ public void writeExternal( ObjectOutput out ) throws IOException
+ {
+ // Write the committer
+ out.writeObject( committer );
+
+ // write the revision
+ out.writeLong( revision );
+
+ // write the time
+
+ if ( zuluTime != null )
+ {
+ out.writeBoolean( true );
+ out.writeUTF( zuluTime );
+ }
+ else
+ {
+ out.writeBoolean( false );
+ }
+
+ // write the forward LDIF
+ if ( forwardLdif != null )
+ {
+ out.writeBoolean( true );
+ out.writeObject( forwardLdif );
+ }
+ else
+ {
+ out.writeBoolean( false );
+ }
+
+ // write the reverse LDIF
+ if ( reverseLdif != null )
+ {
+ out.writeBoolean( true );
+ out.writeObject( reverseLdif );
+ }
+ else
+ {
+ out.writeBoolean( false );
+ }
+
+ // and flush the result
+ out.flush();
+ }
+
+
@Override
public String toString()
{
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java Thu Aug 14 16:12:09 2008
@@ -19,13 +19,17 @@
package org.apache.directory.server.core.changelog;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
import org.apache.directory.server.constants.ApacheSchemaConstants;
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.entry.ServerAttribute;
import org.apache.directory.server.core.entry.ServerEntry;
import org.apache.directory.server.core.entry.ServerEntryUtils;
+import org.apache.directory.server.core.entry.ServerModification;
import org.apache.directory.server.core.interceptor.BaseInterceptor;
import org.apache.directory.server.core.interceptor.NextInterceptor;
import org.apache.directory.server.core.interceptor.context.AddOperationContext;
@@ -37,7 +41,10 @@
import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
import org.apache.directory.server.core.partition.ByPassConstants;
import org.apache.directory.server.core.schema.SchemaService;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientEntry;
import org.apache.directory.shared.ldap.ldif.ChangeType;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifUtils;
@@ -110,13 +117,13 @@
LdifEntry forward = new LdifEntry();
forward.setChangeType( ChangeType.Add );
- forward.setDn( opContext.getDn().getUpName() );
+ forward.setDn( opContext.getDn() );
Set<AttributeType> list = addEntry.getAttributeTypes();
for ( AttributeType attributeType:list )
{
- forward.addAttribute( ServerEntryUtils.toAttributeImpl( addEntry.get( attributeType ) ) );
+ forward.addAttribute( ((ServerAttribute)addEntry.get( attributeType) ).toClientAttribute() );
}
LdifEntry reverse = LdifUtils.reverseAdd( opContext.getDn() );
@@ -154,8 +161,16 @@
LdifEntry forward = new LdifEntry();
forward.setChangeType( ChangeType.Delete );
- forward.setDn( opContext.getDn().getUpName() );
- LdifEntry reverse = LdifUtils.reverseDel( opContext.getDn(), ServerEntryUtils.toAttributesImpl( serverEntry ) );
+ forward.setDn( opContext.getDn() );
+
+ Entry reverseEntry = new DefaultClientEntry( serverEntry.getDn() );
+
+ for ( EntryAttribute attribute:serverEntry )
+ {
+ reverseEntry.add( ((ServerAttribute)attribute).toClientAttribute() );
+ }
+
+ LdifEntry reverse = LdifUtils.reverseDel( opContext.getDn(), reverseEntry );
opContext.setChangeLogEvent( changeLog.log( getPrincipal(), forward, reverse ) );
}
@@ -186,6 +201,9 @@
}
+ /**
+ *
+ */
public void modify( NextInterceptor next, ModifyOperationContext opContext ) throws Exception
{
ServerEntry serverEntry = null;
@@ -217,23 +235,38 @@
{
LOG.debug( "Bypassing changelog on modify of entryDeleted attribute." );
}
+
return;
}
LdifEntry forward = new LdifEntry();
forward.setChangeType( ChangeType.Modify );
- forward.setDn( opContext.getDn().getUpName() );
+ forward.setDn( opContext.getDn() );
+
+ List<Modification> mods = new ArrayList<Modification>( opContext.getModItems().size() );
for ( Modification modItem : opContext.getModItems() )
{
- forward.addModificationItem( ServerEntryUtils.toModificationItemImpl( modItem ) );
+ Modification mod = ((ServerModification)modItem).toClientModification();
+ mods.add( mod );
+
+ forward.addModificationItem( mod );
+ }
+
+ Entry clientEntry = new DefaultClientEntry( serverEntry.getDn() );
+
+ for ( EntryAttribute attribute:serverEntry )
+ {
+ clientEntry.add( ((ServerAttribute)attribute).toClientAttribute() );
}
LdifEntry reverse = LdifUtils.reverseModify(
opContext.getDn(),
- ServerEntryUtils.toModificationItemImpl( opContext.getModItems() ),
- ServerEntryUtils.toAttributesImpl( serverEntry ) );
+ mods,
+ clientEntry );
+ //System.out.println( "forward : " + forward );
+ //System.out.println( "reverse : " + reverse );
opContext.setChangeLogEvent( changeLog.log( getPrincipal(), forward, reverse ) );
}
@@ -262,7 +295,7 @@
LdifEntry forward = new LdifEntry();
forward.setChangeType( ChangeType.ModRdn );
- forward.setDn( renameContext.getDn().getUpName() );
+ forward.setDn( renameContext.getDn() );
forward.setDeleteOldRdn( renameContext.getDelOldDn() );
LdifEntry reverse = LdifUtils.reverseModifyRdn( ServerEntryUtils.toAttributesImpl( serverEntry ),
@@ -292,7 +325,7 @@
LdifEntry forward = new LdifEntry();
forward.setChangeType( ChangeType.ModDn );
- forward.setDn( opCtx.getDn().getUpName() );
+ forward.setDn( opCtx.getDn() );
forward.setDeleteOldRdn( opCtx.getDelOldDn() );
forward.setNewRdn( opCtx.getNewRdn().getUpName() );
forward.setNewSuperior( opCtx.getParent().getUpName() );
@@ -314,7 +347,7 @@
LdifEntry forward = new LdifEntry();
forward.setChangeType( ChangeType.ModDn );
- forward.setDn( opCtx.getDn().getUpName() );
+ forward.setDn( opCtx.getDn() );
forward.setNewSuperior( opCtx.getParent().getUpName() );
LdifEntry reverse = LdifUtils.reverseModifyDn( opCtx.getParent(), opCtx.getDn() );
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/DefaultChangeLog.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/DefaultChangeLog.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/DefaultChangeLog.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/DefaultChangeLog.java Thu Aug 14 16:12:09 2008
@@ -264,4 +264,17 @@
this.tagContainerName = tagContainerName;
}
+
+ /**
+ * @see Object#toString()
+ */
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "ChangeLog tag[" ).append( latest ).append( "]\n" );
+ sb.append( " store : \n" ).append( store );
+
+ return sb.toString();
+ }
}
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/MemoryChangeLogStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/MemoryChangeLogStore.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/MemoryChangeLogStore.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/MemoryChangeLogStore.java Thu Aug 14 16:12:09 2008
@@ -19,7 +19,6 @@
package org.apache.directory.server.core.changelog;
import java.io.BufferedReader;
-import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -294,6 +293,7 @@
private void loadChangeLog() throws Exception
{
File file = new File( workingDirectory, CHANGELOG_FILE );
+
if ( file.exists() )
{
ObjectInputStream in = null;
@@ -301,19 +301,14 @@
try
{
in = new ObjectInputStream( new FileInputStream( file ) );
- ArrayList<ChangeLogEvent> changeLogEvents = new ArrayList<ChangeLogEvent>();
+ int size = in.readInt();
+
+ ArrayList<ChangeLogEvent> changeLogEvents = new ArrayList<ChangeLogEvent>( size );
- while ( true )
+ for ( int i = 0; i < size; i++ )
{
- try
- {
- ChangeLogEvent event = ( ChangeLogEvent ) in.readObject();
- changeLogEvents.add( event );
- }
- catch ( EOFException eofe )
- {
- break;
- }
+ ChangeLogEvent event = ( ChangeLogEvent ) in.readObject();
+ changeLogEvents.add( event );
}
// @todo man o man we need some synchronization later after getting this to work
@@ -365,6 +360,8 @@
{
out = new ObjectOutputStream( new FileOutputStream( file ) );
+ out.writeInt( events.size() );
+
for ( ChangeLogEvent event : events )
{
out.writeObject( event );
@@ -495,4 +492,33 @@
return latest;
}
+
+ /**
+ * @see Object#toString()
+ */
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "MemoryChangeLog\n" );
+ sb.append( "latest tag : " ).append( latest ).append( '\n' );
+
+ if ( events != null )
+ {
+ sb.append( "Nb of events : " ).append( events.size() ).append( '\n' );
+
+ int i = 0;
+
+ for ( ChangeLogEvent event:events )
+ {
+ sb.append( "event[" ).append( i++ ).append( "] : " );
+ sb.append( "\n---------------------------------------\n" );
+ sb.append( event );
+ sb.append( "\n---------------------------------------\n" );
+ }
+ }
+
+
+ return sb.toString();
+ }
}
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java Thu Aug 14 16:12:09 2008
@@ -27,8 +27,6 @@
import org.apache.directory.server.core.entry.ServerAttribute;
import org.apache.directory.server.core.entry.ServerEntry;
-import org.apache.directory.server.core.entry.ServerEntryUtils;
-import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
import org.apache.directory.server.core.interceptor.context.OperationContext;
import org.apache.directory.server.core.partition.ByPassConstants;
import org.apache.directory.server.core.partition.PartitionNexus;
@@ -83,10 +81,7 @@
public void checkModify( OperationContext opContext, LdapDN normName, List<Modification> mods ) throws Exception
{
ServerEntry originalEntry = opContext.lookup( normName, ByPassConstants.LOOKUP_BYPASS );
- ServerEntry targetEntry = ServerEntryUtils.toServerEntry(
- SchemaUtils.getTargetEntry( ServerEntryUtils.toModificationItemImpl( mods ), ServerEntryUtils.toAttributesImpl( originalEntry ) ),
- normName,
- opContext.getSession().getDirectoryService().getRegistries() );
+ ServerEntry targetEntry = (ServerEntry)SchemaUtils.getTargetEntry( mods, originalEntry );
EntryAttribute targetObjectClasses = targetEntry.get( SchemaConstants.OBJECT_CLASS_AT );
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java Thu Aug 14 16:12:09 2008
@@ -1154,6 +1154,7 @@
}
catch ( Exception ne )
{
+ ne.printStackTrace();
throw ne;
}
catch ( Throwable e )
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java Thu Aug 14 16:12:09 2008
@@ -75,6 +75,7 @@
public ModifyOperationContext( CoreSession session, LdapDN dn, List<Modification> modItems )
{
super( session, dn );
+
this.modItems = modItems;
}
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java Thu Aug 14 16:12:09 2008
@@ -59,8 +59,8 @@
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
+import org.apache.directory.server.core.entry.DefaultServerEntry;
import org.apache.directory.server.core.entry.ServerEntry;
-import org.apache.directory.server.core.entry.ServerEntryUtils;
import org.apache.directory.server.core.interceptor.context.AddOperationContext;
import org.apache.directory.server.core.partition.impl.btree.BTreePartition;
import org.apache.directory.server.xdbm.Index;
@@ -465,11 +465,11 @@
for ( LdifEntry entry:new LdifReader( in ) )
{
- String updn = entry.getDn();
+ String updn = entry.getDn().getUpName();
LdapDN ndn = new LdapDN( StringTools.deepTrimToLower( updn ) );
- ServerEntry attrs = ServerEntryUtils.toServerEntry( entry.getAttributes(), ndn, null );
+ ServerEntry attrs = new DefaultServerEntry( registries, entry.getEntry() );
if ( null == partition.getEntryId( ndn.toString() ) )
{
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java Thu Aug 14 16:12:09 2008
@@ -449,7 +449,7 @@
public final void add( AddOperationContext addContext ) throws Exception
{
- store.add( addContext.getDn(), ((ClonedServerEntry)addContext.getEntry()).getClonedEntry() );
+ store.add( addContext.getDn(), (ServerEntry)((ClonedServerEntry)addContext.getEntry()).getClonedEntry() );
}
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Thu Aug 14 16:12:09 2008
@@ -43,7 +43,6 @@
import org.apache.directory.server.core.entry.ServerAttribute;
import org.apache.directory.server.core.entry.ServerBinaryValue;
import org.apache.directory.server.core.entry.ServerEntry;
-import org.apache.directory.server.core.entry.ServerEntryUtils;
import org.apache.directory.server.core.entry.ServerStringValue;
import org.apache.directory.server.core.filtering.BaseEntryFilteringCursor;
import org.apache.directory.server.core.filtering.EntryFilter;
@@ -1208,8 +1207,7 @@
}
// First, we get the entry from the backend. If it does not exist, then we throw an exception
- ServerEntry targetEntry = ServerEntryUtils.toServerEntry( SchemaUtils.getTargetEntry( ServerEntryUtils
- .toModificationItemImpl( mods ), ServerEntryUtils.toAttributesImpl( entry ) ), name, registries );
+ ServerEntry targetEntry = (ServerEntry)SchemaUtils.getTargetEntry( mods , entry );
if ( entry == null )
{
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java Thu Aug 14 16:12:09 2008
@@ -22,6 +22,7 @@
import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.entry.ServerEntry;
import org.apache.directory.server.core.entry.ServerStringValue;
import org.apache.directory.server.core.filtering.EntryFilteringCursor;
import org.apache.directory.shared.ldap.constants.SchemaConstants;
@@ -138,7 +139,7 @@
throw ne;
}
- engine.setSPUnitEntry( spUnitEntry.getOriginalEntry() );
+ engine.setSPUnitEntry( (ServerEntry)spUnitEntry.getOriginalEntry() );
return engine;
}
Added: directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authn/LdapPrincipalTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authn/LdapPrincipalTest.java?rev=686082&view=auto
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authn/LdapPrincipalTest.java (added)
+++ directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authn/LdapPrincipalTest.java Thu Aug 14 16:12:09 2008
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.authn;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.junit.Test;
+
+
+/**
+ *
+ * Test the LdapPrincipal class
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class LdapPrincipalTest
+{
+ /**
+ * Test the serialization of an empty LdapPrincipal
+ */
+ @Test
+ public void testStaticSerializeEmptyLdapPrincipal() throws Exception
+ {
+ LdapPrincipal principal = new LdapPrincipal();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream( baos );
+
+ out.writeObject( principal );
+
+ byte[] data = baos.toByteArray();
+ ObjectInputStream in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+ LdapPrincipal readPrincipal = (LdapPrincipal)in.readObject();
+ assertEquals( principal.getAuthenticationLevel(), readPrincipal.getAuthenticationLevel() );
+ assertEquals( principal.getName(), readPrincipal.getName() );
+ }
+}
Modified: directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/changelog/MemoryChangeLogStoreTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/changelog/MemoryChangeLogStoreTest.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/changelog/MemoryChangeLogStoreTest.java (original)
+++ directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/changelog/MemoryChangeLogStoreTest.java Thu Aug 14 16:12:09 2008
@@ -19,12 +19,32 @@
package org.apache.directory.server.core.changelog;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.naming.NamingException;
+
import junit.framework.TestCase;
import org.apache.directory.server.core.authn.LdapPrincipal;
+import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.ldif.ChangeType;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifUtils;
import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.schema.NoOpNormalizer;
+import org.apache.directory.shared.ldap.schema.OidNormalizer;
+import org.apache.directory.shared.ldap.util.DateUtils;
+import org.apache.directory.shared.ldap.util.StringTools;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
/**
@@ -37,14 +57,26 @@
{
MemoryChangeLogStore store;
-
+ Map<String, OidNormalizer> oidsMap = new HashMap<String, OidNormalizer>();
+
+
+ @Before
public void setUp() throws Exception
{
super.setUp();
store = new MemoryChangeLogStore();
+
+ oidsMap.put( SchemaConstants.UID_AT, new OidNormalizer( SchemaConstants.UID_AT_OID, new NoOpNormalizer() ) );
+ oidsMap.put( SchemaConstants.USER_ID_AT, new OidNormalizer( SchemaConstants.UID_AT_OID, new NoOpNormalizer() ) );
+ oidsMap.put( SchemaConstants.UID_AT_OID, new OidNormalizer( SchemaConstants.UID_AT_OID, new NoOpNormalizer() ) );
+
+ oidsMap.put( SchemaConstants.OU_AT, new OidNormalizer( SchemaConstants.OU_AT_OID, new NoOpNormalizer() ) );
+ oidsMap.put( SchemaConstants.ORGANIZATIONAL_UNIT_NAME_AT, new OidNormalizer( SchemaConstants.OU_AT_OID, new NoOpNormalizer() ) );
+ oidsMap.put( SchemaConstants.OU_AT_OID, new OidNormalizer( SchemaConstants.OU_AT_OID, new NoOpNormalizer() ) );
}
+ @After
public void tearDown() throws Exception
{
super.tearDown();
@@ -52,6 +84,7 @@
}
+ @Test
public void testLogCheckRevision() throws Exception
{
assertEquals( "first revision is always 0", 0, store.getCurrentRevision() );
@@ -66,4 +99,58 @@
assertEquals( 1, store.log( new LdapPrincipal(), forward, reverse ).getRevision() );
assertEquals( 1, store.getCurrentRevision() );
}
+
+
+ @Test
+ public void testChangeLogSerialization() throws NamingException, IOException, ClassNotFoundException
+ {
+ LdapDN systemDn = new LdapDN( "ou=system" );
+ systemDn.normalize( oidsMap );
+
+ LdapDN adminDn = new LdapDN( "uid=admin, ou=system" );
+ adminDn.normalize( oidsMap );
+
+ LdifEntry forward = new LdifEntry();
+ forward.setDn( systemDn );
+ forward.setChangeType( ChangeType.Add );
+ forward.putAttribute( "objectClass", "organizationalUnit" );
+ forward.putAttribute( "ou", "system" );
+
+ LdapDN reverseDn = new LdapDN( forward.getDn() );
+ reverseDn.normalize( oidsMap );
+
+ LdifEntry reverse = LdifUtils.reverseAdd( reverseDn );
+
+ String zuluTime = DateUtils.getGeneralizedTime();
+ long revision = 1L;
+
+ LdapPrincipal principal = new LdapPrincipal( adminDn, AuthenticationLevel.SIMPLE, StringTools.getBytesUtf8( "secret" ) );
+ ChangeLogEvent event = new ChangeLogEvent( revision, zuluTime, principal, forward, reverse );
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream( baos );
+
+ out.writeObject( event );
+
+ byte[] data = baos.toByteArray();
+ ObjectInputStream in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+ ChangeLogEvent read = (ChangeLogEvent)in.readObject();
+
+ // The read event should not be equal to the written event, as
+ // the principal's password has not been stored
+ assertNotSame( event, read );
+
+ LdapPrincipal readPrincipal = read.getCommitterPrincipal();
+
+ assertEquals( principal.getAuthenticationLevel(), readPrincipal.getAuthenticationLevel() );
+ assertEquals( principal.getName(), readPrincipal.getName() );
+ assertEquals( principal.getJndiName(), readPrincipal.getJndiName() );
+ assertNull( readPrincipal.getUserPassword() );
+
+ assertEquals( zuluTime, read.getZuluTime() );
+ assertEquals( revision, read.getRevision() );
+ assertEquals( forward, read.getForwardLdif() );
+ assertEquals( reverse, read.getReverseLdif() );
+ }
}
Modified: directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifFileLoader.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifFileLoader.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifFileLoader.java (original)
+++ directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifFileLoader.java Thu Aug 14 16:12:09 2008
@@ -28,18 +28,16 @@
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.List;
-import java.util.Properties;
-import javax.naming.CompoundName;
-import javax.naming.Name;
import javax.naming.NamingException;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
+import org.apache.directory.server.core.CoreSession;
+import org.apache.directory.server.core.entry.DefaultServerEntry;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.Modification;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifReader;
-import org.apache.directory.shared.ldap.message.ModificationItemImpl;
+import org.apache.directory.shared.ldap.name.LdapDN;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -58,9 +56,9 @@
private static final Logger log = LoggerFactory.getLogger( LdifFileLoader.class );
/**
- * a handle on the top initial context: get new context from this
+ * a handle on the top core session
*/
- protected DirContext ctx;
+ protected CoreSession coreSession;
/**
* the LDIF file or directory containing LDIFs to load
*/
@@ -85,9 +83,9 @@
* @param ctx the context to load the entries into.
* @param ldif the file of LDIF entries to load.
*/
- public LdifFileLoader( DirContext ctx, String ldif )
+ public LdifFileLoader( CoreSession coreSession, String ldif )
{
- this( ctx, new File( ldif ), null );
+ this( coreSession, new File( ldif ), null );
}
@@ -98,9 +96,9 @@
* @param ldif
* @param filters
*/
- public LdifFileLoader( DirContext ctx, File ldif, List<? extends LdifLoadFilter> filters )
+ public LdifFileLoader( CoreSession coreSession, File ldif, List<? extends LdifLoadFilter> filters )
{
- this( ctx, ldif, filters, null );
+ this( coreSession, ldif, filters, null );
}
@@ -112,9 +110,9 @@
* @param filters
* @param loader
*/
- public LdifFileLoader( DirContext ctx, File ldif, List<? extends LdifLoadFilter> filters, ClassLoader loader )
+ public LdifFileLoader( CoreSession coreSession, File ldif, List<? extends LdifLoadFilter> filters, ClassLoader loader )
{
- this.ctx = ctx;
+ this.coreSession = coreSession;
this.ldif = ldif;
this.loader = loader;
@@ -135,7 +133,7 @@
* @param entry the attributes of the entry
* @return true if all filters passed the entry, false otherwise
*/
- private boolean applyFilters( String dn, Attributes entry )
+ private boolean applyFilters( LdapDN dn, Entry entry )
{
boolean accept = true;
final int limit = filters.size();
@@ -149,7 +147,7 @@
{
try
{
- accept &= ( filters.get( ii ) ).filter( ldif, dn, entry, ctx );
+ accept &= ( filters.get( ii ) ).filter( ldif, dn, entry, coreSession );
}
catch ( NamingException e )
{
@@ -173,7 +171,7 @@
*/
public int execute()
{
- Name rdn = null;
+ LdapDN rdn = null;
InputStream in = null;
try
@@ -182,44 +180,46 @@
for ( LdifEntry ldifEntry:new LdifReader( new BufferedReader( new InputStreamReader( in ) ) ) )
{
- String dn = ldifEntry.getDn();
+ LdapDN dn = ldifEntry.getDn();
if ( ldifEntry.isEntry() )
{
- Attributes attributes = ldifEntry.getAttributes();
- boolean filterAccepted = applyFilters( dn, attributes );
+ Entry entry = ldifEntry.getEntry();
+ boolean filterAccepted = applyFilters( dn, entry );
if ( !filterAccepted )
{
continue;
}
- rdn = getRelativeName( ctx, dn );
-
try
{
- ctx.lookup( rdn );
+ coreSession.lookup( dn );
log.info( "Found {}, will not create.", rdn );
}
catch ( Exception e )
{
try
{
- ctx.createSubcontext( rdn, attributes );
- count++;
+ coreSession.add(
+ new DefaultServerEntry(
+ coreSession.getDirectoryService().getRegistries(), entry ) );
+ count++;
log.info( "Created {}.", rdn );
- } catch ( NamingException e1 )
+ }
+ catch ( NamingException e1 )
{
- log.info( "Could not create: " + dn + " with attributes: " + attributes, e1 );
+ log.info( "Could not create entry " + entry, e1 );
}
}
} else
{
//modify
- List<ModificationItemImpl> items = ldifEntry.getModificationItems();
+ List<Modification> items = ldifEntry.getModificationItems();
+
try
{
- ctx.modifyAttributes( dn, items.toArray( new ModificationItem[items.size()] ) );
+ coreSession.modify( dn, items );
log.info( "Modified: " + dn + " with modificationItems: " + items );
}
catch ( NamingException e )
@@ -256,40 +256,6 @@
}
- private Name getRelativeName( DirContext ctx, String baseDn ) throws NamingException
- {
- Properties props = new Properties();
- props.setProperty( "jndi.syntax.direction", "right_to_left" );
- props.setProperty( "jndi.syntax.separator", "," );
- props.setProperty( "jndi.syntax.ignorecase", "true" );
- props.setProperty( "jndi.syntax.trimblanks", "true" );
-
- Name searchBaseDn;
-
- try
- {
- Name ctxRoot = new CompoundName( ctx.getNameInNamespace(), props );
- searchBaseDn = new CompoundName( baseDn, props );
-
- if ( !searchBaseDn.startsWith( ctxRoot ) )
- {
- throw new NamingException( "Invalid search base " + baseDn );
- }
-
- for ( int ii = 0; ii < ctxRoot.size(); ii++ )
- {
- searchBaseDn.remove( 0 );
- }
- }
- catch ( NamingException e )
- {
- throw new NamingException( "Failed to initialize search base " + baseDn );
- }
-
- return searchBaseDn;
- }
-
-
/**
* Tries to find an LDIF file either on the file system or packaged within a jar.
*
Modified: directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifLoadFilter.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifLoadFilter.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifLoadFilter.java (original)
+++ directory/apacheds/branches/bigbang/protocol-shared/src/main/java/org/apache/directory/server/protocol/shared/store/LdifLoadFilter.java Thu Aug 14 16:12:09 2008
@@ -20,9 +20,12 @@
package org.apache.directory.server.protocol.shared.store;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
import javax.naming.NamingException;
+
+import org.apache.directory.server.core.CoreSession;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.name.LdapDN;
+
import java.io.File;
@@ -40,9 +43,9 @@
* @param file the file being loaded
* @param dn the distinguished name of the entry being loaded
* @param entry the entry attributes within the LDIF file
- * @param ctx context to be used for loading the entry into the DIT
+ * @param coreSession session to be used for loading the entry into the DIT
* @return true if the entry will be created in the DIT, false if it is to be skipped
* @throws NamingException
*/
- boolean filter( File file, String dn, Attributes entry, DirContext ctx ) throws NamingException;
+ boolean filter( File file, LdapDN dn, Entry entry, CoreSession coreSession ) throws NamingException;
}
Modified: directory/apacheds/branches/bigbang/server-integ/src/main/java/org/apache/directory/server/integ/state/AbstractState.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/main/java/org/apache/directory/server/integ/state/AbstractState.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/main/java/org/apache/directory/server/integ/state/AbstractState.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/main/java/org/apache/directory/server/integ/state/AbstractState.java Thu Aug 14 16:12:09 2008
@@ -25,10 +25,9 @@
import java.util.List;
import javax.naming.NamingException;
-import javax.naming.ldap.LdapContext;
import org.apache.directory.server.core.DirectoryService;
-import org.apache.directory.server.core.integ.IntegrationUtils;
+import org.apache.directory.server.core.entry.DefaultServerEntry;
import org.apache.directory.server.integ.InheritableServerSettings;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifReader;
@@ -183,7 +182,6 @@
if ( ldifs.size() != 0 )
{
- LdapContext root = IntegrationUtils.getRootContext( service );
for ( String ldif:ldifs )
{
StringReader in = new StringReader( ldif );
@@ -191,7 +189,8 @@
for ( LdifEntry entry : ldifReader )
{
- root.createSubcontext( entry.getDn(), entry.getAttributes() );
+ service.getAdminSession().add(
+ new DefaultServerEntry( service.getRegistries(), entry.getEntry() ) );
LOG.debug( "Successfully injected LDIF enry for test {}: {}", settings.getDescription(), entry );
}
}
Modified: directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/BindIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/BindIT.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/BindIT.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/BindIT.java Thu Aug 14 16:12:09 2008
@@ -47,7 +47,7 @@
* @version $Rev$, $Date$
*/
@RunWith ( SiRunner.class )
-@CleanupLevel ( Level.SUITE )
+@CleanupLevel ( Level.CLASS )
@ApplyLdifs( {
// Entry # 1
"dn: uid=akarasulu,ou=users,ou=system\n" +
Modified: directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/SimpleBindIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/SimpleBindIT.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/SimpleBindIT.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/bind/SimpleBindIT.java Thu Aug 14 16:12:09 2008
@@ -55,7 +55,7 @@
* @version $Rev$, $Date$
*/
@RunWith ( SiRunner.class )
-@CleanupLevel ( Level.SUITE )
+@CleanupLevel ( Level.CLASS )
@ApplyLdifs( {
// Entry # 1
"dn: uid=hnelson,ou=users,ou=system\n" +
Modified: directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java Thu Aug 14 16:12:09 2008
@@ -936,7 +936,6 @@
* @throws NamingException
*/
@Test
- @Ignore ( "Until this is fixed: https://issues.apache.org/jira/browse/DIRSERVER-1216" )
public void testModifyRdnOperationalAttribute() throws Exception
{
DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
Modified: directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/ReferralSearchIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/ReferralSearchIT.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/ReferralSearchIT.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/ReferralSearchIT.java Thu Aug 14 16:12:09 2008
@@ -31,6 +31,7 @@
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
+import org.apache.directory.server.core.entry.DefaultServerEntry;
import org.apache.directory.server.core.integ.annotations.ApplyLdifs;
import org.apache.directory.server.integ.SiRunner;
@@ -65,6 +66,7 @@
"objectClass: top\n" +
"objectClass: referral\n" +
"objectClass: extensibleObject\n" +
+ "ou: RemoteUsers\n" +
"ref: ldap://fermi:10389/ou=users,ou=system\n" +
"ref: ldap://hertz:10389/ou=users,dc=example,dc=com\n" +
"ref: ldap://maxwell:10389/ou=users,ou=system\n\n" +
@@ -89,7 +91,7 @@
"objectClass: locality\n" +
"l: Jacksonville\n\n" +
- "dn: cn=emmanuel lecharney,l=paris,c=france,ou=system\n" +
+ "dn: cn=emmanuel lecharny,l=paris,c=france,ou=system\n" +
"objectClass: top\n" +
"objectClass: person\n" +
"objectClass: residentialPerson\n" +
@@ -138,8 +140,8 @@
while ( reader.hasNext() )
{
LdifEntry entry = reader.next();
- DirContext ctx = getWiredContext( ldapServer );
- ctx.createSubcontext( entry.getDn(), entry.getAttributes() );
+ ldapServer.getDirectoryService().getAdminSession().add(
+ new DefaultServerEntry( ldapServer.getDirectoryService().getRegistries(), entry.getEntry() ) );
}
}
Modified: directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java Thu Aug 14 16:12:09 2008
@@ -36,7 +36,9 @@
import javax.naming.ldap.Control;
import javax.naming.ldap.LdapContext;
+import org.apache.directory.server.core.integ.Level;
import org.apache.directory.server.core.integ.annotations.ApplyLdifs;
+import org.apache.directory.server.core.integ.annotations.CleanupLevel;
import org.apache.directory.server.core.subtree.SubentryInterceptor;
import org.apache.directory.server.integ.SiRunner;
import org.apache.directory.server.newldap.LdapServer;
@@ -66,6 +68,7 @@
* @version $Rev: 682556 $
*/
@RunWith ( SiRunner.class )
+@CleanupLevel ( Level.CLASS )
@ApplyLdifs( {
// Entry # 0
Modified: directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java (original)
+++ directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java Thu Aug 14 16:12:09 2008
@@ -27,7 +27,6 @@
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.server.core.entry.ServerEntry;
-import org.apache.directory.server.core.jndi.ServerLdapContext;
import org.apache.directory.server.newldap.LdapServer;
import org.apache.directory.server.protocol.shared.store.LdifFileLoader;
import org.apache.directory.server.protocol.shared.store.LdifLoadFilter;
@@ -40,7 +39,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.naming.directory.DirContext;
import java.io.File;
import java.io.FileFilter;
@@ -361,9 +359,7 @@
}
else
{
- DirContext root = new ServerLdapContext( directoryService,
- directoryService.getAdminSession(), new LdapDN() );
- LdifFileLoader loader = new LdifFileLoader( root, ldifFile, ldifFilters );
+ LdifFileLoader loader = new LdifFileLoader( directoryService.getAdminSession(), ldifFile, ldifFilters );
int count = loader.execute();
LOG.info( "Loaded " + count + " entries from LDIF file '" + getCanonical( ldifFile ) + "'" );
addFileEntry( ldifFile );
Modified: directory/apacheds/branches/bigbang/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java (original)
+++ directory/apacheds/branches/bigbang/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java Thu Aug 14 16:12:09 2008
@@ -22,12 +22,10 @@
import java.io.File;
-import org.apache.directory.server.configuration.ApacheDS;
import org.apache.directory.server.core.DefaultDirectoryService;
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.core.entry.DefaultServerEntry;
import org.apache.directory.server.core.entry.ServerEntry;
-import org.apache.directory.server.core.filtering.EntryFilteringCursor;
import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
import org.apache.directory.server.newldap.LdapServer;
import org.apache.directory.server.protocol.shared.SocketAcceptor;
Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java (original)
+++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java Thu Aug 14 16:12:09 2008
@@ -32,8 +32,6 @@
import javax.naming.InvalidNameException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import org.apache.commons.cli.CommandLine;
@@ -60,6 +58,9 @@
import org.apache.directory.shared.ldap.codec.modify.ModifyRequest;
import org.apache.directory.shared.ldap.codec.modifyDn.ModifyDNRequest;
import org.apache.directory.shared.ldap.codec.unbind.UnBindRequest;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Value;
import org.apache.directory.shared.ldap.ldif.ChangeType;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifReader;
@@ -212,39 +213,36 @@
* Send the entry to the encoder, then wait for a
* reponse from the LDAP server on the results of the operation.
*
- * @param entry
+ * @param ldifEntry
* The entry to add
* @param msgId
* message id number
*/
- private int addEntry( LdifEntry entry, int messageId ) throws IOException, DecoderException, InvalidNameException,
+ private int addEntry( LdifEntry ldifEntry, int messageId ) throws IOException, DecoderException, InvalidNameException,
NamingException, EncoderException
{
AddRequest addRequest = new AddRequest();
- String dn = entry.getDn();
+ String dn = ldifEntry.getDn().getUpName();
if ( isDebugEnabled() )
{
System.out.println( "Adding entry " + dn );
}
- Attributes attributes = entry.getAttributes();
+ Entry entry = ldifEntry.getEntry();
addRequest.setEntry( new LdapDN( dn ) );
// Copy the attributes
addRequest.initAttributes();
- for ( NamingEnumeration attrs = attributes.getAll(); attrs.hasMoreElements(); )
+ for ( EntryAttribute attribute:entry )
{
- Attribute attribute = ( Attribute ) attrs.nextElement();
-
- addRequest.addAttributeType( attribute.getID() );
+ addRequest.addAttributeType( attribute.getId() );
- for ( NamingEnumeration values = attribute.getAll(); values.hasMoreElements(); )
+ for ( Value<?> value: attribute )
{
- Object value = values.nextElement();
addRequest.addAttributeValue( value );
}
}
@@ -300,7 +298,7 @@
{
DelRequest delRequest = new DelRequest();
- String dn = entry.getDn();
+ String dn = entry.getDn().getUpName();
if ( isDebugEnabled() )
{
@@ -359,7 +357,7 @@
{
ModifyDNRequest modifyDNRequest = new ModifyDNRequest();
- String dn = entry.getDn();
+ String dn = entry.getDn().getUpName();
if ( isDebugEnabled() )
{
@@ -425,7 +423,7 @@
{
ModifyRequest modifyRequest = new ModifyRequest();
- String dn = entry.getDn();
+ String dn = entry.getDn().getUpName();
if ( isDebugEnabled() )
{
Modified: directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java Thu Aug 14 16:12:09 2008
@@ -31,10 +31,7 @@
import java.util.Map;
import javax.naming.Context;
-import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
@@ -43,8 +40,10 @@
import org.apache.commons.io.FileUtils;
import org.apache.directory.server.constants.ServerDNConstants;
+import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.core.DefaultDirectoryService;
import org.apache.directory.server.core.DirectoryService;
+import org.apache.directory.server.core.entry.DefaultServerEntry;
import org.apache.directory.server.core.jndi.CoreContextFactory;
import org.apache.directory.server.newldap.LdapServer;
import org.apache.directory.server.newldap.handlers.bind.MechanismHandler;
@@ -57,10 +56,12 @@
import org.apache.directory.server.newldap.handlers.extended.StoredProcedureExtendedOperationHandler;
import org.apache.directory.server.protocol.shared.SocketAcceptor;
import org.apache.directory.shared.ldap.constants.SupportedSaslMechanisms;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Value;
import org.apache.directory.shared.ldap.exception.LdapConfigurationException;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifReader;
-import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.mina.util.AvailablePortFinder;
import org.slf4j.Logger;
@@ -83,7 +84,7 @@
protected LdapContext sysRoot;
/** the context root for the rootDSE */
- protected LdapContext rootDSE;
+ protected CoreSession rootDSE;
/** the context root for the schema */
protected LdapContext schemaRoot;
@@ -143,7 +144,8 @@
for ( LdifEntry entry:ldifReader )
{
- rootDSE.createSubcontext( entry.getDn(), entry.getAttributes() );
+ rootDSE.add(
+ new DefaultServerEntry( directoryService.getRegistries(), entry.getEntry() ) );
if ( verifyEntries )
{
@@ -171,17 +173,16 @@
*/
protected void verify( LdifEntry entry ) throws Exception
{
- Attributes readAttributes = rootDSE.getAttributes( entry.getDn() );
- NamingEnumeration<String> readIds = entry.getAttributes().getIDs();
- while ( readIds.hasMore() )
- {
- String id = readIds.next();
- Attribute readAttribute = readAttributes.get( id );
- Attribute origAttribute = entry.getAttributes().get( id );
+ Entry readEntry = rootDSE.lookup( entry.getDn() );
+
+ for ( EntryAttribute readAttribute:readEntry )
+ {
+ String id = readAttribute.getId();
+ EntryAttribute origAttribute = entry.getEntry().get( id );
- for ( int ii = 0; ii < origAttribute.size(); ii++ )
+ for ( Value<?> value:origAttribute )
{
- if ( ! readAttribute.contains( origAttribute.get( ii ) ) )
+ if ( ! readAttribute.contains( value ) )
{
LOG.error( "Failed to verify entry addition of {}. {} attribute in original " +
"entry missing from read entry.", entry.getDn(), id );
@@ -370,7 +371,7 @@
sysRoot = new InitialLdapContext( envFinal, null );
envFinal.put( Context.PROVIDER_URL, "" );
- rootDSE = new InitialLdapContext( envFinal, null );
+ rootDSE = directoryService.getAdminSession();
envFinal.put( Context.PROVIDER_URL, ServerDNConstants.OU_SCHEMA_DN );
schemaRoot = new InitialLdapContext( envFinal, null );
@@ -420,8 +421,9 @@
{
for ( LdifEntry ldifEntry:new LdifReader( in ) )
{
- LdapDN dn = new LdapDN( ldifEntry.getDn() );
- rootDSE.createSubcontext( dn, ldifEntry.getAttributes() );
+ rootDSE.add(
+ new DefaultServerEntry(
+ rootDSE.getDirectoryService().getRegistries(), ldifEntry.getEntry() ) );
}
}
catch ( Exception e )
@@ -447,7 +449,9 @@
for ( LdifEntry entry : entries )
{
- rootDSE.createSubcontext( new LdapDN( entry.getDn() ), entry.getAttributes() );
+ rootDSE.add(
+ new DefaultServerEntry(
+ rootDSE.getDirectoryService().getRegistries(), entry.getEntry() ) );
}
}
}
Modified: directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/AttributeTypeHolder.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/AttributeTypeHolder.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/AttributeTypeHolder.java (original)
+++ directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/AttributeTypeHolder.java Thu Aug 14 16:12:09 2008
@@ -21,12 +21,12 @@
import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientEntry;
import org.apache.directory.shared.ldap.ldif.LdifUtils;
-import org.apache.directory.shared.ldap.message.AttributeImpl;
-import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.apache.directory.shared.ldap.name.Rdn;
import org.apache.directory.shared.ldap.schema.UsageEnum;
@@ -423,11 +423,11 @@
String dn = "m-oid=" + oid + ", ou=attributeTypes" + ", cn=" + Rdn.escapeValue( schemaName ) + ", ou=schema";
// First dump the DN only
- Attributes attributes = new AttributesImpl();
- Attribute attribute = new AttributeImpl( "dn", dn );
+ Entry entry = new DefaultClientEntry();
+ EntryAttribute attribute = new DefaultClientAttribute( "dn", dn );
- attributes.put( attribute );
- sb.append( LdifUtils.convertToLdif( attributes ) );
+ entry.put( attribute );
+ sb.append( LdifUtils.convertToLdif( entry ) );
return sb.toString();
}
Modified: directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/ObjectClassHolder.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/ObjectClassHolder.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/ObjectClassHolder.java (original)
+++ directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/ObjectClassHolder.java Thu Aug 14 16:12:09 2008
@@ -24,12 +24,12 @@
import java.util.List;
import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientEntry;
import org.apache.directory.shared.ldap.ldif.LdifUtils;
-import org.apache.directory.shared.ldap.message.AttributeImpl;
-import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.apache.directory.shared.ldap.name.Rdn;
import org.apache.directory.shared.ldap.schema.ObjectClassTypeEnum;
@@ -216,11 +216,11 @@
String dn = "m-oid=" + oid + ", ou=objectClasses" + ", cn=" + Rdn.escapeValue( schemaName ) + ", ou=schema";
// First dump the DN only
- Attributes attributes = new AttributesImpl();
- Attribute attribute = new AttributeImpl( "dn", dn );
+ Entry entry = new DefaultClientEntry();
+ EntryAttribute attribute = new DefaultClientAttribute( "dn", dn );
- attributes.put( attribute );
- sb.append( LdifUtils.convertToLdif( attributes ) );
+ entry.put( attribute );
+ sb.append( LdifUtils.convertToLdif( entry ) );
return sb.toString();
}
Modified: directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/SchemaElementImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/SchemaElementImpl.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/SchemaElementImpl.java (original)
+++ directory/shared/branches/bigbang/convert/src/main/java/org/apache/directory/shared/converter/schema/SchemaElementImpl.java Thu Aug 14 16:12:09 2008
@@ -23,12 +23,12 @@
import java.util.List;
import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
+import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientEntry;
import org.apache.directory.shared.ldap.ldif.LdifUtils;
-import org.apache.directory.shared.ldap.message.AttributeImpl;
-import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.apache.directory.shared.ldap.util.StringTools;
/**
@@ -147,17 +147,17 @@
}
else
{
- Attributes attributes = new AttributesImpl();
- Attribute attribute = new AttributeImpl( "m-name" );
+ Entry entry = new DefaultClientEntry();
+ EntryAttribute attribute = new DefaultClientAttribute( "m-name" );
for ( String name:names )
{
attribute.add( name );
}
- attributes.put( attribute );
+ entry.put( attribute );
- return LdifUtils.convertToLdif( attributes );
+ return LdifUtils.convertToLdif( entry );
}
}
@@ -172,11 +172,12 @@
}
else
{
- Attributes attributes = new AttributesImpl();
- Attribute attribute = new AttributeImpl( "m-description", description );
- attributes.put( attribute );
+ Entry entry = new DefaultClientEntry();
+ EntryAttribute attribute = new DefaultClientAttribute( "m-description", description );
+
+ entry.put( attribute );
- return LdifUtils.convertToLdif( attributes );
+ return LdifUtils.convertToLdif( entry );
}
}
@@ -197,15 +198,15 @@
{
StringBuilder sb = new StringBuilder();
- Attributes attributes = new AttributesImpl();
- Attribute attribute = new AttributeImpl( ID );
+ Entry entry = new DefaultClientEntry();
+ EntryAttribute attribute = new DefaultClientAttribute( ID );
for ( String extension:extensions )
{
attribute.add( extension );
}
- sb.append( LdifUtils.convertToLdif( attributes ) );
+ sb.append( LdifUtils.convertToLdif( entry ) );
return sb.toString();
}
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Entry.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Entry.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Entry.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Entry.java Thu Aug 14 16:12:09 2008
@@ -19,6 +19,7 @@
package org.apache.directory.shared.ldap.entry;
+import java.io.Externalizable;
import java.util.Iterator;
import java.util.List;
@@ -42,7 +43,7 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public interface Entry extends Cloneable, Iterable<EntryAttribute>
+public interface Entry extends Cloneable, Iterable<EntryAttribute>, Externalizable
{
/**
* Remove all the attributes for this entry. The DN is not reset
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java Thu Aug 14 16:12:09 2008
@@ -18,6 +18,7 @@
*/
package org.apache.directory.shared.ldap.entry;
+import java.io.Externalizable;
import java.util.Iterator;
import java.util.List;
@@ -30,7 +31,7 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public interface EntryAttribute extends Iterable<Value<?>>, Cloneable
+public interface EntryAttribute extends Iterable<Value<?>>, Cloneable, Externalizable
{
/**
* Adds some values to this attribute. If the new values are already present in
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Modification.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Modification.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Modification.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/Modification.java Thu Aug 14 16:12:09 2008
@@ -19,6 +19,8 @@
*/
package org.apache.directory.shared.ldap.entry;
+import java.io.Externalizable;
+
/**
* An internal interface for a ModificationItem. The name has been
* chosen so that it does not conflict with @see ModificationItem
@@ -26,7 +28,7 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public interface Modification extends Cloneable
+public interface Modification extends Cloneable, Externalizable
{
/**
* @return the operation
@@ -66,9 +68,8 @@
/**
* The clone operation
- * TODO clone.
*
- * @return
+ * @return a clone of the current modification
*/
Modification clone();
}
\ No newline at end of file
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java Thu Aug 14 16:12:09 2008
@@ -56,6 +56,35 @@
}
+ /**
+ * Get the ModificationOperation from an int value
+ *
+ * @param value the ModificationOperation int value
+ * @return the associated ModifciationOperation instance
+ */
+ public static ModificationOperation getOperation( int value )
+ {
+ if ( value == ADD_ATTRIBUTE.value )
+ {
+ return ADD_ATTRIBUTE;
+ }
+ else if ( value == REMOVE_ATTRIBUTE.value )
+ {
+ return REMOVE_ATTRIBUTE;
+ }
+ else if ( value == REPLACE_ATTRIBUTE.value )
+ {
+ return REPLACE_ATTRIBUTE;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @see Object#toString()
+ */
public String toString()
{
switch ( this )
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientBinaryValue.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientBinaryValue.java?rev=686082&r1=686081&r2=686082&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientBinaryValue.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientBinaryValue.java Thu Aug 14 16:12:09 2008
@@ -355,8 +355,36 @@
*/
public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException
{
- // TODO implement this method
- return;
+ // Read the wrapped value, if it's not null
+ int wrappedLength = in.readInt();
+
+ if ( wrappedLength >= 0 )
+ {
+ wrapped = new byte[wrappedLength];
+
+ if ( wrappedLength > 0 )
+ {
+ in.read( wrapped );
+ }
+ }
+
+ // Read the isNormalized flag
+ normalized = in.readBoolean();
+
+ if ( normalized )
+ {
+ int normalizedLength = in.readInt();
+
+ if ( normalizedLength >= 0 )
+ {
+ normalizedValue = new byte[normalizedLength];
+
+ if ( normalizedLength > 0 )
+ {
+ in.read( normalizedValue );
+ }
+ }
+ }
}
@@ -365,7 +393,45 @@
*/
public void writeExternal( ObjectOutput out ) throws IOException
{
- // TODO Implement this method
+ // Write the wrapped value, if it's not null
+ if ( wrapped != null )
+ {
+ out.writeInt( wrapped.length );
+
+ if ( wrapped.length > 0 )
+ {
+ out.write( wrapped, 0, wrapped.length );
+ }
+ }
+ else
+ {
+ out.writeInt( -1 );
+ }
+
+ // Write the isNormalized flag
+ if ( normalized )
+ {
+ out.writeBoolean( true );
+
+ // Write the normalized value, if not null
+ if ( normalizedValue != null )
+ {
+ out.writeInt( normalizedValue.length );
+
+ if ( normalizedValue.length > 0 )
+ {
+ out.write( normalizedValue, 0, normalizedValue.length );
+ }
+ }
+ else
+ {
+ out.writeInt( -1 );
+ }
+ }
+ else
+ {
+ out.writeBoolean( false );
+ }
}
Added: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java?rev=686082&view=auto
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java (added)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java Thu Aug 14 16:12:09 2008
@@ -0,0 +1,271 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.entry.client;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import javax.naming.directory.DirContext;
+
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
+
+/**
+ * An internal implementation for a ModificationItem. The name has been
+ * chosen so that it does not conflict with @see ModificationItem
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ClientModification implements Modification
+{
+ /** The modification operation */
+ private ModificationOperation operation;
+
+ /** The attribute which contains the modification */
+ private EntryAttribute attribute;
+
+
+ /**
+ *
+ * Creates a new instance of ClientModification.
+ *
+ * @param operation The modification operation
+ * @param attribute The asociated attribute
+ */
+ public ClientModification( ModificationOperation operation, EntryAttribute attribute )
+ {
+ this.operation = operation;
+ this.attribute = attribute;
+ }
+
+
+ /**
+ *
+ * Creates a new instance of ClientModification.
+ */
+ public ClientModification()
+ {
+ }
+
+
+ /**
+ *
+ * Creates a new instance of ClientModification.
+ *
+ * @param operation The modification operation
+ * @param attribute The asociated attribute
+ */
+ public ClientModification( int operation, EntryAttribute attribute )
+ {
+ setOperation( operation );
+ this.attribute = attribute;
+ }
+
+
+ /**
+ * @return the operation
+ */
+ public ModificationOperation getOperation()
+ {
+ return operation;
+ }
+
+
+ /**
+ * Store the modification operation
+ *
+ * @param operation The DirContext value to assign
+ */
+ public void setOperation( int operation )
+ {
+ switch ( operation )
+ {
+ case DirContext.ADD_ATTRIBUTE :
+ this.operation = ModificationOperation.ADD_ATTRIBUTE;
+ break;
+
+ case DirContext.REPLACE_ATTRIBUTE :
+ this.operation = ModificationOperation.REPLACE_ATTRIBUTE;
+ break;
+
+ case DirContext.REMOVE_ATTRIBUTE :
+ this.operation = ModificationOperation.REMOVE_ATTRIBUTE;
+ break;
+ }
+ }
+
+
+ /**
+ * Store the modification operation
+ *
+ * @param operation The DirContext value to assign
+ */
+ public void setOperation( ModificationOperation operation )
+ {
+ this.operation = operation;
+ }
+
+
+ /**
+ * @return the attribute containing the modifications
+ */
+ public EntryAttribute getAttribute()
+ {
+ return attribute;
+ }
+
+
+ /**
+ * Set the attribute's modification
+ *
+ * @param attribute The modified attribute
+ */
+ public void setAttribute( EntryAttribute attribute )
+ {
+ this.attribute = (ClientAttribute)attribute;
+ }
+
+
+ /**
+ * @see Object#equals(Object)
+ * @return <code>true</code> if both values are equal
+ */
+ public boolean equals( Object o )
+ {
+ // Basic equals checks
+ if ( this == o )
+ {
+ return true;
+ }
+
+ if ( o == null )
+ {
+ return false;
+ }
+
+ if ( ! (o instanceof ClientModification ) )
+ {
+ return false;
+ }
+
+ Modification otherModification = (ClientModification)o;
+
+ // Check the operation
+ if ( !operation.equals( otherModification.getOperation() ) )
+ {
+ return false;
+ }
+
+
+ // Check the attribute
+ if ( attribute == null )
+ {
+ return otherModification.getAttribute() == null;
+ }
+
+ return attribute.equals( otherModification.getAttribute() );
+ }
+
+
+ /**
+ * Compute the modification @see Object#hashCode
+ * @return the instance's hash code
+ */
+ public int hashCode()
+ {
+ int h = 37;
+
+ h += h*17 + operation.getValue();
+ h += h*17 + attribute.hashCode();
+
+ return h;
+ }
+
+
+ /**
+ * @see java.io.Externalizable#readExternal(ObjectInput)
+ */
+ public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException
+ {
+ // Read the operation
+ int op = in.readInt();
+
+ operation = ModificationOperation.getOperation( op );
+
+ // Read the attribute
+ attribute = (ClientAttribute)in.readObject();
+ }
+
+
+ /**
+ * @see java.io.Externalizable#writeExternal(ObjectOutput)
+ */
+ public void writeExternal( ObjectOutput out ) throws IOException
+ {
+ // Write the operation
+ out.writeInt( operation.getValue() );
+
+ // Write the attribute
+ out.writeObject( attribute );
+
+ out.flush();
+ }
+
+
+ /**
+ * Clone a modification
+ *
+ * @return a copied instance of the current modification
+ */
+ public ClientModification clone()
+ {
+ try
+ {
+ ClientModification clone = (ClientModification)super.clone();
+
+ clone.attribute = (ClientAttribute)this.attribute.clone();
+ return clone;
+ }
+ catch ( CloneNotSupportedException cnse )
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * @see Object#toString()
+ */
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "Modification: " ).
+ append( operation ).
+ append( "\n" ).
+ append( ", attribute : " ).
+ append( attribute );
+
+ return sb.toString();
+ }
+}