/**
 * AssetSearchService.java
 * Created Feb 5, 2009
 * Copyright (c) Tandberg Television 2009
 */
package com.tandbergtv.metadatamanager.search;

import java.util.Collection;

import com.tandbergtv.metadatamanager.model.Asset;
import com.tandbergtv.workflow.util.SearchCriteria;

/**
 * Searches for assets
 * 
 * @author Sahil Verma
 */
public interface AssetSearchService {

	/**
	 * Performs a search of assets using specified criteria for filtering and
	 * sorting
	 * 
	 * @param criteria
	 * @return
	 */
	Collection<Asset> search(SearchCriteria criteria);

	/**
	 * Performs a search for asset IDs using the specified criteria. 
	 * @param criteria
	 * @return
	 */
	Collection<Long> searchForAssetID(SearchCriteria criteria);

	/**
	 * Returns a count of the assets that would be returned by the specified
	 * criteria, ignoring max fetch limits.
	 * 
	 * @param criteria
	 * @return
	 */
	int count(SearchCriteria criteria);

	/**
	 * prepares a search criteria given the searchinfo, sortinfo and revision.
	 * if revision is null, search criteria is for the latest revision
	 * 
	 * @param rootEntityAlias
	 * @param searchInfo
	 * @param sortInfo
	 * @param revision
	 * @return SearchCriteria
	 * 
	 */
	SearchCriteria getCriteria(String rootEntityAlias, SearchInfo searchInfo,
			SortInfo sortInfo, int revision);

	/**
	 * gets the searchCriteria for searching for all top level root assets with the latest revision
	 * @param rootEntityAlias
	 * @return
	 */
	SearchCriteria getRootAssetCriteria(String rootEntityAlias);
}