Mercurial > hg > Database > Alice
view src/main/java/alice/topology/manager/keeparive/ListManager.java @ 483:86c45738dd9e dispose
success fix topology ..... may be
author | sugi |
---|---|
date | Fri, 05 Dec 2014 21:24:37 +0900 |
parents | 1550cb8429df |
children | c1cf44777eef |
line wrap: on
line source
package alice.topology.manager.keeparive; import java.util.LinkedList; public class ListManager { private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); public LinkedList<TaskInfo> getTaskList() { return list; } public void addTask(TaskInfo newInfo) { TaskExecuter exec = TaskExecuter.getInstance(); TaskInfo nowTask = exec.getNowTask(); if (nowTask == null) { // active task is nothing add(newInfo); } else { long remainingTime = exec.getRemainingTime(); if (remainingTime > newInfo.getSleepTime()) { // active task is longer than newTask. TaskInfo task = nowTask.clone(); task.setSleepTime(remainingTime); list.addFirst(task); add(newInfo); exec.ignore(); } else { // newTask is longer than active task. newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime); add(newInfo); } } //show(); //need debug option } private void add(TaskInfo newInfo){ int cnt = 0; for (TaskInfo info : list){ if (info.getSleepTime() < newInfo.getSleepTime()){ newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); } else if (info.getSleepTime() == newInfo.getSleepTime()){ // newInfo.getSleepTime() - info.getSleepTime() must be Zero newInfo.setSleepTime(0); cnt++; break; } else if (info.getSleepTime() > newInfo.getSleepTime()){ info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); break; } cnt++; } list.add(cnt, newInfo); } public boolean deleteTask(TaskInfo task){ boolean matchFlag = false; int cnt = 0; for (TaskInfo t: list){ if (t.getType().equals(task.getType())&&t.getManagerKey().equals(task.getManagerKey())){ matchFlag = true; if (cnt+1 < list.size() ){ // next task exists. TaskInfo next = list.get(cnt+1); next.setSleepTime(next.getSleepTime()+t.getSleepTime()); } list.remove(cnt); break; } else { cnt++; } } return matchFlag; } public void show(){ TaskInfo nowTask = TaskExecuter.getInstance().getNowTask(); if (nowTask!=null){ System.out.print("NOW | "); System.out.print(nowTask.getSleepTime() +" "+nowTask.getType()+" "+nowTask.getManagerKey()); System.out.print(" | "); } for (TaskInfo info : list){ System.out.print(info.getSleepTime() +" "+ info.getType()+" "+info.getManagerKey()); System.out.print(" | "); } System.out.println(); } public void deleteAll(String name) { TaskInfo task = new TaskInfo(TaskType.CLOSE); task.setInfo(name, 0); while(deleteTask(task)); } }