You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2006/11/05 03:18:08 UTC
svn commit: r471330 - in /directory/trunks/apacheds/mitosis/src:
main/java/org/apache/directory/mitosis/configuration/
main/java/org/apache/directory/mitosis/operation/
main/java/org/apache/directory/mitosis/operation/support/
test/java/org/apache/dire...
Author: akarasulu
Date: Sat Nov 4 18:18:07 2006
New Revision: 471330
URL: http://svn.apache.org/viewvc?view=rev&rev=471330
Log:
changes ...
o source formating
o removed use of default constructor new BasicAttributes() replacing it with
new BasicAttributes( true )
o fixed search that use non-normalized filter expression
o removed the use of Name replacing it with LdapDN since LdapDN may not always
implement Name
Modified:
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaIdPropertyEditor.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaPropertyEditor.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfigurationException.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddAttributeOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/DeleteAttributeOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationCodec.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/ReplaceAttributeOperation.java
directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java
directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java
directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaIdPropertyEditor.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaIdPropertyEditor.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaIdPropertyEditor.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaIdPropertyEditor.java Sat Nov 4 18:18:07 2006
@@ -19,11 +19,13 @@
*/
package org.apache.directory.mitosis.configuration;
+
import java.beans.PropertyEditor;
import java.beans.PropertyEditorSupport;
import org.apache.directory.mitosis.common.ReplicaId;
+
/**
* A {@link PropertyEditor} that converts strings into {@link ReplicaId}s
* and vice versa.
@@ -38,15 +40,17 @@
super();
}
+
public ReplicaIdPropertyEditor( Object source )
{
super( source );
}
+
public String getAsText()
{
Object val = getValue();
- if( val == null )
+ if ( val == null )
{
return "";
}
@@ -56,10 +60,11 @@
}
}
+
public void setAsText( String text ) throws IllegalArgumentException
{
text = text.trim();
- if( text.length() == 0 )
+ if ( text.length() == 0 )
{
setValue( null );
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaPropertyEditor.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaPropertyEditor.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaPropertyEditor.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicaPropertyEditor.java Sat Nov 4 18:18:07 2006
@@ -19,11 +19,13 @@
*/
package org.apache.directory.mitosis.configuration;
+
import java.beans.PropertyEditor;
import java.beans.PropertyEditorSupport;
import org.apache.directory.mitosis.common.Replica;
+
/**
* A {@link PropertyEditor} that converts strings into {@link Replica}s
* and vice versa.
@@ -38,26 +40,26 @@
super();
}
+
public ReplicaPropertyEditor( Object source )
{
super( source );
}
+
public String getAsText()
{
Object value = getValue();
- if( value == null )
+ if ( value == null )
{
return "";
}
-
+
Replica replica = ( Replica ) value;
- return replica.getId().toString() +
- '@' +
- replica.getAddress().getAddress().getHostAddress() +
- ':' +
- replica.getAddress().getPort();
+ return replica.getId().toString() + '@' + replica.getAddress().getAddress().getHostAddress() + ':'
+ + replica.getAddress().getPort();
}
+
public void setAsText( String text ) throws IllegalArgumentException
{
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfiguration.java Sat Nov 4 18:18:07 2006
@@ -19,6 +19,7 @@
*/
package org.apache.directory.mitosis.configuration;
+
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
@@ -28,7 +29,6 @@
import java.util.Set;
import java.util.TreeSet;
-import org.apache.commons.collections.set.TypedSet;
import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.Replica;
import org.apache.directory.mitosis.common.ReplicaId;
@@ -38,9 +38,11 @@
import org.apache.directory.mitosis.store.ReplicationStore;
import org.apache.directory.mitosis.store.derby.DerbyReplicationStore;
import org.apache.directory.shared.ldap.util.StringTools;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
public class ReplicationConfiguration
{
/** The logger */
@@ -49,82 +51,96 @@
private ReplicaId replicaId;
private int serverPort = 7846;
private int responseTimeout = 60;
- private final Set peerReplicas = TypedSet.decorate( new HashSet(), Replica.class );
+
+ private final Set<Replica> peerReplicas = new HashSet<Replica>();
+
private UUIDFactory uuidFactory = new SimpleUUIDFactory();
private CSNFactory csnFactory = new SimpleCSNFactory();
private ReplicationStore store = new DerbyReplicationStore();
private int logMaxAge = 7; // a week (days)
+
public ReplicationConfiguration()
{
}
-
+
+
public int getServerPort()
{
return serverPort;
}
+
public void setServerPort( int serverPort )
{
this.serverPort = serverPort;
}
+
public int getResponseTimeout()
{
return responseTimeout;
}
+
public void setResponseTimeout( int responseTimeout )
{
this.responseTimeout = responseTimeout;
}
+
public CSNFactory getCsnFactory()
{
return csnFactory;
}
-
+
+
public void setCsnFactory( CSNFactory csnFactory )
{
this.csnFactory = csnFactory;
}
-
+
+
public void addPeerReplica( Replica peer )
{
assert peer != null;
peerReplicas.add( peer );
}
-
+
+
public void removePeerReplica( Replica peer )
{
assert peer != null;
peerReplicas.remove( peer );
}
-
+
+
public void removeAllPeerReplicas()
{
peerReplicas.clear();
}
-
- public Set getPeerReplicas()
+
+
+ public Set<Replica> getPeerReplicas()
{
- Set result = new HashSet();
+ Set<Replica> result = new HashSet<Replica>();
result.addAll( peerReplicas );
return result;
}
-
+
+
public void setPeerReplicas( Set replicas )
{
assert replicas != null;
-
- Set normalizedReplicas = new HashSet();
+
+ Set<Replica> normalizedReplicas = new HashSet<Replica>();
Iterator i = replicas.iterator();
- while( i.hasNext() )
+ while ( i.hasNext() )
{
Object o = i.next();
- if( o instanceof Replica )
+ if ( o instanceof Replica )
{
- normalizedReplicas.add( o );
+ normalizedReplicas.add( ( Replica ) o );
}
else
{
@@ -134,53 +150,62 @@
this.peerReplicas.clear();
this.peerReplicas.addAll( normalizedReplicas );
}
-
+
+
public ReplicaId getReplicaId()
{
return replicaId;
}
-
+
+
public void setReplicaId( ReplicaId replicaId )
{
assert replicaId != null;
this.replicaId = replicaId;
}
-
+
+
public ReplicationStore getStore()
{
return store;
}
-
+
+
public void setStore( ReplicationStore store )
{
this.store = store;
}
-
+
+
public UUIDFactory getUuidFactory()
{
return uuidFactory;
}
-
+
+
public void setUuidFactory( UUIDFactory uuidFactory )
{
this.uuidFactory = uuidFactory;
}
-
+
+
public int getLogMaxAge()
{
return logMaxAge;
}
-
+
+
public void setLogMaxAge( int logMaxAge )
{
- if( logMaxAge <= 0 )
+ if ( logMaxAge <= 0 )
{
throw new ReplicationConfigurationException( "logMaxAge: " + logMaxAge );
}
-
+
this.logMaxAge = logMaxAge;
}
-
+
+
/**
* Validate Mitosis configuration.
*
@@ -204,92 +229,95 @@
log.error( "The replicaId is missing" );
throw new ReplicationConfigurationException( "Replica ID is not specified." );
}
-
+
if ( serverPort < 0 || serverPort > 65535 )
{
log.error( "The replica port is not between 0 and 65535" );
throw new ReplicationConfigurationException( "Server port is invalid: " + serverPort );
}
-
+
if ( responseTimeout <= 0 )
{
log.error( "The replica responsetimeout is negative" );
throw new ReplicationConfigurationException( "Invalid response timeout: " + responseTimeout );
}
-
- if( uuidFactory == null )
+
+ if ( uuidFactory == null )
{
log.error( "The UUID factory has not been declared" );
throw new ReplicationConfigurationException( "UUID factory is not specified." );
}
-
- if( csnFactory == null )
+
+ if ( csnFactory == null )
{
log.error( "The CSN factory has not been declared" );
throw new ReplicationConfigurationException( "CSN factory is not specified." );
}
-
- if( store == null )
+
+ if ( store == null )
{
log.error( "The store has not been declared" );
throw new ReplicationConfigurationException( "Replication store is not specified." );
}
-
- if( peerReplicas.size() == 0 )
+
+ if ( peerReplicas.size() == 0 )
{
log.error( "The replicas peer list is empty" );
throw new ReplicationConfigurationException( "No peer replicas" );
}
-
+
// Check the peer replicas.
// We should check that no replica has the same Id, and that we don't
// have two replicas on the same server with the same port
- Set ids = new TreeSet();
- Map servers = new HashMap();
-
+ Set<String> ids = new TreeSet<String>();
+ Map<String, Integer> servers = new HashMap<String, Integer>();
+
// Initialize the set with this server replicaId
ids.add( replicaId.getId() );
-
+
// And store the local inetadress
Integer localPort = new Integer( serverPort );
servers.put( "localhost", localPort );
servers.put( "127.0.0.1", localPort );
-
+
try
{
- servers.put( StringTools.lowerCase( InetAddress.getByName( "127.0.0.1" ).getHostName() ) , localPort );
+ servers.put( StringTools.lowerCase( InetAddress.getByName( "127.0.0.1" ).getHostName() ), localPort );
}
catch ( UnknownHostException uhe )
{
// Should never occurs with 127.0.0.1
throw new ReplicationConfigurationException( "Unknown host name" );
}
-
- for ( Iterator peer = peerReplicas.iterator(); peer.hasNext(); )
+
+ for ( Iterator<Replica> peer = peerReplicas.iterator(); peer.hasNext(); )
{
- Replica replica = ( Replica ) peer.next();
-
- if ( ids.contains( replica.getId().getId() ) )
+ Replica replica = peer.next();
+
+ if ( ids.contains( replica.getId().getId() ) )
{
log.error( "Peer replica ID '{}' has already been declared.", replica.getId() );
- throw new ReplicationConfigurationException( "Peer replica ID '" + replica.getId() + "' has already been declared." );
+ throw new ReplicationConfigurationException( "Peer replica ID '" + replica.getId()
+ + "' has already been declared." );
}
-
+
// Now check that we don't already have a replica on a server with the same port
String replicaServer = StringTools.lowerCase( replica.getAddress().getHostName() );
Integer replicaPort = new Integer( replica.getAddress().getPort() );
-
+
if ( servers.containsKey( replicaServer ) )
{
- Integer peerPort = ((Integer)servers.get( replicaServer ) );
-
+ Integer peerPort = ( servers.get( replicaServer ) );
+
if ( replicaPort == peerPort )
{
- log.error( "The replica in the peer list has already been declared on the server {} with the port {}", replicaServer, peerPort );
+ log.error(
+ "The replica in the peer list has already been declared on the server {} with the port {}",
+ replicaServer, peerPort );
throw new ReplicationConfigurationException( "Replication store is not specified." );
}
}
-
+
servers.put( replicaServer, replicaPort );
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfigurationException.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfigurationException.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfigurationException.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/configuration/ReplicationConfigurationException.java Sat Nov 4 18:18:07 2006
@@ -19,8 +19,10 @@
*/
package org.apache.directory.mitosis.configuration;
+
import org.apache.directory.mitosis.common.ReplicationException;
+
public class ReplicationConfigurationException extends ReplicationException
{
/**
@@ -32,20 +34,24 @@
*/
private static final long serialVersionUID = 1L;
+
public ReplicationConfigurationException()
{
super();
}
+
public ReplicationConfigurationException( String message, Throwable cause )
{
super( message, cause );
}
+
public ReplicationConfigurationException( String message )
{
super( message );
}
+
public ReplicationConfigurationException( Throwable cause )
{
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddAttributeOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddAttributeOperation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddAttributeOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddAttributeOperation.java Sat Nov 4 18:18:07 2006
@@ -19,7 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
-import javax.naming.Name;
+
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
@@ -30,6 +30,7 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.mitosis.common.CSN;
+
/**
* An {@link Operation} that adds an attribute to an entry.
*
@@ -39,25 +40,28 @@
{
private static final long serialVersionUID = 7373124294791982297L;
+
/**
* Creates a new operation that adds the specified attribute.
*
* @param attribute an attribute to add
*/
- public AddAttributeOperation( CSN csn, Name name, Attribute attribute )
+ public AddAttributeOperation( CSN csn, LdapDN name, Attribute attribute )
{
super( csn, name, attribute );
}
-
+
+
public String toString()
{
return super.toString() + ".add( " + getAttribute() + " )";
}
+
protected void execute1( PartitionNexus nexus ) throws NamingException
{
- Attributes attrs = new BasicAttributes();
+ Attributes attrs = new BasicAttributes( true );
attrs.put( getAttribute() );
- nexus.modify( (LdapDN)getName(), DirContext.ADD_ATTRIBUTE, attrs );
+ nexus.modify( getName(), DirContext.ADD_ATTRIBUTE, attrs );
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AddEntryOperation.java Sat Nov 4 18:18:07 2006
@@ -19,7 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
-import javax.naming.Name;
+
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
@@ -33,6 +33,7 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.util.NamespaceTools;
+
/**
* An {@link Operation} that adds a new entry.
*
@@ -42,69 +43,71 @@
{
private static final long serialVersionUID = 2294492811671880570L;
- private final Name normalizedName;
+ private final LdapDN normalizedName;
private final Attributes entry;
+
/**
* Creates a new instance.
*
* @param entry an entry
*/
- public AddEntryOperation( CSN csn, Name normalizedName, Attributes entry )
+ public AddEntryOperation( CSN csn, LdapDN normalizedName, Attributes entry )
{
super( csn );
assert normalizedName != null;
assert entry != null;
-
+
this.normalizedName = normalizedName;
this.entry = ( Attributes ) entry.clone();
}
-
+
+
public String toString()
{
return super.toString() + ": [" + normalizedName + "].new( " + entry + " )";
}
+
protected void execute0( PartitionNexus nexus, ReplicationStore store ) throws NamingException
{
- if( !EntryUtil.isEntryUpdatable( nexus, normalizedName, getCSN() ) )
+ if ( !EntryUtil.isEntryUpdatable( nexus, normalizedName, getCSN() ) )
{
return;
}
EntryUtil.createGlueEntries( nexus, normalizedName, false );
-
+
// Replace the entry if an entry with the same name exists.
- Attributes oldEntry = nexus.lookup( (LdapDN)normalizedName );
- if( oldEntry != null )
+ Attributes oldEntry = nexus.lookup( normalizedName );
+ if ( oldEntry != null )
{
// Find the attributes that new entry doesn't have.
Attributes attrsToRemove = ( Attributes ) oldEntry.clone();
NamingEnumeration e = oldEntry.getAll();
- while( e.hasMore() )
+ while ( e.hasMore() )
{
Attribute attr = ( Attribute ) e.next();
String attrID = attr.getID();
- if( entry.get( attrID ) != null )
+ if ( entry.get( attrID ) != null )
{
attrsToRemove.remove( attrID );
}
}
-
+
// Don't let RN attribute be removed
- String rnAttrID = NamespaceTools.getRdnAttribute(
- normalizedName.get( normalizedName.size() - 1 ) );
+ String rnAttrID = NamespaceTools.getRdnAttribute( normalizedName.get( normalizedName.size() - 1 ) );
attrsToRemove.remove( rnAttrID );
-
+
// Delete the attributes.
- nexus.modify( (LdapDN)normalizedName, DirContext.REMOVE_ATTRIBUTE, entry );
+ nexus.modify( normalizedName, DirContext.REMOVE_ATTRIBUTE, entry );
// Remove RN attribute from new entry because it should be the same
// with the old one.
entry.remove( rnAttrID );
// Now replace old entries with the new attributes
- nexus.modify( (LdapDN)normalizedName, DirContext.REPLACE_ATTRIBUTE, entry );
+ nexus.modify( normalizedName, DirContext.REPLACE_ATTRIBUTE, entry );
}
else
{
@@ -113,10 +116,8 @@
// LockableAttributesImpl which doesn't replace old attributes
// when we put a new one.
entry.remove( NamespaceTools.getRdnAttribute( rdn ) );
- entry.put(
- NamespaceTools.getRdnAttribute( rdn ),
- NamespaceTools.getRdnValue( rdn ) );
- nexus.add( (LdapDN)normalizedName, entry );
+ entry.put( NamespaceTools.getRdnAttribute( rdn ), NamespaceTools.getRdnValue( rdn ) );
+ nexus.add( normalizedName, entry );
}
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/AttributeOperation.java Sat Nov 4 18:18:07 2006
@@ -19,15 +19,17 @@
*/
package org.apache.directory.mitosis.operation;
-import javax.naming.Name;
+
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import org.apache.directory.server.core.partition.PartitionNexus;
+import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.operation.support.EntryUtil;
import org.apache.directory.mitosis.store.ReplicationStore;
+
/**
* An {@link Operation} that adds an attribute to an entry.
*
@@ -35,16 +37,17 @@
*/
public abstract class AttributeOperation extends Operation
{
- private final Name name;
+ private final LdapDN name;
private final Attribute attribute;
+
/**
* Create a new operation that affects an entry with the specified name.
*
* @param name the normalized name of an entry
* @param attribute an attribute to modify
*/
- public AttributeOperation( CSN csn, Name name, Attribute attribute )
+ public AttributeOperation( CSN csn, LdapDN name, Attribute attribute )
{
super( csn );
@@ -54,7 +57,8 @@
this.name = name;
this.attribute = ( Attribute ) attribute.clone();
}
-
+
+
/**
* Returns the attribute to modify.
*/
@@ -63,24 +67,27 @@
return ( Attribute ) attribute.clone();
}
+
/**
* Returns the name of an entry this operation will affect.
*/
- public Name getName()
+ public LdapDN getName()
{
- return ( Name ) name.clone();
+ return ( LdapDN ) name.clone();
}
+
protected final void execute0( PartitionNexus nexus, ReplicationStore store ) throws NamingException
{
- if( !EntryUtil.isEntryUpdatable( nexus, name, getCSN() ) )
+ if ( !EntryUtil.isEntryUpdatable( nexus, name, getCSN() ) )
{
return;
}
EntryUtil.createGlueEntries( nexus, name, true );
-
+
execute1( nexus );
}
+
protected abstract void execute1( PartitionNexus nexus ) throws NamingException;
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/CompositeOperation.java Sat Nov 4 18:18:07 2006
@@ -19,6 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
+
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -37,6 +38,7 @@
import org.apache.directory.mitosis.store.ReplicationLogIterator;
import org.apache.directory.mitosis.store.ReplicationStore;
+
/**
* An {@link Operation} that contains other {@link Operation}s.
*
@@ -45,96 +47,131 @@
public class CompositeOperation extends Operation
{
private static final long serialVersionUID = 6252675003841951356L;
-
- private static final ReplicationStore DUMMY_STORE = new ReplicationStore() {
- public void open( DirectoryServiceConfiguration serviceCfg, ReplicationConfiguration cfg) {
+ private static final ReplicationStore DUMMY_STORE = new ReplicationStore()
+ {
+
+ public void open( DirectoryServiceConfiguration serviceCfg, ReplicationConfiguration cfg )
+ {
}
- public void close() {
+
+ public void close()
+ {
}
- public ReplicaId getReplicaId() {
+
+ public ReplicaId getReplicaId()
+ {
return null;
}
- public Set getKnownReplicaIds() {
+
+ public Set getKnownReplicaIds()
+ {
return null;
}
- public Name getDN(UUID uuid) {
+
+ public Name getDN( UUID uuid )
+ {
return null;
}
- public boolean putUUID(UUID uuid, Name dn) {
+
+ public boolean putUUID( UUID uuid, Name dn )
+ {
return false;
}
- public boolean removeUUID(UUID uuid) {
+
+ public boolean removeUUID( UUID uuid )
+ {
return false;
}
- public void putLog(Operation operation) {
+
+ public void putLog( Operation operation )
+ {
}
- public ReplicationLogIterator getLogs(CSN fromCSN, boolean inclusive) {
+
+ public ReplicationLogIterator getLogs( CSN fromCSN, boolean inclusive )
+ {
return null;
}
- public ReplicationLogIterator getLogs(CSNVector updateVector, boolean inclusive) {
+
+ public ReplicationLogIterator getLogs( CSNVector updateVector, boolean inclusive )
+ {
return null;
}
- public int removeLogs(CSN toCSN, boolean inclusive) {
+
+ public int removeLogs( CSN toCSN, boolean inclusive )
+ {
return 0;
}
- public int getLogSize() {
+
+ public int getLogSize()
+ {
return 0;
}
- public int getLogSize(ReplicaId replicaId) {
+
+ public int getLogSize( ReplicaId replicaId )
+ {
return 0;
}
- public CSNVector getUpdateVector() {
+
+ public CSNVector getUpdateVector()
+ {
return null;
}
- public CSNVector getPurgeVector() {
+
+ public CSNVector getPurgeVector()
+ {
return null;
}
};
- private final List children = new ArrayList();
+ private final List<Operation> children = new ArrayList<Operation>();
+
public CompositeOperation( CSN csn )
{
super( csn );
}
-
+
+
public void add( Operation op )
{
assert op != null;
assert op.getCSN().equals( this.getCSN() );
children.add( op );
}
-
+
+
public void clear()
{
children.clear();
}
-
+
+
protected void execute0( PartitionNexus nexus, ReplicationStore store ) throws NamingException
{
- Iterator i = children.iterator();
- while( i.hasNext() )
+ Iterator<Operation> i = children.iterator();
+ while ( i.hasNext() )
{
- Operation op = ( Operation ) i.next();
+ Operation op = i.next();
op.execute( nexus, DUMMY_STORE );
}
}
-
+
+
public String toString()
{
return children.toString();
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/DeleteAttributeOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/DeleteAttributeOperation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/DeleteAttributeOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/DeleteAttributeOperation.java Sat Nov 4 18:18:07 2006
@@ -19,7 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
-import javax.naming.Name;
+
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
@@ -30,6 +30,7 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.mitosis.common.CSN;
+
/**
* An {@link Operation} that deletes an attribute from an entry.
*
@@ -39,25 +40,28 @@
{
private static final long serialVersionUID = -131557844165710365L;
+
/**
* Creates a new operation that deletes the specified attribute.
*
* @param attribute an attribute to delete
*/
- public DeleteAttributeOperation( CSN csn, Name name, Attribute attribute )
+ public DeleteAttributeOperation( CSN csn, LdapDN name, Attribute attribute )
{
super( csn, name, attribute );
}
-
+
+
public String toString()
{
return super.toString() + ".delete( " + getAttribute() + " )";
}
+
protected void execute1( PartitionNexus nexus ) throws NamingException
{
- Attributes attrs = new BasicAttributes();
+ Attributes attrs = new BasicAttributes( true );
attrs.put( getAttribute() );
- nexus.modify( (LdapDN)getName(), DirContext.REMOVE_ATTRIBUTE, attrs );
+ nexus.modify( getName(), DirContext.REMOVE_ATTRIBUTE, attrs );
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/Operation.java Sat Nov 4 18:18:07 2006
@@ -19,6 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
+
import java.io.Serializable;
import javax.naming.NamingException;
@@ -28,6 +29,7 @@
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.store.ReplicationStore;
+
/**
* Represents a small operation on an entry in replicated {@link DirectoryPartition}.
*
@@ -46,7 +48,8 @@
/** The entry CSN */
private CSN csn;
-
+
+
/**
* Creates a new instance of Operation, for the entry which
* csn is given as a parameter.
@@ -58,7 +61,8 @@
assert csn != null;
this.csn = csn;
}
-
+
+
/**
* @return Returns {@link CSN} for this operation.
*/
@@ -66,7 +70,8 @@
{
return csn;
}
-
+
+
/**
* @return the CSN for this operation
*/
@@ -74,19 +79,21 @@
{
return csn.toString();
}
-
+
+
/**
* Exeutes this operation on the specified nexus.
*/
public final void execute( PartitionNexus nexus, ReplicationStore store ) throws NamingException
{
- synchronized( nexus )
+ synchronized ( nexus )
{
execute0( nexus, store );
store.putLog( this );
}
}
-
+
+
protected void execute0( PartitionNexus nexus, ReplicationStore store ) throws NamingException
{
throw new OperationNotSupportedException( nexus.getSuffix().toString() );
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationCodec.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationCodec.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationCodec.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationCodec.java Sat Nov 4 18:18:07 2006
@@ -19,6 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -26,6 +27,7 @@
import java.io.ObjectOutputStream;
import java.io.ObjectStreamConstants;
+
/**
* Encodes {@link Operation}s to <tt>byte[]</tt> and vice versa.
*
@@ -36,7 +38,8 @@
public OperationCodec()
{
}
-
+
+
public byte[] encode( Operation op )
{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
@@ -48,27 +51,27 @@
out.flush();
out.close();
}
- catch( IOException e )
+ catch ( IOException e )
{
throw ( InternalError ) new InternalError().initCause( e );
}
return bout.toByteArray();
}
-
+
+
public Operation decode( byte[] data )
{
ObjectInputStream in;
try
{
- in = new ObjectInputStream(
- new ByteArrayInputStream( data ) );
+ in = new ObjectInputStream( new ByteArrayInputStream( data ) );
return ( Operation ) in.readObject();
}
- catch( IOException e )
+ catch ( IOException e )
{
throw ( InternalError ) new InternalError().initCause( e );
}
- catch( ClassNotFoundException e )
+ catch ( ClassNotFoundException e )
{
throw ( InternalError ) new InternalError().initCause( e );
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/OperationFactory.java Sat Nov 4 18:18:07 2006
@@ -19,9 +19,9 @@
*/
package org.apache.directory.mitosis.operation;
+
import java.util.Map;
-import javax.naming.Name;
import javax.naming.NameAlreadyBoundException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
@@ -46,6 +46,7 @@
import org.apache.directory.mitosis.common.UUIDFactory;
import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
+
/**
* Converts a complex JNDI operations into multiple simple operations.
*
@@ -58,7 +59,8 @@
private final PartitionNexus nexus;
private final UUIDFactory uuidFactory;
private final CSNFactory csnFactory;
-
+
+
public OperationFactory( DirectoryServiceConfiguration serviceCfg, ReplicationConfiguration cfg )
{
this.replicaId = cfg.getReplicaId();
@@ -67,19 +69,21 @@
this.uuidFactory = cfg.getUuidFactory();
this.csnFactory = cfg.getCsnFactory();
}
-
- public Operation newAdd( Name normalizedName, Attributes entry ) throws NamingException
+
+
+ public Operation newAdd( LdapDN normalizedName, Attributes entry ) throws NamingException
{
return newAdd( newCSN(), normalizedName, entry );
}
- private Operation newAdd( CSN csn, Name normalizedName, Attributes entry ) throws NamingException
+
+ private Operation newAdd( CSN csn, LdapDN normalizedName, Attributes entry ) throws NamingException
{
// Check an entry already exists.
checkBeforeAdd( normalizedName );
CompositeOperation result = new CompositeOperation( csn );
-
+
// Insert 'entryUUID' and 'entryDeleted'.
entry = ( Attributes ) entry.clone();
entry.remove( Constants.ENTRY_UUID );
@@ -96,191 +100,164 @@
return result;
}
- public Operation newDelete( Name normalizedName )
+
+ public Operation newDelete( LdapDN normalizedName )
{
CSN csn = newCSN();
CompositeOperation result = new CompositeOperation( csn );
-
+
// Transform into replace operation.
- result.add(
- new ReplaceAttributeOperation(
- csn,
- normalizedName,
- new BasicAttribute( Constants.ENTRY_DELETED, "true" ) ) );
+ result.add( new ReplaceAttributeOperation( csn, normalizedName, new BasicAttribute( Constants.ENTRY_DELETED,
+ "true" ) ) );
return addDefaultOperations( result, csn, normalizedName );
}
-
- public Operation newModify( Name normalizedName, int modOp, Attributes attributes )
+
+
+ public Operation newModify( LdapDN normalizedName, int modOp, Attributes attributes )
{
CSN csn = newCSN();
CompositeOperation result = new CompositeOperation( csn );
NamingEnumeration e = attributes.getAll();
// Transform into multiple {@link AttributeOperation}s.
- while( e.hasMoreElements() )
+ while ( e.hasMoreElements() )
{
Attribute attr = ( Attribute ) e.nextElement();
result.add( newModify( csn, normalizedName, modOp, attr ) );
}
// Resurrect the entry in case it is deleted.
- result.add(
- new ReplaceAttributeOperation(
- csn,
- normalizedName,
- new BasicAttribute( Constants.ENTRY_DELETED, "false" ) ) );
+ result.add( new ReplaceAttributeOperation( csn, normalizedName, new BasicAttribute( Constants.ENTRY_DELETED,
+ "false" ) ) );
return addDefaultOperations( result, null, normalizedName );
}
-
- public Operation newModify( Name normalizedName, ModificationItem[] items )
+
+
+ public Operation newModify( LdapDN normalizedName, ModificationItem[] items )
{
CSN csn = newCSN();
CompositeOperation result = new CompositeOperation( csn );
final int length = items.length;
// Transform into multiple {@link AttributeOperation}s.
- for( int i = 0; i < length; i ++ )
+ for ( int i = 0; i < length; i++ )
{
- ModificationItem item = items[ i ];
- result.add(
- newModify(
- csn,
- normalizedName,
- item.getModificationOp(),
- item.getAttribute() ) );
+ ModificationItem item = items[i];
+ result.add( newModify( csn, normalizedName, item.getModificationOp(), item.getAttribute() ) );
}
// Resurrect the entry in case it is deleted.
- result.add(
- new ReplaceAttributeOperation(
- csn,
- normalizedName,
- new BasicAttribute( Constants.ENTRY_DELETED, "false" ) ) );
+ result.add( new ReplaceAttributeOperation( csn, normalizedName, new BasicAttribute( Constants.ENTRY_DELETED,
+ "false" ) ) );
return addDefaultOperations( result, csn, normalizedName );
}
-
- private Operation newModify( CSN csn, Name normalizedName, int modOp, Attribute attribute )
+
+
+ private Operation newModify( CSN csn, LdapDN normalizedName, int modOp, Attribute attribute )
{
- switch( modOp )
+ switch ( modOp )
{
- case DirContext.ADD_ATTRIBUTE:
- return new AddAttributeOperation(
- csn,
- normalizedName,
- attribute );
- case DirContext.REPLACE_ATTRIBUTE:
- return new ReplaceAttributeOperation(
- csn,
- normalizedName,
- attribute );
- case DirContext.REMOVE_ATTRIBUTE:
- return new DeleteAttributeOperation(
- csn,
- normalizedName,
- attribute );
- default:
- throw new IllegalArgumentException( "Unknown modOp: " + modOp );
+ case DirContext.ADD_ATTRIBUTE:
+ return new AddAttributeOperation( csn, normalizedName, attribute );
+ case DirContext.REPLACE_ATTRIBUTE:
+ return new ReplaceAttributeOperation( csn, normalizedName, attribute );
+ case DirContext.REMOVE_ATTRIBUTE:
+ return new DeleteAttributeOperation( csn, normalizedName, attribute );
+ default:
+ throw new IllegalArgumentException( "Unknown modOp: " + modOp );
}
}
-
- public Operation newModifyRn( Name oldName, String newRdn, boolean deleteOldRn ) throws NamingException
+
+
+ public Operation newModifyRn( LdapDN oldName, String newRdn, boolean deleteOldRn ) throws NamingException
{
- return newMove( oldName, oldName.getSuffix( 1 ), newRdn, deleteOldRn );
+ return newMove( oldName, ( LdapDN ) oldName.getSuffix( 1 ), newRdn, deleteOldRn );
}
-
- public Operation newMove( Name oldName, Name newParentName ) throws NamingException
+
+
+ public Operation newMove( LdapDN oldName, LdapDN newParentName ) throws NamingException
{
return newMove( oldName, newParentName, oldName.get( oldName.size() - 1 ), true );
}
-
- public Operation newMove( Name oldName, Name newParentName, String newRdn, boolean deleteOldRn ) throws NamingException
+
+
+ public Operation newMove( LdapDN oldName, LdapDN newParentName, String newRdn, boolean deleteOldRn )
+ throws NamingException
{
- if( !deleteOldRn )
+ if ( !deleteOldRn )
{
throw new OperationNotSupportedException( "deleteOldRn must be true." );
}
-
+
// Prepare to create composite operations
CSN csn = newCSN();
CompositeOperation result = new CompositeOperation( csn );
// Retrieve all subtree including the base entry
SearchControls ctrl = new SearchControls();
- ctrl.setSearchScope( SearchControls.SUBTREE_SCOPE );
- NamingEnumeration e = nexus.search(
- (LdapDN)oldName, environment, new PresenceNode( "objectClass" ), ctrl );
-
- while( e.hasMore() )
+ ctrl.setSearchScope( SearchControls.SUBTREE_SCOPE );
+ NamingEnumeration e = nexus.search( oldName, environment, new PresenceNode( Constants.OBJECT_CLASS_OID ), ctrl );
+
+ while ( e.hasMore() )
{
SearchResult sr = ( SearchResult ) e.next();
-
+
// Get the name of the old entry
- Name oldEntryName = new LdapDN( sr.getName() );
-
+ LdapDN oldEntryName = new LdapDN( sr.getName() );
+
// Delete the old entry
- result.add(
- new ReplaceAttributeOperation(
- csn,
- oldEntryName,
- new BasicAttribute( Constants.ENTRY_DELETED, "true" ) ) );
+ result.add( new ReplaceAttributeOperation( csn, oldEntryName, new BasicAttribute( Constants.ENTRY_DELETED,
+ "true" ) ) );
// Get the old entry attributes and replace RDN if required
Attributes entry = sr.getAttributes();
- if( oldEntryName.size() == oldName.size() )
+ if ( oldEntryName.size() == oldName.size() )
{
- entry.remove(
- NamespaceTools.getRdnAttribute(
- oldName.get( oldName.size() - 1 ) ) );
- entry.put(
- NamespaceTools.getRdnAttribute( newRdn ),
- NamespaceTools.getRdnValue( newRdn ) );
+ entry.remove( NamespaceTools.getRdnAttribute( oldName.get( oldName.size() - 1 ) ) );
+ entry.put( NamespaceTools.getRdnAttribute( newRdn ), NamespaceTools.getRdnValue( newRdn ) );
}
-
+
// Calculate new name from newParentName, oldEntryName, and newRdn.
- Name newEntryName = ( Name ) newParentName.clone();
+ LdapDN newEntryName = ( LdapDN ) newParentName.clone();
newEntryName.add( newRdn );
- for( int i = oldEntryName.size() - newEntryName.size(); i > 0; i-- )
+ for ( int i = oldEntryName.size() - newEntryName.size(); i > 0; i-- )
{
newEntryName.add( oldEntryName.get( oldEntryName.size() - i ) );
}
-
+
// Add the new entry
- //// FIXME Get UPDN somehow
- result.add( newAdd( csn, newEntryName, entry ) );
-
+ result.add( newAdd( csn, new LdapDN( newEntryName.getUpName() ), entry ) );
+
// Add default operations to the old entry.
// Please note that newAdd() already added default operations
// to the new entry.
addDefaultOperations( result, csn, oldEntryName );
}
-
+
return result;
}
- private void checkBeforeAdd( Name newEntryName ) throws NamingException
+
+ private void checkBeforeAdd( LdapDN newEntryName ) throws NamingException
{
- if( nexus.hasEntry( (LdapDN)newEntryName ) )
+ if ( nexus.hasEntry( newEntryName ) )
{
throw new NameAlreadyBoundException( newEntryName.toString() + " already exists." );
}
}
- private CompositeOperation addDefaultOperations( CompositeOperation result, CSN csn, Name normalizedName )
+
+ private CompositeOperation addDefaultOperations( CompositeOperation result, CSN csn, LdapDN normalizedName )
{
- result.add(
- new ReplaceAttributeOperation(
- csn,
- normalizedName,
- new BasicAttribute(
- Constants.ENTRY_CSN,
- csn.toOctetString()) ) );
+ result.add( new ReplaceAttributeOperation( csn, normalizedName, new BasicAttribute( Constants.ENTRY_CSN, csn
+ .toOctetString() ) ) );
return result;
}
+
private CSN newCSN()
{
return csnFactory.newInstance( replicaId );
}
-
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/ReplaceAttributeOperation.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/ReplaceAttributeOperation.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/ReplaceAttributeOperation.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/ReplaceAttributeOperation.java Sat Nov 4 18:18:07 2006
@@ -19,7 +19,7 @@
*/
package org.apache.directory.mitosis.operation;
-import javax.naming.Name;
+
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
@@ -30,6 +30,7 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.mitosis.common.CSN;
+
/**
* An {@link Operation} that replaces an attribute in an entry.
*
@@ -39,25 +40,28 @@
{
private static final long serialVersionUID = -6573196586521610472L;
+
/**
* Creates a new operation that replaces the specified attribute.
*
* @param attribute an attribute to replace
*/
- public ReplaceAttributeOperation( CSN csn, Name name, Attribute attribute )
+ public ReplaceAttributeOperation( CSN csn, LdapDN name, Attribute attribute )
{
super( csn, name, attribute );
}
+
public String toString()
{
return super.toString() + ".replace( " + getAttribute() + " )";
}
+
protected void execute1( PartitionNexus nexus ) throws NamingException
{
- Attributes attrs = new BasicAttributes();
+ Attributes attrs = new BasicAttributes( true );
attrs.put( getAttribute() );
- nexus.modify( (LdapDN)getName(), DirContext.REPLACE_ATTRIBUTE, attrs );
+ nexus.modify( getName(), DirContext.REPLACE_ATTRIBUTE, attrs );
}
}
Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/operation/support/EntryUtil.java Sat Nov 4 18:18:07 2006
@@ -19,7 +19,7 @@
*/
package org.apache.directory.mitosis.operation.support;
-import javax.naming.Name;
+
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
@@ -34,86 +34,94 @@
import org.apache.directory.mitosis.common.Constants;
import org.apache.directory.mitosis.common.SimpleCSN;
+
public class EntryUtil
{
- public static boolean isEntryUpdatable( PartitionNexus nexus, Name name, CSN newCSN ) throws NamingException
+ @SuppressWarnings("unchecked")
+ public static boolean isEntryUpdatable( PartitionNexus nexus, LdapDN name, CSN newCSN ) throws NamingException
{
- Attributes entry = nexus.lookup( (LdapDN)name );
-
- if( entry == null )
+ Attributes entry = nexus.lookup( name );
+
+ if ( entry == null )
{
return true;
}
-
+
Attribute entryCSNAttr = entry.get( Constants.ENTRY_CSN );
-
- if( entryCSNAttr == null )
+
+ if ( entryCSNAttr == null )
{
return true;
}
else
{
CSN oldCSN = null;
-
+
try
{
oldCSN = new SimpleCSN( String.valueOf( entryCSNAttr.get() ) );
}
- catch( IllegalArgumentException e )
+ catch ( IllegalArgumentException e )
{
return true;
}
-
+
return oldCSN.compareTo( newCSN ) < 0;
}
}
- public static void createGlueEntries( PartitionNexus nexus, Name name, boolean includeLeaf ) throws NamingException
+
+ public static void createGlueEntries( PartitionNexus nexus, LdapDN name, boolean includeLeaf )
+ throws NamingException
{
assert name.size() > 0;
- for( int i = name.size() - 1; i > 0; i -- )
+ for ( int i = name.size() - 1; i > 0; i-- )
{
- createGlueEntry( nexus, name.getSuffix( i ) );
+ createGlueEntry( nexus, ( LdapDN ) name.getSuffix( i ) );
}
-
- if( includeLeaf )
+
+ if ( includeLeaf )
{
createGlueEntry( nexus, name );
}
}
-
- private static void createGlueEntry( PartitionNexus nexus, Name name ) throws NamingException
+
+
+ private static void createGlueEntry( PartitionNexus nexus, LdapDN name ) throws NamingException
{
try
{
- if( nexus.hasEntry( (LdapDN)name ) )
+ if ( nexus.hasEntry( name ) )
{
return;
}
}
- catch( NameNotFoundException e )
+ catch ( NameNotFoundException e )
{
// Skip if there's no backend associated with the name.
return;
}
-
+
// Create a glue entry.
- Attributes entry = new BasicAttributes();
+ Attributes entry = new BasicAttributes( true );
+
//// Add RDN attribute.
String rdn = name.get( name.size() - 1 );
String rdnAttribute = NamespaceTools.getRdnAttribute( rdn );
String rdnValue = NamespaceTools.getRdnValue( rdn );
entry.put( rdnAttribute, rdnValue );
+
//// Add objectClass attribute.
Attribute objectClassAttr = new BasicAttribute( "objectClass" );
objectClassAttr.add( "top" );
objectClassAttr.add( "extensibleObject" );
entry.put( objectClassAttr );
-
+
// And add it to the nexus.
- nexus.add( (LdapDN)name, entry );
+ nexus.add( name, entry );
}
+
private EntryUtil()
{
Modified: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java (original)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java Sat Nov 4 18:18:07 2006
@@ -19,9 +19,9 @@
*/
package org.apache.directory.mitosis.service.protocol.codec;
+
import javax.naming.InvalidNameException;
import javax.naming.directory.BasicAttribute;
-import javax.naming.ldap.LdapName;
import org.apache.directory.mitosis.common.ReplicaId;
import org.apache.directory.mitosis.common.SimpleCSN;
@@ -30,28 +30,31 @@
import org.apache.directory.mitosis.service.protocol.codec.LogEntryMessageEncoder;
import org.apache.directory.mitosis.service.protocol.message.BaseMessage;
import org.apache.directory.mitosis.service.protocol.message.LogEntryMessage;
+import org.apache.directory.shared.ldap.name.LdapDN;
+
-public class LogEntryMessageCodecTest extends AbstractMessageCodecTest {
+public class LogEntryMessageCodecTest extends AbstractMessageCodecTest
+{
- public LogEntryMessageCodecTest() throws InvalidNameException {
+ public LogEntryMessageCodecTest() throws InvalidNameException
+ {
super( new LogEntryMessage( 1234,
- new AddAttributeOperation(
- new SimpleCSN( System.currentTimeMillis(), new ReplicaId( "testReplica0" ), 1234 ),
- new LdapName( "ou=system" ),
- new BasicAttribute( "Hello", "Test" ) ) ),
- new LogEntryMessageEncoder(),
- new LogEntryMessageDecoder() );
+ new AddAttributeOperation(
+ new SimpleCSN( System.currentTimeMillis(), new ReplicaId( "testReplica0" ), 1234 ), new LdapDN(
+ "ou=system" ), new BasicAttribute( "Hello", "Test" ) ) ), new LogEntryMessageEncoder(),
+ new LogEntryMessageDecoder() );
}
- protected boolean compare( BaseMessage expected0, BaseMessage actual0 ) {
+
+ protected boolean compare( BaseMessage expected0, BaseMessage actual0 )
+ {
LogEntryMessage expected = ( LogEntryMessage ) expected0;
LogEntryMessage actual = ( LogEntryMessage ) actual0;
-
+
// We don't compare operation here because it is {@link OperationCodec}'s
// duty to serialize and deserialize Invocations.
- return expected.getType() == actual.getType() &&
- expected.getSequence() == actual.getSequence() &&
- expected.getOperation().getCSN().equals( actual.getOperation().getCSN() ) &&
- expected.getOperation().getClass() == actual.getOperation().getClass();
+ return expected.getType() == actual.getType() && expected.getSequence() == actual.getSequence()
+ && expected.getOperation().getCSN().equals( actual.getOperation().getCSN() )
+ && expected.getOperation().getClass() == actual.getOperation().getClass();
}
}
Modified: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java?view=diff&rev=471330&r1=471329&r2=471330
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java (original)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java Sat Nov 4 18:18:07 2006
@@ -45,6 +45,7 @@
import org.apache.directory.server.core.interceptor.InterceptorChain;
import org.apache.directory.server.core.partition.PartitionNexus;
import org.apache.directory.server.core.schema.global.GlobalRegistries;
+import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.mitosis.common.CSN;
import org.apache.directory.mitosis.common.CSNFactory;
import org.apache.directory.mitosis.common.CSNVector;
@@ -177,20 +178,20 @@
{
CSN csn = csnFactory.newInstance( REPLICA_ID );
CompositeOperation op1 = new CompositeOperation( csn );
- op1.add( new AddEntryOperation( csn, new LdapName( "ou=a" ), new BasicAttributes() ) );
- op1.add( new AddAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
- op1.add( new ReplaceAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
- op1.add( new DeleteAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+ op1.add( new AddEntryOperation( csn, new LdapDN( "ou=a" ), new BasicAttributes( true ) ) );
+ op1.add( new AddAttributeOperation( csn, new LdapDN( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+ op1.add( new ReplaceAttributeOperation( csn, new LdapDN( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+ op1.add( new DeleteAttributeOperation( csn, new LdapDN( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
store.putLog( op1 );
testGetLogs( csn, op1 );
csn = csnFactory.newInstance( OTHER_REPLICA_ID );
CompositeOperation op2 = new CompositeOperation( csn );
- op2.add( new AddEntryOperation( csn, new LdapName( "ou=a" ), new BasicAttributes() ) );
- op2.add( new AddAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
- op2.add( new ReplaceAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
- op2.add( new DeleteAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+ op2.add( new AddEntryOperation( csn, new LdapDN( "ou=a" ), new BasicAttributes( true ) ) );
+ op2.add( new AddAttributeOperation( csn, new LdapDN( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+ op2.add( new ReplaceAttributeOperation( csn, new LdapDN( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+ op2.add( new DeleteAttributeOperation( csn, new LdapDN( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
store.putLog( op2 );
testGetLogs( csn, op2 );
@@ -200,7 +201,7 @@
Assert.assertEquals( 1, store.getLogSize( OTHER_REPLICA_ID ) );
// Test getLogs(CSNVector, true)
- List expected = new ArrayList();
+ List<Operation> expected = new ArrayList<Operation>();
expected.add( op1 );
expected.add( op2 );
CSNVector updateVector = new CSNVector();
@@ -217,22 +218,22 @@
testGetLogs( updateVector, true, expected );
// Test getLogs(CSNVector, false)
- expected = new ArrayList();
+ expected = new ArrayList<Operation>();
expected.add( op1 );
expected.add( op2 );
updateVector = new CSNVector();
testGetLogs( updateVector, false, expected );
- expected = new ArrayList();
+ expected = new ArrayList<Operation>();
expected.add( op2 );
updateVector = new CSNVector();
updateVector.setCSN( op1.getCSN() );
testGetLogs( updateVector, false, expected );
- expected = new ArrayList();
+ expected = new ArrayList<Operation>();
expected.add( op1 );
updateVector = new CSNVector();
updateVector.setCSN( op2.getCSN() );
testGetLogs( updateVector, false, expected );
- expected = new ArrayList();
+ expected = new ArrayList<Operation>();
updateVector = new CSNVector();
updateVector.setCSN( op1.getCSN() );
updateVector.setCSN( op2.getCSN() );
@@ -276,7 +277,7 @@
store.putLog( new Operation( csnC ) );
store.putLog( new Operation( csnD ) );
- Set expectedKnownReplicaIds = new HashSet();
+ Set<ReplicaId> expectedKnownReplicaIds = new HashSet<ReplicaId>();
expectedKnownReplicaIds.add( REPLICA_ID );
expectedKnownReplicaIds.add( OTHER_REPLICA_ID );
expectedKnownReplicaIds.add( OTHER_REPLICA_ID_2 );
@@ -298,7 +299,7 @@
private void testGetLogs( CSN csn, Operation operation )
{
- List operations = new ArrayList();
+ List<Operation> operations = new ArrayList<Operation>();
operations.add( operation );
testGetLogs( csn, operations );
}