int replacedTextLength = event.getLength();
int insertedTextLength = event.getText() != null ? event.getText().length() : 0;
IDocument document = event.getDocument();
// Region changeRegion = new Region(changeOffset,
// replacedTextLength);
Region changeRegion = new Region( changeOffset - BrowserCoreConstants.LINE_SEPARATOR.length(),
replacedTextLength + ( 2 * BrowserCoreConstants.LINE_SEPARATOR.length() ) );
// get containers to replace (from changeOffset till
// changeOffset+replacedTextLength, check end of record)
List<LdifContainer> oldContainerList = new ArrayList<LdifContainer>();
LdifContainer[] containers = this.ldifModel.getContainers();
for ( int i = 0; i < containers.length; i++ )
{
Region containerRegion = new Region( containers[i].getOffset(), containers[i].getLength() );
boolean changeOffsetAtEOF = i == containers.length - 1
&& changeOffset >= containerRegion.getOffset() + containerRegion.getLength();
if ( TextUtilities.overlaps( containerRegion, changeRegion ) || changeOffsetAtEOF )
{
// remember index
int index = i;
// add invalid containers and non-records before overlap
i--;
for ( ; i >= 0; i-- )
{
if ( !containers[i].isValid() || !( containers[i] instanceof LdifRecord ) )
{
oldContainerList.add( 0, containers[i] );
}
else
{
break;
}
}
// add all overlapping containers
i = index;
for ( ; i < containers.length; i++ )
{
containerRegion = new Region( containers[i].getOffset(), containers[i].getLength() );
if ( TextUtilities.overlaps( containerRegion, changeRegion ) || changeOffsetAtEOF )
{
oldContainerList.add( containers[i] );
}
else