* @param aep the auto edit parameters
*/
public void customizeAutoEditParameters( String currentFilter, AutoEditParameters aep )
{
parser.parse( currentFilter );
LdapFilter filter = parser.getModel().getFilter( aep.offset );
if ( filter == null )
{
return;
}
// check balanced parenthesis
int balanced = 0;
for ( int i = 0; i < currentFilter.length(); i++ )
{
if ( currentFilter.charAt( i ) == '(' )
{
balanced++;
}
else if ( currentFilter.charAt( i ) == ')' )
{
balanced--;
}
}
if ( aep.length > 0 && ( aep.text == null || "".equals( aep.text ) ) )
{
// delete surrounding parenthesis after deleting the last character
if ( filter.toString().length() - aep.length == 2
&& filter.getStartToken() != null
&& filter.getStopToken() != null
&& aep.offset >= filter.getStartToken().getOffset() + filter.getStartToken().getLength()
&& aep.offset + aep.length <= filter.getStopToken().getOffset() )
{
if ( filter.toString().length() - aep.length == 2 )
{
aep.offset -= 1;
aep.length += 2;
aep.caretOffset = aep.offset;
aep.shiftsCaret = false;
}
}
// delete closing parenthesis after deleting the opening parenthesis
if ( filter.toString().length() - aep.length == 1
&& filter.getStartToken() != null
&& filter.getStopToken() != null
&& aep.offset == filter.getStartToken().getOffset() )
{
aep.length += 1;
aep.caretOffset = aep.offset;
aep.shiftsCaret = false;
}
}
if ( (aep.length == 0 || aep.length==currentFilter.length()) && aep.text != null && !"".equals( aep.text ) )
{
boolean isNewFilter = aep.text.equals( "(" );
boolean isNewNestedFilter = aep.text.equals( "&" ) || aep.text.equals( "|" ) || aep.text.equals( "!" );
boolean isSurroundNew = false;
boolean isSurroundNested = false;
boolean isSurroundBeforeOtherFilter = false;
boolean isSurroundAfterOtherFilter = false;
if( !Character.isWhitespace( aep.text.charAt( 0 ) ) && !aep.text.startsWith( "(" ) && !aep.text.endsWith( ")" ) )
{
// isSurroundNew
isSurroundNew = aep.offset == 0;
// isSurroundNested
if ( filter.getStartToken() != null
&& filter.getFilterComponent() != null
&& ( filter.getFilterComponent() instanceof LdapAndFilterComponent
|| filter.getFilterComponent() instanceof LdapOrFilterComponent || filter.getFilterComponent() instanceof LdapNotFilterComponent ) )
{
LdapFilterComponent fc = filter.getFilterComponent();
LdapFilter[] filters = fc.getFilters();
if ( filters.length == 0 && aep.offset > fc.getStartToken().getOffset() )
{
// no nested filter yet
isSurroundNested = true;
}
if ( filters.length > 0 && aep.offset > fc.getStartToken().getOffset()
&& aep.offset < filters[0].getStartToken().getOffset() )
{
// before first nested filter
isSurroundNested = true;
}
if ( filters.length > 0 && aep.offset > filters[filters.length - 1].getStopToken().getOffset()
&& aep.offset <= filter.getStopToken().getOffset() )
{
// after last nested filter
isSurroundNested = true;
}
for ( int i = 0; i < filters.length; i++ )
{
if ( filters.length > i + 1 )
{
if ( aep.offset > filters[i].getStopToken().getOffset()
&& aep.offset <= filters[i + 1].getStopToken().getOffset() )
{
// between nested filter
isSurroundNested = true;
}
}
}
}
// isSurroundBeforeOtherFilter
isSurroundBeforeOtherFilter = filter.getStartToken() != null
&& aep.offset == filter.getStartToken().getOffset();
// isSurroundAfterOtherFilter
isSurroundAfterOtherFilter = filter.getStopToken() != null
&& aep.offset == filter.getStopToken().getOffset()
&& ( filter.getFilterComponent() instanceof LdapAndFilterComponent
|| filter.getFilterComponent() instanceof LdapOrFilterComponent || filter.getFilterComponent() instanceof LdapNotFilterComponent );
}
//System.out.println("isSurroundNew="+isSurroundNew+", isSurroundNested="+isSurroundNested+", isSurroundAfterOtherFilter="+isSurroundAfterOtherFilter+", isSurroundBeforeOtherFilter="+isSurroundBeforeOtherFilter);
// add opening parenthesis '('