blob: a783204d266ded9c007b04bf2f82bd3131829eef [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.core.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
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.name.Dn;
import org.apache.directory.studio.connection.core.Connection.AliasDereferencingMethod;
import org.apache.directory.studio.connection.core.Connection.ReferralHandlingMethod;
/**
* A Bean class to hold the search parameters.
* It is used to make searches persistent.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class SearchParameter implements Serializable
{
/** The serialVersionUID. */
private static final long serialVersionUID = 2447490121520960805L;
/** The symbolic name. */
private String name;
/** The search base. */
private Dn searchBase;
/** The filter. */
private String filter;
/** The returning attributes. */
private String[] returningAttributes;
/** The search scope. */
private SearchScope scope;
/** The time limit in seconds, 0 means no limit. */
private int timeLimit;
/** The count limit, 0 means no limit. */
private int countLimit;
/** The alias dereferencing method. */
private AliasDereferencingMethod aliasesDereferencingMethod;
/** The referrals handling method. */
private ReferralHandlingMethod referralsHandlingMethod;
/** The controls */
private List<Control> controls;
/** The response controls */
private List<Control> responseControls;
/** The paged search scroll mode flag. */
protected boolean pagedSearchScrollModeFlag;
/** Flag indicating weather the hasChildren flag of IEntry should be initialized */
private boolean initHasChildrenFlag;
/**
* Creates a new instance of SearchParameter with default search parameters:
* <ul>
* <li>null search name
* <li>null search base
* <li>default filter (objectClass=*)
* <li>no returning attributes
* <li>search scope one level
* <li>no count limit
* <li>no time limit
* <li>always dereference aliases
* <li>follow referrals
* <li>no initialization of hasChildren flag
* <li>no initialization of isAlias and isReferral flag
* <li>no controls
* <li>no response controls
* </ul>
*/
public SearchParameter()
{
name = null;
searchBase = null;
filter = ISearch.FILTER_TRUE;
returningAttributes = ISearch.NO_ATTRIBUTES;
scope = SearchScope.ONELEVEL;
timeLimit = 0;
countLimit = 0;
aliasesDereferencingMethod = AliasDereferencingMethod.ALWAYS;
referralsHandlingMethod = ReferralHandlingMethod.FOLLOW;
controls = new ArrayList<>();
responseControls = new ArrayList<>();
pagedSearchScrollModeFlag = true;
initHasChildrenFlag = false;
}
/**
* Gets the count limit, 0 means no limit.
*
* @return the count limit
*/
public int getCountLimit()
{
return countLimit;
}
/**
* Sets the count limit, 0 means no limit.
*
* @param countLimit the count limit
*/
public void setCountLimit( int countLimit )
{
this.countLimit = countLimit;
}
/**
* Gets the filter.
*
* @return the filter
*/
public String getFilter()
{
return filter;
}
/**
* Sets the filter, a null or empty filter will be
* transformed to (objectClass=*).
*
* @param filter the filter
*/
public void setFilter( String filter )
{
if ( filter == null || "".equals( filter ) ) //$NON-NLS-1$
{
filter = ISearch.FILTER_TRUE;
}
this.filter = filter;
}
/**
* Gets the symbolic name.
*
* @return the name
*/
public String getName()
{
return name;
}
/**
* Sets the symbolic name.
*
* @param name the name
*/
public void setName( String name )
{
this.name = name;
}
/**
* Gets the returning attributes.
*
* @return the returning attributes
*/
public String[] getReturningAttributes()
{
return returningAttributes;
}
/**
* Sets the returning attributes, an empty array indicates none,
* null will be transformed to '*' (all user attributes).
*
* @param returningAttributes the returning attributes
*/
public void setReturningAttributes( String[] returningAttributes )
{
if ( returningAttributes == null )
{
returningAttributes = new String[]
{ SchemaConstants.ALL_USER_ATTRIBUTES };
}
this.returningAttributes = returningAttributes;
}
/**
* Gets the scope.
*
* @return the scope
*/
public SearchScope getScope()
{
return scope;
}
/**
* Sets the scope.
*
* @param scope the scope
*/
public void setScope( SearchScope scope )
{
this.scope = scope;
}
/**
* Gets the aliases dereferencing method.
*
* @return the aliases dereferencing method
*/
public AliasDereferencingMethod getAliasesDereferencingMethod()
{
return aliasesDereferencingMethod;
}
/**
* Sets the aliases dereferencing method.
*
* @param aliasesDereferencingMethod the aliases dereferencing method
*/
public void setAliasesDereferencingMethod( AliasDereferencingMethod aliasesDereferencingMethod )
{
this.aliasesDereferencingMethod = aliasesDereferencingMethod;
}
/**
* Gets the referrals handling method.
*
* @return the referrals handling method
*/
public ReferralHandlingMethod getReferralsHandlingMethod()
{
return referralsHandlingMethod;
}
/**
* Sets the referrals handling method.
*
* @param referralsHandlingMethod the referrals handling method
*/
public void setReferralsHandlingMethod( ReferralHandlingMethod referralsHandlingMethod )
{
this.referralsHandlingMethod = referralsHandlingMethod;
}
/**
* Gets the search base.
*
* @return the search base
*/
public Dn getSearchBase()
{
return searchBase;
}
/**
* Sets the search base, a null search base is not allowed.
*
* @param searchBase the search base
*/
public void setSearchBase( Dn searchBase )
{
assert searchBase != null;
this.searchBase = searchBase;
}
/**
* Gets the time limit in seconds, 0 means no limit.
*
* @return the time limit
*/
public int getTimeLimit()
{
return timeLimit;
}
/**
* Sets the time limit in seconds, 0 means no limit.
*
* @param timeLimit the time limit
*/
public void setTimeLimit( int timeLimit )
{
this.timeLimit = timeLimit;
}
/**
* {@inheritDoc}
*/
public Object clone()
{
SearchParameter clone = new SearchParameter();
clone.setName( getName() );
clone.setSearchBase( getSearchBase() );
clone.setFilter( getFilter() );
clone.setReturningAttributes( getReturningAttributes() );
clone.setScope( getScope() );
clone.setTimeLimit( getTimeLimit() );
clone.setCountLimit( getCountLimit() );
clone.setAliasesDereferencingMethod( getAliasesDereferencingMethod() );
clone.setReferralsHandlingMethod( getReferralsHandlingMethod() );
clone.setInitHasChildrenFlag( isInitHasChildrenFlag() );
clone.getControls().addAll( getControls() );
clone.getResponseControls().addAll( getResponseControls() );
return clone;
}
/**
* Checks if the hasChildren flag of IEntry should be initialized.
*
* @return true, if the hasChildren flag of IEntry should be initialized
*/
public boolean isInitHasChildrenFlag()
{
return initHasChildrenFlag;
}
/**
* Sets if the hasChildren flag of IEntry should be initialized.
*
* @param initHasChildrenFlag the init hasChildren flag
*/
public void setInitHasChildrenFlag( boolean initHasChildrenFlag )
{
this.initHasChildrenFlag = initHasChildrenFlag;
}
/**
* Gets the request controls.
*
* @return the request controls
*/
public List<Control> getControls()
{
return controls;
}
/**
* Gets the response controls.
*
* @return the response controls
*/
public List<Control> getResponseControls()
{
return responseControls;
}
public boolean isPagedSearchScrollMode()
{
return pagedSearchScrollModeFlag;
}
public void setPagedSearchScrollMode( boolean pagedSearchScrollModeFlag )
{
this.pagedSearchScrollModeFlag = pagedSearchScrollModeFlag;
}
}