package com.product.file.util;
import java.util.LinkedList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.product.core.entity.FieldSetEntity;
import com.product.core.spring.context.SpringBeanUtil;
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.file.service.FileManagerService;
import com.product.lucene.service.LuceneService;


/**
 * 娑堟伅鏈嶅姟锛屾坊鍔犳秷鎭紝璇诲彇娑堟伅
 * @author shicf
 *
 */
@Component
public class CreateDocumentIndexThread   {
	/**鑷凡瀹炰緥**/
	private static CreateDocumentIndexThread createDocumentIndexThread;
	@Autowired
	public FileManagerService fileManagerService;
	/**鍐呴儴绾跨▼**/
	private SendMailThread sendMailThread=null;
	@Autowired
	public LuceneService luceneService;
	/** 鐢熸垚鐨勬柊娑堟伅闃熷垪**/
	private static LinkedList <FieldSetEntity> documentIndexs=new LinkedList<>();
	
	/**
	 * 闈欐€佸伐鍘傛柟娉� 鑾峰彇褰撳墠瀵硅薄瀹炰緥 澶氱嚎绋嬪畨鍏ㄥ崟渚嬫ā寮�(浣跨敤鍙岄噸鍚屾閿�)
	 */
	public static synchronized CreateDocumentIndexThread getInstance() {

		if (createDocumentIndexThread == null) {
			synchronized (CreateDocumentIndexThread.class) {
				if (createDocumentIndexThread == null) {
					createDocumentIndexThread=(CreateDocumentIndexThread) SpringBeanUtil.getBean("createDocumentIndexThread");
				}
			}
		}
		createDocumentIndexThread.start();
		return createDocumentIndexThread;
	}
	/**
	 * 鍚姩缂撳瓨鐨勫埛鏂扮嚎绋�
	 */
	public  void start() {
		if(sendMailThread ==null || sendMailThread.getState()== Thread.State.TERMINATED ) {
			sendMailThread=new SendMailThread();
			sendMailThread.start();
			SpringMVCContextHolder.getSystemLogger().info("Thread Of Refresh Cache Is Starting.............");
		}
	}
	/**
	 * 鎶婇檮浠朵俊鎭坊鍔犲鍒椾腑
	 * @param user
	 */

	public synchronized void appendAttaInfo(FieldSetEntity documentIndex) {
		if(documentIndex!=null) {
			documentIndexs.add(documentIndex);
		}
	}
	/**
	 * 鍙栧埛鏂拌〃闃熻〃鐨勭涓€涓�
	 * @return
	 */
	public synchronized void pop() {
		while(!documentIndexs.isEmpty()) {
			FieldSetEntity ff=documentIndexs.pop();
			if(luceneService ==null ) {
				luceneService=(LuceneService) SpringBeanUtil.getBean("luceneService");
			}
			ff.setValue("file", fileManagerService.getFile(ff.getString("attachment_uuid")));
			luceneService.createdIndex(ff);
		}
	}
	/**
	 * 鍐呴儴绾跨▼锛屽畾鏃跺埛鏂扮紦瀛�
	 * @author shicf
	 *
	 */
	class SendMailThread extends Thread {	
		@Override
		public void run() {
			try {
				while(true) {
					sleep(2000);// 鎵ц闂撮殧2s
					pop();
				}
			} catch (InterruptedException e) {
				e.getStackTrace();
			}
		}
	}

}