LdifRecord record = ( LdifRecord ) container;
LdifPart[] parts = record.getParts();
if ( parts.length > 1 && ( !( parts[1] instanceof LdifChangeTypeLine ) || !parts[1].isValid() ) )
{
if ( CT_ADD.startsWith( prefix ) )
proposalList.add( new CompletionProposal( CT_ADD, offset - prefix.length(), prefix.length(), CT_ADD
.length(), LdifEditorActivator.getDefault().getImage( LdifEditorConstants.IMG_LDIF_ADD ),
CT_ADD.substring( 0, CT_ADD.length() - BrowserCoreConstants.LINE_SEPARATOR.length() ), null,
null ) );
if ( CT_MODIFY.startsWith( prefix ) )
proposalList.add( new CompletionProposal( CT_MODIFY, offset - prefix.length(), prefix.length(),
CT_MODIFY.length(), LdifEditorActivator.getDefault().getImage(
LdifEditorConstants.IMG_LDIF_MODIFY ), CT_MODIFY.substring( 0, CT_MODIFY.length()
- BrowserCoreConstants.LINE_SEPARATOR.length() ), null, null ) );
if ( CT_DELETE.startsWith( prefix ) )
proposalList.add( new CompletionProposal( CT_DELETE, offset - prefix.length(), prefix.length(),
CT_DELETE.length(), LdifEditorActivator.getDefault().getImage(
LdifEditorConstants.IMG_LDIF_DELETE ), CT_DELETE.substring( 0, CT_DELETE.length()
- BrowserCoreConstants.LINE_SEPARATOR.length() ), null, null ) );
if ( CT_MODDN.startsWith( prefix ) )
proposalList.add( new CompletionProposal( CT_MODDN, offset - prefix.length(), prefix.length(),
CT_MODDN.length(), LdifEditorActivator.getDefault().getImage(
LdifEditorConstants.IMG_LDIF_RENAME ), CT_MODDN.substring( 0, CT_MODDN.length()
- BrowserCoreConstants.LINE_SEPARATOR.length() ), null, null ) );
}
}
// changetype: modify
if ( container instanceof LdifChangeModDnRecord )
{
LdifChangeModDnRecord record = ( LdifChangeModDnRecord ) container;
if ( ( record.getNewrdnLine() == null || !record.getNewrdnLine().isValid() )
&& MD_NEWRDN.startsWith( prefix ) )
{
proposalList.add( new CompletionProposal( MD_NEWRDN, offset - prefix.length(), prefix.length(),
MD_NEWRDN.length(), null, null, null, null ) );
}
if ( ( record.getDeloldrdnLine() == null || !record.getDeloldrdnLine().isValid() )
&& MD_DELETEOLDRDN_TRUE.startsWith( prefix ) )
{
proposalList.add( new CompletionProposal( MD_DELETEOLDRDN_TRUE, offset - prefix.length(), prefix
.length(), MD_DELETEOLDRDN_TRUE.length(), null, null, null, null ) );
}
if ( ( record.getNewsuperiorLine() == null || !record.getNewsuperiorLine().isValid() )
&& MD_NEWSUPERIOR.startsWith( prefix ) )
{
proposalList.add( new CompletionProposal( MD_NEWSUPERIOR, offset - prefix.length(), prefix.length(),
MD_NEWSUPERIOR.length(), null, null, null, null ) );
}
}
// modspecs
if ( innerContainer instanceof LdifModSpec )
{
LdifModSpec modSpec = ( LdifModSpec ) innerContainer;
String att = modSpec.getModSpecType().getRawAttributeDescription();
if ( att != null && att.startsWith( prefix ) )
{
proposalList.add( new CompletionProposal( att, offset - prefix.length(), prefix.length(), att.length(),
null, null, null, null ) );
}
}
// attribute descriptions
if ( container instanceof LdifContentRecord || container instanceof LdifChangeAddRecord )
{
if ( part instanceof LdifInvalidPart
|| part instanceof LdifAttrValLine
|| ( part instanceof LdifSepLine && ( container instanceof LdifContentRecord || container instanceof LdifChangeAddRecord ) ) )
{
String rawAttributeDescription = prefix;
String rawValueType = ""; //$NON-NLS-1$
if ( part instanceof LdifAttrValLine )
{
LdifAttrValLine line = ( LdifAttrValLine ) part;
rawAttributeDescription = line.getRawAttributeDescription();
rawValueType = line.getRawValueType();
}
if ( offset <= part.getOffset() + rawAttributeDescription.length() )
{
Schema schema = editor.getConnection() != null ? editor.getConnection().getSchema()
: Schema.DEFAULT_SCHEMA;
String[] attributeNames = SchemaUtils.getNamesAsArray( schema.getAttributeTypeDescriptions() );
Arrays.sort( attributeNames );
for ( String attributeName : attributeNames )
{
if ( rawAttributeDescription.length() == 0
|| attributeName.toLowerCase().startsWith( rawAttributeDescription.toLowerCase() ) )
{
String proposal = attributeName;
if ( rawValueType.length() == 0 )
{
if ( SchemaUtils.isBinary( schema.getAttributeTypeDescription( proposal ), schema ) )
{
proposal += ":: "; //$NON-NLS-1$
}
else
{
proposal += ": "; //$NON-NLS-1$
}
}
proposalList
.add( new CompletionProposal( proposal, offset - rawAttributeDescription.length(),
rawAttributeDescription.length(), proposal.length() ) );
}
}
}
}
}
// comment
boolean commentOnly = false;
if ( documentLineOffset == offset )
{
commentOnly = proposalList.isEmpty();
proposalList.add( new CompletionProposal( "# ", offset, 0, 2, LdifEditorActivator.getDefault().getImage( //$NON-NLS-1$
LdifEditorConstants.IMG_LDIF_COMMENT ), "# - Comment", null, null ) ); //$NON-NLS-1$
}
// adjust auto-insert
this.contentAssistant.enableAutoInsert( !commentOnly );