package com.uas.search.console.service;

import java.util.List;

import com.uas.search.console.model.LuceneQueueMessage;
import com.uas.search.console.model.ParsedQueueMessage;
import com.uas.search.model.SPage;

/**
 * 索引处理
 * 
 * @author sunyj
 * @since 2016年8月5日 下午2:33:58
 */
public interface IndexService {

	/**
	 * 创建指定表的索引
	 * 
	 * @param tableNames
	 *            可为空，指定的表，默认创建所有表的索引
	 * @param componentFromFiles
	 *            可为空，器件索引数据是否来自文件，默认来自文件
	 * @return 创建的索引花费总时间 ms
	 */
	public Long createIndexes(List<String> tableNames, Boolean componentFromFiles);

	/**
	 * 下载器件的数据至本地文件中，以供建索引用
	 * 
	 * @param startFileIndex
	 *            可为空，从第startFileIndex个文件开始下载
	 * 
	 * @return 花费总时间 ms
	 */
	public Long downloadComponentDataFromDatabase(Integer startFileIndex);

	/**
	 * 将新对象添加在lucene索引中
	 * 
	 * @param obj
	 *            将添加的对象
	 * @return 添加的对象
	 */
	public Object save(Object obj);

	/**
	 * 将新对象添加在lucene索引中
	 * 
	 * @param obj
	 *            将更新的对象
	 * @return 更新的对象
	 */
	public Object update(Object obj);

	/**
	 * 将对象从lucene索引中删除
	 * 
	 * @param obj
	 *            将删除的对象
	 * @return 删除的对象
	 */
	public Object delete(Object obj);

	/**
	 * 根据自队列消息解析出来的对象，对lucene索引进行添加、更新或删除操作
	 * 
	 * @param parsedQueueMessage
	 *            自队列消息解析出来的对象
	 * @return 维护的对象
	 */
	public List<Object> maintainIndexes(ParsedQueueMessage parsedQueueMessage);

	/**
	 * 根据实体类型名维护出问题的表的索引
	 * 
	 * @param tableName
	 *            需维护的实体类型名
	 * @param ids
	 *            需维护的id列表，多个id以英文逗号隔开
	 * @param method
	 *            需对索引做何种更改
	 * @return 维护的对象
	 */
	public List<Object> maintainIndexes(String tableName, String ids, String method);

	/**
	 * 获取关于实时更新情况的详细信息
	 * 
	 * @param page
	 *            可为空，页码
	 * @param size
	 *            可为空，页大小
	 * @param searchContent
	 *            可为空，对消息内容进行搜索
	 * @return 等待更新的数据的信息
	 */
	public SPage<LuceneQueueMessage> getListenDetails(Integer page, Integer size, String searchContent);

	/**
	 * 消息队列出队消息
	 * 
	 * @param messageId
	 *            所要出队的消息的id
	 * @return 是否出队成功
	 */
	public boolean dequeueLuceneQueueMessage(String messageId);

}
