void modify( IValue oldValue, IValue newValue, ExtendedProgressMonitor monitor )
{
try
{
LdifChangeModifyRecord cmr = new LdifChangeModifyRecord( LdifDnLine.create( oldValue.getAttribute()
.getEntry().getDn().toString() ) );
ModelConverter.addControls( cmr, oldValue.getAttribute().getEntry() );
cmr.setChangeType( LdifChangeTypeLine.createModify() );
if ( oldValue.getAttribute().getValueSize() == 1 )
{
LdifModSpec modSpec = LdifModSpec.createReplace( oldValue.getAttribute().getDescription() );
if ( newValue.isString() )
{
modSpec.addAttrVal( LdifAttrValLine.create( oldValue.getAttribute().getDescription(), newValue
.getStringValue() ) );
}
else
{
modSpec.addAttrVal( LdifAttrValLine.create( oldValue.getAttribute().getDescription(), newValue
.getBinaryValue() ) );
}
modSpec.finish( LdifModSpecSepLine.create() );
cmr.addModSpec( modSpec );
cmr.finish( LdifSepLine.create() );
}
else
{
LdifModSpec modSpec1 = LdifModSpec.createAdd( oldValue.getAttribute().getDescription() );
if ( newValue.isString() )
{
modSpec1.addAttrVal( LdifAttrValLine.create( oldValue.getAttribute().getDescription(), newValue
.getStringValue() ) );
}
else
{
modSpec1.addAttrVal( LdifAttrValLine.create( oldValue.getAttribute().getDescription(), newValue
.getBinaryValue() ) );
}
modSpec1.finish( LdifModSpecSepLine.create() );
cmr.addModSpec( modSpec1 );
LdifModSpec modSpec2 = LdifModSpec.createDelete( oldValue.getAttribute().getDescription() );
if ( oldValue.isString() )
{
modSpec2.addAttrVal( LdifAttrValLine.create( oldValue.getAttribute().getDescription(), oldValue
.getStringValue() ) );
}
else
{
modSpec2.addAttrVal( LdifAttrValLine.create( oldValue.getAttribute().getDescription(), oldValue
.getBinaryValue() ) );
}
modSpec2.finish( LdifModSpecSepLine.create() );
cmr.addModSpec( modSpec2 );
cmr.finish( LdifSepLine.create() );
}
this.applyModificationAndLog( cmr, monitor );
}