String s = document.get( partition.getOffset(), partition.getLength() );
LdifFile model = parser.parse( s );
LdifContainer container = LdifFile.getContainer( model, relativePos );
if ( container != null )
{
LdifPart part = LdifFile.getContainerContent( container, relativePos );
if ( part != null && !( part instanceof LdifSepLine ) && !( part instanceof LdifInvalidPart )
&& !( part instanceof LdifEOFPart ) )
{
// calculate selected range
int[] range = null;
if ( part instanceof LdifValueLineBase )
{
LdifValueLineBase line = ( LdifValueLineBase ) part;
range = getRange( relativePos, part.getOffset(), new String[]
{ line.getRawLineStart(), line.getRawValueType(), line.getRawValue() } );
}
else if ( part instanceof LdifLineBase )
{
LdifLineBase line = ( LdifLineBase ) part;
range = new int[]
{ part.getOffset(), part.getLength() - line.getRawNewLine().length() };
}
// set range on viewer, add global offset
int start = range != null ? range[OFFSET] : part.getOffset();
start += offset;
int length = range != null ? range[LENGTH] : part.getLength();
viewer.setSelectedRange( start, length );
}
else
{
// use default double click strategy