}
// copy attributes
for ( int i = 0; i < attributesToCopy.length; i++ )
{
IAttribute attributeToCopy = attributesToCopy[i];
if ( SchemaUtils.isModifyable( attributeToCopy.getAttributeTypeDescription() )
|| IAttribute.REFERRAL_ATTRIBUTE.equalsIgnoreCase( attributeToCopy.getDescription() ) )
{
IAttribute newAttribute = new Attribute( newEntry, attributeToCopy.getDescription() );
newEntry.addAttribute( newAttribute );
IValue[] valuesToCopy = attributeToCopy.getValues();
for ( int j = 0; j < valuesToCopy.length; j++ )
{
IValue valueToCopy = valuesToCopy[j];
IValue newValue = new Value( newAttribute, valueToCopy.getRawValue() );
newAttribute.addValue( newValue );
}
}
}
// check if RDN attributes ar present
RDN newRdn = newEntry.getRdn();
RDNPart[] oldRdnParts = rdn.getParts();
for ( int i = 0; i < oldRdnParts.length; i++ )
{
RDNPart part = oldRdnParts[i];
IAttribute rdnAttribute = newEntry.getAttribute( part.getType() );
if ( rdnAttribute != null )
{
IValue[] values = rdnAttribute.getValues();
for ( int ii = 0; ii < values.length; ii++ )
{
if ( part.getUnencodedValue().equals( values[ii].getRawValue() ) )
{
rdnAttribute.deleteValue( values[ii] );
}
if ( rdnAttribute.getValueSize() == 0 )
{
newEntry.deleteAttribute( rdnAttribute );
}
}
}
}
RDNPart[] newRdnParts = newRdn.getParts();
for ( int i = 0; i < newRdnParts.length; i++ )
{
RDNPart part = newRdnParts[i];
IAttribute rdnAttribute = newEntry.getAttribute( part.getType() );
if ( rdnAttribute == null )
{
rdnAttribute = new Attribute( newEntry, part.getType() );
newEntry.addAttribute( rdnAttribute );
rdnAttribute.addValue( new Value( rdnAttribute, part.getUnencodedValue() ) );
}
else
{
boolean mustAdd = true;
IValue[] values = rdnAttribute.getValues();
for ( int ii = 0; ii < values.length; ii++ )
{
if ( part.getUnencodedValue().equals( values[ii].getStringValue() ) )
{
mustAdd = false;
break;
}
}
if ( mustAdd )
{
rdnAttribute.addValue( new Value( rdnAttribute, part.getUnencodedValue() ) );
}
}
}
newEntry.getConnection().create( newEntry, monitor );