/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.query;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.category.CategoryAccessType;
import com.enonic.cms.core.content.category.CategoryKey;
import com.enonic.cms.core.content.index.ContentIndexQuery;
import com.enonic.cms.core.content.index.ContentIndexQuery.CategoryAccessTypeFilterPolicy;
import com.enonic.cms.core.security.group.GroupKey;
public abstract class AbstractContentArchiveQuery
extends AbstractContentQuery
{
private Collection<ContentKey> contentKeyFilter;
private boolean useContentKeyFilter;
private Collection<CategoryKey> categoryKeyFilter;
private boolean useCategoryKeyFilter;
private boolean adminBrowseOnly;
private Collection<CategoryAccessType> categoryAccessTypeFilter;
private CategoryAccessTypeFilterPolicy categoryAccessTypeFilterPolicy;
private String facets;
public Collection<ContentKey> getContentKeyFilter()
{
return contentKeyFilter;
}
public void setContentKeyFilter( Collection<ContentKey> value )
{
this.contentKeyFilter = value;
useContentKeyFilter = contentKeyFilter != null;
}
public boolean hasContentFilter()
{
return contentKeyFilter != null;
}
public Collection<CategoryKey> getCategoryKeyFilter()
{
return categoryKeyFilter;
}
public void setCategoryKeyFilter( final Collection<CategoryKey> categories, final int numLevels )
{
this.categoryKeyFilter = categories;
this.setLevels( numLevels );
useCategoryKeyFilter = categoryKeyFilter != null;
}
public boolean hasCategoryFilter()
{
return categoryKeyFilter != null;
}
public void setFilterAdminBrowseOnly( boolean value )
{
this.adminBrowseOnly = value;
}
public boolean isFilterAdminBrowseOnly()
{
return this.adminBrowseOnly;
}
public boolean useContentKeyFilter()
{
return useContentKeyFilter;
}
public boolean useCategoryKeyFilter()
{
return useCategoryKeyFilter;
}
public ContentIndexQuery createAndSetupContentQuery( Set<CategoryKey> categoryKeys, Collection<GroupKey> securityFilter )
{
ContentIndexQuery query = new ContentIndexQuery( this.getQuery(), this.getOrderBy() );
if ( this.useContentTypeFilter() )
{
query.setContentTypeFilter( this.getContentTypeFilter() );
}
if ( this.useContentKeyFilter() )
{
query.setContentFilter( this.getContentKeyFilter() );
}
query.setIndex( this.getIndex() );
query.setCount( this.getCount() );
query.setCategoryFilter( categoryKeys );
query.setSecurityFilter( securityFilter );
if ( categoryAccessTypeFilter != null )
{
query.setCategoryAccessTypeFilter( categoryAccessTypeFilter, categoryAccessTypeFilterPolicy );
}
checkAndApplyPublishedOnlyFilter( query );
if ( this.isFilterAdminBrowseOnly() && hasSecurityFilter() )
{
Collection<CategoryAccessType> catAccessFilter = new ArrayList<CategoryAccessType>();
catAccessFilter.add( CategoryAccessType.ADMIN_BROWSE );
query.setCategoryAccessTypeFilter( catAccessFilter, CategoryAccessTypeFilterPolicy.AND );
}
query.setFacets( this.facets );
return query;
}
public void setCategoryAccessTypeFilter( Collection<CategoryAccessType> categoryAccessTypeFilter,
CategoryAccessTypeFilterPolicy policy )
{
this.categoryAccessTypeFilter = categoryAccessTypeFilter;
this.categoryAccessTypeFilterPolicy = policy;
}
public String getFacets()
{
return facets;
}
public void setFacets( final String facets )
{
this.facets = facets;
}
}