package com.chickling.kmanager.alert; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.json.JSONException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.chickling.kmanager.config.AppConfig; import com.google.gson.Gson; /** * @ClassName * @Description * @author Hulva Luva.H * @date 2017年2月11日 * */ public class TaskManager { protected static final Logger logger = LoggerFactory.getLogger(TaskManager.class); public static String taskFolder; public static Map<String, Long> cachedLastSendTime = new HashMap<String, Long>(); // k:group v:(k:topic v:taskContent) private static Map<String, Map<String, TaskContent>> tasks; public static void init(AppConfig config) { taskFolder = config.getTaskFolder(); tasks = Collections.synchronizedMap(new HashMap<String, Map<String, TaskContent>>()); } public static TaskContent getTask(String group, String topic) { if (tasks.containsKey(group)) { return tasks.get(group).get(topic); } return null; } public static boolean exits(TaskContent taskContent) { if (tasks.containsKey(taskContent.getGroup())) { return tasks.get(taskContent.getGroup()).containsKey(taskContent.getTopic()); } return false; } public static void addTask(TaskContent taskContent) throws JSONException { Map<String, TaskContent> task = null; if (tasks.containsKey(taskContent.getGroup())) { task = tasks.get(taskContent.getGroup()); } else { task = new HashMap<String, TaskContent>(); } task.put(taskContent.getTopic(), taskContent); tasks.put(taskContent.getGroup(), task); } public static void deleteTask(String taskNameToRemove) { String[] group_topic = taskNameToRemove.split("-"); if (exits(new TaskContent(group_topic[0], group_topic[1], null, null, null))) { TaskContent taskToDelete = tasks.get(group_topic[0]).remove(group_topic[1]); deleteTaskFile(taskToDelete); } } public static void deleteTaskFile(TaskContent task) { new File(taskFolder + "/" + task.getGroup() + "-" + task.getTopic() + ".task").delete(); } public static Set<TaskContent> getTasks() { Set<TaskContent> _tasks = new HashSet<TaskContent>(); tasks.forEach((group, topic_task) -> { Set<Entry<String, TaskContent>> entrySet = topic_task.entrySet(); entrySet.forEach(entry -> { _tasks.add(entry.getValue()); }); }); return _tasks; } public static void saveTaskToFileAndAddToTasks(TaskContent taskContent) { try { PrintWriter writer = new PrintWriter( taskFolder + "/" + taskContent.getGroup() + "-" + taskContent.getTopic() + ".task", "UTF-8"); writer.println(new Gson().toJson(taskContent)); writer.close(); addTask(taskContent); } catch (IOException e) { logger.error("create task file failed!", e); } } }