blob: f47952bef84a7b4fed11f7210ce7ffe58cb3a74c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.studio.ldapbrowser.common.widgets.search;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.directory.api.ldap.model.constants.SchemaConstants;
import org.apache.directory.api.ldap.model.message.Control;
import org.apache.directory.api.ldap.model.message.SearchScope;
import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
import org.apache.directory.api.ldap.model.message.controls.PagedResults;
import org.apache.directory.api.ldap.model.message.controls.PagedResultsImpl;
import org.apache.directory.api.ldap.model.message.controls.Subentries;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.studio.common.ui.widgets.AbstractWidget;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyEvent;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyListener;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.Controls;
import org.apache.directory.studio.ldapbrowser.core.jobs.SearchRunnable;
import org.apache.directory.studio.ldapbrowser.core.jobs.StudioBrowserJob;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.ldapbrowser.core.model.ISearch;
import org.apache.directory.studio.ldapbrowser.core.model.schema.SchemaUtils;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* The SearchPageWrapper is used to arrange all input elements of a
* search page. It is used by the search page, the search properties page,
* the batch operation wizard and the export wizards.
*
* The style is used to specify the invisible and readonly elements.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class SearchPageWrapper extends AbstractWidget
{
/** The default style */
public static final int NONE = 0;
/** Style for invisible name field */
public static final int NAME_INVISIBLE = 1 << 1;
/** Style for read-only name field */
public static final int NAME_READONLY = 1 << 2;
/** Style for invisible connection field */
public static final int CONNECTION_INVISIBLE = 1 << 3;
/** Style for read-only connection field */
public static final int CONNECTION_READONLY = 1 << 4;
/** Style for invisible search base field */
public static final int SEARCHBASE_INVISIBLE = 1 << 5;
/** Style for read-only search base field */
public static final int SEARCHBASE_READONLY = 1 << 6;
/** Style for invisible filter field */
public static final int FILTER_INVISIBLE = 1 << 7;
/** Style for read-only filter field */
public static final int FILTER_READONLY = 1 << 8;
/** Style for invisible returning attributes field */
public static final int RETURNINGATTRIBUTES_INVISIBLE = 1 << 9;
/** Style for read-only returning attributes field */
public static final int RETURNINGATTRIBUTES_READONLY = 1 << 10;
/** Style for visible return Dn checkbox */
public static final int RETURN_DN_VISIBLE = 1 << 11;
/** Style for checked return Dn checkbox */
public static final int RETURN_DN_CHECKED = 1 << 12;
/** Style for visible return all attributes checkbox */
public static final int RETURN_ALLATTRIBUTES_VISIBLE = 1 << 13;
/** Style for checked return all attributes checkbox */
public static final int RETURN_ALLATTRIBUTES_CHECKED = 1 << 14;
/** Style for visible return operational attributes checkbox */
public static final int RETURN_OPERATIONALATTRIBUTES_VISIBLE = 1 << 15;
/** Style for checked return operational attributes checkbox */
public static final int RETURN_OPERATIONALATTRIBUTES_CHECKED = 1 << 16;
/** Style for invisible options */
public static final int OPTIONS_INVISIBLE = 1 << 21;
/** Style for read-only scope options */
public static final int SCOPEOPTIONS_READONLY = 1 << 22;
/** Style for read-only limit options */
public static final int LIMITOPTIONS_READONLY = 1 << 23;
/** Style for read-only alias options */
public static final int ALIASOPTIONS_READONLY = 1 << 24;
/** Style for read-only referrals options */
public static final int REFERRALOPTIONS_READONLY = 1 << 25;
/** Style for invisible follow referrals manually*/
public static final int REFERRALOPTIONS_FOLLOW_MANUAL_INVISIBLE = 1 << 26;
/** Style for invisible controls fields */
public static final int CONTROLS_INVISIBLE = 1 << 30;
/** The style. */
protected int style;
/** The search name label. */
protected Label searchNameLabel;
/** The search name text. */
protected Text searchNameText;
/** The connection label. */
protected Label connectionLabel;
/** The browser connection widget. */
protected BrowserConnectionWidget browserConnectionWidget;
/** The search base label. */
protected Label searchBaseLabel;
/** The search base widget. */
protected EntryWidget searchBaseWidget;
/** The filter label. */
protected Label filterLabel;
/** The filter widget. */
protected FilterWidget filterWidget;
/** The returning attributes label. */
protected Label returningAttributesLabel;
/** The returning attributes widget. */
protected ReturningAttributesWidget returningAttributesWidget;
/** The return dn button. */
protected Button returnDnButton;
/** The return all attributes button. */
protected Button returnAllAttributesButton;
/** The return operational attributes button. */
protected Button returnOperationalAttributesButton;
/** The scope widget. */
protected ScopeWidget scopeWidget;
/** The limit widget. */
protected LimitWidget limitWidget;
/** The aliases dereferencing widget. */
protected AliasesDereferencingWidget aliasesDereferencingWidget;
/** The referrals handling widget. */
protected ReferralsHandlingWidget referralsHandlingWidget;
/** The control group. */
protected Group controlGroup;
/** The ManageDsaIT control button. */
protected Button manageDsaItControlButton;
/** The subentries control button. */
protected Button subentriesControlButton;
/** The paged search control button. */
protected Button pagedSearchControlButton;
/** The paged search control size label. */
protected Label pagedSearchControlSizeLabel;
/** The paged search control size text. */
protected Text pagedSearchControlSizeText;
/** The paged search control scroll button. */
protected Button pagedSearchControlScrollButton;
/**
* Creates a new instance of SearchPageWrapper.
*
* @param style the style
*/
public SearchPageWrapper( int style )
{
this.style = style;
}
/**
* Creates the contents.
*
* @param composite the composite
*/
public void createContents( final Composite composite )
{
// Search Name
createSearchNameLine( composite );
// Connection
createConnectionLine( composite );
// Search Base
createSearchBaseLine( composite );
// Filter
createFilterLine( composite );
// Returning Attributes
createReturningAttributesLine( composite );
// control
createControlComposite( composite );
// scope, limit, alias, referral
createOptionsComposite( composite );
}
/**
* Checks if the given style is active.
*
* @param requiredStyle the required style to check
*
* @return true, if the required style is active
*/
protected boolean isActive( int requiredStyle )
{
return ( style & requiredStyle ) != 0;
}
/**
* Creates the search name line.
*
* @param composite the composite
*/
protected void createSearchNameLine( final Composite composite )
{
if ( isActive( NAME_INVISIBLE ) )
{
return;
}
searchNameLabel = BaseWidgetUtils.createLabel( composite,
Messages.getString( "SearchPageWrapper.SearchName" ), 1 ); //$NON-NLS-1$
if ( isActive( NAME_READONLY ) )
{
searchNameText = BaseWidgetUtils.createReadonlyText( composite, "", 2 ); //$NON-NLS-1$
}
else
{
searchNameText = BaseWidgetUtils.createText( composite, "", 2 ); //$NON-NLS-1$
}
searchNameText.addModifyListener( new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
validate();
}
} );
searchNameText.setFocus();
BaseWidgetUtils.createSpacer( composite, 3 );
}
/**
* Creates the connection line.
*
* @param composite the composite
*/
protected void createConnectionLine( final Composite composite )
{
if ( isActive( CONNECTION_INVISIBLE ) )
{
return;
}
connectionLabel = BaseWidgetUtils.createLabel( composite,
Messages.getString( "SearchPageWrapper.Connection" ), 1 ); //$NON-NLS-1$
browserConnectionWidget = new BrowserConnectionWidget();
browserConnectionWidget.createWidget( composite );
browserConnectionWidget.setEnabled( !isActive( CONNECTION_READONLY ) );
browserConnectionWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
BaseWidgetUtils.createSpacer( composite, 3 );
}
/**
* Creates the search base line.
*
* @param composite the composite
*/
protected void createSearchBaseLine( final Composite composite )
{
if ( isActive( SEARCHBASE_INVISIBLE ) )
{
return;
}
searchBaseLabel = BaseWidgetUtils.createLabel( composite,
Messages.getString( "SearchPageWrapper.SearchBase" ), 1 ); //$NON-NLS-1$
searchBaseWidget = new EntryWidget();
searchBaseWidget.createWidget( composite );
searchBaseWidget.setEnabled( !isActive( SEARCHBASE_READONLY ) );
searchBaseWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
BaseWidgetUtils.createSpacer( composite, 3 );
}
/**
* Creates the filter line.
*
* @param composite the composite
*/
protected void createFilterLine( final Composite composite )
{
if ( isActive( FILTER_INVISIBLE ) )
{
return;
}
filterLabel = BaseWidgetUtils.createLabel( composite, Messages.getString( "SearchPageWrapper.Filter" ), 1 ); //$NON-NLS-1$
filterWidget = new FilterWidget();
filterWidget.createWidget( composite );
filterWidget.setEnabled( !isActive( FILTER_READONLY ) );
filterWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
BaseWidgetUtils.createSpacer( composite, 3 );
}
/**
* Creates the returning attributes line.
*
* @param composite the composite
*/
protected void createReturningAttributesLine( final Composite composite )
{
if ( isActive( RETURNINGATTRIBUTES_INVISIBLE ) )
{
return;
}
BaseWidgetUtils.createLabel( composite, Messages.getString( "SearchPageWrapper.ReturningAttributes" ), 1 ); //$NON-NLS-1$
Composite retComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 2 );
returningAttributesWidget = new ReturningAttributesWidget();
returningAttributesWidget.createWidget( retComposite );
returningAttributesWidget.setEnabled( !isActive( RETURNINGATTRIBUTES_READONLY ) );
returningAttributesWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
// special returning attributes options
if ( isActive( RETURN_DN_VISIBLE ) || isActive( RETURN_ALLATTRIBUTES_VISIBLE )
|| isActive( RETURN_OPERATIONALATTRIBUTES_VISIBLE ) )
{
BaseWidgetUtils.createSpacer( composite, 1 );
Composite buttonComposite = BaseWidgetUtils.createColumnContainer( composite, 3, 2 );
if ( isActive( RETURN_DN_VISIBLE ) )
{
returnDnButton = BaseWidgetUtils.createCheckbox( buttonComposite, Messages
.getString( "SearchPageWrapper.ExportDN" ), 1 ); //$NON-NLS-1$
returnDnButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
returnDnButton.setSelection( isActive( RETURN_DN_CHECKED ) );
}
if ( isActive( RETURN_ALLATTRIBUTES_VISIBLE ) )
{
returnAllAttributesButton = BaseWidgetUtils.createCheckbox( buttonComposite, Messages
.getString( "SearchPageWrapper.AllUserAttributes" ), 1 ); //$NON-NLS-1$
returnAllAttributesButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
returnAllAttributesButton.setSelection( isActive( RETURN_ALLATTRIBUTES_CHECKED ) );
}
if ( isActive( RETURN_OPERATIONALATTRIBUTES_VISIBLE ) )
{
returnOperationalAttributesButton = BaseWidgetUtils.createCheckbox( buttonComposite, Messages
.getString( "SearchPageWrapper.OperationalAttributes" ), 1 ); //$NON-NLS-1$
returnOperationalAttributesButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
returnOperationalAttributesButton.setSelection( isActive( RETURN_OPERATIONALATTRIBUTES_CHECKED ) );
}
}
BaseWidgetUtils.createSpacer( composite, 3 );
}
/**
* Creates the options composite, this includes the
* scope, limit, alias and referral widgets.
*
* @param composite the composite
*/
protected void createOptionsComposite( final Composite composite )
{
if ( isActive( OPTIONS_INVISIBLE ) )
{
return;
}
Composite optionsComposite = BaseWidgetUtils.createColumnContainer( composite, 2, 3 );
scopeWidget = new ScopeWidget();
scopeWidget.createWidget( optionsComposite );
scopeWidget.setEnabled( !isActive( SCOPEOPTIONS_READONLY ) );
scopeWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
limitWidget = new LimitWidget();
limitWidget.createWidget( optionsComposite );
limitWidget.setEnabled( !isActive( LIMITOPTIONS_READONLY ) );
limitWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
aliasesDereferencingWidget = new AliasesDereferencingWidget();
aliasesDereferencingWidget.createWidget( optionsComposite );
aliasesDereferencingWidget.setEnabled( !isActive( ALIASOPTIONS_READONLY ) );
aliasesDereferencingWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
referralsHandlingWidget = new ReferralsHandlingWidget();
referralsHandlingWidget.createWidget( optionsComposite, !isActive( REFERRALOPTIONS_FOLLOW_MANUAL_INVISIBLE ) );
referralsHandlingWidget.setEnabled( !isActive( REFERRALOPTIONS_READONLY ) );
referralsHandlingWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
validate();
}
} );
}
/**
* Creates the control composite.
*
* @param composite the composite
*/
protected void createControlComposite( final Composite composite )
{
if ( isActive( CONTROLS_INVISIBLE ) )
{
return;
}
Composite controlComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 3 );
controlGroup = BaseWidgetUtils.createGroup( controlComposite,
Messages.getString( "SearchPageWrapper.Controls" ), 1 ); //$NON-NLS-1$
// ManageDsaIT control
manageDsaItControlButton = BaseWidgetUtils.createCheckbox( controlGroup, Messages
.getString( "SearchPageWrapper.ManageDsaIt" ), 1 ); //$NON-NLS-1$
manageDsaItControlButton.setToolTipText( Messages.getString( "SearchPageWrapper.ManageDsaItTooltip" ) ); //$NON-NLS-1$
manageDsaItControlButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
// subentries control
subentriesControlButton = BaseWidgetUtils.createCheckbox( controlGroup, Messages
.getString( "SearchPageWrapper.Subentries" ), 1 ); //$NON-NLS-1$
subentriesControlButton.setToolTipText( Messages.getString( "SearchPageWrapper.SubentriesTooltip" ) ); //$NON-NLS-1$
subentriesControlButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
// simple paged results control
Composite sprcComposite = BaseWidgetUtils.createColumnContainer( controlGroup, 4, 1 );
pagedSearchControlButton = BaseWidgetUtils.createCheckbox( sprcComposite, Messages
.getString( "SearchPageWrapper.PagedSearch" ), 1 ); //$NON-NLS-1$
pagedSearchControlButton.setToolTipText( Messages.getString( "SearchPageWrapper.PagedSearchToolTip" ) ); //$NON-NLS-1$
pagedSearchControlButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
pagedSearchControlSizeLabel = BaseWidgetUtils.createLabel( sprcComposite, Messages
.getString( "SearchPageWrapper.PageSize" ), 1 ); //$NON-NLS-1$
pagedSearchControlSizeText = BaseWidgetUtils.createText( sprcComposite, "100", 5, 1 ); //$NON-NLS-1$
pagedSearchControlSizeText.addVerifyListener( new VerifyListener()
{
public void verifyText( VerifyEvent e )
{
if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
{
e.doit = false;
}
}
} );
pagedSearchControlSizeText.addModifyListener( new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
validate();
}
} );
pagedSearchControlScrollButton = BaseWidgetUtils.createCheckbox( sprcComposite, Messages
.getString( "SearchPageWrapper.ScrollMode" ), 1 ); //$NON-NLS-1$
pagedSearchControlScrollButton.setToolTipText( Messages.getString( "SearchPageWrapper.ScrollModeToolTip" ) ); //$NON-NLS-1$
pagedSearchControlScrollButton.setSelection( true );
pagedSearchControlScrollButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
validate();
}
} );
}
/**
* Validates all elements.
*/
protected void validate()
{
if ( browserConnectionWidget.getBrowserConnection() != null )
{
if ( searchBaseWidget.getDn() == null
|| searchBaseWidget.getBrowserConnection() != browserConnectionWidget.getBrowserConnection() )
{
searchBaseWidget.setInput( browserConnectionWidget.getBrowserConnection(), null );
}
}
filterWidget.setBrowserConnection( browserConnectionWidget.getBrowserConnection() );
pagedSearchControlSizeLabel.setEnabled( pagedSearchControlButton.getSelection() );
pagedSearchControlSizeText.setEnabled( pagedSearchControlButton.getSelection() );
pagedSearchControlScrollButton.setEnabled( pagedSearchControlButton.getSelection() );
super.notifyListeners();
}
/**
* Checks if the DNs should be returned/exported.
*
* @return true, if DNs should be returnde/exported
*/
public boolean isReturnDn()
{
return returnDnButton != null && returnDnButton.getSelection();
}
/**
* Initializes all search page widgets from the given search.
*
* @param search the search
*/
public void loadFromSearch( ISearch search )
{
if ( searchNameText != null )
{
searchNameText.setText( search.getName() );
}
if ( search.getBrowserConnection() != null )
{
IBrowserConnection browserConnection = search.getBrowserConnection();
Dn searchBase = search.getSearchBase();
if ( browserConnectionWidget != null )
{
browserConnectionWidget.setBrowserConnection( browserConnection );
}
if ( searchBase != null )
{
searchBaseWidget.setInput( browserConnection, searchBase );
}
if ( filterWidget != null )
{
filterWidget.setBrowserConnection( browserConnection );
filterWidget.setFilter( search.getFilter() );
}
if ( returningAttributesWidget != null )
{
returningAttributesWidget.setBrowserConnection( browserConnection );
returningAttributesWidget.setInitialReturningAttributes( search.getReturningAttributes() );
}
if ( scopeWidget != null )
{
scopeWidget.setScope( search.getScope() );
}
if ( limitWidget != null )
{
limitWidget.setCountLimit( search.getCountLimit() );
limitWidget.setTimeLimit( search.getTimeLimit() );
}
if ( aliasesDereferencingWidget != null )
{
aliasesDereferencingWidget.setAliasesDereferencingMethod( search.getAliasesDereferencingMethod() );
}
if ( referralsHandlingWidget != null )
{
referralsHandlingWidget.setReferralsHandlingMethod( search.getReferralsHandlingMethod() );
}
if ( subentriesControlButton != null )
{
List<Control> searchControls = search.getControls();
if ( searchControls != null && searchControls.size() > 0 )
{
for ( Control c : searchControls )
{
if ( c instanceof ManageDsaIT )
{
manageDsaItControlButton.setSelection( true );
}
else if ( c instanceof Subentries )
{
subentriesControlButton.setSelection( true );
}
else if ( c instanceof PagedResults )
{
pagedSearchControlButton.setSelection( true );
pagedSearchControlSizeText.setText( "" + ( ( PagedResults ) c ).getSize() ); //$NON-NLS-1$
pagedSearchControlScrollButton.setSelection( search.isPagedSearchScrollMode() );
}
}
}
}
}
}
/**
* Saves all search pages element to the given search.
*
* @param search the search
*
* @return true, if the given search has been modified.
*/
public boolean saveToSearch( ISearch search )
{
boolean searchModified = false;
if ( searchNameText != null && !searchNameText.getText().equals( search.getName() ) )
{
search.getSearchParameter().setName( searchNameText.getText() );
searchModified = true;
}
if ( browserConnectionWidget != null && browserConnectionWidget.getBrowserConnection() != null
&& browserConnectionWidget.getBrowserConnection() != search.getBrowserConnection() )
{
search.setBrowserConnection( browserConnectionWidget.getBrowserConnection() );
searchModified = true;
}
if ( searchBaseWidget != null && searchBaseWidget.getDn() != null
&& !searchBaseWidget.getDn().equals( search.getSearchBase() ) )
{
search.getSearchParameter().setSearchBase( searchBaseWidget.getDn() );
searchModified = true;
searchBaseWidget.saveDialogSettings();
}
if ( filterWidget != null && filterWidget.getFilter() != null )
{
if ( !filterWidget.getFilter().equals( search.getFilter() ) )
{
search.getSearchParameter().setFilter( filterWidget.getFilter() );
searchModified = true;
}
filterWidget.saveDialogSettings();
}
if ( returningAttributesWidget != null )
{
if ( !Arrays.equals( returningAttributesWidget.getReturningAttributes(), search.getReturningAttributes() ) )
{
search.getSearchParameter().setReturningAttributes( returningAttributesWidget.getReturningAttributes() );
searchModified = true;
}
returningAttributesWidget.saveDialogSettings();
if ( returnAllAttributesButton != null || returnOperationalAttributesButton != null )
{
List<String> raList = new ArrayList<String>();
raList.addAll( Arrays.asList( search.getReturningAttributes() ) );
if ( returnAllAttributesButton != null )
{
if ( returnAllAttributesButton.getSelection() )
{
raList.add( SchemaConstants.ALL_USER_ATTRIBUTES );
}
if ( returnAllAttributesButton.getSelection() != isActive( RETURN_ALLATTRIBUTES_CHECKED ) )
{
searchModified = true;
}
}
if ( returnOperationalAttributesButton != null )
{
if ( returnOperationalAttributesButton.getSelection() )
{
Collection<AttributeType> opAtds = SchemaUtils
.getOperationalAttributeDescriptions( browserConnectionWidget.getBrowserConnection()
.getSchema() );
Collection<String> opAtdNames = SchemaUtils.getNames( opAtds );
raList.addAll( opAtdNames );
raList.add( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES );
}
if ( returnOperationalAttributesButton.getSelection() != isActive( RETURN_OPERATIONALATTRIBUTES_CHECKED ) )
{
searchModified = true;
}
}
String[] returningAttributes = raList.toArray( new String[raList.size()] );
search.getSearchParameter().setReturningAttributes( returningAttributes );
}
}
if ( scopeWidget != null )
{
SearchScope scope = scopeWidget.getScope();
if ( scope != search.getScope() )
{
search.getSearchParameter().setScope( scope );
searchModified = true;
}
}
if ( limitWidget != null )
{
int countLimit = limitWidget.getCountLimit();
int timeLimit = limitWidget.getTimeLimit();
if ( countLimit != search.getCountLimit() )
{
search.getSearchParameter().setCountLimit( countLimit );
searchModified = true;
}
if ( timeLimit != search.getTimeLimit() )
{
search.getSearchParameter().setTimeLimit( timeLimit );
searchModified = true;
}
}
if ( aliasesDereferencingWidget != null )
{
Connection.AliasDereferencingMethod aliasesDereferencingMethod = aliasesDereferencingWidget
.getAliasesDereferencingMethod();
if ( aliasesDereferencingMethod != search.getAliasesDereferencingMethod() )
{
search.getSearchParameter().setAliasesDereferencingMethod( aliasesDereferencingMethod );
searchModified = true;
}
}
if ( referralsHandlingWidget != null )
{
Connection.ReferralHandlingMethod referralsHandlingMethod = referralsHandlingWidget
.getReferralsHandlingMethod();
if ( referralsHandlingMethod != search.getReferralsHandlingMethod() )
{
search.getSearchParameter().setReferralsHandlingMethod( referralsHandlingMethod );
searchModified = true;
}
}
if ( subentriesControlButton != null )
{
Set<Control> oldControls = new HashSet<>();
oldControls.addAll( search.getSearchParameter().getControls() );
search.getSearchParameter().getControls().clear();
if ( manageDsaItControlButton.getSelection() )
{
search.getSearchParameter().getControls().add( Controls.MANAGEDSAIT_CONTROL );
}
if ( subentriesControlButton.getSelection() )
{
search.getSearchParameter().getControls().add( Controls.SUBENTRIES_CONTROL );
}
if ( pagedSearchControlButton.getSelection() )
{
int pageSize;
try
{
pageSize = Integer.valueOf( pagedSearchControlSizeText.getText() );
}
catch ( NumberFormatException e )
{
pageSize = 100;
}
boolean isScrollMode = pagedSearchControlScrollButton.getSelection();
PagedResults control = Controls.newPagedResultsControl(pageSize);
search.getSearchParameter().getControls().add( control );
search.getSearchParameter().setPagedSearchScrollMode( isScrollMode );
}
Set<Control> newControls = new HashSet<>();
newControls.addAll( search.getSearchParameter().getControls() );
if ( !oldControls.equals( newControls ) )
{
searchModified = true;
}
}
return searchModified;
}
/**
* Performs the search.
*
* @param search the search
*
* @return true, if perform search
*/
public boolean performSearch( final ISearch search )
{
if ( search.getBrowserConnection() != null )
{
search.setSearchResults( null );
new StudioBrowserJob( new SearchRunnable( new ISearch[]
{ search } ) ).execute();
return true;
}
else
{
return false;
}
}
/**
* Checks if the search page parameters are valid.
*
* @return true, it the search page parameters are valid
*/
public boolean isValid()
{
if ( browserConnectionWidget != null && browserConnectionWidget.getBrowserConnection() == null )
{
return false;
}
if ( searchBaseWidget != null && searchBaseWidget.getDn() == null )
{
return false;
}
if ( searchNameText != null && "".equals( searchNameText.getText() ) ) //$NON-NLS-1$
{
return false;
}
if ( filterWidget != null && filterWidget.getFilter() == null )
{
return false;
}
if ( pagedSearchControlButton != null && pagedSearchControlButton.isEnabled()
&& "".equals( pagedSearchControlButton.getText() ) ) //$NON-NLS-1$
{
return false;
}
return true;
}
/**
* Gets the error message or null if the search page is valid.
*
* @return the error message or null if the search page is valid
*/
public String getErrorMessage()
{
if ( browserConnectionWidget != null && browserConnectionWidget.getBrowserConnection() == null )
{
return Messages.getString( "SearchPageWrapper.SelectConnection" ); //$NON-NLS-1$
}
if ( searchBaseWidget != null && searchBaseWidget.getDn() == null )
{
return Messages.getString( "SearchPageWrapper.EnterValidSearchBase" ); //$NON-NLS-1$
}
if ( searchNameText != null && "".equals( searchNameText.getText() ) ) //$NON-NLS-1$
{
return Messages.getString( "SearchPageWrapper.EnterSearchName" ); //$NON-NLS-1$
}
if ( filterWidget != null && filterWidget.getFilter() == null )
{
return Messages.getString( "SearchPageWrapper.EnterValidFilter" ); //$NON-NLS-1$
}
return null;
}
/**
* Sets the enabled state of the widget.
*
* @param b true to enable the widget, false to disable the widget
*/
public void setEnabled( boolean b )
{
if ( searchNameText != null )
{
searchNameLabel.setEnabled( b );
searchNameText.setEnabled( b );
}
if ( browserConnectionWidget != null )
{
connectionLabel.setEnabled( b );
browserConnectionWidget.setEnabled( b && !isActive( CONNECTION_READONLY ) );
}
if ( searchBaseWidget != null )
{
searchBaseLabel.setEnabled( b );
searchBaseWidget.setEnabled( b && !isActive( SEARCHBASE_READONLY ) );
}
if ( filterWidget != null )
{
filterLabel.setEnabled( b );
filterWidget.setEnabled( b && !isActive( FILTER_READONLY ) );
}
if ( returningAttributesWidget != null )
{
returningAttributesLabel.setEnabled( b );
returningAttributesWidget.setEnabled( b && !isActive( RETURNINGATTRIBUTES_READONLY ) );
}
if ( returnDnButton != null )
{
returnDnButton.setEnabled( b );
}
if ( returnAllAttributesButton != null )
{
returnAllAttributesButton.setEnabled( b );
}
if ( returnOperationalAttributesButton != null )
{
returnOperationalAttributesButton.setEnabled( b );
}
if ( scopeWidget != null )
{
scopeWidget.setEnabled( b && !isActive( SCOPEOPTIONS_READONLY ) );
}
if ( limitWidget != null )
{
limitWidget.setEnabled( b && !isActive( LIMITOPTIONS_READONLY ) );
}
if ( aliasesDereferencingWidget != null )
{
aliasesDereferencingWidget.setEnabled( b && !isActive( ALIASOPTIONS_READONLY ) );
}
if ( referralsHandlingWidget != null )
{
referralsHandlingWidget.setEnabled( b && !isActive( REFERRALOPTIONS_READONLY ) );
}
if ( controlGroup != null )
{
controlGroup.setEnabled( b );
manageDsaItControlButton.setEnabled( b );
subentriesControlButton.setEnabled( b );
}
}
}