// case B: extensible filter
if ( filter.getFilterComponent() != null
&& filter.getFilterComponent() instanceof LdapFilterExtensibleComponent )
{
LdapFilterExtensibleComponent fc = ( LdapFilterExtensibleComponent ) filter.getFilterComponent();
// case B1: editing extensible attribute type: show matching attribute types
if ( fc.getAttributeToken() != null && fc.getAttributeToken().getOffset() <= offset
&& offset <= fc.getAttributeToken().getOffset() + fc.getAttributeToken().getLength() )
{
addPossibleAttributeTypes( proposalList, fc.getAttributeToken().getValue(), fc.getAttributeToken()
.getOffset() );
}
// case B2: editing dn
if ( fc.getDnAttrToken() != null && fc.getDnAttrToken().getOffset() <= offset
&& offset <= fc.getDnAttrToken().getOffset() + fc.getDnAttrToken().getLength() )
{
addDnAttr( proposalList, fc.getDnAttrToken().getValue(), fc.getDnAttrToken().getOffset() );
}
// case B3: editing matching rule
if ( fc.getMatchingRuleColonToken() != null
&& fc.getMatchingRuleToken() == null
&& fc.getMatchingRuleColonToken().getOffset() <= offset
&& offset <= fc.getMatchingRuleColonToken().getOffset()
+ fc.getMatchingRuleColonToken().getLength() )
{
if ( fc.getDnAttrColonToken() == null )
{
addDnAttr( proposalList, "", offset );
}
addPossibleMatchingRules( proposalList, "", offset, fc.getEqualsColonToken(), fc.getEqualsToken() );
}
if ( fc.getMatchingRuleToken() != null && fc.getMatchingRuleToken().getOffset() <= offset
&& offset <= fc.getMatchingRuleToken().getOffset() + fc.getMatchingRuleToken().getLength() )
{
if ( fc.getDnAttrColonToken() == null )
{
addDnAttr( proposalList, fc.getMatchingRuleToken().getValue(), fc.getMatchingRuleToken()
.getOffset() );
}
String matchingRuleValue = fc.getMatchingRuleToken().getValue();
addPossibleMatchingRules( proposalList, matchingRuleValue, fc.getMatchingRuleToken().getOffset(),
fc.getEqualsColonToken(), fc.getEqualsToken() );
}
}
}
return proposalList.toArray( new ICompletionProposal[0] );