package com.okami.plugin;

import com.okami.MonitorClientApplication;
import com.okami.plugin.scanner.bean.BaseTask;
import com.okami.plugin.scanner.bean.FileContent;
import com.okami.bean.GlobalBean;
import com.okami.plugin.scanner.core.common.AssignScanner;
import com.okami.plugin.scanner.core.common.EnumFiles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 整个程序只能生成一个ScannerApplication
 * 意味着扫描任务只能同时执行一个
 * 为了使扫描尽可能不影响服务器
 * @author wh1t3P1g
 * @since 2017/1/15
 */
@Component
@Scope("prototype")
public class ScannerApplication implements Runnable{

    private Thread t;

    private BaseTask task;

    /**
     * 注入枚举文件对象
     */
    @Autowired
    private EnumFiles enumFiles;
    /**
     * 注入scanner分配器
     */
    @Autowired
    private AssignScanner assignScanner;
    @Autowired
    private GlobalBean globalBean;

    /**
     * 程序的主体
     * 描述扫描的所有过程
     * @return -1 0 1
     * -1 扫描出错
     * 0  扫描正在运行
     * 1  扫描成功
     */
    @Override
    public void run(){

        if(globalBean.getStatus()==1){//检查是否是在运行
            return ;//0 表示正在运行
        }
        globalBean.setStatus(1);
        globalBean.setTaskId(task.getTaskId());
        globalBean.setTaskName(task.getTaskName());
        //枚举所有文件
        enumFiles.setTask(task);
        List<FileContent> fileContents=enumFiles.run();
        task.setFileContents(fileContents);
        MonitorClientApplication.log.info("共"+fileContents.size()+"待扫描文件");
        //分配scanner
        assignScanner.setTask(task);
        globalBean.setStatus(assignScanner.assignTask());//返回分配结果
        // result通知服务器端
        // todo
    }

    public void start () {
        if (t == null) {
            t = new Thread (this);
            globalBean.setT(t);
            t.start ();
        }
    }

    public BaseTask getTask() {
        return task;
    }

    public void setTask(BaseTask task) {
        this.task = task;
    }
}

@@ -1392,32 +1392,49 @@
 .setTask(task);%0A
+        try%7B%0A    
         List%3CFil
@@ -1481,16 +1481,20 @@
         
+    
 task.set
@@ -1529,16 +1529,20 @@
         
+ 
+   
 MonitorC
@@ -1609,16 +1609,20 @@
         
+    
 //%E5%88%86%E9%85%8Dscan
@@ -1625,16 +1625,20 @@
 scanner%0A
+    
         
@@ -1666,32 +1666,36 @@
 (task);%0A        
+    
 globalBean.setSt
@@ -1744,16 +1744,20 @@
         
+    
 // resul
@@ -1776,15 +1776,140 @@
     
-// todo
+%7Dcatch (Exception e)%7B%0A            MonitorClientApplication.log.error(e.getMessage());%0A            globalBean.setStatus(0);%0A        %7D
 %0A   

version 2.0