package com.nms.server.thread.file;

import java.io.File;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Future;

import org.apache.log4j.Logger;

import com.nms.server.common.Common;
import com.nms.server.common.Constants;
import com.nms.server.util.FileUtils;

public class UnZipManagerThread implements Runnable{
	Logger logger = Logger.getLogger(UnZipManagerThread.class);

	public void run() {
		
//		Thread.currentThread().setName("UnZip管理线程");
		Thread.currentThread().setName("UnZip Management Thread");
		
		// 将线程运行程序，尽可能的catch捕获异常
		try {
			// 待解压文件 集合
			List<File> zipFiles = new LinkedList<File>();

			zipFiles.addAll(Arrays.asList(FileUtils.listFilesEndWith(new File(Constants.ZIP_FILE_DETECT_DATA_DIR), ".zip")));
			zipFiles.addAll(Arrays.asList(FileUtils.listFilesEndWith(new File(Constants.ZIP_FILE_TASK_RESULT_DIR), ".zip")));
			zipFiles.addAll(Arrays.asList(FileUtils.listFilesEndWith(new File(Constants.ZIP_FILE_TASK_RETURN_DIR), ".zip")));
			
			// 无可解压的文件时 结束该周期任务
			if(zipFiles.size()==0){
				logger.info("已无可解压文件 周期任务终止");
				Common.cancelRunnableAtOnce(Constants.UNZIP_FILE_MANAGER);
				return;
			}
			
			// 校验解析线程是否存在  不存在时创建 并执行
			Future<?> future = Common.getFutureMap().get(Constants.UNZIP_FILE);
			if(future != null && !future.isCancelled() && !future.isDone()){
				
				//运行中
				logger.info("UnZip线程 运行中 不再重复启动");
				return;
			}else{
				
				//为空或空闲中
				logger.info("UnZip线程 空闲中 启动新线程");
				future = Common.service.submit(new UnZipThread("UnZip线程", zipFiles));
				//注册
				Common.getFutureMap().put(Constants.UNZIP_FILE, future);
			}

		} catch (Exception e) {
			logger.error("",e);
		}
	}
	
	public static void main(String[] args) {
		Common.service.submit(new UnZipManagerThread());
	}
}
